Zen Kernel — зачем ползать если можно летать?
Уже около месяца в моем Arch Linux крутится zen kernel. Довольно неплохо обработанное напильником, с кучей пачтей и дополнительных фич не входящих в ванильное ядро. Сегодня я расскажу что же оно есть такое и чуток углублюсь в дебри 🙂
Ядро Zen
Zen представляет собой вариант ядра Linux, который предназначен для настольных компьютеров. Это «исправленный» Linux для настольных/не-серверных систем, использует комбинацию нескольких проектов, обновляет код через git-репозиторий, а так же имеет несколько специфичных для Zen вещей стремящихся удовлетворить большинство потребностей пользователей реализовав их в одном ядре. Некоторые примеры слияния кодов это drm-next, wireless-testing, выбор планировщиков CPU (CFS/BFS), BFQ планировщик ввода-вывода, aufs, unionfs, reiser4, tuxonice, PHC, и многие другие замечательные вещи которые замечательно подойдут для улучшения настроек настольных или ноутбук систем или просто код улучшающий производительность настольных систем. Однако объединенный код может изменится в любой момент. Так же, «передовые технологии» такие как drm-next, wireless-testing, linux-2.6.git, или что-то другое по сути дела являющееся «передовыми разработками» слиты с кодом только в нестабильной ветке (zen.git).
Основной целью является удовлетворение запросов людей в различных областях, запускающих ядро Linux на непроизводственных машинах . Эти области включают в себя производительность, драйверы/новейшие драйверы, и новые «фичи» (новые возможности могут включать в себя все — от файловых систем до tuxonice). Вторая цель — предоставление тестового полигона для новинок включаемых, но не принятых в основное ядро Linux. Это обеспечивает разработчиков такого кода большой базой тестеров которые особенно ценны, когда необходимо поправить несколько ошибок в скрипте, или найти проблемы при работе на различном оборудовании.
Что включено в Zen-ядро?
Код включаемый в zen ядро может быть разным в разное время. Несколько примеров проектов которые были последовательно объединены с zen: bfs/zen-sched, bfq i/o планировщик, aufs, reiser4, tuxonice, smapi, linux PHC, mactel, gc-linux, fbcondecor, cko, и другие. Это не точный список того что указано на сайте, и он может изменяться от релиза к релизу.
Если вам интересно знать что включается в zen ядро в любой момент времени, посетите gitweb и прочитайте, или поищите в логах git. Интерфейс gitweb отображает все вносимые правки с пояснениями к ним, а так же все ветки которые существуют в дереве. Эта информация отображается для текущей ‘master’ ветки дерева и для любой существующей метки (вы так же можете вернуться назад и посмотреть старые релизы).
Как альтернатива этому — это подробная документация включающая даже документацию к проектам включенным в Zen ядро, она может быть найдена на странице Документации.
Отличие между zen.git и zen-stable.git
Zen-Stable.git
- Создается на основе последнего стабильного ядра: нет RC ядер (2.6.X.Y)
- Не имеет репозитория новинок для будущего слияния с основным кодом (нет drm-next, sound-2.6.git, wireless-testing, или любых других «тестовых» деревьев)
- Не включает код «просто посмотрите работает ли это»
- Имеет только stable + stable zen метки (нет -rc меток)
Zen.git
- Берется из linux-2.6.git: -rc/git ядра (2.6.X-rcY)
- Имеет git-репозиторий нововведений (drm-next, sound-2.6.git, wireless-testing)
- Новые проекты которые хотят протестить включаются сюда, смотрят как они работают в Zen.git, если все нормально и стабильно то можгут быть включены в zen-stable.git.
- Только unstable + unstable zen метки (только -rc метки)
Вам не требуется клонировать оба zen-stable.git и zen.git если вам хочется использовать оба дерева одновременно! Прочитайте «Как переключаться между zen-stable и zen в одном древе»
Так вы сможете получить все метки (не только -rc или stable метки), и получить оба древа в одном.
Источник
Есть ли польза от кастомных ядер
Тесты
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 я не буду, он максимально прост. Я уверен, что для его пользователей это не составит труда.
Источник
Zen kernel ArchLinux (manjaro linux)
что то я видимо совсем глупый, не могу сам разобраться. напишите кто нибудь инструкцию, как поставить ядро зен или аналогичное с планировщиками bfs/bfq. Я в дебиане пытался пропатчить ядро сам, но как то не хватило мозгов(((( а тут вообще незнакомая система
И будет ли что то с дистрибутивом manjaro (что то полетит), если я пропатчу в нем ядрышко? Спасибо заранее за ответы на мои нуботемы)
в репах есть
читай вики
только смысла особого нет в ядрах этих
у тебя ssd? используй noop и не страдай херней.
На HDD ещё есть ощущение, но с SSD вообще ничего не даёт. А вот с noop плохо кидается на всякие флэшки и прочее. Нет пути.
Слушай, вот у меня на старом hdd и оч старом ноуте (2003) ощущение не просто есть, а я радуюсь и улыбаюсь даже. Скорость с 1-3 мб/с и открытия файликов и папочек, которое занимает 20-30 сек поднялось до 10-15 и открытию за 3-5сек. Я конечно понимаю что это бомжопроблемымы, но иногда нужно этот комп брать, так как негде больше протестить определённое по.
Я не уверен, но вроде в Manjaro BFQ по умолчанию.
Если нет — смотри в сторону pf-kernel.
Ещё советую отключить эффекты в XFWM, или заменить его на что-то легковесное (dwm, Xmonad)
себе пожалуй тоже поставлю.
Так ничего же сложного. Устанавливаешь linux-zen и добавляешь в /boot/grub/grub.cfg (или как там у тебя?) ещё один пункт меню, который будет загружать zen-ядро. Он будет очень похож на твой текущий вариант, кроме строчки с linux /boot/vmlinuz-linux , в которую, само собой, надо дописать что-то типа ‘-zen’: linux /boot/vmlinuz-linux-zen . Посмотри на список файлов в /boot/ после установки linux-zen.
Вот это и не могу, я не панимай как ставят ядра(((. В манах как будто не могу разобраться
Что ты не можешь? Установить пакет linux-zen? — sudo pacman -S linux-zen Или поправить конфиг граба? Скопипасть дефолтный mnuentry, с какого загружаешься и допиши ‘-zen’ к ядру. Или выложи grub.conf и список файлов из /boot/ на http://pastebin.com я тебе сделаю.
Он ставится через пакман?! Я просто только на деб дистрах сидел, но там домашка сложно было делать. А может я просто губас)
Ну у тебя же Арч. Если тебя интересует как ядро было собрано, то можешь пройти по этой ссылке. В Манджаре может по-другому собирают. А может и нет.
Ну, результат зависит от двоих действий. Если ты накосячишь с патчами, то будут проблемы — да.
Источник