Работает со всеми версиями ПХП: от 4.3 до 7.2
Необходимы модули для php:
- pcre
- mbstring
- json
- xmlrpc
Обычно они уже установлены или "вкомпилированны" в php.
Проверить наличие:
- в консоли
php -m
- или через вывод функции
phpinfo()
Команда:
php bench.php [-h|--help] [-d|--dont-recalc] [-m|--memory-limit=256] [-t|--time-limit=600]
-h|--help - вывод помощи и выход
-d|--dont-recalc - не пересчитывать время выполнения тестов, если ограничения слишком низкие
-m|--memory-limit <Mb> - установка значения параметра `memory_limit` в Мб, по-умолчанию равно 256 (Мб)
-t|--time-limit <sec> - установка значения параметра `max_execution_time` в секундах, по-умолчанию равно 600 (сек.)
Например: php bench.php -m=64 -t=30
Второй вариант передачи значений для параметров - переменные окружения:
env PHP_MEMORY_LIMIT=64 PHP_TIME_LIMIT=30 DONT_RECALCULATE_LIMITS=1 php bench.php
Просто положите в любую доступную для выполнения php директорию сайта, например в корень.
Потом скрипт можно будет вызывать с параметрами, как из консоли:
curl http://www.example.com/bench.php?memory_limit=64&time_limit=30&dont_recalculate_limits=1
или через браузер.
На многих хостингах параметры memory_limit
и max_execution_time
могут быть жестко зафиксированы.
В этом случа скрипт не сможет установить переданные в него значения параметров, по крайней мере не выше лимитов.
Пересчет времени выполнения скрипта будет произведен по наименьшим результирующим значениям.
@ 2018-08-07, v1.0.27
- Добавили новый параметр, отключающий пересчет ограничений по времени для тестов
@ 2018-08-07, v1.0.26
- Добавили вывод общего кол-ва операций в секунду, и операций в секунду на МГц
- Добавили вывод включенных необходимых модулей
@ 2018-08-06, v1.0.25
- Добавили тестирование xmlrpc (xml)
- Добавили вывод предупреждений, если не все необходимые модули php установлены
@ 2017-09-04, v1.0.24
- Поправили пересчет времени тестов, если процессор Atom или ARM
@ 2017-09-04, v1.0.23
- Обновили тест на работу с try-catch блоком - отдельные под-тесты: без блока, блок без exception, и с exception
- Добавили пересчет времени тестов, если процессор Atom или ARM - они реально медленные
@ 2017-06-03, v1.0.22
- Добавили тесты производительности новых операций в php-7
- Вынесли инициализацию переменных за счетчики времени в тестах
- Обновили счетчики времени для разных версий php
- Тест array_range - насколько сильно влияет на следующий тест array_unset
@ 2017-05-25, v1.0.21
- Добавили тесты производительности конвертации простых типов:
string => (int)
,string => intval()
@ 2017-05-19, v1.0.20
- Поддержва длинных опций ком.строки только в php-5.3+
- Добавили проверку форматирования строк - производительность сбора
''
строки с числами, или""
строки с форматированием чисел внутри. - Очищаем данные после теста строк, массивов - меньше занятой памяти
@ 2017-05-19, v1.0.19
- Попытка принудительно включить небуферизированный вывод
- Спец-заголовок для nginx для отключения буферизации
- Возможность загрузить основные тесты без файла php5.inc с тестом try/Exception/catch
@ 2017-05-18, v1.0.18
- Проверка на совместимую версию php
- Получение значений для настроек php -
max_execution_time
иmemory_limit
- из GET / getenv / getopt.
@ 2017-05-18, v1.0.17
- Попытка укладываться в max_execution_time Т.к. зависимость от hardware не линейная - много hack-ов. Может не всегда срабатывать.
@ 2017-05-18, v1.0.16
- Сделали поиск доступных алгоритмов хеширования для crypt()
- По-умолчанию считаем, что доступен для всех MD5
@ 2017-05-17, v1.0.15
- Поправили работу скрипта с php-7.x - больше ограничений по памяти
- Добавили вывод используемой памяти (@ryr)
@ 2017-05-06, v1.0.14
- Изменили работу скрипта, если доступно памяти менее 256Мб
@ 2017-05-06, v1.0.13
- Поправили немного code-style (@ryr)
- Добавили больше данных в тесты сериализации
@ 2017-04-21, v1.0.12
- Правильная конвертация значений в единицы SI.
- Считаем операции в секунду на МГц.
- Обновил вывод - добавил заголовок столбцам
@ 2017-04-20, v1.0.11
- Нагружаем процессор, чтобы определить MHz только если разница между значениями 'cpu MHz' и 'bogomips/2' большая.
@ 2017-04-20, v1.0.10
- Тесты массивов теперь всегда включены, они больше не съедают много памяти
- Добавлено определение CPU на Linux-системах, добавлен вывод операций на МГц
- В выводе uname осталена только необходимая для сравнения информация
- Обновлен README
@ 2017-04-06, v1.0.9
- Поправлен подсчет операций в секунду для теста массивов
@ 2017-04-06, v1.0.8
- Тесты, которых нет в php-4.4 вынесены в отдельный подключаемый файл
@ 2017-04-06, v1.0.7
- Изменены названия функций-тестов для сортировки перед запуском
- Обновлено форматирование вывода результатов тестов
- Добавлены и обновлены тесты:
- образение к определенныи и неопределенным переменным/ключам массива
- исключения (exceptions)
- к хешированию добавлен тест crypt
- тест массивов разбит на три уровня - время выполнения то же, памяти занимает меньше
@ 2015-07-16, v1.0.6
- Добавлены тесты: preg & serialize
@ 2015-07-02, v1.0.5
- Добавлен тест простейшего копирования строк
@ 2015-07-02, v1.0.4
- Добавлено увеличение лимита по памяти и времени выполнения
@ 2015-07-02, v1.0.3
- Исправлено определение доступных функций, сделан пропуск тестов для них
@ 2015-07-02, v1.0.2
- Добавлено еще больше функций, теперь требуется наличие mbstring и json модулей
- Потребление памяти увеличено из-за тестирования массивов - нужно более 1Гб
@ 2015-07-01, v1.0.1
- Добавлен вывод потребления памяти
- Добавлены новые функции, увеличен размер проверочной строки
<pre>
<<< WARNING >>>
CPU is in powersaving mode? Set CPU governor to 'performance'!
Fire up CPU and recalculate MHz!
</pre>
<pre>
-------------------------------------------------------------------------------------------
| PHP BENCHMARK SCRIPT |
-------------------------------------------------------------------------------------------
Start: : 2018-08-07 14:38:05
Server: : Linux/4.15.0-29-generic x86_64
Platform: : Linux
CPU: :
model : Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz
cores : 4
MHz : 3728.681MHz
Memory : 256 Mb available
Benchmark version: : 1.0.26
PHP version: : 7.0.23-Ubuntu/16.04-SergeyD/11.1
: available modules
mbstring: : yes
json: : yes
xmlrpc: : yes
pcre: : yes
Max execution time: : 600 sec
Crypt hash algo: : MD5
-------------------------------------------------------------------------------------------
TEST NAME : SECONDS | OP/SEC | OP/SEC/MHz | MEMORY
-------------------------------------------------------------------------------------------
01_math : 2.759 sec | 507.47 kOp/s | 136.10 Ops/MHz | 2 Mb
02_string_concat : 0.250 sec | 30.80 MOp/s | 8.26 kOps/MHz | 128.84 Mb
03_1_string_number_concat : 1.769 sec | 2.83 MOp/s | 757.88 Ops/MHz | 4 Mb
03_2_string_number_format : 1.507 sec | 3.32 MOp/s | 889.74 Ops/MHz | 4 Mb
04_string_simple_functions : 1.690 sec | 769.43 kOp/s | 206.35 Ops/MHz | 4 Mb
05_string_multibyte : 4.536 sec | 28.66 kOp/s | 7.69 Ops/MHz | 4 Mb
06_string_manipulation : 2.414 sec | 538.54 kOp/s | 144.43 Ops/MHz | 4 Mb
07_regex : 1.938 sec | 670.81 kOp/s | 179.91 Ops/MHz | 4 Mb
08_1_hashing : 2.039 sec | 637.71 kOp/s | 171.03 Ops/MHz | 4 Mb
08_2_crypt : 6.076 sec | 1.65 kOp/s | 0.44 Ops/MHz | 4 Mb
09_json_encode : 1.603 sec | 810.89 kOp/s | 217.47 Ops/MHz | 4 Mb
10_json_decode : 1.957 sec | 664.15 kOp/s | 178.12 Ops/MHz | 4 Mb
11_serialize : 1.230 sec | 1.06 MOp/s | 283.48 Ops/MHz | 4 Mb
12_unserialize : 1.829 sec | 710.61 kOp/s | 190.58 Ops/MHz | 4 Mb
13_array_fill : 2.121 sec | 23.58 MOp/s | 6.32 kOps/MHz | 12 Mb
14_array_range : 0.548 sec | 182.50 kOp/s | 48.95 Ops/MHz | 12 Mb
14_array_unset : 1.542 sec | 32.42 MOp/s | 8.69 kOps/MHz | 12 Mb
15_loops : 1.957 sec | 194.13 MOp/s | 52.06 kOps/MHz | 4 Mb
16_loop_ifelse : 1.569 sec | 57.37 MOp/s | 15.39 kOps/MHz | 4 Mb
17_loop_ternary : 3.060 sec | 29.42 MOp/s | 7.89 kOps/MHz | 4 Mb
18_1_loop_defined_access : 0.531 sec | 37.68 MOp/s | 10.11 kOps/MHz | 4 Mb
18_2_loop_undefined_access : 3.722 sec | 5.37 MOp/s | 1.44 kOps/MHz | 4 Mb
19_type_functions : 1.655 sec | 3.02 MOp/s | 810.16 Ops/MHz | 4 Mb
20_type_conversion : 1.094 sec | 4.57 MOp/s | 1.23 kOps/MHz | 4 Mb
21_0_loop_exception_none : 0.029 sec | 137.48 MOp/s | 36.87 kOps/MHz | 4 Mb
21_1_loop_exception_try : 0.037 sec | 109.15 MOp/s | 29.27 kOps/MHz | 4 Mb
21_2_loop_exception_catch : 2.149 sec | 1.86 MOp/s | 499.22 Ops/MHz | 4 Mb
22_loop_null_op : 1.303 sec | 38.36 MOp/s | 10.29 kOps/MHz | 4 Mb
23_loop_spaceship_op : 1.159 sec | 43.14 MOp/s | 11.57 kOps/MHz | 4 Mb
24_xmlrpc_encode : 2.621 sec | 76.30 kOp/s | 20.46 Ops/MHz | 4 Mb
25_xmlrpc_decode : 3.428 sec | 8.75 kOp/s | 2.35 Ops/MHz | 4 Mb
-------------------------------------------------------------------------------------------
Total time: : 60.122 sec | 12.31 MOp/s | 3.30 kOps/MHz |
Current PHP memory usage: : 4 Mb
Peak PHP memory usage: : 125.26 Mb
</pre>