最近了解到 UniKernel,觉得很有意思。UniKernel的思想是把一个系统的内核、驱动、网络堆栈、应用逻辑等以源码或者静态库的形式送进编译器,充分利用编译器的优化能力进行全局优化,以发挥硬件的最大性能。

我们日常使用的操作系统可以看作是一个提供C/C++动态链接库的运行时环境,而UniKernel是把操作系统的所有服务以静态库的形式提供给应用程序。开发UniKernel应用程序更像开发单片机应用程序,只能使用交叉编译。UniKernel应用也可以像嵌入式应用一样,可以裁剪一些不必要的功能,但是UniKernel最后生成的程序是只运行在一个地址空间里,没有内核空间和用户空间,没有多进程的概念。

UniKernel在1990年就有人提出来了,但是并没有在桌面市场和服务器上得到大规模应用,主要原因可能包括:

1、早期的硬件市场竞争激烈,技术发展迅速,驱动程序的接口还不稳定,厂商也不愿意开源全部的驱动程序

2、编译器技术还不够发达,编译器的优化不明显

3、UniKernel模式的系统在需要添加功能时需要重新编译安装整个系统,远不如传统操作系统灵活。

虚拟化技术通过虚拟的标准硬件解耦了物理硬件驱动程序和操作系统。传统操作系统提供了解耦应用程序和驱动程序的API/接口。在云计算时代初期,大家还是按照传统的模式,在虚拟机里先安装操作系统,应用程序先访问操作系统的API,操作系统通过虚拟硬件的驱动程序访问虚拟机监视器模拟的标准化虚拟硬件,虚拟机监视器再通过驱动程序访问的物理硬件。虽然有写时复制、DMA、各种直通技术等可以避免一些层层转发的性能损失,但是还是有人相信:不调用操作系统提供的API,直接在编译时集成虚拟硬件的驱动源码可以使应用程序跑得更快。现在这两种技术路线开始了竞争。第二种路线就是UniKernel。还有一些传统操作系统提供的服务也逐渐被云服务或者新技术替代,比如块储存替代了文件系统。

开源的Unkikernel项目有:

HermTux https://ssrg-vt.github.io/hermitux/

#includeOS:https://github.com/includeos/IncludeOS

rusty-hermit: https://github.com/hermitcore/rusty-hermit

Mirage:https://github.com/mirage/mirage

UniKernel 的直接竞争者是容器docker, 只是无论是unikernel 还是docker并不能完全替代传统的操作系统,只是我们可以开始反思,我们的应用真的需要那么一个大而全的系统吗?开发UniKernel应用程序更像开发单片机应用程序。

在云计算流行的时代,Unikernel被当作一种轻量级虚拟化技术。它的目标是最小化操作系统的复杂性,以提供高性能、低资源消耗和高度定制化的虚拟化解决方案。与传统的操作系统不同,unikernels是高度优化和裁剪的,通常专门为单个应用程序或服务设计,以在虚拟化环境中运行。

以下是unikernel的有点:

  1. 最小化:Unikernels通常包含应用程序代码和必需的运行时组件,而不包括传统操作系统中的多余功能。这使它们非常轻巧,可以减少资源消耗。
  2. 高性能:由于它们的小巧和定制性,unikernels通常具有出色的性能,特别适用于需要低延迟和高吞吐量的应用程序,如网络功能虚拟化(NFV)和边缘计算。
  3. 安全性:Unikernels可以提供更高的安全性,因为它们减小了攻击面,只包含应用程序和相关运行时组件。这降低了潜在的漏洞和攻击风险。
  4. 高度定制化:开发人员可以为特定应用程序定制unikernels,以满足其特定需求。这可以提高应用程序的效率和性能。
  5. 启动速度快:由于它们的轻巧性质,unikernels通常能够在较短的时间内启动,适用于需要快速扩展和自动化的场景。
  6. 不可变性:一旦构建和部署unikernel,它们通常是不可变的,即不能在运行时进行修改。这有助于提高稳定性和安全性。

Unikernels通常在虚拟化环境中运行,可以通过各种unikernel框架(如MirageOS、OSv、Rumprun等)构建和部署。它们适用于各种应用程序场景,包括云计算、容器化、边缘计算和嵌入式系统等领域。然而,unikernels可能不适用于所有应用程序,因为它们需要对应用程序进行更多的重构和优化工作。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据