Skip to content

Очень простой скрипт тестирования быстродействия PHP | Very simple script for testing of PHP operations speed

Notifications You must be signed in to change notification settings

ryr/php-simple-benchmark-script

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 

Repository files navigation

Простой скрипт проверки быстродействия PHP

Работает со всеми версиями ПХП: от 4.4 до 7.1

Зависимости

Необходимы модули для php:

  • pcre
  • hash
  • mbstring
  • json

Обычно они уже установлены или "вкомпилированны" в php.

Проверить наличие:

  • в консоли php -m
  • или через вывод функции phpinfo()

Запуск

1. Через консоль

Команда:

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

2. Через веб-сервера (apache + php)

Просто положите в любую доступную для выполнения php директорию сайта, например в корень.

Потом скрипт можно будет вызывать с параметрами, как из консоли: curl https://www.example.com/bench.php?memory_limit=64&time_limit=30 или через браузер.

Учет параметров хостинга

На многих хостингах параметры memory_limit и max_execution_time могут быть жестко зафиксированы.

В этом случа скрипт не сможет установить переданные в него значения параметров, по крайней мере не выше лимитов.

Пересчет времени выполнения скрипта будет произведен по наименьшим результирующим значениям.

ChangeLog

@ 2017-05-19, 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-05-24 22:48:12
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 : 3757.578MHz
Memory              : 256 Mb available
Benchmark version:  : 1.0.21
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.134 sec | 446.66 kOp/s | 118.87  Ops/MHz |      2 Mb
02_string_concat                :   0.232 sec |  33.16 MOp/s |   8.82 kOps/MHz |      4 Mb
03_1_string_number_concat       :   1.717 sec |   2.91 MOp/s | 774.94  Ops/MHz |      4 Mb
03_2_string_number_format       :   1.500 sec |   3.33 MOp/s | 887.36  Ops/MHz |      4 Mb
04_string_simple_functions      :   1.771 sec | 734.20 kOp/s | 195.39  Ops/MHz |      4 Mb
05_string_multibyte             :   4.084 sec |  31.83 kOp/s |   8.47  Ops/MHz |      4 Mb
06_string_manipulation          :   2.442 sec | 532.32 kOp/s | 141.67  Ops/MHz |      4 Mb
07_regex                        :   1.956 sec | 664.78 kOp/s | 176.92  Ops/MHz |      4 Mb
08_1_hashing                    :   2.023 sec | 642.55 kOp/s | 171.00  Ops/MHz |      4 Mb
08_2_crypt                      :   5.928 sec |   1.69 kOp/s |   0.45  Ops/MHz |      4 Mb
09_json_encode                  :   1.638 sec | 793.71 kOp/s | 211.23  Ops/MHz |      4 Mb
10_json_decode                  :   1.992 sec | 652.76 kOp/s | 173.72  Ops/MHz |      4 Mb
11_serialize                    :   1.223 sec |   1.06 MOp/s | 282.81  Ops/MHz |      4 Mb
12_unserialize                  :   1.749 sec | 743.36 kOp/s | 197.83  Ops/MHz |      4 Mb
13_array_fill                   :   2.008 sec |  23.91 MOp/s |   6.36 kOps/MHz |      4 Mb
14_array_unset                  :   1.815 sec |  26.45 MOp/s |   7.04 kOps/MHz |      4 Mb
15_loops                        :   2.011 sec | 188.95 MOp/s |  50.29 kOps/MHz |      4 Mb
16_loop_ifelse                  :   1.492 sec |  60.34 MOp/s |  16.06 kOps/MHz |      4 Mb
17_loop_ternary                 :   3.280 sec |  27.44 MOp/s |   7.30 kOps/MHz |      4 Mb
18_1_loop_defined_access        :   0.590 sec |  33.92 MOp/s |   9.03 kOps/MHz |      4 Mb
18_2_loop_undefined_access      :   3.843 sec |   5.20 MOp/s |   1.39 kOps/MHz |      4 Mb
19_type_functions               :   1.749 sec |   2.86 MOp/s | 760.87  Ops/MHz |      4 Mb
20_type_conversion              :   1.169 sec |   4.28 MOp/s |   1.14 kOps/MHz |      4 Mb
21_loop_exceptiontrycatch       :   2.139 sec |   1.87 MOp/s | 497.63  Ops/MHz |      4 Mb
-------------------------------------------------------------------------------------------
Total time:                     : 51.484 sec.
Current memory usage:           : 535.71 kb.
Peak memory usage:              : 125.36 Mb.
</pre>

About

Очень простой скрипт тестирования быстродействия PHP | Very simple script for testing of PHP operations speed

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%