Перевага модуля ядра, зібраного всередині ядра?


Відповіді:


7

Це залежить. Якщо у вас є невеликий об'єм пам'яті, використання модулів може покращити резюме, оскільки вони не перезавантажуються кожен раз (я вважав це значним на 2 Гб оперативної пам'яті, але не на 4 ГБ на традиційних жорстких дисках). Особливо це стосується того, що через деяку помилку в модулі акумулятора (незалежно від того, чи він складений або як модуль), це зайняло дуже багато часу (кілька хвилин). Навіть без помилок на gentoo мені вдалося скоротити час (повідомляється systemd-analysis) з 33-х до 18-х років, просто змінивши зі статично складеного ядра на модулі - "на диво" початок ядра змінився з 9 на 1,5.

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

PS. Ви можете складати навіть життєво важливі драйвери як модулі до тих пір, поки ви включите їх у initrd. Наприклад, дистрибутив буде включати файлову систему /, драйвери жорсткого диска тощо в initrd при встановленні.


Ви не проти прочитати цю відповідь ще раз уважно. Я мав би це зробити, але я не знаю, що ви хотіли сказати на місці, наприклад ... на традиційних жорстких дисках .
thepang

Я мав на увазі магнітні (я не маю жодного досвіду роботи з SSD).
Maciej Piechotka

Я намагався зробити це читабельніше. Чи можете ви перевірити, чи я його не накрутив.
thepang

Спасибі. Я щойно закінчив іспит, тому не встиг його переглянути.
Мацей П'єчотка

7

Наскільки я знаю, різниці в швидкості немає.

Я думаю, ви отримаєте кілька кБ пам'яті ядра, оскільки деталізація виділень становить одну сторінку, тому в типовій архітектурі кожен модуль витрачає в середньому близько 2 кБ (½ сторінки) на потенційний модуль. Навіть на вбудованих системах це навряд чи важливо. Ви також отримуєте трохи місця на диску, оскільки модулі можна стискати так само, як і ядро; що може бути більш актуальним у вбудованих системах із невеликим запасом пам’яті.

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


Доступ до символу в модулі - це трохи повільніше (задіяно непрямий характер). Але додаткова гнучкість (можна завантажувати / вивантажувати як потрібно, не потрібно будувати підручне ядро ​​для точного обладнання, яке використовується, ...) варто того (якщо ви не будуєте для дуже обмеженого середовища, яке не робить Ніколи не зміниться).
фонбранд

4

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

Якщо ви використовуєте великі сторінки у вашій системі, можливо, створення більшого статичного зображення ядра означає, що ви ефективніше використовуєте кеш дескриптора сторінки. Деякі системи будуть «уклеювати» ядро ​​так, щоб воно щільно упаковувалося в одній локальній пам’яті, що може полегшити деяку кількість затримок через незначні та, можливо, основні помилки сторінки.

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


2

Іноді це необхідно. Якщо ви компілюєте якийсь життєвий драйвер (наприклад, драйвер SCSI) як модуль, система не завантажиться.

Ще один відмінний кандидат для НЕ компіляцій в якості модуля є типом файлової системи кореневого розділу. Якщо ядро ​​не розуміє, ext3читати, /lib/modules/як буде завантажувати модулі з нього?

Подумайте про це так: щоб використовувати модулі, ядро ​​повинно знати достатньо про вашу систему для читання та завантаження модулів ядра. Використовуйте це та пробну помилку :-)


Я думав про якийсь - то продуктивності поліпшити? Чи є взагалі такі?
phunehehe

1
У минулому люди великі зусилля виробляли найменше можливе ядро ​​з лише тим, що потрібно . Сьогодні це значною мірою змінилося. Насправді, кожного разу, коли ви вперше завантажуєте модуль, ви будете зазнавати невеликих результатів. Це не означає, що ви повинні зібрати все в ядрі :-) Дивіться це: articleinput.com/e/a/title/…
nc3b

для неважливого драйвера чи функціональності є якась користь? наприклад, якщо я просто хочу використовувати термінал і купу мережевих утиліт без іншої потреби чи функціональності. чи є якась користь, якщо я просто компілюю весь необхідний модуль і драйвер всередині ядра без завантажуваного модуля?
uray

3
Бик. Система добре завантажиться з драйвером SCSI як модулем у initrd. Ось для чого вони.
wzzrd

Так ... за умови, що модуль знаходиться в initrd, який ядро ​​може зрозуміти ...
Dagelf

2

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

Оскільки моя конфігурація обладнання, швидше за все, не зміниться незабаром, я не морочуся модулями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.