О новом планировщике задач для 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:
Устанавливаем исходники:
С ядром пока закончили.
Теперь нужно установить патч BrainFuck Scheduler. Директория с патчем и прочими релевантными файлами находится тут: ck.kolivas.org/patches/bfs
Последняя актуальная версия патча на момент написания 2.0.9 — ck.kolivas.org/patches/bfs/2.6.30-sched-bfs-209.patch
Скачиваем и накладываем патч:
Патч два раза ругнется на «assume reverse patch» — нужно отвечать «нет», и на «Apply anyway?» — «yes».
Теперь собираем, как и всегда. Кто не знает, как собираем всегда, краткое введение — в Debian/Ubuntu для сборки ядра существует удобная утилита kernel-package, которая делает за нас тонну работы. Поэтому сначала её ставим, или убеждаемся, что она(и еще несколько необходимых программ) установлена:
Теперь генерируем новую конфигурацию ядра на основе существующей:
Тут нам нужно будет сделать парочку изменений.
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.
Выходим и сохраняем конфигурацию.
Далее, непосредственно сборка. Про 5 минут в заголовке я, конечно, наврал :), но если этапом сборки пренебречь(смиримся), а скорость скачивания вышеупоминавшихся пакетов пусть стремиться к бесконечности, то в 5 минут мы спокойно уложимся. :)
Если всё прошло удачно, то в /usr/src/ у вас будут лежать два .deb пакета, с заголовками файлов и непосредственно с ядром и модулями. Устанавливаем их:
При этом ядро и модули установятся в систему, сгенерируется новый initrd, пересоберутся зависимые внешние модули(кроме nvidia, но об этом ниже) и grub автоматически узнает про новое ядро.
Всё, можно перезагружаться.
Те драйвера, которые по умолчанию лежат в репозитории — не устанавливаются автоматически на новое ядро, а выдают ошибку. Это сбивает всю прелесть автоматических инсталляционных скриптов и у нас есть два выхода — либо скачать самый свежий инсталляционный бинарник с сайта Nvidia, либо использовать красивый метод с патчем для драйверов.
Итак, скачиваем патч для модуля nvidia:
Копируем его в /usr/src/nvidia-180.44/patches/
В файл /usr/src/nvidia-180.44/dkms.conf добавляем следующие строки:
Всё, можно пользоваться всеми прелестями dkms и быть уверенными, что на новом ядре заработают драйвера Nvidia.
UPD. Есть смысл глянуть вот эти комменты.
Теперь, что касается впечатлений. Система действительно стала субъективно отзывчивее, убрались малозаметные, но раздражающие паузы при различных действиях. Полноэкранное видео на youtube — подтверждаю :) — действительно не тормозит. Из пока замеченного — практически моментальным стал компизовский Ring Switcher для окон — ранее он оставлял ощущения тяжести и неповоротливости. Делать тесты, бенчмарки и замеры принципиально не буду — мне важнее субъективные ощущения от работы с машиной.
Однозначно пока остаюсь с этим ядром и этим планировщиком.
UPD. Патч версии 2.10 накладывается и на 2.6.31-rc9 (спасибо davnozdu)
В качестве тизера, скажу лишь, что полноэкранное видео на 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)