微内核vs整体内核的性能


14

微内核将所有驱动程序实现为用户空间程序,并在内核本身中实现IPC之类的核心功能。但是,单片内核将驱动程序实现为内核的一部分(例如,以内核模式运行)。

我已经读过一些说法,微内核比单片内核慢,因为它们需要处理用户空间中驱动程序之间的消息传递。这是真的?

长期以来,大多数内核都是单片的,因为硬件太慢而无法快速运行微内核。但是,现在有许多微内核和混合内核,例如GNU / Hurd,Mac OS X,Windows NT line等。

那么,微内核的性能是否发生了变化?这种对微内核的批评在今天仍然有效吗?

Answers:


11

与性能相关的问题一如既往的答案(或至少是前言):了解您的问题领域,运行比较基准,并记住什么是过早的优化

首先,没有全面的基准测试将单片内核与以等效方式运行的当代微内核系统进行比较。因此,尽管有可能比较这些内核的特定元素的试验,但它们并不能代表您的问题想要描绘的“全局”。

话虽如此,关于微内核的内核性能的观察结果却大相径庭。例如,可以说L4微内核家族的IPC性能比Mach内核高一个数量级。但是,这十年来的每台Apple设备都运行Mach,并且它们运行的​​非常快,对吧?

这个故事的寓意是,任何决定使用哪种内核体系结构的人都需要首先决定其最终目标是什么。微内核系统(当然,如果正确实施的话)会更加安全,可维护且模块化。但是,它们可能很难正确地进行架构设计,并且可能在整体实现上产生性能开销。单片内核将更快,但是安全性将更难以实现,模块化程度也将降低,易于定制。

您的内核体系结构应基于最终目标。

(然后,当其他所有方法都失败时,请尝试两种方法,然后看看会发生什么。)


“但是,这十年来,每台Apple设备都运行Mach,而且它们运行起来似乎很快,对吗?” 这只是部分正确。“达尔文的内核是XNU,它是一种混合内核,它使用来自OSF的OSFMK 7.3(开放软件基础Mach内核),BSD的各种元素(包括流程模型,网络堆栈和虚拟文件系统)以及面向对象的设备驱动程序API,称为I / O Kit。混合内核设计提供了微内核的灵活性和单片内核的性能。”
Behrang Saeedzadeh,

4

我更喜欢将Windows NT和Apple的XNU内核称为整体而不是混合。在实践中,我认为混合动力汽车的分类没有多大意义。实际上,XNU的原始工程师之一将其称为单片[1]。

在性能问题上,我能找到的唯一真正的单片芯片与微型芯片的比较是“极高性能计算或为什么微内核会吸” [2]和反驳性演讲“微内核会吸吗?” [3]。

模块化和可定制性比单片内核的固有限制更多的是设计问题。例如,取决于编译时选项和某些修补程序的应用,Linux内核的大小范围可以从几兆字节到一兆字节左右。Linux的1500万行代码中的绝大多数是可加载的内核模块。它们与基本内核分开编译,仅在需要时才加载。这些模块可以实现驱动程序和系统调用(甚至覆盖基本系统调用)。

微内核具有无可争议的优势的两个领域是低内存(<= 512k ram)或“硬”实时操作系统,例如飞机飞行系统或核反应堆控制系统。

编辑:在进一步讨论这两种内核体系结构的优缺点时,Gernot Heiser在演讲结束时自由地承认[3],因为微内核总是有一些额外的开销,因此单片内核本质上具有更高的性能。但是,这些额外的开销确实会导致可靠性提高,因此,微内核在RTOS中占主导地位。

[1] Louis G. Gerbarg,“ Mac OS X中的高级同步:将Unix扩展到SMP和实时”,BSDCon 2002会议论文集,第2页。

[2] Chistoph Lameter,“极端高性能计算或微内核为何吸引人”,2007 Linux研讨会,第一卷

[3] Gernot Heiser,“微内核能吸吗?”,第9版Linux.conf.au,2008年1月。


我将XNU和Windows NT分类为“混合”内核
mmk,2015年

感谢@DW的欢迎。我已经整理了一下帖子,并添加了引用。
Ironlenny

@mmk抱歉,您确实称呼他们为杂种,我只是急着要发表我的文章和误读。
Ironlenny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.