Configuring Linux
September 2009 7

Brain Fuck Scheduler — ставим за 5 минут

О новом планировщике задач для Linux на Хабре уже написали вот тут. Весьма эпатажный «трейлер» с xkcd к новому планировщику, и не менее веселый FAQ, пробудили интерес. Расспросил знакомых, кто ставил, чтобы поделились впечатлениями — никто не ставил, ибо «влом ядро новое ставить» или «я подожду, пока оно в мейнстриме появится». Поставил и попробовал сам, и для тех кто хочет сделать то же самое — краткое руководство для Ubuntu 9.04, с описанием потенциальных граблей.

В качестве тизера, скажу лишь, что полноэкранное видео на youtube действительно не тормозит и система стала отзывчивее и шустрее.

Итак, дабы не быть голословным, приступим. Предполагается, что у вас установлена Ubuntu 9.04 (Jaunty).

Ядро


Данный планировщик написан для ядер 2.6.30+, поэтому дефолтное в Jaunty ядро 2.6.28 нам не подходит. Нужно скачать 2.6.30, а лучше последнее на данный момент из ветки — 2.6.30.5.

Скачиваем исходники, заботливо упакованные в .deb разработчиками Ubuntu:
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.30.5/linux-source-2.6.30_2.6.30-02063005_all.deb

Устанавливаем исходники:
sudo dpkg -i linux-source-2.6.30_2.6.30-02063005_all.deb
cd /usr/src
sudo tar xvjf linux-source-2.6.30.tar.bz2


С ядром пока закончили.

Патч BFS


Теперь нужно установить патч BrainFuck Scheduler. Директория с патчем и прочими релевантными файлами находится тут: ck.kolivas.org/patches/bfs
Последняя актуальная версия патча на момент написания 2.0.9 — ck.kolivas.org/patches/bfs/2.6.30-sched-bfs-209.patch

Скачиваем и накладываем патч:
cd /usr/src/linux-source-2.6.30/
sudo wget http://ck.kolivas.org/patches/bfs/2.6.30-sched-bfs-209.patch
sudo patch -p1 < 2.6.30-sched-bfs-209.patch

Патч два раза ругнется на «assume reverse patch» — нужно отвечать «нет», и на «Apply anyway?» — «yes».

Сборка пропатченного ядра


Теперь собираем, как и всегда. Кто не знает, как собираем всегда, краткое введение — в Debian/Ubuntu для сборки ядра существует удобная утилита kernel-package, которая делает за нас тонну работы. Поэтому сначала её ставим, или убеждаемся, что она(и еще несколько необходимых программ) установлена:
sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Теперь генерируем новую конфигурацию ядра на основе существующей:
sudo cp /boot/config-`uname -r` ./.config
sudo make menuconfig

Тут нам нужно будет сделать парочку изменений.

UPD. Поправочка от coldFlame — эти изменения не обязательны, более того, на ноутбуках не рекомендуются. Из FAQ
THESE ARE OPTIONAL FOR LOWEST LATENCY. YOU DO NOT NEED THESE!
Configure your kernel with 1000Hz, preempt ON and disable dynamic ticks.


  • Processor type and features -> Timer frequency устанавливаем в 1000Hz
  • Processor type and features -> Tickless System (Dynamic Ticks) отключаем
  • Processor type and features -> Preemption Model -> Preemptible kernel (Low latency desktop)

Выходим и сохраняем конфигурацию.

Далее, непосредственно сборка. Про 5 минут в заголовке я, конечно, наврал :), но если этапом сборки пренебречь(смиримся), а скорость скачивания вышеупоминавшихся пакетов пусть стремиться к бесконечности, то в 5 минут мы спокойно уложимся. :)
sudo make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-bfuck kernel_image kernel_headers


Если всё прошло удачно, то в /usr/src/ у вас будут лежать два .deb пакета, с заголовками файлов и непосредственно с ядром и модулями. Устанавливаем их:
sudo dpkg -i /usr/src/*bfuck*.deb

При этом ядро и модули установятся в систему, сгенерируется новый initrd, пересоберутся зависимые внешние модули(кроме nvidia, но об этом ниже) и grub автоматически узнает про новое ядро.

Всё, можно перезагружаться.

Драйвера NVidia


Те драйвера, которые по умолчанию лежат в репозитории — не устанавливаются автоматически на новое ядро, а выдают ошибку. Это сбивает всю прелесть автоматических инсталляционных скриптов и у нас есть два выхода — либо скачать самый свежий инсталляционный бинарник с сайта Nvidia, либо использовать красивый метод с патчем для драйверов.

Итак, скачиваем патч для модуля nvidia:
wget http://lionsimba.lerlan.ru/temp/proc-dir-entry-owner.patch

Копируем его в /usr/src/nvidia-180.44/patches/
sudo cp proc-dir-entry-owner.patch /usr/src/nvidia-180.44/patches/

В файл /usr/src/nvidia-180.44/dkms.conf добавляем следующие строки:
PATCH[1]="proc-dir-entry-owner.patch"
PATCH_MATCH[1]="^2.6.30"


Всё, можно пользоваться всеми прелестями dkms и быть уверенными, что на новом ядре заработают драйвера Nvidia.
UPD. Есть смысл глянуть вот эти комменты.

Заключение


Теперь, что касается впечатлений. Система действительно стала субъективно отзывчивее, убрались малозаметные, но раздражающие паузы при различных действиях. Полноэкранное видео на youtube — подтверждаю :) — действительно не тормозит. Из пока замеченного — практически моментальным стал компизовский Ring Switcher для окон — ранее он оставлял ощущения тяжести и неповоротливости. Делать тесты, бенчмарки и замеры принципиально не буду — мне важнее субъективные ощущения от работы с машиной.

Однозначно пока остаюсь с этим ядром и этим планировщиком.

UPD. Патч версии 2.10 накладывается и на 2.6.31-rc9 (спасибо davnozdu)
+52
9.7k 85
Comments 120
Top of the day