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

14

Микроядро реализует все драйверы как программы пользовательского пространства и реализует основные функции, такие как IPC, в самом ядре. Однако монолитное ядро ​​реализует драйверы как часть ядра (например, работает в режиме ядра).

Я читал некоторые утверждения, что микроядра работают медленнее, чем монолитные ядра, поскольку они должны обрабатывать передачу сообщений между драйверами в пространстве пользователя. Это правда?

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

Итак, что-нибудь изменилось в производительности микроядра? Эта критика микроядра все еще актуальна сегодня?

Магнитка
источник

Ответы:

11

Как всегда, это ответ (или, по крайней мере, предисловие) на вопросы, связанные с производительностью: знайте свою проблемную область, проводите сравнительные тесты и помните, что такое преждевременная оптимизация .

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

С учетом вышесказанного наблюдаются совершенно разные наблюдения за производительностью ядра в микроядрах; например, можно сказать, что семейство микроядра L4 имеет производительность IPC на порядок выше, чем ядро ​​Маха. Но на каждом устройстве Apple этого десятилетия работает Mach, и они, кажется, работают достаточно быстро, верно?

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

Ваша архитектура ядра должна основываться на конечной цели.

(А когда ничего не помогает, попробуйте оба способа и посмотрите, что получится.)

Адам Марас
источник
«Но на каждом устройстве Apple этого десятилетия работает Mach, и они, кажется, работают достаточно быстро, верно?» Это только частично правильно. «Ядром Darwin является XNU, гибридное ядро, использующее OSFMK 7.3 (ядро Маха Open Software Foundation) из OSF, различные элементы BSD (включая модель процесса, сетевой стек и виртуальную файловую систему) и объектно-ориентированный API драйвера устройства называется I / O Kit. Гибридное ядро ​​обеспечивает гибкость микроядра и производительность монолитного ядра ».
Бехранг Саидзаде
4

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

Что касается производительности, то единственное действительно глубокое сравнение монолитного и микроуровня, которое я могу найти, - это «Экстремальные высокопроизводительные вычисления или почему микрокереналы сосут» [2] и опровержение презентации «Микроядра сосут?» [3].

Модульность и настраиваемость - это больше вопросов проектирования, чем присущие монолитным ядрам ограничения. Например, размер ядра Linux может варьироваться от нескольких мегабайт до примерно одного мегабайта в зависимости от параметров времени компиляции и применения определенных исправлений. Подавляющее большинство из 15 миллионов строк кода Linux являются загружаемыми модулями ядра. Они компилируются отдельно от базового ядра и загружаются только при необходимости. Эти модули могут реализовывать драйверы и системные вызовы (даже переопределяя базовые системные вызовы).

Две области, в которых микроядра имеют неоспоримое преимущество, заключаются в малой памяти (<= 512 КБ оперативной памяти) или «жестких» операционных системах реального времени, таких как системы полетов авиакомпаний или системы управления ядерными реакторами.

Изменить: Говоря далее о преимуществах и недостатках любой архитектуры ядра, Gernot Heiser свободно признает в конце своей презентации [3], что монолитные ядра по своей природе более производительны, потому что микроядро всегда имеет некоторые дополнительные издержки. Тем не менее, эти дополнительные издержки приводят к повышению надежности, и, следовательно, доминированию микроядер в ОСРВ.

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

[2] Чистоф Ламетер, «Чрезвычайно высокопроизводительные вычисления или почему микроядра отстают», симпозиум Linux 2007, том первый

[3] Гернот Хайзер, «Неужели микроядра сосут?», 9-й Linux.conf.au, январь 2008 г.

Ironlenny
источник
Я классифицировал XNU и Windows NT как «гибридные» ядра
mmk
Спасибо @DW за прием. Я немного почистил свой пост и добавил ссылки.
Ironlenny
@mmk Извините, вы назвали их гибридами, я просто спешил сделать свой пост и неправильно прочитал.
Ironlenny