Работает со всеми версиями ПХП: от 4.3 до 7.1
Необходимы модули для php:
- pcre
- hash
- mbstring
- json
Обычно они уже установлены или "вкомпилированны" в php.
Проверить наличие:
- в консоли
php -m
- или через вывод функции
phpinfo()
Команда:
php bench.php [-h|--help] [-m|--memory-limit=256] [-t|--time-limit=600]
-h|--help - вывод помощи и выход
-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 php bench.php
Просто положите в любую доступную для выполнения php директорию сайта, например в корень.
Потом скрипт можно будет вызывать с параметрами, как из консоли:
curl http://www.example.com/bench.php?memory_limit=64&time_limit=30
или через браузер.
На многих хостингах параметры memory_limit
и max_execution_time
могут быть жестко зафиксированы.
В этом случа скрипт не сможет установить переданные в него значения параметров, по крайней мере не выше лимитов.
Пересчет времени выполнения скрипта будет произведен по наименьшим результирующим значениям.
@ 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>
-------------------------------------------------------------------------------------------
| PHP BENCHMARK SCRIPT |
-------------------------------------------------------------------------------------------
Start: : 2017-06-03 03:46:26
Server: : Linux/4.4.0-79-generic x86_64
Platform: : Linux
CPU: :
model : Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz
cores : 4
MHz : 3729.55MHz
Memory : 256 Mb available
Benchmark version: : 1.0.22
PHP version: : 7.0.14-Ubuntu/16.04-SergeyD/9.3.1
Max execution time: : 600 sec.
Crypt hash algo: : MD5
-------------------------------------------------------------------------------------------
TEST NAME : SECONDS | OP/SEC | OP/SEC/MHz | MEMORY
-------------------------------------------------------------------------------------------
01_math : 3.175 sec | 440.92 kOp/s | 118.22 Ops/MHz | 2 Mb
02_string_concat : 0.227 sec | 33.94 MOp/s | 9.10 kOps/MHz | 128.84 Mb
03_1_string_number_concat : 1.737 sec | 2.88 MOp/s | 771.71 Ops/MHz | 4 Mb
03_2_string_number_format : 1.522 sec | 3.28 MOp/s | 880.71 Ops/MHz | 4 Mb
04_string_simple_functions : 1.801 sec | 721.69 kOp/s | 193.50 Ops/MHz | 4 Mb
05_string_multibyte : 4.146 sec | 31.35 kOp/s | 8.41 Ops/MHz | 4 Mb
06_string_manipulation : 2.451 sec | 530.44 kOp/s | 142.23 Ops/MHz | 4 Mb
07_regex : 2.000 sec | 650.01 kOp/s | 174.29 Ops/MHz | 4 Mb
08_1_hashing : 2.061 sec | 630.78 kOp/s | 169.13 Ops/MHz | 4 Mb
08_2_crypt : 6.074 sec | 1.65 kOp/s | 0.44 Ops/MHz | 4 Mb
09_json_encode : 1.644 sec | 790.92 kOp/s | 212.07 Ops/MHz | 4 Mb
10_json_decode : 2.109 sec | 616.35 kOp/s | 165.26 Ops/MHz | 4 Mb
11_serialize : 1.255 sec | 1.04 MOp/s | 277.68 Ops/MHz | 4 Mb
12_unserialize : 1.853 sec | 701.46 kOp/s | 188.08 Ops/MHz | 4 Mb
13_array_fill : 2.064 sec | 24.22 MOp/s | 6.50 kOps/MHz | 12 Mb
14_array_range : 0.513 sec | 194.97 kOp/s | 52.28 Ops/MHz | 12 Mb
14_array_unset : 1.752 sec | 28.54 MOp/s | 7.65 kOps/MHz | 12 Mb
15_loops : 1.860 sec | 204.29 MOp/s | 54.78 kOps/MHz | 4 Mb
16_loop_ifelse : 1.335 sec | 67.41 MOp/s | 18.08 kOps/MHz | 4 Mb
17_loop_ternary : 3.197 sec | 28.15 MOp/s | 7.55 kOps/MHz | 4 Mb
18_1_loop_defined_access : 0.577 sec | 34.68 MOp/s | 9.30 kOps/MHz | 4 Mb
18_2_loop_undefined_access : 3.892 sec | 5.14 MOp/s | 1.38 kOps/MHz | 4 Mb
19_type_functions : 1.754 sec | 2.85 MOp/s | 764.51 Ops/MHz | 4 Mb
20_type_conversion : 1.163 sec | 4.30 MOp/s | 1.15 kOps/MHz | 4 Mb
21_loop_exceptiontrycatch : 2.160 sec | 1.85 MOp/s | 496.50 Ops/MHz | 4 Mb
22_loop_null_op : 1.363 sec | 36.69 MOp/s | 9.84 kOps/MHz | 4 Mb
23_loop_spaceship_op : 1.396 sec | 35.83 MOp/s | 9.61 kOps/MHz | 4 Mb
-------------------------------------------------------------------------------------------
Total time: : 55.081 sec.
Current memory usage: : 4 Mb.
Peak memory usage: : 125.37 Mb.
</pre>