Есть такой интересный проект кастомного ядра pf-kernel, который обещает много плюшек и повышение производительности на 15-20%. Попробуем его применить к Ubuntu 14.04 на последнем ядре 4.0
Устанавливаем зависимости и тулзы
sudo apt-get update && sudo apt-get -y upgrade sudo apt-get -y install fakeroot build-essential atool crash kexec-tools makedumpfile libncurses5 libncurses5-dev libelf-dev libdw-dev binutils-dev kernel-package libc6-dev sudo apt-get -y build-dep kernel-package linux-meta
При установке kexec-tools установщик задаст вопрос - использовать ли kexec при перезагрузке? Я ответил Y. kexec-tools дает возможность быстрой перезагрузки путем обновления ядра в памяти, минуя фазу с участием BIOS. Чтобы отключить kexec необходимо в файле конфигурации /etc/default/kexec установить LOAD_KEXEC=false.
Получаем исходники ядра и соответствующий патч
Создаем папку где будем собирать и скачиваем ядро и патч:
mkdir pf-kernel cd pf-kernel wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.1.tar.xz wget https://pf.natalenko.name/sources/4.0/patch-4.0-pf3.xz
Распаковываем:
tar -xvf ./linux-4.0.1.tar.xz aunpack patch-4.0-pf3.xz
Применяем патч
Переходим в папку я ядром и проверяем как применяется патч:
cd ./linux-4.0.1/ patch -p1 --dry-run < ../patch-4.0-pf3
У меня проблемы возникли только с Makefile. Я их исправлял вручную после патча:
patch -p1 < ../patch-4.0-pf3
У меня была ошибочка:
patching file Makefile Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej
Оказалось что не пропатчились строки EXTRAVERSION = и NAME =. Поэтому я полез в Makefile вручную и прописал:
EXTRAVERSION = -pf3
А NAME оставил как есть.
Конфигурируем новое ядро
Копируем текущий конфиг ядра:
cp /boot/config-`uname -r` .config
Чтобы собрать без поддержки лишних модулей:
make localmodconfig
Эта команда сравнивает модули, поддерживаемые в текущем ядре и отключает лишние в новом,а настройки сохраняет в файлик .config. Конфигурационный скрипт задаст вопросы о включении-отключении модулей. Конечно, нужно включить BFQ, BFC и TuxOnIce для того, чтобы увидеть эффект от нового ядра.
Кроме того, можно собрать ядро используя старый конфиг:
make oldconfig
А также полностью сконфигурировать заново:
make menuconfig
Собираем pf-kernel
После конфигурации почистим сборочное пространство:
make-kpkg clean
Запустим процесс сборки (обязательно с правами root):
sudo CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd kernel_image kernel_headers
В результате должны получиться два пакета:
linux-headers-4.0.1-pf3_4.0.1-pf3-10.00.Custom_amd64.deb linux-image-4.0.1-pf3_4.0.1-pf3-10.00.Custom_amd64.deb
теперь ставим их:
dpkg -i ./linux-*.deb
После этого можно перезагрузиться и почистить пакеты со старыми ядрами. Найдеи эти пакеты:
dpkg -l | grep image dpkg -l | grep headers
И удалим лишнее:
sudo apt-get purge _____имена_пакетов______
Discussion