Продуктивність мікрокенера та монолітного ядра


14

Microkernel реалізує всі драйвери як програми для простору користувача та реалізує основні функції, такі як IPC, у самому ядрі. Однак монолітне ядро ​​реалізує драйвери як частину ядра (наприклад, працює в режимі ядра).

Я прочитав деякі твердження, що мікроелементи повільніші, ніж монолітні ядра, оскільки їм потрібно обробляти передачу повідомлень між драйверами в просторі користувача. Це правда?

Тривалий час більшість ядер були монолітними, оскільки апаратне забезпечення було надто повільним, щоб швидко запускати мікроядра. Однак зараз існує багато мікроелементів та гібридних ядер, таких як GNU / Hurd, Mac OS X, лінія Windows NT тощо.

Отже, чи змінилося щось щодо продуктивності мікроядер? Чи справді ця критика щодо мікроядер і досі актуальна?

Відповіді:


11

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

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

Зважаючи на це, є дико розбіжні спостереження за роботою ядра в мікроядрах; наприклад, можна сказати, що сімейство мікроядер L4 має продуктивність IPC на порядок вище, ніж ядро ​​Маха. Але кожен пристрій Apple з цього десятиліття працює Mach, і вони, здається, працюють досить швидко, правда?

Мораль історії полягає в тому, що кожен, хто вирішує, яку архітектуру ядра використовувати, повинен спочатку вирішити, яка їх кінцева мета. Системи Microkernel є (звичайно, якщо належним чином реалізовані) більш безпечними, ремонтопридатними та модульними. Однак вони можуть бути жорсткими для архітектора належним чином і можуть мати надмірні результати щодо монолітного втілення. Монолітне ядро ​​буде швидше, але безпеку буде важче реалізувати, і він буде менш модульним і менш простим у налаштуванні.

Ваша архітектура ядра повинна базуватися на тому, яка ваша кінцева мета.

(А коли все інше не вдасться, спробуйте це обидва способи і подивіться, що станеться.)


"Але кожен пристрій Apple з цього десятиліття працює Mach, і вони, здається, працюють досить швидко, правда?" Це лише частково правильно. "Ядро Дарвіна - це XNU, гібридне ядро, яке використовує OSFMK 7.3 (Open Software Foundation Mach Kernel) з OSF, різні елементи BSD (включаючи модель процесу, мережевий стек і віртуальну файлову систему) та об'єктно-орієнтовану API драйвера пристрою під назвою Kit I / O Kit. Гібридна конструкція ядра забезпечує гнучкість мікроядра та продуктивність монолітного ядра ".
Бехранг Саедзаде

4

Я вважаю за краще називати Windows NT та ядро ​​XNU Apple, монолітним замість гібридного. Я не вважаю, що класифікація гібридів має багато значення на практиці. Насправді один з оригінальних інженерів XNU називає це монолітним [1].

Що стосується продуктивності, то єдине справді поглиблене порівняння монолітних та мікроелементів, які я можу знайти, - це "Екстремальні високоефективні обчислення чи чому мікрокерелі смоктають" [2] та репрезентативна презентація "Чи мікросотки смоктають?" [3].

Модульність та налаштованість - це більше питання дизайну, ніж притаманні обмеженням монолітних ядер. Наприклад, ядро ​​Linux може варіюватися від кількох мегабайт до приблизно одного мегабайт, залежно від параметрів часу компіляції та застосування певних патчів. Переважна більшість рядків коду з 15 мільйонами Linux є модулями ядра, що завантажуються. Вони складаються окремо від базового ядра та завантажуються лише за потреби. Ці модулі можуть реалізувати драйвери та системні дзвінки (навіть переважаючі базові системні виклики).

Дві області, в яких мікропровідники мають безперечну перевагу, - це низька пам'ять (<= 512 тис. Оперативної пам'яті) або "жорсткі" операційні системи в режимі реального часу, наприклад, системи польотів авіакомпанії або системи управління ядерними реакторами.

Редагувати: Говорячи далі про переваги та недоліки будь-якої архітектури ядра, Гернот Хайзер вільно визнає наприкінці своєї презентації [3], що монолітні ядра за своєю суттю є більш ефективними, оскільки мікроядро завжди має додаткові витрати. Хоча ці додаткові накладні витрати призводять до підвищення надійності, отже, домінування мікроядерних каналів RTOS.

[1] Луї Г. Гербарг, «Розширена синхронізація в Mac OS X: розширення Unix до SMP та реального часу», Матеріали конференції BSDCon 2002, стор. 2

[2] Шистофний діаметр, "Екстремальні високоефективні обчислення чи чому мікросотки висмоктуються", Сімпозіум Linux, 2007, перший том

[3] Гернот Хайзер, "Чи смокчуть мікрокернелі?", 9-й Linux.conf.au, січень 2008 р.


Я класифікував XNU та Windows NT як "гібридні" ядра
mmk

Дякуємо @DW за привітання. Я трохи прибрав свій пост і додав цитати.
Ironlenny

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