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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Barakuda
Отправлено: 12 Июля, 2014 - 01:37:21
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




Не знал в какой подфорум запихнуть свои пять копеек, поэтому вставил сюда.
Если это не по сабжу, прошу модераторов переместить тему в нужный подфорум.

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

Собственно красным выделено время, которое вызывает у меня вопросы. Почему так? С чем это связанно?
Даже если делаю запрет на кеширование, даже если нет выборок из базы (просто работа голого скрипта) - всё равно вылазят эти переростки.
Тест проводится на локальной машине.
Прикреплено изображение (Нажмите для увеличения)
тест скорости работы скрипта.jpg

(Отредактировано автором: 12 Июля, 2014 - 01:46:23)

 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 01:45:05
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




А вот шесть тестов подряд при одних условиях.
Прикреплено изображение (Нажмите для увеличения)
тест скорости - единые условия.jpg
 
 Top
IGORtrue
Отправлено: 12 Июля, 2014 - 12:13:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 177
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Может зависит от загруженности процессора?
 
 Top
LIME
Отправлено: 12 Июля, 2014 - 12:48:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ты в курсе что одновременно на процессоре крутятся множество процессов
просто пчелиный рой
и время делится между ними в зависимости от приоритета процесса и количества ядер и/или потоков в ядре
еще вопрос как ты организовал бенчмарк
освобождал ли память? уничтожал дескрипторы? итд итп
(Добавление)
Цитата:
$ top
в linux
в винде гдето в гуе можно смотреть
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 12:57:23
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




LIME, память конечно же очищал.
Про то, что это зависит от процесса - тоже догадываюсь, но как это можно обойти ? Ну, конечно лезть в приоритеты процессоров - это не выход.
 
 Top
LIME
Отправлено: 12 Июля, 2014 - 12:59:46
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




никак
просто большое количество итераций для усреднения результатов
и несколько повторений теста чтоб убедиться в примерно одинаковом результате
(Добавление)
и даже если ты полезешь в приоритеты это не поможет
просто твой процесс будет жрать больше времени как и другие процессы с наивысшим приоритетом
но время всеравно будет делится и что-то будет отдаваться на процессы менее приоритетные
(Добавление)
Barakuda пишет:
запоминаем микротайм в начале
при большом количестве итераций придется и тайм добавлять
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 13:04:47
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




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

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

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

почему ? скорость загрузки одной страницы (одна итерация) остается прежней, и я сумму этих скоростей записываю в переменную сессии.
(Добавление)
опишу систему работы класса =)
вручную обновляем страницу(запускаем тест)->он считает время загрузки данной страницы->JavaScript перезагружает страницу->снова считается время загрузки страницы и производятся все операции (добавление времени загрузки текущей страницы в переменную суммы, запись скорости загрузки данной страницы в переменную сессии, являющейся массивом, декрементируем переменную сессии count, и снова перезагружаем страницу при помощи JavaScript)->при последней итерации выводим все данные на экран, чистим переменные сессии.

(Отредактировано автором: 12 Июля, 2014 - 13:06:05)

 
 Top
LIME
Отправлено: 12 Июля, 2014 - 13:17:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ага...зачем?
если можно 1 раз засечь тайм+микротайм и потом в конце сравнить
иначе вероятность погрешности накапливается с каждой итерацией
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 13:18:47
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




LIME пишет:
ага...зачем?
если можно 1 раз засечь тайм+микротайм и потом в конце сравнить
иначе вероятность погрешности накапливается с каждой итерацией

это если считать стандарнтым способом, в цикле... я описал выше принцип работы своего бенчмарка.
 
 Top
LIME
Отправлено: 12 Июля, 2014 - 13:20:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ааа....тут так всё сделано....через запросы
ну тогда тут еще вмешивается веб-сервер
сервис TCP
и хз что еще
ну тут ниче не поделаешь
так и будет плясать
(Добавление)
ой нет...какой веб сервер
ляпнул
(Добавление)
но сама по себе идея засечь время отдельного скрипта чревата большими погрешностями
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 13:22:29
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




LIME,эм... а при чем тут сервис TCP ?

(Отредактировано автором: 12 Июля, 2014 - 13:22:58)

 
 Top
LIME
Отправлено: 12 Июля, 2014 - 13:27:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




нипричем
сказал же ляпнул
подумал о времени отклика....забей
но догадываюсь что ты тупо инклудишь скрипт в бенчмарк
тогда тут накладывается механизм жесткого диска
перемешение головки и возможно кэш диска
тут лучше использовать акселератор....он кэширует байткод в память
но тут и погрешность вырастит так как ускорится скрипт
короче плохая затея
тесть локально без запросов
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 13:29:42
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




LIME,наоборот я сам класс инклюдю в скрипт...
это все равно что в самом скрипте засечь микротаймы и считать их...

(Отредактировано автором: 12 Июля, 2014 - 13:30:48)

 
 Top
LIME
Отправлено: 12 Июля, 2014 - 13:30:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




к диску же не только твой скрипт может обращаться
тем более на него сбрасывается инфа только периодически из кэша(другими процессами возможно)
(Добавление)
аа...ну тогда только погрешность...
все равно этого достаточно чтоб отказаться от затеи
(Добавление)
поясню
запросами невозможно добиться большого количества итераций
например 100 000
чтоб достаточно усреднить и не дать повлиять погрешности
тестировать надо отдельный функционал
отдельные методы итд
оптимизировать надо узкие места
(Добавление)
а еще ведь может у тебя быть подключение файлов в самом скрипте
и снова тогда жесткий диск
(Добавление)
и еще
под погрешностью я имею ввиду именно погрешность измерения времени
лучше это делать в начале и в конце всех итераций
 
 Top
Barakuda
Отправлено: 12 Июля, 2014 - 13:41:28
Post Id



Гость


Покинул форум
Сообщений всего: 88
Дата рег-ции: Окт. 2012  
Откуда: Одесса, украина


Помог: 0 раз(а)




LIME, тогда можно сказать что все подобные тестеры скорости - не нужны, и использовать нужно только xdebug? )
(Добавление)
LIME пишет:

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

в случае когда тело скрипта исполняется в цикле - да. Но ведь не в моём случае. Если поставить метку, обновлять страницу, в конце взять метку и вычислить время - то тут будет учитываться и время выдачи страницы. А интересует только серверное время.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB