Влияние многоядерности и Hyper-Threading на производительность в Linux (Sabayon / Gentoo)

29 августа 2009, суббота 16:32
для раздела Блоги
Введение

Предметом настоящей заметки будет исследование влияния наличия многоядерности и включения технологии Hyper-Threading на производительность двух трудоемких задач: архивирование и инсталляции пакетов в Linux дистрибутиве Sabayon.

Sabayon является основанном на Gentoo дистрибутивом, особенностью которого является наличие как своего собственного бинарного менеджера пакетов, так и стандартного для Gentoo - Portage. Основной режим работы Portage - сборка пакетов из исходных кодов (как правило исходники на языках С и С++), при этом сборка может занимать весьма много времени. Главным преимуществом сборки из исходников, является возможность тонкой настройки нужной функциональности программ (используя USE флаги) и возможность воспользоваться всеми оптимизациями которые может дать компилятор для установленного у пользователя процессора (все расширения SSE и учет особенностей архитектуры ЦП).

Тестовая платформа

Железо:
Core i7 920 @ 3000 (150 x 20, Turbo Boost On)
GigaByte GA-EX58-UD5
DDR3 1200 7-7-7-16 1, 12Гб

Софт:
ОС: Sabayon 4.2, 64 бит, ядро 2.6.29
gcc 4.3.3

Архивирование

Для тестирования производилось архивирование рабочих проектов в домашней директории в которой содержались текстовые и бинарные файлы суммарным объемом 200Мб. Данным тестом моделируется оперативный бэкап.
Использовалась две программы компрессора: bzip2 и pbzip2.
bzip2 - стандартная утилита для сжатия данных, очень популярная в мире Unix (наряду с gzip). Работает она в один поток.
pbzip2 параллельная реализация того же алгоритма, предназначенная для SMP машин, использует в работе библиотеку libbz2 (т.е. часть bzip2). Результирующий файл полностью совместим с форматом bzip2.

bzip2 и pbzip2 были обновлены до версии 1.0.5, скомпилированы одним и тем же компилятором.

Команды для запуска задач:

bzip2
time tar --use-compress-program bzip2 -cpvf /media/backup/backup.bz2 /home/user/dev 


pbzip2
time tar --use-compress-program pbzip2 -cpvf /media/backup/backup.bz2 /home/user/dev


Производилось по 3 запуска каждой команды. С целью исключения влияния на замеры производительности жесткого диска первый запуск не учитывался. Затраченное время на втором и третьем усреднялось и использовалось как результат.
Отключение HT производилось в BIOS.


pbzip2

В первую очередь отмечу, громадное превосходство параллельной версии pbzip2. pbzip2 с HT-on быстрее стандартного однопоточного bzip2 почти в 6 раз. А включение HT дало компрессору pbzip2 увеличение производительности на 23%.

Инсталляция пакетов

В качестве теста была использована инсталляция XULRunner (библиотека используемая в Mozilla Firefox) и Qt-Webkit (наиболее объемная часть библиотеки Qt) с помощью системы Portage. Так как используется Portage, то все выводы полученные в ходе исследования будут верны и для Gentoo. Обе библиотеки написаны на C и C++. Процесс инсталляции запускается утилитой emerge, при этом начинает отрабатывать Python скрипт, который: при необходимости скачивающий упакованный пакет, затем его распаковывает, настраивает с помощью autoconf, собирает, инсталлирует и в конце проверяет зависимости. Процесс сборки наиболее трудоемкий, но к счастью есть возможность его распараллелить.
Файл /etc/make.conf был изменен при тестировании с HT: MAKEOPTS="-s -j8", без HT: MAKEOPTS="-s -j4", и сборка в один поток MAKEOPTS="-s -j1". Параметр jчисло служит для утилиты make указанием на сколько потоков можно распараллелить процесс сборки (чисто после j задает количество потоков) .

Команды для запуска задач:

Qt-Webkit
time emerge qt-webkit


XULRunner
time emerge xulrunner


Пакеты были предварительно скачены (emerge -f). Затем было произведено по 3 запуска, первый запуск не учитывался (для минимизации влияния жесткого диска), а два следующих усреднялись.


emerge qt-webkit

Тут также бросается в глаза огромный выигрыш во времени от использования многопоточной сборки. Инсталляция qt-webkit с параметром -j1 (т.е. сборка в один поток) заняла 22 мин 26 сек. Инсталляция с HT-on и -j8 заняла 5 мин 40 сек, разница по времени почти в 4 раза. HT сам по себе дает 19% выигрыша. Загрузка процессора в момент этапа сборки была практически все время на 100%. В данном пакете доминируют сложные для компилятора С++ файлы.


emerge xulrunner

Для экономии времени, я тут уже не стал осуществлять сборку в один поток.
HT дал уже поменьше - 13% выигрыша. Надо отметить, что в процессе сборки процессор не был полностью загружен, по всей видимости исходные файлы недостаточно сложные для компилятора. Возможно увеличив число потов в параметре -j можно добиться большего выигрыша от HT, но, рядовой пользователь навряд ли будет подбирать этот параметр под каждый пакет. Так же многое еще зависит от содержимого make файла.

Итоги

Как видим наличие в процессоре нескольких ядер и технология Hyper-Threading дает достаточно существенное увеличение производительности в типичных тяжелых задачах в gentoo-основанных дистрибутивах Linux. Также многоядерность и HT способны существенно повысить комфортность в работе программистов, процесс сборки как видим отлично масштабируется. Стоит обратить внимание, что при emerge достаточно долго отрабатывает autoconf, который работает в один поток, и к тому же не очень то быстро, поэтому хорошее масштабирование процесса сборки несколько скрадывается.
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают