За последние 24 часа нас посетили 26872 программиста и 1507 роботов. Сейчас ищут 932 программиста ...

Хочу подробнее исследовать зависимости в производительности

Тема в разделе "Прочие вопросы по PHP", создана пользователем XCoder, 20 июн 2012.

  1. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Я хочу подробнее исследовать зависимости в производительности PHP (ZendEngine) от аппаратной части (CPU<->RAM), т.к. я заметил, что особенности той или иной микроархитектуры процессора практически не влияют на произоводительность, при том, что зависимость времени исполнения части скриптов с нагрузкой на CPU-RAM (исключая блокировки I/O) остается практически линейной от частоты.

    Абсолютно резонный вопрос: если зависимость почти линейна от верхней тактовой частоты, а процессы виртуальной среды исполнения кода можно легко распараллелить, то насколько эффективно применение в PHP-проектах аппаратных конфигураций на базе 4х ядерных CPU против альтернативных 6-8-12-16 поточных решений. Особенно интересуют в данном контексте решения на базе т.н. модулей (архитектуры Bulldozer), т.к. в них продублированы целочисленные планировщики и исполнительные конвейеры.

    Я предлагаю тем, кого заинтересовала данная тема, принять участие и помочь в сборе сведений, проведя ряд экспериментов. Остальных же прошу не флудить из взаимного уважения к участникам.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    ты скажи че сделать, чтобы потестить, а мы потестим. А ты сделаешь выводы.
    Надо какой-то одинаковый бенчмарк всем раздать и посмотреть, что получится.
     
  3. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Попробуем проверить для начала простейший арифметический пример (я попробую систематизировать сведения по разным тестам):
    Код (PHP):
    1.     $max_i  = 100000;
    2.     $c      = 10;
    3.     $_g     = 50;
    4.     $eq_f   = 1867;
    5.     $eq_t   = (float)0.14146;
    6.     $_f     = array();
    7.     $f      = 0;
    8.     for ($g = 0; $g < $_g; $g++) {
    9.         $t = microtime(true);
    10.         $_t = 0;
    11.         for ($i_ = 0; $i_ < $c; $i_++) {
    12.             $_ = 0;
    13.             for ($ii_ = 0; $ii_ < $max_i; $ii_++) {
    14.                 $_ = $_ + 2;
    15.             }
    16.             unset($_);
    17.         }
    18.         $_t = microtime(true) - $t;
    19.         $_f[] = ($eq_t * $eq_f) / $_t;
    20.     }
    21.     $_c = count($_f);
    22.     for ($i = 0; $i < $_c; $i++) {
    23.         $f += $_f[$i];
    24.     }
    25.     $f = round(($f/$_c),1);
    26.     echo 'eq.f: ~'.$f.'<br/>';
    27.  
    Необходимо указать модель процессора, тип оперативной памяти (DDR3 1066/1333/1866/...) и результат "eq.f: ~", например, так:

    Intel Core i5-2300, DDR3 1333, eq.f: ~ [какое-то значение]
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    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
     
  5. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Re: Хочу подробнее исследовать зависимости в производительно

    win7 x64, i7-2600, DDR3 1333, PHP/5.3.3
    eq.f: ~3510.3, eq.f: ~3465.2, eq.f: ~3486.2
    загрузка ЦП ~12%
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    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%. Даже если запустить одновременно несколько скриптов.
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    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%.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    А что это за цифры?
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Re: Хочу подробнее исследовать зависимости в производительно

    Это то самое eq.f:~
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    и шо ета за цифирь?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    Intel Xeon CPU E31275 3.40GHz, Память хз, eq.f: ~8889.6, eq.f: ~8770.9, eq.f: ~8860.5
     
  12. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Re: Хочу подробнее исследовать зависимости в производительно

    PHP 5.3.10; ubuntu 12.04 (kernel 3.2.0); Athlon II X2; DDR2 667 MHz;
    eq.f: ~2327.4
     
  13. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    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
     
  14. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    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).

    Возможно, дело в настройках сервера и запросы выполняются не в различных процессах, а в тредах одного процесса. По идее три запущенных скрипта в трех процессах виртуальной среды исполнения загрузят цпу полностью, при должном планировании задач со стороны ОС.
     
  15. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Re: Хочу подробнее исследовать зависимости в производительно

    PHP 5.4.3; Fedora 17; AMD Athlon II X2 250; DDR2 667 MHz; eq.f: ~3187.8
     
  16. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    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.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    используется строго одно ядро =) а почему - хз
     
  18. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Re: Хочу подробнее исследовать зависимости в производительно

    Виртуальная среда исполнения кода однопоточная (интерпретатор не умеет исполнять код в несколько потоков). Поэтому веб-серверы настраивают так, чтобы количество процессов было равным количеству ядер процессора. Тогда запросы будут раскидываться на N-ое количество worker'ов (на разные среды исполнения кода, если используется mod_php), которые параллельно будут отрабатывать скрипты.

    igordata, если есть возможность еще разок протестировать E3-1275 и уточнить версию PHP.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    поднял на виртуалке дома дебиан с nginx, получил 4700

    будет в пн
     
  20. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Re: Хочу подробнее исследовать зависимости в производительно

    На i5-2500?
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    Угу. Судя по загрузке жрется одно ядро опять.

    Добавлено спустя 55 минут 56 секунд:
    Re: Хочу подробнее исследовать зависимости в производительности
    внезапно проверил xeon и получаем eq.f: ~8884
     
  22. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Re: Хочу подробнее исследовать зависимости в производительно

    Хм. странное поведение... Судя по тесту в арифметике (правильнее, наверное, сказать - в исполнении виртуальной средой арифметических инструкций исходного кода) Xeon в два раза опережает практически идентичный i7-2600. Тут где-то "собака зарыта", не иначе =)
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Хочу подробнее исследовать зависимости в производительно

    Умножить и поделить в цикле прогнал. На амд 70 секунд. На зеоне 4. Вот и... Ваще нипанятна.
     
  24. XCoder

    XCoder Активный пользователь

    С нами с:
    28 ноя 2011
    Сообщения:
    48
    Симпатии:
    0
    Re: Хочу подробнее исследовать зависимости в производительно

    Я немного перепишу код, заодно проверим зависимости от I/O lags и производительность файловой подсистемы.