作者:Hari Pulapaka 2023年1月6日
Windows是一种多功能、灵活的操作系统,可在多种机器架构上运行,并有多种SKU。它目前支持x86、x64和ARM体系结构。它甚至曾经支持Itanium、PowerPC、Alpha和MIPS(wiki:http://en.wikipedia.org/wiki/Windows_NT)。Windows也可以在多种环境中运行;从数据中心、笔记本电脑和电话到ATM机等嵌入式设备。
即使有了所有这些支持,Windows的核心在所有这些架构和SKU上几乎保持不变。Windows可以动态扩展,这取决于其运行的体系结构和处理器,以充分利用硬件的功能。这同样适用于Microsoft Azure。因此,如果您曾经想知道Windows如何在数据中心运行Azure节点,请继续往下看!
正如Satya所说,“我们正在将Azure打造成世界级计算机”,为世界级计算机提供动能表明了Windows的扩展能力。为了展示这种规模,这里是数据中心M系列机器(Azure中可用的最大虚拟机之一,具有896个逻辑处理器)中直接在Azure主机上运行的taskmgr的快照。
M-series taskmgr
在这篇文章中,我们将讨论为数据中心的Azure主机服务的Azure主机操作系统的内部结构。
云主机–Azure主机操作系统
Azure是微软的云计算服务,它提供IaaS(基础设施即服务)虚拟机(VM)、PaaS(平台即服务)容器和许多其他SaaS服务(例如Azure Storge、Networking等)。对于IaaS和PaaS服务,所有客户代码最终都在虚拟机中运行。因此,在核心平台层,Azure主机操作系统的主要目的是管理虚拟机并将其管理得非常好!管理VM包括启动、关闭、实时迁移、更新等。
由于Azure使用Windows作为操作系统,所有这些虚拟机都作为Microsoft Hyper-V(即我们的虚拟机管理程序)的guest运行。Microsoft Hyper-v是一种type1(https://en.wikipedia.org/wiki/Hypervisor)的管理程序,因此,当我说Azure Host操作系统时,它在技术上是根操作系统。这是一个完全控制硬件并提供虚拟化设施以运行guest VM的操作系统。
请记住,我们使用的hypervisor与我们在所有数百万客户计算机上的Windows客户端和Windows服务器上使用的hypervisor相同。我们将在即将发布的博客文章中解释Microsoft Hyper-V的一些关键功能,这些功能允许Azure安全可靠地管理guest VM。
云主机
正如我提到的,Azure主机操作系统的目标是良好地管理VM的生命周期。这意味着Windows(或称Azure主机操作系统)不需要通常与Windows关联的大量功能来执行此功能。因此,我们创建了一个专门的控制台(没有GUI,有些人还称之为headless)版本的Windows,称为云主机。
这是基于OneCore的Windows版本。OneCore是所有Windows SKU系列(或版本)构建其功能的基础层。它是所有版本的Windows(PC、Windows Server、XBOX或IOT)所需的一组组件(可执行文件、DLL等)。如果拿编程类比的话,它是所有Windows类继承的基类(例如Object)。如果您查看OneCore内部以了解它提供的功能,您可以看到提供核心功能的API集,如内核、虚拟机监控程序、文件系统支持、网络、安全、Win32 API等。下图中调用的OneCoreUAP是用于构建客户端PC版本的稍高层的另一个示例,GUI堆栈和更高级别的网络组件,如媒体堆栈和WiFi。
OneCore中可用的一些代表性组件
我们如何构建云主机?
需要在Azure主机上运行少量代码,以与控制平面集成,并监控和管理容器/VM。基于对该代码的依赖集的分析,我们确定了Azure在OneCore之上需要的一组功能(DLL和API集)。然后将这些二进制文件(数十个二进制文件)添加到OneCore中,将其用作Azure主机的操作系统。
为了添加这些DLL,我们创建了一个名为云主机的全新SKU,并将所有这些二进制文件添加到云主机。您可以将云主机视为OneCore的“子类”。注意,我们必须创建一个新的SKU“云主机”,因为我们需要向OneCore添加新的二进制文件。我们可以直接将它们添加到OneCore中,但它更干净,可以创建专门构建的SKU/版本,同时保持OneCore未修改。换句话说,云主机是一个专门为运行数据中心中的Azure主机节点而设计和构建的SKU。您可能更熟悉其他Windows SKU,通常称为版本,如Pro、Enterprise等wiki:[https://en.wikipedia.org/wiki/Windows_10_editions]。云主机是一个类似的SKU/版本,仅用于数据中心中的Azure节点。
有了这个解释,让我们看看这个云主机。这是一张云主机WIM(https://en.wikipedia.org/wiki/Windows_Imaging_Format#:~:text=The%20Windows%20Imaging%20Format%20(WIM,Windows%20Fundamentals%20for%20Legacy%20PCs.)文件的图片(WIM文件就像一个zip文件,用于存储要启动的Windows映像)。您可以看到它的大小为280MB,比典型的PC WIM文件小10倍多。
这比您在PC上使用的任何Windows都要小得多,典型的客户端企业版WIM文件大小为3.6 GB。
云主机引导到控制台Shell中,体验通常类似于Windows Server Core。这是一张云主机会话的图片,来自我们的一台测试机器。
(请记住,我们通常不会登录到Azure主机节点,这纯粹是为了演示目的)
带有cmd shell、taskmgr和Regedit的云主机
您可能注意到的另一件事是,taskmgr甚至regedit看起来与您在Windows 11上看到的不同。这是因为正如我提到的,云主机是基于OneCore构建的,它是headless(或基于控制台的),因此它不包含任何Windows的GUI部分。我们有一个特殊的taskmgr和regedit版本,它与Windows11中的所有现代GUI功能都不相关联,这给了他们“老式”的外观。
API:什么样的代码可以在Azure主机节点上运行?
我们可以在Azure主机上运行C++、Python甚至Rust代码。要记住的主要一点是,作为一名开发人员,如果您正在构建代码以在Azure Host上运行(这只是我们的内部开发人员),您只能链接OneCore SDK(OneCore.lib)。我们在这里(https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-umbrella-libraries)记录了OneCore可用的API界面,以对应在这里(https://docs.microsoft.com/en-us/windows-hardware/drivers/develop/building-for-onecore)构建OneCore的信息。
随着对Azure云主机内部结构的深入了解,未来的博客文章将继续介绍更新Azure主机的代码和设计内部结构(例如,Tardicade、VM PHU、Hypervisor热重启和实时迁移)、内核/虚拟化功能、安全性以及操作系统平台中的许多其他领域。