Если надо быстро проверить производительность связки PHP+PostgreSQL при инициализации Drupal (и ELiS в частности), можно использовать простой метод ниже.
Содержание
Методика[править]
Напишем скрипт загрузки ядра Drupal и запустим его множество раз так, чтобы загрузка ядра Drupal происходила всякий раз заново.
Подготовка[править]
При использовании ELiS создайте файл /usr/lib64/elis/drupal/bench.php с содержимым:
<?php require_once('drupal.bootstrap.php'); $nid = '1'; $node = node_load($nid)
В bench.php включается файл инициализации drupal.bootstrap.php, который и производит инициализацию Drupal. При установке ELiS этот файл уже существует с таким содержимым:
$path = '/var/www/vh/library'; $_SERVER['REMOTE_ADDR'] = "127.0.0.1"; $_SERVER['SCRIPT_NAME'] = 'index.php'; $_SERVER['SCRIPT_FILENAME'] = 'index.php'; $_SERVER['REQUEST_METHOD'] = 'GET'; error_reporting(E_NOTICE); chdir($path); define('DRUPAL_ROOT', getcwd()); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); include_once $path.'/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Если вы хотите проверить чистый Drupal7, то создайте файлы bench.php и drupal.bootstrap.php в любой папке и в drupal.bootstrap.php установите правильный путь $path до корневой директории с Drupal7.
Запуск[править]
Запустите итерацию загрузки ядра 100 раз:
time for ((i=0; i<100; i++)); do php ./bench.php; done
В ответ увидите нечто вроде:
real 0m19,481s user 0m15,811s sys 0m3,498s
Здесь real - время выполнения теста. user - время в пространстве пользователя (php), sys - время в пространстве ядра (обращение к файлам и т.д.).
Замечено, что при использовании виртуализации real может быть в разы больше user+sys, и вообще не вполне правильно эти времена сравнивать.
Ограничения[править]
Так как запуск идет из командной строки сервера, скорее всего opcache использоваться не будет (настраивается).
Тест однопоточный. Многопоточную производительность он не проверяет.
По сути движок темизации не задействуется.
Нельзя сравнивать системы с разным числом активных модулей.
Запись не производится. Если вы хотите добавить запись, попробуйте в bench.php добавить загрузку и сохранение ноды:
$node = node_load('1'); // FIXME: set correct node nid if (false !== $node) node_save($node);
Примеры[править]
LXC, Xeon E5-2690, SSD Samsung 840 PRO, ELiS, php 7.2, PostgreSQL12, CentOS 8
real 0m19,501s user 0m15,853s sys 0m3,473s
Hyper-V, Ryzen 7 PRO 5750GE, SSD SK hynix PC711, ELiS, php 7.3, PostgreSQL12, Oracle Linux 8
real 1m25,231s user 0m17,910s sys 0m1,780s
LXC, Ryzen 7 PRO 5750GE, SSD Intel Optane 1600X, ELiS, php 7.3, PostgreSQL12, Oracle Linux 8
Чтение ноды:
real 0m24.452s user 0m20.153s sys 0m2.544s
Запись ноды:
real 0m38.518s user 0m25.836s sys 0m5.192s
VMware ESXi 5.1, Xeon X5670, IBM XIV, ELiS, php 7.2, PostgreSQL12, CentOS 8
real 0m35.606s user 0m23.898s sys 0m7.668s
VMware ESXi 5.1, Xeon L7555, IBM XIV, ELiS, php 7.3, PostgreSQL12, CentOS 8
real 1m24.610s user 1m9.237s sys 0m8.076s