Pull to refresh

Есть ли польза от кастомных ядер

Reading time 4 min
Views 42K
Многие слышали о различных оптимизированных и улучшенных ядрах, это — Zen Kernel и pf-kernel из известных мне. Кроме того, что они добавляют новые возможности (TuxOnIce, поддержка aufs), они могут улучшить производительность, благодаря улучшенному менеджеру задач (BFS) и планировщику (BFQ). В этом топике я хочу сравнить производительность pf-kernel со стандартными ядрами в Ubuntu и Arch Linux, а также описать процесс сборки и установки pf-kernel для Ubuntu. Тестировать Zen Kernel я не вижу особого смысла, т.к. во-первых, проект выглядит заброшенным, а во-вторых, набор патчей и там и там очень похожий.

Тесты


Arch Linux

Начнем с теста Arch Linux на нетбуке.
Результаты теста UnixBench на стандартном ядре (3.0-ARCH):
Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 3432673.5 lps 10.0 s 7 116700.0 294.1
Double-Precision Whetstone 821.7 MWIPS 10.2 s 7 55.0 149.4
Execl Throughput 1048.3 lps 29.7 s 2 43.0 243.8
File Copy 1024 bufsize 2000 maxblocks 120834.3 KBps 30.0 s 2 3960.0 305.1
File Copy 256 bufsize 500 maxblocks 36417.8 KBps 30.0 s 2 1655.0 220.0
File Copy 4096 bufsize 8000 maxblocks 290993.0 KBps 30.0 s 2 5800.0 501.7
Pipe Throughput 240124.9 lps 10.0 s 7 12440.0 193.0
Pipe-based Context Switching 21672.7 lps 10.0 s 7 4000.0 54.2
Process Creation 2885.9 lps 30.0 s 2 126.0 229.0
Shell Scripts (1 concurrent) 738.5 lpm 60.0 s 2 42.4 174.2
Shell Scripts (8 concurrent) 135.6 lpm 60.4 s 2 6.0 226.1
System Call Overhead 600176.7 lps 10.0 s 7 15000.0 400.1
System Benchmarks Index Score: 221.1

А вот тот же тест на pf-kernel (3.0-pf):
Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 3700926.6 lps 10.0 s 7 116700.0 317.1
Double-Precision Whetstone 846.1 MWIPS 10.2 s 7 55.0 153.8
Execl Throughput 1343.2 lps 29.6 s 2 43.0 312.4
File Copy 1024 bufsize 2000 maxblocks 127468.0 KBps 30.0 s 2 3960.0 321.9
File Copy 256 bufsize 500 maxblocks 37622.9 KBps 30.0 s 2 1655.0 227.3
File Copy 4096 bufsize 8000 maxblocks 342606.2 KBps 30.0 s 2 5800.0 590.7
Pipe Throughput 296672.7 lps 10.0 s 7 12440.0 238.5
Pipe-based Context Switching 41227.5 lps 10.0 s 7 4000.0 103.1
Process Creation 3969.3 lps 30.0 s 2 126.0 315.0
Shell Scripts (1 concurrent) 861.1 lpm 60.1 s 2 42.4 203.1
Shell Scripts (8 concurrent) 159.4 lpm 60.2 s 2 6.0 265.6
System Call Overhead 642005.3 lps 10.0 s 7 15000.0 428.0
System Benchmarks Index Score: 264.6


Как видно, общий прирост производительности составил 20%.
Ubuntu

Теперь результаты этих же тестов, но у же для Ubuntu.
На стандартном ядре (2.6.38-11-generic):
Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 39162082.2 lps 10.0 s 7 116700.0 3355.8
Double-Precision Whetstone 9143.1 MWIPS 9.9 s 7 55.0 1662.4
Execl Throughput 11472.2 lps 29.8 s 2 43.0 2668.0
File Copy 1024 bufsize 2000 maxblocks 1041722.3 KBps 30.0 s 2 3960.0 2630.6
File Copy 256 bufsize 500 maxblocks 327345.4 KBps 30.0 s 2 1655.0 1977.9
File Copy 4096 bufsize 8000 maxblocks 1730411.9 KBps 30.0 s 2 5800.0 2983.5
Pipe Throughput 4204868.3 lps 10.0 s 7 12440.0 3380.1
Pipe-based Context Switching 738528.0 lps 10.0 s 7 4000.0 1846.3
Process Creation 32309.9 lps 30.0 s 2 126.0 2564.3
Shell Scripts (1 concurrent) 11023.5 lpm 60.0 s 2 42.4 2599.9
Shell Scripts (8 concurrent) 1425.4 lpm 60.0 s 2 6.0 2375.7
System Call Overhead 5723850.3 lps 10.0 s 7 15000.0 3815.9
System Benchmarks Index Score: 2580.4


На pf ядре (2.6.38-pf8):

Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 71269301.5 lps 10.0 s 7 116700.0 6107.1
Double-Precision Whetstone 9175.2 MWIPS 9.9 s 7 55.0 1668.2
Execl Throughput 12014.6 lps 30.0 s 2 43.0 2794.1
File Copy 1024 bufsize 2000 maxblocks 1580881.5 KBps 30.0 s 2 3960.0 3992.1
File Copy 256 bufsize 500 maxblocks 428842.2 KBps 30.0 s 2 1655.0 2591.2
File Copy 4096 bufsize 8000 maxblocks 2315055.5 KBps 30.0 s 2 5800.0 3991.5
Pipe Throughput 4389021.4 lps 10.0 s 7 12440.0 3528.2
Pipe-based Context Switching 831655.8 lps 10.0 s 7 4000.0 2079.1
Process Creation 34789.6 lps 30.0 s 2 126.0 2761.1
Shell Scripts (1 concurrent) 11890.9 lpm 60.0 s 2 42.4 2804.5
Shell Scripts (8 concurrent) 1506.4 lpm 60.0 s 2 6.0 2510.7
System Call Overhead 5815793.6 lps 10.0 s 7 15000.0 3877.2
System Benchmarks Index Score: 3050.7


Прирост составил 18%, что на мой взгляд довольно ощутимо. Почему второй тест выдал чуть меньший результат? Скорее всего, дело в том, что тест проводился на x86_64 и в стандартном ядре было больше оптимизаций под архитектуру процессора, чем при ядре собранном под Pentium Pro на Intel Atom (SSE и прочие).

Как из этого всего видно, смысл в сборке своего ядра есть. Результаты примерно одинаковые на двух довольно разных процессорах: Intel Atom N270 и Core 2 Duo E8500.

Описывать процесс установки ядра для ARCH я не буду, он максимально прост. Я уверен, что для его пользователей это не составит труда.

Сборка и установка pf-kernel для Ubuntu


Качаем ядро своей версии с kernel.org. Внимание: качать нужно версию без стабилизационных патчей (в случае с 2.6.38.11 качать нужно просто 2.6.38).
Качаем pf-kernel для этой версии ядра отсюда.
Распаковываем архивы и ставим патч.
patch -p1 < (адрес pfkernel патча)

Копируем свой конфиг в папку с ядром.
cp /boot/config-`uname -r` .config

При желании можно сделать localmodconfig, который отключит все лишние модули, это может сильно ускорить сборку ядра.

make localmodconfig
если будет ругаться на то что нет /sbin/lsmod
ln -s /bin/lsmod /sbin/lsmod

Настраиваем ядро
make menuconfig
Нужно включить BFS, BFQ и tuxonice при желании, а также во вкладке о процессоре стоит выбрать оптимизацию под свой процессор.

Ставим патч для ядер с kernel.org
sed -rie 's/echo "\+"/#echo "\+"/' scripts/setlocalversion

Очищаем директорию
make-kpkg clean

Собираем
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-pf kernel_image kernel_headers

Вот собственно и все. Ставим ядро командой dpkg -i *.deb, перезагружаемся и выбираем его в загрузчике.

UPDATE:
Zen Kernel показал практически идентичный результат, местами чуть лучше, но в общем не более чем на 5%, а затем скрашился даже не завершив все тесты (время теста около 40 минут).
Некто Mr.z очень сильно сомневался в правильности расчетов, тут в таблице видно прирост показателей по каждому тесту, а также средний прирост, а не только прирост индекса. Цифры вышли практически полностью одинаковыми.
Для IoGa,WiseLord и gnomeby — Сравнение ванильного ядра с ванильным собранным под свою архитектуру если и показало прирост производительности, то не больше уровня погрешности, разницы почти ни какой.
Tags:
Hubs:
+65
Comments 62
Comments Comments 62

Articles