Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Тестер скорости. Разное время, в чем подвох?
Форумы портала PHP.SU » » Вопросы новичков » Тестер скорости. Разное время, в чем подвох?

Страниц (2): [1] 2 »
 

1. Barakuda - 12 Июля, 2014 - 01:37:21 - перейти к сообщению
Не знал в какой подфорум запихнуть свои пять копеек, поэтому вставил сюда.
Если это не по сабжу, прошу модераторов переместить тему в нужный подфорум.

Всегда интересовали вопросы оптимизации кода, и вот написал небольшой API, который считает процессорное время работы скрипта. Вдаваться в подробности не буду (если кому то интересно - спросят), но всё банально, запоминаем микротайм в начале, отнимаем от микротайма по завершению работы скрипта, получаем время работы. Только сделано всё для удобства, и есть возможность тестировать какое угодно количество раз, выводя статистику на экран.
Собственно вопрос в следующем: почему скорость загрузки одной и той же страницы существенно отличается?
Например могут быть следующие цифры:
0.00123
0.00345
0.04345
0.00674
0.00978
0.05675
0.03482

Собственно красным выделено время, которое вызывает у меня вопросы. Почему так? С чем это связанно?
Даже если делаю запрет на кеширование, даже если нет выборок из базы (просто работа голого скрипта) - всё равно вылазят эти переростки.
Тест проводится на локальной машине.
2. Barakuda - 12 Июля, 2014 - 01:45:05 - перейти к сообщению
А вот шесть тестов подряд при одних условиях.
3. IGORtrue - 12 Июля, 2014 - 12:13:41 - перейти к сообщению
Может зависит от загруженности процессора?
4. LIME - 12 Июля, 2014 - 12:48:13 - перейти к сообщению
ты в курсе что одновременно на процессоре крутятся множество процессов
просто пчелиный рой
и время делится между ними в зависимости от приоритета процесса и количества ядер и/или потоков в ядре
еще вопрос как ты организовал бенчмарк
освобождал ли память? уничтожал дескрипторы? итд итп
(Добавление)
Цитата:
$ top
в linux
в винде гдето в гуе можно смотреть
5. Barakuda - 12 Июля, 2014 - 12:57:23 - перейти к сообщению
LIME, память конечно же очищал.
Про то, что это зависит от процесса - тоже догадываюсь, но как это можно обойти ? Ну, конечно лезть в приоритеты процессоров - это не выход.
6. LIME - 12 Июля, 2014 - 12:59:46 - перейти к сообщению
никак
просто большое количество итераций для усреднения результатов
и несколько повторений теста чтоб убедиться в примерно одинаковом результате
(Добавление)
и даже если ты полезешь в приоритеты это не поможет
просто твой процесс будет жрать больше времени как и другие процессы с наивысшим приоритетом
но время всеравно будет делится и что-то будет отдаваться на процессы менее приоритетные
(Добавление)
Barakuda пишет:
запоминаем микротайм в начале
при большом количестве итераций придется и тайм добавлять
7. Barakuda - 12 Июля, 2014 - 13:04:47 - перейти к сообщению
LIME пишет:
никак
просто большое количество итераций для усреднения результатов
и несколько повторений теста чтоб убедиться в примерно одинаковом результате

спасибо, я такое решение и применял..

LIME пишет:
Barakuda пишет:
запоминаем микротайм в начале
при большом количестве итераций придется и тайм добавлять

почему ? скорость загрузки одной страницы (одна итерация) остается прежней, и я сумму этих скоростей записываю в переменную сессии.
(Добавление)
опишу систему работы класса =)
вручную обновляем страницу(запускаем тест)->он считает время загрузки данной страницы->JavaScript перезагружает страницу->снова считается время загрузки страницы и производятся все операции (добавление времени загрузки текущей страницы в переменную суммы, запись скорости загрузки данной страницы в переменную сессии, являющейся массивом, декрементируем переменную сессии count, и снова перезагружаем страницу при помощи JavaScript)->при последней итерации выводим все данные на экран, чистим переменные сессии.
8. LIME - 12 Июля, 2014 - 13:17:23 - перейти к сообщению
ага...зачем?
если можно 1 раз засечь тайм+микротайм и потом в конце сравнить
иначе вероятность погрешности накапливается с каждой итерацией
9. Barakuda - 12 Июля, 2014 - 13:18:47 - перейти к сообщению
LIME пишет:
ага...зачем?
если можно 1 раз засечь тайм+микротайм и потом в конце сравнить
иначе вероятность погрешности накапливается с каждой итерацией

это если считать стандарнтым способом, в цикле... я описал выше принцип работы своего бенчмарка.
10. LIME - 12 Июля, 2014 - 13:20:03 - перейти к сообщению
ааа....тут так всё сделано....через запросы
ну тогда тут еще вмешивается веб-сервер
сервис TCP
и хз что еще
ну тут ниче не поделаешь
так и будет плясать
(Добавление)
ой нет...какой веб сервер
ляпнул
(Добавление)
но сама по себе идея засечь время отдельного скрипта чревата большими погрешностями
11. Barakuda - 12 Июля, 2014 - 13:22:29 - перейти к сообщению
LIME,эм... а при чем тут сервис TCP ?
12. LIME - 12 Июля, 2014 - 13:27:01 - перейти к сообщению
нипричем
сказал же ляпнул
подумал о времени отклика....забей
но догадываюсь что ты тупо инклудишь скрипт в бенчмарк
тогда тут накладывается механизм жесткого диска
перемешение головки и возможно кэш диска
тут лучше использовать акселератор....он кэширует байткод в память
но тут и погрешность вырастит так как ускорится скрипт
короче плохая затея
тесть локально без запросов
13. Barakuda - 12 Июля, 2014 - 13:29:42 - перейти к сообщению
LIME,наоборот я сам класс инклюдю в скрипт...
это все равно что в самом скрипте засечь микротаймы и считать их...
14. LIME - 12 Июля, 2014 - 13:30:27 - перейти к сообщению
к диску же не только твой скрипт может обращаться
тем более на него сбрасывается инфа только периодически из кэша(другими процессами возможно)
(Добавление)
аа...ну тогда только погрешность...
все равно этого достаточно чтоб отказаться от затеи
(Добавление)
поясню
запросами невозможно добиться большого количества итераций
например 100 000
чтоб достаточно усреднить и не дать повлиять погрешности
тестировать надо отдельный функционал
отдельные методы итд
оптимизировать надо узкие места
(Добавление)
а еще ведь может у тебя быть подключение файлов в самом скрипте
и снова тогда жесткий диск
(Добавление)
и еще
под погрешностью я имею ввиду именно погрешность измерения времени
лучше это делать в начале и в конце всех итераций
15. Barakuda - 12 Июля, 2014 - 13:41:28 - перейти к сообщению
LIME, тогда можно сказать что все подобные тестеры скорости - не нужны, и использовать нужно только xdebug? )
(Добавление)
LIME пишет:

под погрешностью я имею ввиду именно погрешность измерения времени
лучше это делать в начале и в конце всех итераций

в случае когда тело скрипта исполняется в цикле - да. Но ведь не в моём случае. Если поставить метку, обновлять страницу, в конце взять метку и вычислить время - то тут будет учитываться и время выдачи страницы. А интересует только серверное время.

 

Powered by ExBB FM 1.0 RC1