Преимущество модуля ядра скомпилировано в ядре?

Придерживайтесь алфавитно-цифровых имен файлов. Избегайте пробелов или замените пробелы символами нижнего подчеркивания (_). Предельная пунктуация в именах файлов к периодам (.), символы нижнего подчеркивания (_), и дефисы (-). Обычно имена файлов являются нижним регистром, но я использую CamelCase, когда у меня есть несколько слов в имени файла.

Используйте расширения, которые указывают на тип файла. Для программ не нужны расширения, поскольку выполнить бит используется для указания на программы, и оболочки знают, как запустить программы различных типов. Это распространено, но не необходимо к (.sh) для сценариев оболочки и (.pl) для сценариев жемчуга. Исполнимые расширения Windows .bat, .com, .scr, и .exe указывают на исполняемые файлы Windows на Unix.

Выберите стандарт и придерживайтесь его. Но это не повредит вещи при предотвращении его.

Скрытый (или точка) файлы имеют имена, запускающиеся с периода. Они обычно не обнаруживаются в списках каталогов. Используйте 'ls-a' для включения точечных файлов в список.

19
13.06.2014, 23:45
5 ответов

Это зависит. Если у Вас есть небольшой объем памяти, использование модулей может улучшить резюме, поскольку они не перезагружаются каждый раз (я нашел это значительным на 2 гибибайтах RAM, но не на 4 гибибайтах на традиционных жестких дисках). Это особенно верно в срок для некоторой ошибки в аккумуляторном модуле (независимо от того, чтобы быть скомпилированным - в или как модуль), это брало очень долго для запуска (несколько минут). Даже без ошибки на хинду мне удалось сократить время (сообщаемый systemd-analysis) от 33 до 18 только путем изменения от статически скомпилированного ядра до модулей - 'удивительно' запуск ядра, измененного от 9 с до 1,5 с.

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

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

7
27.01.2020, 19:45
  • 1
    Сделайте Вас телепатия этот ответ снова, тщательно. Я имел бы, но я не знаю то, что Вы означали говорить на месте, например... на традиционных жестких дисках. –  tshepang 21.05.2011, 11:33
  • 2
    я имел в виду магнитные (у меня нет опыта с SSD). –  Maciej Piechotka 22.05.2011, 03:54
  • 3
    я попытался сделать это более читаемым. Можно ли проверить, не завинчивал ли я его. –  tshepang 22.05.2011, 12:05
  • 4
    Спасибо. Я только что закончил сессию экзамена, таким образом, у меня не было времени для наблюдения ее. –  Maciej Piechotka 23.05.2011, 23:14

Насколько я знаю, нет никакого различия в скорости.

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

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

7
27.01.2020, 19:45
  • 1
    Получить доступ к символу в модуле - крошечный бит медленнее (косвенность включена). Но добавленная гибкость (может загрузить/разгрузить как требуется, не должны создавать сшитое на заказ ядро для точных используемых аппаратных средств...) определенно стоит того (если Вы не создаете для очень ограниченной среды, которая никогда не изменяется). –  vonbrand 16.01.2013, 18:25

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

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

Это могло бы подойти Вам, архитектурно, для поставки Одного Большого Изображения, утверждая, что меньше независимых модулей легче поддержать, и потеря гибкости не важна. Много этого вида обоснования предприятий в вопросы стиля и практики.

4
27.01.2020, 19:45

Иногда это необходимо. При компиляции некоторого жизненного драйвера (например, драйвера SCSI) как модуль система не загрузится.

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

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

2
27.01.2020, 19:45
  • 1
    я думаю о некоторой производительности, улучшается? Есть ли кто-либо вообще? –  phunehehe 05.09.2010, 13:23
  • 2
    У прошлых людей имеют, пошел на многое для создания самого маленького ядра с только, что требуется. Сегодня это в основном изменилось. На самом деле, каждый раз, когда Вы сначала загружаете модуль, Вы перенесете маленький хит производительности. Это не должно говорить, что необходимо скомпилировать все в ядре :-) Посмотрите это: articleinput.com/e/a/title / … –  nc3b 05.09.2010, 14:10
  • 3
    для не - жизненный драйвер или функциональность является там каким-либо преимуществом? например, если я просто хочу использовать терминал и набор сетевой утилиты без другой потребности или функциональности. есть ли какое-либо преимущество, если я просто компилирую весь необходимый модуль и драйвер в ядре без загружаемого модуля? –  uray 05.09.2010, 14:19
  • 4
    за 1$. Система загрузится прекрасный с драйвером SCSI как модуль в initrd. Это - то, для чего они. –  wzzrd 05.09.2010, 23:35
  • 5
    Да..., если модуль для этого находится в initrd, который ядро может понять... –  Dagelf 08.10.2015, 11:05

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

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

2
27.01.2020, 19:45

Теги

Похожие вопросы