VMware的ESXi是一个备受关注的产品。许多人常常混淆ESXi与Linux内核之间的关系。
最常问到的问题是:
ESXi的内核其实就是Linux吗?
先说结论:曾经是,现在不是。
- 古老版本的ESX内核的确是用Linux内核(注意这个ESX没有i)。
- 转向新的ESXi后,Linux内核的依赖关系已经不存在。
- ESXi有自己的内核,称为vmkernel。
在这篇博文中,我们将深入探讨ESXi的架构及其与Linux内核的关系。一起来了解下ESXi的内核的历史。
ESXi的架构和内核的历史
ESXi是一种裸机(bare metal)虚拟化解决方案,它直接运行在硬件之上,而无需依赖操作系统,这一点与其他VMware产品有所不同。ESXi包含自己的内核,称为vmkernel。值得注意的是,在早期的VMware ESX版本中,Linux内核首先被启动,然后用于加载各种专用的虚拟化组件,包括vmkernel组件。可以说,当时的Linux内核是主要的虚拟机,由服务控制台调用。在正常运行时,vmkernel直接运行在物理计算机上,而基于Linux的服务控制台作为第一个虚拟机运行。
然而,自从VMware在4.1版本后停止开发ESX并转向ESXi后,ESXi中完全不再包含Linux内核。这个变革就意味着ESXi完全依赖于vmkernel来进行虚拟化管理,而不再需要Linux内核的支持。
vmkernel的角色
vmkernel是一个微内核,它提供了三个主要接口:硬件接口、客户系统接口和服务控制台(Console OS)接口。
硬件接口
vmkernel直接处理CPU和内存,使用扫描前执行(SBE)技术来处理特殊或特权的CPU指令,并利用系统资源分配表(SRAT)来跟踪已分配的内存。
模块访问
对于其他硬件(如网络或存储设备)的访问,则通过模块进行处理。这些模块中至少有一些是从Linux内核模块派生而来的。为了访问这些模块,vmkernel包含一个名为vmklinux的附加模块,它实现了Linux模块接口。根据README文件的说明,“这个模块包含vmkernel使用的Linux仿真层”。
总结:ESXi不是用Linux内核,ESXi的内核是vmkernel
虽然早期的VMware ESX依赖于Linux内核作为其服务控制台,但自从转向ESXi后,这种依赖关系已经不存在。ESXi的vmkernel独立于Linux内核运行,直接管理硬件资源,并通过专用的模块处理硬件访问。
目前的ESXi来说,尽管某些模块借鉴了Linux内核模块的设计,但这并不意味着ESXi本身包含或依赖于Linux内核。所以说,ESXi是一种独立的、专用的虚拟化解决方案,与Linux内核有着清晰的分界。