Intereting Posts
Ethernet отключил Wi-Fi и почти заморозил Debian stretch SSD: альтернативный вариант замены swap partion или swap-файла Недопустимая левая фигурная скобка в регулярном выражении устарела В xmonad, как я могу продвинуть следующее окно в стеке в главное окно? Однострочный шрифт для вставки новой строки текста (буквально регулярное выражение, а значит, и многих экранированных символов) в файле конфигурации перед определенной строкой? Проблема LVM с VM – нет физического диска Каков наилучший способ дистрибутива / оболочки-агностик для установки переменных среды? Как включить экранную клавиатуру с помощью lxdm? Как я могу запустить команду cron с существующими переменными окружающей среды? Создать раздел на сервере CentOS? Как включить два сетевых интерфейса как для Интернета в ubuntu12.04 Ошибка при добавлении пользователя в группу колес в CentOS 7 Прокручивать строки из двух файлов параллельно tmux.conf встраивает скрипт оболочки? Как получить частный IP-адрес EC2 после вращения AWS с локальной машины / у Jenkins вне AWS

Выгода от модуля ядра, скомпилированного внутри ядра?

В чем преимущество компиляции модулей ядра в ядро ​​(вместо загружаемых модулей)?

Это зависит. Если у вас небольшой объем памяти, использование модулей может улучшить возобновление, так как они не перезагружаются каждый раз (я нашел это значительным для 2 гигабайт ОЗУ, но не для 4 гигабайт на традиционных жестких дисках). Это особенно верно, когда из-за некоторой ошибки в модуле батареи (независимо от того, компилируется или как модуль), это заняло очень много времени (несколько минут). Даже без ошибки в gentoo мне удалось сократить время (с сообщением systemd-analysis ) с 33s до 18s, просто перейдя из статически скомпилированного ядра в модули – «удивительно» начало ядра изменилось с 9s до 1.5s.

Кроме того, когда вы не знаете, какое оборудование вы собираетесь использовать, модули явно полезны.

PS. Вы можете скомпилировать даже жизненно важные драйверы в качестве модулей, если вы включите их в initrd. Например, дистрибутивы будут включать файловую систему /, драйверы жесткого диска и т. Д. В initrd при установке.

Насколько мне известно, разницы в скорости нет.

Я думаю, вы получите несколько килобайт памяти ядра, поскольку гранулярность распределений – одна страница, поэтому по типичной архитектуре каждый модуль тратит в среднем около 2 кБ (½ страницы) на каждый модуль. Даже на встроенных системах это вряд ли важно. Вы также получаете небольшое дисковое пространство, поскольку модули могут быть сжаты в том же направлении, что и ядро; что может быть более актуальным во встроенных системах с небольшим объемом памяти.

Если вы вообще можете отказаться от модулей, вы сохраняете небольшую память ядра (нет необходимости в загрузчике модуля), дисковое пространство (нет необходимости в утилитах модуля) и сложность системы (нет необходимости включать загрузку модуля как функцию в вашем дистрибутиве ). Эти точки довольно привлекательны в некоторых встроенных конструкциях, где аппаратное обеспечение не является расширяемым.

Пара потенциальных преимуществ. Производительность является спорным один. Вы бы избежали некоторых издержек времени выполнения, связанных с динамическим загрузчиком, но я сомневаюсь, что это очень важно, если вы не зависите от планировщика реального времени.

Если вы используете большие страницы в своей системе, то, возможно, создание более крупного статического изображения ядра означает, что вы более эффективно используете кеш-дескриптор страницы. Некоторые системы будут «кэшировать» ядро, чтобы он плотно упаковывался в одну область памяти, что может облегчить некоторую задержку из-за незначительных и, возможно, серьезных ошибок страниц.

Это может подойти вам, архитектурно, для доставки One Big Image, утверждая, что меньше независимых модулей легче поддерживать, а потеря гибкости не имеет значения. Многие из таких рассуждений решаются в вопросах стиля и практики.

Иногда это необходимо. Если вы скомпилируете какой-то важный драйвер (например, драйвер SCSI) в качестве модуля, ваша система не загрузится.

Другим замечательным кандидатом на компиляцию в качестве модуля является тип файловой системы корневого раздела. Если ядро ​​не понимает ext3 для чтения /lib/modules/ как он будет загружать модули из него?

Подумайте об этом так: для использования модулей ядро ​​должно знать достаточно о вашей системе, чтобы читать и загружать модули ядра. Используйте это и проб и ошибок 🙂

Я статически собираю каждый драйвер для встроенного оборудования внутри ядра. Исключение – это аппаратное обеспечение, которое не является постоянным (например, аппаратное обеспечение, связанное с usb).

Поскольку моя аппаратная конфигурация вряд ли изменится в ближайшее время, я не беспокоюсь о модулях.