Моя дорогая Betsy. Ядрёные забавы

Алексей Федорчук

Казалось бы, LDME 2 Betsy со штатным ядром по умолчанию (3.16.0-4-amd64) в отношении так называемой «отзывчивости» не оставляет желать лучшего. Однако где-то на просторах сети циркулируют слухи, что если вместо него установить ядро Real Time, то отзывчивость системы станет лучше, чем это возможно. Что рождает законное желание проверить такую возможность. Каковую захотелось ещё и совместить с повышением версии ядра также до предельной — таковой на данный момент является 4.1.X.

Разумеется, в ветке stable официального репозитория Debian, на котором основывается LMDE, ничего подобного и близко не лежало. Обращаться к ветке exprimental в данной ситуации было страшновато, а в ветке sid высшим достижением оказалась версия linux-image-4.0.0-2-rt-amd64. И тогда в поисках я натолкнулся на сайт Liquorix, который во первых строках своих предлагал

the better distro kernel

Причём собранные с применением лучших настроек и исходников для десктопных, мультимедийных и игровых задач под высокими нагрузками. Что обеспечивалось реализацией технологии RCO для систем реального времени, агрессивными настроками предвыборки (preemption), планировщиком дисковых операций, оптимизированным на предмет высокой пропускной способности и низкой латентности, и тому подобных опций.

Кроме того, авторы проекта угрожали читателю бинарными пакетами, тестировавшимися на совместимость с современными версиями Debian и Ubuntu. Правда, первая (и, кстати, последняя) страница сайта ссылок на эти бинарники не содержала, однако Гоша легко обнаружил из здесь. А исчерпывающая инструкция по подключению содержащего их репозитория место быть имела.

Следуя этой инструкции, я запустил текстовый редактор с именем нового файла в качестве аргумента:

$ sudo nano /etc/apt/sources.list.d/liquorix.list

И внёс в него следующие строки:

# /etc/apt/sources.list.d/liquorix.list
deb http://liquorix.net/debian sid main
deb-src http://liquorix.net/debian sid main

После чего запустил команду обновления кеша:

$ apt update

Она завершилась ошибкой считывания GPG-ключа, что было ожидаемо, так как его следовало установить из этого же репозитория:

$ apt install liquorix-keyring

После чего повторая команда apt update ошибок уже не выявила. А в панели утилиты mintsources (которой тоже можно было бы воспользоваться, хотя GPG-ключ всё равно пришлось бы устанавливать вручную) новый репозиторий выглядел так:

liquorix-kernel_001
Можно было устанавливать последнюю версию ядра вместе с заголовочными файлами:

$ apt install linux-image-liquorix-amd64 linux-headers-liquorix-amd64 

И перезагрузить систему — вполне безбоязненно, так как возможность загрузки предшествующего ядра автоматически сохраняется как опция меню GRUB.

После рестарта можно было полюбоваться на результат в краткой

$ uname -r
4.1-2.dmz.1-liquorix-amd64

и расширенной форме:

$ uname -a
Linux mybetsy 4.1-2.dmz.1-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.1-4 (2015-07-11) x86_64 GNU/Linux

За будущее новообретённого ядра также не было оснований волноваться — политика обновления фирменной утилиты mintupdate гарантирует критически важные компоненты системы (в том числе и ядро) от автоматического обновления. Но на всякий пожарный случай я ещё и зафиксировал оба новых пакета:

$ apt hold linux-image-4.1-2.dmz.1-liquorix-amd64
$ apt hold linux-headers-4.1-2.dmz.1-liquorix-amd64

Что отразилось в их статусе следующим образом:

$ apt se linux- G \^ih
ihA linux-headers-4.1-2.dmz.1-liquo - Header files for Linux 4.1-2.dmz.1-liquori
ihA linux-image-4.1-2.dmz.1-liquori - Linux 4.1 for 64-bit PCs

И оставалось только наслаждаться отзывчивостью системы большей, чем это возможно. Правда, органолептически я её пока не почувствовал, но верю, что она имеет место быть. Тем более, что имеются всякие пакеты, типа rt-tests, способные поверить гармонию веры алгеброй тестов. Но об этом — как-нибудь в следующий раз.

Предварительное оглавление

Моя дорогая Betsy. Ядрёные забавы: 1 комментарий

  1. добрый день! при обновлении ядра получил следующие сообщения:

    «Error! Bad return status for module build on kernel: 4.1-2.dmz.1-liquorix-amd64 (x86_64) Consult /var/lib/dkms/broadcom-sta/6.30.223.248/build/make.log for more information. Error! Bad return status for module build on kernel: 4.1-2.dmz.1-liquorix-amd64 (x86_64) Consult /var/lib/dkms/ndiswrapper/1.59/build/make.log for more information.»

    вот первый make.log:

    DKMS make.log for broadcom sta-6.30.223.248 for kernel 4.1-2.dmz.1-liquorix-amd64 (x86_64) Mon Jul 13 17:13:20 EEST 2015 /bin/sh: 1: [: Illegal number: /bin/sh: 1: [: Illegal number: Wireless Extension is the only possible API for this kernel version Using Wireless Extension API KBUILD_NOPEDANTIC=1 make -C /lib/modules/4.1-2.dmz.1-liquorix-amd64/build M=`pwd` make[1]: Entering directory \’/usr/src/linux-headers-4.1-2.dmz.1-liquorix-amd64\’ CFG80211 API is prefered for this kernel version Using CFG80211 API Kernel architecture is X86_64 LD /var/lib/dkms/broadcom-sta/6.30.223.248/build/built-in.o CC [M] /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/shared/linux_osl.o CC [M] /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_linux.o CC [M] /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_iw.o CC [M] /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.o /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_cfg80211_get_key’: /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1390:9: warning: passing argument 1 of ‘memcpy’ discards ‘const’ qualifier from pointer target type memcpy(params.key, key.data, params.key_len); ^ In file included from ./arch/x86/include/asm/string.h:4:0, from include/linux/string.h:17, from include/linux/dynamic_debug.h:111, from include/linux/printk.h:275, from include/linux/kernel.h:13, from include/linux/list.h:8, from include/linux/module.h:9, from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/include/linuxver.h:40, from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:26: ./arch/x86/include/asm/string_64.h:34:14: note: expected ‘void *’ but argument is of type ‘const u8 *’ extern void *memcpy(void *to, const void *from, size_t len); ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_cfg80211_get_station’: /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1444:20: error: ‘STATION_INFO_TX_BITRATE’ undeclared (first use in this function) sinfo->filled |= STATION_INFO_TX_BITRATE; ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1444:20: note: each undeclared identifier is reported only once for each function it appears in /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1457:20: error: ‘STATION_INFO_SIGNAL’ undeclared (first use in this function) sinfo->filled |= STATION_INFO_SIGNAL; ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c: At top level: /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1778:2: warning: initialization from incompatible pointer type .get_station = wl_cfg80211_get_station, ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:1778:2: warning: (near initialization for ‘wl_cfg80211_ops.get_station’) /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_inform_single_bss’: /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:2013:9: error: incompatible type for argument 3 of ‘cfg80211_inform_bss’ cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet), ^ In file included from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:33:0: include/net/cfg80211.h:4029:1: note: expected ‘enum cfg80211_bss_frame_type’ but argument is of type ‘const u8 *’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:2015:3: warning: passing argument 7 of ‘cfg80211_inform_bss’ makes integer from pointer without a cast (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); ^ In file included from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:33:0: include/net/cfg80211.h:4029:1: note: expected ‘u16’ but argument is of type ‘const u8 *’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:2015:26: warning: passing argument 8 of ‘cfg80211_inform_bss’ makes pointer from integer without a cast (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); ^ In file included from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:33:0: include/net/cfg80211.h:4029:1: note: expected ‘const u8 *’ but argument is of type ‘size_t’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:2013:9: error: too few arguments to function ‘cfg80211_inform_bss’ cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet), ^ In file included from /var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.c:33:0: include/net/cfg80211.h:4029:1: note: declared here cfg80211_inform_bss(struct wiphy *wiphy, ^ scripts/Makefile.build:258: recipe for target \’/var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.o\’ failed make[2]: *** [/var/lib/dkms/broadcom-sta/6.30.223.248/build/src/wl/sys/wl_cfg80211_hybrid.o] Error 1 Makefile:1382: recipe for target \’_module_/var/lib/dkms/broadcom-sta/6.30.223.248/build\’ failed make[1]: *** [_module_/var/lib/dkms/broadcom-sta/6.30.223.248/build] Error 2 make[1]: Leaving directory \’/usr/src/linux-headers-4.1-2.dmz.1-liquorix-amd64\’ Makefile:158: recipe for target \’all\’ failed make: *** [all] Error 2

    а это второй make.log:

    DKMS make.log for ndiswrapper-1.59 for kernel 4.1-2.dmz.1-liquorix-amd64 (x86_64) Mon Jul 13 17:13:20 EEST 2015 make: Entering directory \’/usr/src/linux-headers-4.1-2.dmz.1-liquorix-amd64\’ LD /var/lib/dkms/ndiswrapper/1.59/build/built-in.o MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/crt_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/hal_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ndis_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/ntoskernel_io_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/rtl_exports.h MKEXPORT /var/lib/dkms/ndiswrapper/1.59/build/usb_exports.h MKSTUBS /var/lib/dkms/ndiswrapper/1.59/build/win2lin_stubs.h CC [M] /var/lib/dkms/ndiswrapper/1.59/build/crt.o CC [M] /var/lib/dkms/ndiswrapper/1.59/build/hal.o CC [M] /var/lib/dkms/ndiswrapper/1.59/build/iw_ndis.o CC [M] /var/lib/dkms/ndiswrapper/1.59/build/loader.o CC [M] /var/lib/dkms/ndiswrapper/1.59/build/ndis.o /var/lib/dkms/ndiswrapper/1.59/build/ndis.c: In function ‘read_setting’: /var/lib/dkms/ndiswrapper/1.59/build/ndis.c:441:3: error: implicit declaration of function ‘strnicmp’ [-Werror=implicit-function-declaration] if (strnicmp(keyname, setting->name, length) == 0) { ^ cc1: some warnings being treated as errors scripts/Makefile.build:258: recipe for target \’/var/lib/dkms/ndiswrapper/1.59/build/ndis.o\’ failed make[1]: *** [/var/lib/dkms/ndiswrapper/1.59/build/ndis.o] Error 1 Makefile:1382: recipe for target \’_module_/var/lib/dkms/ndiswrapper/1.59/build\’ failed make: *** [_module_/var/lib/dkms/ndiswrapper/1.59/build] Error 2 make: Leaving directory \’/usr/src/linux-headers-4.1-2.dmz.1-liquorix-amd64\’

    не подскажете, что это значит? сильно критично или нет?

Добавить комментарий