Сайт | Скачать | Видео | Wiki

Автор Тема: Монолитное ядро. Преобразования любого конфига  (Прочитано 15189 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Итог
Итог
Монолитное ядро - это такое, которое грузится без дополнительных модулей ядра в инитрд
алгоритм такой. Скачиваем https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.13.tar.xz, выполняем make menuconfig, получая файл config. Далее сравниваем с config от pf-kernel, отмечая изменения внесенные post-factum, назовем их diff-pf-config.
И уже потом прореживаем, отталкиваясь от конфига Pro, но помня о приоритете diff-pf-config. Тем самым удастся сохранить и не выключить все новые оптимизации pf, о которых еще не знал Pro, почему их и нет в его конфигах.
Думаю, проще сделать наоборот.
Цитата: sfs от 29 Июль 2021, 09:59:19
сравнить конфиги и сделать скрипт который делает монолитное ядро из любого конфига. Т.е. переводит модули ядра в монолит, чтобы не таскать в инитрд udev
В mono.tar.gz :
config_arch_generic , т.е. исходный конфиг
mono - строки =y монолитного конфига (от моего 5.12.0-pf-lf), т.е. то, что должно оказаться монолитно, а не модулем.ko в ядре
mono - это список того , что будет исправлено m на у + добавлено то, чего нет в config_arch_generic, но есть в mono
config_arch_generic-mono - итоговый конфиг, полученный скриптом kernel-mono.sh
Скрипт меняет все =m в исходном на =y , перечисленные в mono и добавляет в конец , то чего вообще не было в исходном после ===== ADD ====
Теперь надо хорошенько почистить mono руками
« Последнее редактирование: 07 Январь 2022, 07:11:53 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Теперь надо хорошенько почистить mono руками
Удаляю - это значит, что в итоговом конфиге это значение останется от pf (из config_arch_generic)
Удаляю все :
ACPI
AMD
ARCH
ATH
ATM
AUTOFS
B43
B44
BT
CIFS
COMPAT
CPU
CRUPTO
GENERIC
HAVE
MOUSE
NET
SERIAL
SND
WLAN
X86_
и по мелочи. Итог в аттаче
« Последнее редактирование: 18 Август 2021, 09:10:43 от sfs »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
В исходном config_arch_generic:
Цитата
CONFIG_TCP_CONG_BBR=m 
CONFIG_TCP_CONG_BBR2=m

В итоговом mono2 этого нет. Т.е. не только меняется m на y, но и режутся полезные функции. Экономить следует не на оптимизациях, а на поддержке железа, которое не используется форумчанами и т.д.


upd. Наверно не лучший пример, это типа для серверов?
Включение TCP BBR ускоряем сеть в Ubuntu Linux
« Последнее редактирование: 20 Август 2021, 10:18:17 от sfs »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
сравнить конфиги
Полезные скрипты уже присутствуют в исходниках ядра. Я не спец по ядрам, поэтому был не в курсе.
scripts/diffconfig
scripts/kconfig/merge_config.sh
scripts/config


Имхо, merge_config.sh может быть полезным. Типа merge_config.sh .configPro config_arch_generic, а результат грепать на "New value"/"Requested value". Полученный результат все же придется вручную прошерстить. А потом, если правильно понял, применить к .configPro.


upd. Для удобства ручного редактирования, использовать значения в "New value" как есть. Это сэкономит много времени. А вот добавленные функции в "Requested value" уже можно пропустить через сито.
« Последнее редактирование: 18 Август 2021, 04:45:54 от krasnyh »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
В итоговом mono2 этого нет. Т.е. не только меняется m на y, но и режутся полезные функции.
Скрипт меняет все =m в исходном на =y , перечисленные в mono
mono - список того, что нужно менять.
config_arch_generic-mono - итоговый конфиг, полученный скриптом kernel-mono.sh
Все что было в config_arch_generic -  осталось в config_arch_generic-mono. Скрипт вообще ничего не удаляет. Только меняет m на y и добавляет в конец конфига
Экономить следует не на оптимизациях, а на поддержке железа, которое не используется форумчанами и т.д.
Что именно? Наверное лучше скомпилить пакет по полной, а потом удалить лишние модули.ko из 000-kernel*.pfs. Кому понадобятся - возьмут из пакета
« Последнее редактирование: 18 Август 2021, 11:33:05 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
scripts/kconfig/merge_config.sh
Вот пример использования
Код
./scripts/kconfig/merge_config.sh -m .config ../config.fragment
По сути я такой же скрипт и написал. Лучше пользоваться родным (из src)

Скомпилил с конфигом собранным merge_config.sh -m config_arch_generic mono2
vmlinuz получился 16мб, т.е в 2 раза больше, чем 5.12 с конфигом от Pro. Тут только сравнивать конфиги и убирать лишние =y
Модулей ядра тоже в 2 раза больше. С этим проще - удалить лишнее
В mono2 перестарался с чисткой. Без дополнительных .ko не грузится.
Не стал выкладывать

Скомпилил с конфигом от 512-pf-lf + lf+.cfg (zstd ntfs3)  https://mirror.yandex.ru/puppyrus/puppyrus-a64/kernel/new/5.13.0-pf5-lf/
И аналогично для i686 https://mirror.yandex.ru/puppyrus/puppyrus-a/kernel/new/4.14.105-pf10-le9eb/ - конфиг от Pro + наложил патч le9 -  проверьте на старом железе. планирую в исо

Потом https://mirror.yandex.ru/puppyrus/puppyrus-a64/kernel/new/5.13.0-pf5-lf5/
merge_config.sh -m config_arch_generic mono
Потом хитрым скриптом выделил все монолитное из config_arch_generic, которого нет в 512-pf-lf и переделал это на модули вместо монолита
vmlinuz получился на 600кб больше. Модулей много. Вряд ли столько нужно. Далее буду компилить только маленькое ядро

https://sysadmin.pm/bbr-algo/
Почему-то с этим параметрами i686 ядро не компилилось
Если включить zstd в i686 тоже какая-то лажа - см. скрин
http://mirror.yandex.ru/puppyrus/puppyrus-a/kernel/new/5.13.0-pf5-lf

Если кто найдет в lf5 что то чего нет в lf - пишите - следующий раз добавлю
« Последнее редактирование: 20 Август 2021, 11:06:20 от sfs »

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
Конфиг ядра это очень тонкая материя. Там одно цепляет за другое. Я приводил пример не попадания BBR в ядро и это был всего лишь пример:
В исходном config_arch_generic:
Цитата
CONFIG_TCP_CONG_BBR=m 
CONFIG_TCP_CONG_BBR2=m
Ведь чтобы включить эту функцию требуется большее:
Цитата
grep -E "CONFIG_TCP_CONG_BBR|CONFIG_NET_SCH_FQ" config_arch_generic

Имхо, проще использовать config_arch_generic как есть, иначе пролетаем мимо многих оптимизаций, которые не спецу не разглядеть и не вычленить в конфиге. Тогда уж проще использовать дефолтное ядро Линукса и резать его как душе угодно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
использовать config_arch_generic как есть
lf5 это и есть "как есть"
Код
# grep -E "CONFIG_TCP_CONG_BBR|CONFIG_NET_SCH_FQ" config_arch_generic
CONFIG_TCP_CONG_BBR=m
CONFIG_TCP_CONG_BBR2=m
CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_NET_SCH_FQ=m
CONFIG_NET_SCH_FQ_PIE=m

# grep -E "CONFIG_TCP_CONG_BBR|CONFIG_NET_SCH_FQ" .config-lf5
CONFIG_TCP_CONG_BBR=m
CONFIG_TCP_CONG_BBR2=m
CONFIG_NET_SCH_FQ=m
CONFIG_NET_SCH_FQ_PIE=m
CONFIG_NET_SCH_FQ_CODEL=m
Только некоторые модули поменяны с монолит - модуль
Тогда уж проще использовать дефолтное ядро Линукса
Нет aufs uksmd le9
Тогда уж. pf от автора (без aufs) или из Магеи (aufs есть, остальное - не смотрел)

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
На размер ядра влияет и сжатие модулей. В оригинальном linux-pf-generic-5.13.5-1-x86_64.pkg.tar.zst:
Цитата
$ lh fs/ksmbd/ksmbd*
-rw-r--r-- 1 live live 161K авг 12 22:30 ksmbd.ko.zst
В 000-kernel-5.13.0-pf5-lf5_64.pfs:
Цитата
$ lh fs/ksmbd/ksmbd*
-rw-r--r-- 1 root root 466K авг 18 18:06 ksmbd.ko

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
На размер ядра влияет и сжатие модулей
Сжатие vmlinuz, как я понял,  задается отдельно. В 513 я изменил gzip на zstd. Изменить на скомпиленном нельзя или я не знаю как)
Сжатие .ko легко переделать в любой момент в mc - поиск + выделить найденное + (раз)архивировать выделенное + depmod
Уже давно определил, что архивы в squash получаются больше размером
Никто не протестировал вчерашние ядра?

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1
Наверно это, как минимум размер уменьшится в 2 раза.
Цитата
# CONFIG_MODULE_COMPRESS_NONE is not set
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
CONFIG_MODULE_COMPRESS_ZSTD=y

Поставил вчера 000-kernel-5.13.0-pf5-lf5_64.pfs, пока мало времени прошло, чтобы делать выводы.


upd. Или при сборке в модуль *.pfs, там уже все сжимается и так?
« Последнее редактирование: 20 Август 2021, 09:40:48 от krasnyh »

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
CONFIG_NET_SCH_FQ
513 для i686 не ест такие конфиги. Откуда взяли?

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5319
  • Репутация: +139/-1

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
https://sysadmin.pm/bbr-algo/
Прчему-то с этим параметрами i686 ядро не компилилось

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
с этим параметрами i686 ядро не компилилось
Если включить zstd тоже какая-то лажа - см. скрин
Посмотреть доступные : cat /sys/block/zram0/comp_algoritm
В 414 : [lzo] lz4
В 513 : все возможные, в том числе и zstd
« Последнее редактирование: 07 Сентябрь 2021, 10:46:35 от sfs »