4

我是 unikernels 的新手,以下链接对我理解它们没有多大帮助:

  1. 什么时候使用单核更好?
  2. 就代码大小而言,unikernel 如何小于微内核?
4

3 回答 3

7

术语“unikernel”和“microkernel”表示不同的东西,并不是两个真正的两个对立面或两个您需要从中选择的选择:

“微内核”是一个较旧的术语,是一种内核设计,与单片机形成对比核心。在单体内核中,顾名思义,整个内核是一个单独的程序,它实现了用户应用程序所需的内核API(例如,Unix系统调用、线程、进程、文件系统等)。与此相反,在微内核设计中,我们有一个“微内核”,一个非常小的内核,它实现了一个小的 API(例如,执行线程、权限和消息传递的一个非常基本的概念),并且位于它之上内核的一个更大的部分,它实现了应用程序所需的完整 API——实际的文件系统、行为类似于 Unix 进程的进程、系统调用等等。在 1990 年代初期,有一种学术理解是,编写单体内核已经变得太难且太容易出错,而微内核是未来的方向,但随后出现了 Linux(这是一个单片内核),并将这个结论变成了一个笑话。今天,您不应该根据是使用微内核还是单片内核来选择内核。这是用户很少关心的实现细节。

“unikernel”是一个较新的概念。传统内核以能够在同一台物理机器上多路复用许多不同的用户和应用程序而感到自豪。1974 年关于 Unix 的著名论文被称为“UNIX 分时系统”,因为分时(即多路复用多个用户和应用程序)是操作系统最重要的目标之一。但是今天,关注虚拟机而不是物理机,有一种不同的方式(即管理程序)可以将物理机拆分为不同的虚拟机。所以很多时候,每个虚拟机只运行一个属于一个所有者的应用程序。这提供了一个运行精简内核的机会,它不需要支持许多传统内核支持的东西:无需支持不同用户之间的隔离;无需支持数千个驱动程序(所有已知的管理程序都需要一小部分驱动程序);无需支持不同进程之间的隔离。

修剪所有不必要的东西会使内核更小,这对于快速部署新虚拟机、降低内存使用量以及提高性能都有很大的好处。例如,您可能最近听说过,Linux 内核被修补以修复当代 CPU 中的“Meltdown”漏洞。该修复程序减慢了 Linux 上的系统调用和上下文切换,这是必需的,因为没有它,一个进程可以读取其他进程的内存。但如果我们知道没有其他进程——VM 上只有一个应用程序在运行——我们不在乎。因此,unikernel 不需要通过崩溃变通方法来降低自身速度。系统调用可以像函数调用一样快,上下文切换要快得多,等等。

例如,像 OSv 这样的一些 unikernels 完成了上述操作,并提供了一个模仿传统内核(即 Linux)的内核,但没有不受支持的功能,例如多用户或多个隔离进程(尽管支持非隔离线程) . 其他 unikernel 更进一步寻求精简内核,并为每个应用程序提供不同的内核构建,其中包括该特定应用程序所需的特定功能。例如,要运行 TCP 应用程序,您可以使用仅支持 TCP 协议但不支持 UDP 的内核。您可以将其视为内核和应用程序链接在一起形成一个统一的内核应用程序,该内核应用程序直接在管理程序上运行。

何时以及为什么使用 unikernel(上述任何变体)是一个悬而未决的问题。当然,如果需要考虑使用少量磁盘或内存,那么 unikernel 是一个不错的选择。如果您担心安全性并计划审核您的代码,那么 unikernel 需要审核的代码要少得多。在需要快速启动的应用程序中(例如,实现“功能即服务”),unikernels 允许非常快速的启动,明显少于 1 秒,因为启动执行的“通用”内容要少得多,并且专注于您的应用程序真正的内容需要。这些示例还可以告诉您何时不应该考虑使用 unikernel:如果您的应用程序无论如何都使用大量磁盘和内存(例如,数据库应用程序),那么从内核大小中减少一点不会有太大帮助. 如果您的应用程序运行数小时,快速启动并不重要。如果您的应用程序使用了很多操作系统功能,那么我上面描述的许多更专业的 unikernel 可能无法提供您的应用程序所需的所有功能。

于 2018-12-27T08:38:30.350 回答
2

总而言之,(应用程序 + unikernel)称为运行在虚拟机管理程序(云)上的工作负载相当于在嵌入式世界中运行在裸机上的独立应用程序。

当应用程序(工作负载)不使用大多数操作系统和设备驱动程序服务时,云中的 Unikernel 会更好。

Unikernel 仅使用内核的已使用功能而不是微内核中的必要功能进行编译,因此尺寸很小。

于 2017-10-18T08:18:21.227 回答
0

Unikernel 是简单的单一应用程序操作系统。与其将我们的软件部署在 linux unikernels 之上,不如从我们的应用程序中创建一个操作系统并只运行该应用程序——没有别的。

没有用户名/密码的概念,也没有进入应用程序的概念,因为它只运行一个应用程序。传统上,unikernel 很难使用,因为它们过去需要专家级的系统知识。

更多信息:https ://bootsity.com/php/running-php-unikernels-on-google-cloud

于 2019-05-22T11:52:02.273 回答