HHVM: тестирование производительности и совместимости с Joomla, Битрикс и Wordpress

    Про HHVM уже писали на Хабре. Вкратце: HHVM — это виртуальная машина от Facebook, которая за счет трансляции и JIT-компиляции кода позволяет ускорить PHP в несколько раз. Разработчики также обещают практически полную совместимость с PHP 5.4.

    Я решил сравнить HHVM с нативным интерпретатором на нескольких тестах, а также попробовать запустить на нем CMS.



    Условия тестирования


    Тестирование проводилось в виртуальной машине с конфигурацией процессор 2 ядра Core i5 @ 3,3 ГГц, 8 Гб ОЗУ.
    ОС: Ubuntu 12.04 x86_64.
    PHP: 5.3.10-1ubuntu3.7
    Nginx: 1.1.19
    Apache: 2.2.22
    HHVM: 2.1.0-dev
    В настройках были увеличены таймауты выполнения и memory_limit, включен APC. Никакого дополнительного тюнинга не производилось.

    HHVM установлена из исходников по инструкции.

    Бенчмарки


    Было подготовлено несколько скриптов, каждый из которых был запущен 50 раз: по 10 раз в PHP CLI, HHVM CLI, Apache+mod_php, nginx+php-fpm, и nginx+HHVM. Средняя продолжительность выполнения в секундах представлена в таблице. В последних двух столбцах обозначен выигрыш в скорости выполнения при использовании HHVM.

      CLI HTTP Прирост скорости по сравнению
    Тест PHP HHVM Apache+mod_php Nginx+php_fpm Nginx+HHVM PHP CLI PHP-FPM
    asort 42,4 17,9 N/A1 40,9 18,9 137,0% 116,7%
    bcmath_factorial 3,4 3,0 3,4 3,4 2,8 13,9% 21,5%
    curl_multi 8,6 8,4 9,7 9,0 9,7 2,3% -7,0%
    domdocument 50,2 51,0 54,3 50,1 50,1 -1,5% 0,0%
    for 60,5 36,9 60,8 61,0 211,2 63,7% -71,1%
    geoip 14,4 15,6 14,7 14,9 5,0 -7,8% 198,0%
    getid3 46,5 26,9 46,2 45,6 8,5 72,4% 435,5%
    mb_strings 22,8 16,8 7,0 22,2 17,0 35,8% 31,0%
    md5 36,8 35,7 37,0 37,2 27,2 3,2% 36,7%
    preg 11,6 10,9 11,6 11,7 10,9 6,1% 7,9%
    prime 4,2 5,6 4,2 4,3 2,5 -24,1% 71,8%
    sort 46,3 17,8 N/A1 44,1 17,5 160,1% 151,8%
    sqlite 12,4 10,0 12,6 12,2 15,2 23,7% -19,9%
    strings 38,6 37,5 37,8 38,2 36,0 3,0% 6,3%
    tcp_client 15,4 13,2 15,5 17,3 13,6 16,9% 27,7%
    tcpdf 3,3 2,4 3,4 4,4 1,4 38,7% 215,1%
    thumbnail 100,8 94,8 93,7 99,9 94,2 6,3% 6,1%


    1 — Apache не смог выполнить asort.php и sort.php — падал с out of memory

    asort — сортировка ассоциативного массива строк с 10 млн. элементов
    bcmath_factorial — вычисление факториала числа 1000 функцией bcmul
    curl_multi — скачивание 100 файлов по 1 Мб в 10 потоков из Интернет
    domdocument — разбор большого XML (122 тыс. тегов) — для примера взял sitemap ag.ru
    for — 3 вложенных for по 1000 итераций (всего 1 млрд.)
    geoip — 100 тыс. поисков IP по базе GeoIP
    getid3 — получение ID3 тегов из MP3 с помощью библиотеки getID3() — 10 тыс. раз
    mb_strings — использование mb_strlen, mb_ereg_replace, mb_substr, mb_strpos, mb_strtolower 1000 раз на первом томе «Войны и мира»
    md5 — генерация md5 от чисел от 1 до 100 млн
    preg — поиск preg_match_all hex-кодов цветов, тегов и URL на HTML-странице — 1000 раз (для примера взята главная Хабра)
    prime — получение всех простых чисел от 2 до 1 млн. перебором «в лоб»
    sort — сортировка массива строк 10 млн. элементов с числовыми индексами
    sqlite — 10 тыс. запросов SELECT к БД sqlite3
    strings — использование strlen, str_replace, substr, strpos, strtolower 10 тыс. раз на первом томе «Войны и мира»
    tcp_client — 10 тыс. конектов к localhost и чтение 2 Мб по TCP (CHARGEN)
    tcpdf — генерация многостраничной PDF библиотекой TCPDF — 10 раз (взят пример example_061.php)
    thumbnail — 10 тыс. созданий thumbnail изображения с помощью GD imagecopyresized()

    Также я хотел прогнать тест со Smarty, но HHVM не смог его исполнить.

    Интерпретация результатов


    Конечно, бенчмарки не могут полностью показать ситуацию с производительностью. Но все-таки кое-какие выводы можно сделать.

    1. Время выполнения каждого прогона теста от среднего отличалось ненамного — значит результат можно считать стабильным.
    2. Аномальных результата два: слишком быстрое выполнение теста mb_string на Apache+mod_php и слишком медленное выполнение for на nginx+HHVM. Тесты я перепроверил, но не знаю, в чем дело.
    3. Что в CLI-версии, что при использовании для веб HHVM дает преимущество в половине тестов.
    4. В некоторых случаях использование HHVM как бекенда nginx (т.е. не как CLI) дает еще больший прирост — видимо, за счет активации JIT. Обратите внимание насколько быстрее работают сложные библиотеки getid3 и TCPDF.


    Тестирование CMS



    Wordpress


    То, что Wordpress запускается на HHVM было известно заранее. Нужна лишь небольшая корректировка в одном файле.

    Простой тест: загрузка главной страницы 100 раз в один поток.
    nginx+HHVM: 4.498 с
    Apache+mod_php: 9.997 c
    Apache+mod_php+APC: 6.567 c
    nginx+php-fpm+APC: 5.460 с

    Обращаю ваше внимание, что это был тест именно времени отклика страницы, а не нагрузочное тестирование в несколько потоков.

    Битрикс и Joomla


    Битрикс и Joomla на HHVM запускаться отказались, выдав фатальную ошибку. Я подозреваю, что Битрикс надежды запустить вообще нет, т.к. там используются deprecated функции и mbstring.func_overload.

    Обзор Интернета показал, что пока именно Worpress проще всего запустить под HHVM. С другими CMS и фреймворками все не так радужно, например в недавнем топике на Хабре Symfony2 не взлетела.

    Возможно, тем, кому производительность ну очень важна, стоит сразу писать фреймворк под HHVM?

    Выводы


    1) HHVM дает хороший прирост производительности на некоторых задачах — возможно использовать его для запуска процессов фоновой обработки чего-либо. Помните, что HHVM не эффективен при использовании глобальным переменных.

    2) В настоящий момент использование существующих библиотек, фреймворков и CMS с HHVM затруднено. HHVM заточена под производительность и может не поддерживать различные красивые конструкции. Однако в будущем ситуация будет улучшаться, т.к. и HHVM, возможно, начнет поддерживать лучше язык и разработчики могут озадачиться адаптацией своего кода под HHVM.

    3) На Wordpress HHVM показала впечатляющий рост производительности — в 2 раза по сравнению с mod_php.

    P.S. тестовые скрипты, сырые данные (Excel)
    Поделиться публикацией

    Комментарии 12

      +1
      Интересно а как дела обстоят с ZF 1.x?
        0
        Проводил тестирование версии 1.11 выдал критическую ошибку.
        Сейчас использую hhvm в коммерческом проекте для обработки данных полученных с бд. Прирост сравнительно с php fpm в 1/3 было 0.9 сек сейчас 0.500 в среднем. Как по мне то очень хороший результат учитывая что никаких дополнительных действий по оптимизации кода не проводилось.
        0
        Использовать столь мощную технологию для одного сайта на одном сервере почти бессмысленно. Гораздо больше пользы для ваших рукописей может принести HPHPa обертка для статического анализа PHP кода на основе HHVM.
          0
          Под Друпал никто не пробовал?
            0
            Вот тут написано "Currently a few applications are fully supported like wordpress and drupal". Но инструкций не встречал.
              0
              Вот только сегодня наткнулся на ссылку: php.webtutor.pl/en/2011/05/17/drupal-hiphop-for-php-vs-apc-benchmark/ но она стара как мир: май 2011 года. Там тесты проводились на Drupal 7.0, и для совместимости нужно было накатывать патч.

              Более новых публикаций пока не встречал, если у кого есть — поделитесь.
            0
            А кто-нибудь пробовал Yii 1.x?
              +1
              Пробовал, вроде бы даже работало. Но были проблемы с мемкешем, писало ошибку, что не поддерживает сериализованные значения.
                0
                +2
                Если кто-то хочет протестировать любимый фреймворк — пишите в личку, я дам ssh рута от виртуалки.
                  +1
                  Протестировал Bitrix HHVM+Apache2.4 и nginx+hhvm

                  HHVM+Apache: время создания страницы: 1.7735 сек.
                  mod_php+apache: время создания страницы: 1.125 сек.
                  nginx+HHVM: время создания страницы: 1.0243 сек.
                    0
                    Спасибо, интересно. Год назад Битрикс просто не запускался на HHVM. Видимо, поправили ядро.

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

                  Самое читаемое