Я хочу подробнее исследовать зависимости в производительности PHP (ZendEngine) от аппаратной части (CPU<->RAM), т.к. я заметил, что особенности той или иной микроархитектуры процессора практически не влияют на произоводительность, при том, что зависимость времени исполнения части скриптов с нагрузкой на CPU-RAM (исключая блокировки I/O) остается практически линейной от частоты. Абсолютно резонный вопрос: если зависимость почти линейна от верхней тактовой частоты, а процессы виртуальной среды исполнения кода можно легко распараллелить, то насколько эффективно применение в PHP-проектах аппаратных конфигураций на базе 4х ядерных CPU против альтернативных 6-8-12-16 поточных решений. Особенно интересуют в данном контексте решения на базе т.н. модулей (архитектуры Bulldozer), т.к. в них продублированы целочисленные планировщики и исполнительные конвейеры. Я предлагаю тем, кого заинтересовала данная тема, принять участие и помочь в сборе сведений, проведя ряд экспериментов. Остальных же прошу не флудить из взаимного уважения к участникам.
Re: Хочу подробнее исследовать зависимости в производительно ты скажи че сделать, чтобы потестить, а мы потестим. А ты сделаешь выводы. Надо какой-то одинаковый бенчмарк всем раздать и посмотреть, что получится.
Попробуем проверить для начала простейший арифметический пример (я попробую систематизировать сведения по разным тестам): Код (PHP): $max_i = 100000; $c = 10; $_g = 50; $eq_f = 1867; $eq_t = (float)0.14146; $_f = array(); $f = 0; for ($g = 0; $g < $_g; $g++) { $t = microtime(true); $_t = 0; for ($i_ = 0; $i_ < $c; $i_++) { $_ = 0; for ($ii_ = 0; $ii_ < $max_i; $ii_++) { $_ = $_ + 2; } unset($_); } $_t = microtime(true) - $t; $_f[] = ($eq_t * $eq_f) / $_t; } $_c = count($_f); for ($i = 0; $i < $_c; $i++) { $f += $_f[$i]; } $f = round(($f/$_c),1); echo 'eq.f: ~'.$f.'<br/>'; Необходимо указать модель процессора, тип оперативной памяти (DDR3 1066/1333/1866/...) и результат "eq.f: ~", например, так: Intel Core i5-2300, DDR3 1333, eq.f: ~ [какое-то значение]
Re: Хочу подробнее исследовать зависимости в производительно easyPHP 5.3.9, win7, i5-2500 3.30GHz DDR3 1333, eq.f: ~859.9, eq.f: ~867.1, eq.f: ~842.5 Добавлено спустя 11 минут 4 секунды: Re: Хочу подробнее исследовать зависимости в производительности позже уточню конфиг php-cgi, nginx, php 5.3.6, FreeBSD, eq4 eq.f: ~1064.5, eq.f: ~1061.4, eq.f: ~1061.5
Re: Хочу подробнее исследовать зависимости в производительно win7 x64, i7-2600, DDR3 1333, PHP/5.3.3 eq.f: ~3510.3, eq.f: ~3465.2, eq.f: ~3486.2 загрузка ЦП ~12%
Re: Хочу подробнее исследовать зависимости в производительно easyPHP 5.3.9, win7, Phenom 8450, 2.10GHz, DDR2 667, eq.f: ~409.8, eq.f: ~414.1, eq.f: ~418.4 только что заметил, что загрузка не растет выше 35%. Даже если запустить одновременно несколько скриптов.
Re: Хочу подробнее исследовать зависимости в производительно php 5.3.10, WinXP, Pentium IV 2.40 GHz, DDR 400MHz 512Mb Через Apache: 1094.9 1093.4 1092.9 Из консоли: 997.5 994.5 993.8 Добавлено спустя 3 минуты 11 секунд: Re: Хочу подробнее исследовать зависимости в производительности Нагрузка ЦП 100%.
Re: Хочу подробнее исследовать зависимости в производительно Intel Xeon CPU E31275 3.40GHz, Память хз, eq.f: ~8889.6, eq.f: ~8770.9, eq.f: ~8860.5
Re: Хочу подробнее исследовать зависимости в производительно PHP 5.3.10; ubuntu 12.04 (kernel 3.2.0); Athlon II X2; DDR2 667 MHz; eq.f: ~2327.4
Re: Хочу подробнее исследовать зависимости в производительно PHP 5.3.3; RHEL5 (kernel 2.6.18); Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz; DDR3 1333 MHz; eq.f: ~689.3
Re: Хочу подробнее исследовать зависимости в производительно Тест на арифметическую операцию сложения в цикле. По коду: у нас есть тест, который состоит из 10 главных циклов с созднием переменной и присвоении ей нулевого значения, рабочего цикла на 100 000 итераций сложения и уничтожения переменной. Тест повторяется 50 раз для усреднения полученных значений. Итого у нас 50 * 10 * 100 000 = 50 000 000 итераций. Один тест (10 * 100 000 = 1 000 000) на ядре микроархитектуры "Yonah" поколения Intel Core Duo (2Мб L2 "smart-cache") выполняется в среднем за время равное 0.14146 сек, при тактовой частоте 1867 МГц. eq.f - это значение равное эквивалентной частоте ядра Yonah. Иначе говоря, это та частота, на которой должно работать ядро Yonah для того, чтобы выполнить тестирование с такой же производительностью как на исследуемом процессоре. Core i7-2600 - 4 физических ядра + 4 логических (HT), для диспетчера задач такой процессор представлен 8 логическими ядрами, соответственно полная загрузка одного ядра будет равна 100% / 8 =~ 12.5% (+ некоторые временные задержки, неизбежно возникающие при ряде операций). Аналогично, Phenom X3 8450 имеет 3 ядра, соответственно полная нагрузка одного из ядер будет выражена значением около 33% в контексте загрузки процессора в целом. Т.к. виртуальная среда исполнения PHP-кода однопоточная, а количество процессов виртуальных сред практически линейно масштабируется на все доступные вычислительные узлы, то достаточно проверять работу одного ядра, не нагружая все ядра (далеко не всегда доступна операция fork). Возможно, дело в настройках сервера и запросы выполняются не в различных процессах, а в тредах одного процесса. По идее три запущенных скрипта в трех процессах виртуальной среды исполнения загрузят цпу полностью, при должном планировании задач со стороны ОС.
Re: Хочу подробнее исследовать зависимости в производительно PHP 5.4.3; Fedora 17; AMD Athlon II X2 250; DDR2 667 MHz; eq.f: ~3187.8
Re: Хочу подробнее исследовать зависимости в производительно php 5.3.13; Core i5-2300 @ 3465 МГц; DDR3 (700МГц); eq.f: ~1218 Добавлено спустя 50 минут 5 секунд: Re: Хочу подробнее исследовать зависимости в производительности Скомпонуем результаты: PHP 5.3.6; Intel Core Duo T2350 @ 1867 МГц; DDR2 533; eq.f: ~1867 (опорное значение) PHP 5.3.3; Intel Core i7-2600 @ 3400 МГц; DDR3 1333; eq.f: ~3510.3 PHP 5.4.3; AMD Athlon II X2 250 @ 3000 МГц; DDR2 667; eq.f: ~3187.8 Пока не ясно, почему в большинстве случаев результат явно занижен: PHP 5.3.9; Intel Core i5-2500 @ 3300 МГц; DDR3 1333; eq.f: ~859.9 PHP 5.3.13; Intel Core i5-2300 @ 3465 МГц; DDR3 1400; eq.f: ~1218 PHP 5.3.3; Intel Core i5-760 @ 2800 МГц; DDR3 1333; eq.f: ~689.3 PHP 5.3.9; Phenom X3 8450 @ 2100 МГц; DDR2 667; eq.f: ~418.4 php 5.3.10; Pentium IV 2400 МГц, DDR 400; eq.f: ~1094.9 Intel Xeon E3-1275 3400 МГц; eq.f: ~8860.5 Странно, что у Xeon E3-1275 такой высокий результат эквивалентного значения частоты, т.к. ядро практически идентично i7-2600, а контроллер памяти отличается лишь поддержкой ECC Если я правильно понимаю внутреннее устройство CPU на уровне блоков, то исполняемый код создает в основном нагрузку на блок ALU и незначительную на FPU-блок процессора (за исключением исполнения операций над целыми числами в FPU блоке). Пока не могу понять, почему при идентичных ALU i5 и i7 с такими разными показателями и почему в большинстве случаев очевидно более производительные CPU оказываются медленнее на операции сложения, чем опорный T2350.
Re: Хочу подробнее исследовать зависимости в производительно используется строго одно ядро =) а почему - хз
Re: Хочу подробнее исследовать зависимости в производительно Виртуальная среда исполнения кода однопоточная (интерпретатор не умеет исполнять код в несколько потоков). Поэтому веб-серверы настраивают так, чтобы количество процессов было равным количеству ядер процессора. Тогда запросы будут раскидываться на N-ое количество worker'ов (на разные среды исполнения кода, если используется mod_php), которые параллельно будут отрабатывать скрипты. igordata, если есть возможность еще разок протестировать E3-1275 и уточнить версию PHP.
Re: Хочу подробнее исследовать зависимости в производительно поднял на виртуалке дома дебиан с nginx, получил 4700 будет в пн
Re: Хочу подробнее исследовать зависимости в производительно Угу. Судя по загрузке жрется одно ядро опять. Добавлено спустя 55 минут 56 секунд: Re: Хочу подробнее исследовать зависимости в производительности внезапно проверил xeon и получаем eq.f: ~8884
Re: Хочу подробнее исследовать зависимости в производительно Хм. странное поведение... Судя по тесту в арифметике (правильнее, наверное, сказать - в исполнении виртуальной средой арифметических инструкций исходного кода) Xeon в два раза опережает практически идентичный i7-2600. Тут где-то "собака зарыта", не иначе =)
Re: Хочу подробнее исследовать зависимости в производительно Умножить и поделить в цикле прогнал. На амд 70 секунд. На зеоне 4. Вот и... Ваще нипанятна.
Re: Хочу подробнее исследовать зависимости в производительно Я немного перепишу код, заодно проверим зависимости от I/O lags и производительность файловой подсистемы.