Benchmark w PHP, benchmark, ale nie profiler |
Benchmark w PHP, benchmark, ale nie profiler |
15.06.2017, 21:12:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Hello,
Dzis przedstawiam na szybko napisane 3 metody do testowania wydajnosci CPU, operacji I/O oraz bazy danych. Kazda metoda zwraca przyznane punkty w formie INTa. Oczywiscie im wiecej tym lepiej. Uwagi odnosnie tej jakze nikomu niepotrzebnej klasie jak zwykle mile widziane Klasa:
Przyklad uzycia:
Wyniki: Kod int(187)
int(153) int(1224) Ten post edytował q.michal 16.06.2017, 15:04:39 |
|
|
16.06.2017, 10:07:13
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
doubleval(count($result))
Naprawde uwazasz ze musisz zrzutowac liczbe calkowita do rzeczywistej by moc jej uzyc w dzieleniu? Wyliczanie sredniej tak jak to robisz z procesow ktore dzialaja jeden po drugim w petli nie ma najmniejszego sensu Ten caly SCORE rowniez jest do bani bo jest to poprostu "srednia" liczba sekund a nie zaden SCORE ktory moze cos znaczyc. Zmienisz kiedys liczbe iteracji i nagle SCORE bedzie totalnie inny if(count($result)) { return (int) round(array_sum($result) / doubleval(count($result))); } else { return 0; } Skoro $result wypelniasz w petli bez zadnych warunkow to naprawde myslisz ze kiedykolwiek moze to byc puste? for($j = 0; $j < 1000; $j++) { str_replace("#N#", $j, $testfile); } Nie wiem co ty tutaj testujesz ale na pewno nie IO Generalnie patrzac na te twoje kolejne klasy to odnosze wrazenie ze zamiast isc do przodu, ty sie zwyczajnie cofasz. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.06.2017, 10:25:46
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Ta pętla to chyba taka pozostałość do wywalenia
|
|
|
16.06.2017, 10:28:07
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
edit:
dobra, wracajac do tej $result to teraz dolukalem if ($loop2 > $loop1) $result[] = 1 / ($loop2 - $loop1); Mozesz mi przyblizyc algorytm slownie? @Pyton_000 no wlasnie chyba nie. To jakis wiekszy zamysl w jego algorytmie. Zauwasz, ze on wszedzie ma dwie petle, ta pierwsza z reguly szybsza, a potem odejmuje sobie czasy tych dwoch petli i dzieli w magiczny sposob. Jakis zamysl za tym jest -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.06.2017, 11:01:20
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Tutaj powinny być oddzielne klasy dla każdego testu czyli IOBenchmark, DBBenchmark, CPUBenchmark, które dziedziczą po jakiejś klasie/interface typu IBenchmark.
Potem jakaś klasa do krórej pakujesz różne testy i odpalasz łącznie, do tego jeszcze klasa prezentera. To taki chyba tylko wczesny draft W metodzie DB Benchmark powinno być typowanie parametru bo nie wiadomo co tam wrzucić jako parametr. PS. A te pętle to chyba po to aby nie wliczać do score czasu działania samej pętli. taki myk |
|
|
16.06.2017, 11:54:39
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6307 Dołączył: 27.12.2004 |
Cytat PS. A te pętle to chyba po to aby nie wliczać do score czasu działania samej pętli. taki myk Sprytne
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.06.2017, 11:55:27
Post
#7
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Tak, jest to taki draft, zawierajacy tylko metody wykonujace benchmark.
W 1 petli zliczam ile czasu zajmuje wykonanie samej petli + innych czynnosci nie zwiazanych np z samym I/O - tudziez wykonanie np str_repeat. W 2 petli wykonuje to samo co w 1, plus dodatkowo zapisuje dane do pliku i odczytuje go, a nastepnie kasuje. Logiczne wydaje sie, ze ta 2 petla powinna dzialac dluzej, jednak nie moge tego zalozyc wprost - gdyz chociazby z uwagi na chwilowe obciazenie moze byc odwrotnie. Stad warunek "if ($loop2 > $loop1)". Caly test (w przypadku IO zapis, odczyt i usuniecie plikow - w sumie jest ich 1000) powtarzam 25x i wyciagam srednia. Jak teraz na to patrze, ze rzeczywiscie doubleval wydaje sie zbedny. Mam nadzieje ze ten kod az tak bardzo mnie nie uwstecznil |
|
|
16.06.2017, 12:18:33
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Wywal wszystko z static i napisz to od nowa.
Nazwy funkcji Ci podpowiadają, że coś trzeba wydzielić do osobnych klas tak jak pisał @Python_000: getCPUScore getDatabaseScore getIOScore Wolałem nie zagłębiać się w sens czy też praktycznie zastosowanie tej klasy - powyższe uwagi tylko do OOP. Teraz ta klasa jest klasą bo ma słówko class z przodu i tylko tyle ją łączy z OOP. -------------------- |
|
|
16.06.2017, 12:25:38
Post
#9
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Tak, wiem
Skupilem sie wylacznie na funkcjonalnosci i jak napisalem w 1 poscie, jest to kod napisany na szybko. Moze ktos znajdzie dla niego zastosowanie / natchnienie we wlasnym projekcie. edit: Zauwazylem 'drobna literowke'. Drobna, bo zjadlem zero, a zmienia diametralnie wynik. W linii 109 bylo: $result[] = 100 / ($loop2 - $loop1); a powinno byc: $result[] = 1000 / ($loop2 - $loop1); Ten post edytował q.michal 16.06.2017, 15:04:22 |
|
|
Wersja Lo-Fi | Aktualny czas: 23.09.2024 - 05:39 |