[devel] Модульный initrd.img
Leonid Krivoshein
klark.devel на gmail.com
Вт Май 8 02:34:26 MSK 2018
07.05.2018 14:52, Michael A. Kangin пишет:
>> Чтобы перестроить (создать заново) список зависимостей, нужно как
>> минимум линейно пройтись по всем заголовкам модулей, как минимум
>> рекурсивно по всей директории с модулями ядра. Для экономии времени
>> на этапе начальной загрузки каждый модуль ядра у нас пожат отдельно
>> gzip'ом, сам же слой с модулями не пожат. На этапе начальной загрузки
>> ещё неизвестно, какие из модулей реально потребуются, какие нет.
>> Полный набор модулей (без фирмвари) -- это порядка 75Мб в сжатом виде.
>
> Полный набор модулей, включая все звуковые карточки и графические
> планшетики, никто никогда не будет класть в initrd, они там не нужны.
Однако выше вы же привели пример дистрибутива с ядром, где в initrd
кладутся _ВСЕ_ модули. Это во-первых. Мы же не говорим только об одной
задаче: собрать некий оптимальный initrd для конкретной машины из 30-100
модулей, так? Иначе зачем тогда делить их на куски? Это во-вторых.
Предварительный анализ решения задачи "чего всё-таки выкинуть, а что
оставить" (да, теперь проще от обратного отталкиваться) как раз
показывает, что выкинув звук (3.6Мб), графику, итп. из 75Мб можно
сэкономить "копейки". Потом кто-то захочет плимут и разумеется
потребуется графика. Потом другому понадобится бульканье на этапе
загрузки, и придётся включать обратно звук. В общем, мне пока не очень
верится, что такой оптимизацией стоит заниматься без ущерба чему-то,
когда речь об универсальной загрузке. А кейсы они бывают разные. Это
в-третьих.
Предупреждая вопрос, модули (75Мб) -- фигня, в сравнении с фирмварью.
Там ещё под 300Мб набирается. Конечно, можно сказать "идите на фиг" всем
пользователям Wi-Fi, IB, или просто разделить на варианты "all" и "most".
> Поэтому нижеследующие выкладки абсолютно бессмысленны.
>
Поэтому в приведённом кейсе полторы секунды на очень быстрой машине
вашего depmod -a превратятся в 20 секунд или даже в 2 минуты на старой
мегатормозной лошадке. Ну, никто так не делает!
> Кроме того, я имел некоторый практический опыт по исследовательской
> загрузке многих типов хостов - виртуалки, сервера, тощие клиенты
> (включая допотопно-тормознутый Intel Atom) полным образом со всеми
> четыретыщ модулей. Задержка при загрузке от depmod не ощущается вообще
> никак, от слова "совсем", даже на вышуепомянутом атоме.
> Гораздо и неизмеримо большее время уходит на прокачать такой
> бесмысленно-огромный образ по сети.
>
>> На конкретной системе из этих 75Мб или порядка 4450 модулей
>> потребуется лишь 30-100 модулей.
>
> Именно, это типичное количество модулей, оказывающееся в итоговой
> initramfs, буде она собрана из кусочков или из монолитного образа.
> И переживать по поводу скорости отработки на них depmod абсолютно
> бессмысленно.
Если в итоговый образ попадёт 30-100 модулей, значит initrd собирается
для конкретной машины, и смысл тогда делить его на куски? А если не для
конкретной, я рассматриваю другой крайний вариант именно потому, что это
наш случай (универсальная загрузка), и мы ещё не знаем, какие из модулей
могут потребоваться. Их в конечном итоге потребуется те же 30-100,
только заранее неизвестно, каких именно. Если сложить в initrd все
имеющиеся, depmod -a должен будет пройтись сначала по всем условно
4450-плюс-минус, и не мгновенно, а распаковав каждый.
>
>> При загрузке модулей, их распаковка выполняется автоматически. А
>> теперь запустим depmod -a на максимально возможном наборе. Чтобы
>> заглянуть в файл модуля, придётся его сначала распаковать, если не
>> целиком, то хотя бы первый блок. И так по каждому из 4450 модулей,
>> которые ещё неизвестно, потребуются или нет. gzip не умеет делать это
>> во много потоков, только в один,
>
> Используйте pigz
>
Вы это не мне говорите, а на kernel.org предложите. Ядро же этим
занимается. В деплое я и так его активно использую. :)
>>>> Так ничто не мешает сгенерировать компактный монолитный образ
>>>> сейчас, не прибегая к модульности.
>>> Совершенно логически верное высказывание. Как и обратное - ничто не
>>> мешает разбить функциональность по модулям сейчас, не прибегая к
>>> монолитности.
>>
>> Пока что мешает отсутствие поддержки со стороны соответствующего
>> инструментария. И кто его будет переделывать ради сомнительной (пока
>> что) выгоды?
>
> Нет, отсутствие поддержки абсолютно не мешает использовать при желании
> эту технологию уже сейчас, в режиме "заката солнца вручную".
> Разумеется, поддержка в make-initrd по формированию отдельных образов
> была бы конечно приятным бонусом по автоматизации, но она не обязательна.
>
> Равно как и обратное - наличие в природе такой технологии никому не
> мешает жить по старому и пользоваться монолитными образами.
>
Вот на этой ноте хотелось бы спор закончить. Потому что, если не
изменяет память, нынешний make-initrd позволяет буквально парой строк в
/etc/initrd.mk создать initrd с нужным вам наполнением без единого
модуля. А дальше -- каждый сам себе злобный Буратино! :) Делайте любые
куски с наборами модулей и фирмварью, благо есть depinfo, который теперь
и softdeps учитывает. То есть смысл дальше спорить, если нынешняя
технология никак не мешает вашим экспериментам?
--
Best regards,
Leonid Krivoshein.
Подробная информация о списке рассылки Devel