大型机上的虚拟化架构 (z/Architecture)

Virtualization architecture on mainframe (z/Architecture)

我有兴趣研究了 Intel 和 AMD 添加到 x86 架构的硬件虚拟化扩展(分别称为 VMX 和 SVM)。虽然这仍然是 x86 CPU 的一个相对较新的补充,但我的理解是,自 70 年代到 80 年代以来,大型机架构广泛使用了虚拟化,例如以古老的 z/VM 操作系统的形式。连嵌套虚拟化都用上了

我的问题是,是否有 z/VM 操作系统使用的 z/Architecture 提供的硬件设施的 public 文档来实现此虚拟化? IE。硬件实现的控制寄存器和数据结构允许管理程序模拟客户状态并捕获必要的指令?我很好奇的另一件事是 z/Architecture 是否支持二级地址转换(后来添加到 VMX 和 SVM)。

为了解决这个问题,System/370 及其所有后代都按原样支持虚拟化(它们满足 virtualization requirements)。从这个意义上讲,与英特尔架构相反,不需要特殊的硬件支持。

VM 来宾在 System/370、XA、ESA 等上的性能改进一直到 z/Architecture 传统上都是使用 DIAG(诊断)指令和微代码实现的(现在是毫码)协助。用现代术语来说,它更像是半虚拟化。这些设施都有记录,你可以开始 here 例如。

更新 - 在阅读了大量评论、一些注释和说明之后。

  1. S/370 及其后代从不需要专门的硬件虚拟化支持来正确 运行 来宾操作系统 - 不是因为虚拟化是初始设计和要求的一部分 - 它不是',而是因为该体系结构经过适当设计以支持安全的多用户环境。 Popek 和 Goldberg 的虚拟化要求实际上很弱——本质上,只有特权指令才能影响系统配置。这个要求甚至是 S/370 的前身 System/360 的一部分,远早于第一个虚拟化系统出现。

  2. VM 来宾的性能改进沿着两条线进行。

    • 首先,半虚拟化方法——本质上是为 guest-hypervisor 通信开发 well-architected API。它不仅用于性能,还用于各种其他服务,例如 inter-VM 通信。 API 记录在上面提到的手册中。

    • 其次,微码扩展(VM 微码辅助)在微码级别(本质上是硬件级别)执行一些对性能敏感的管理程序逻辑。那不是半虚拟化,而是正确的硬件虚拟化支持。但在早期的 370 机器中,这种支持没有架构,这意味着它是 model-dependent 并且可能会发生变化。在 370/XA 中,IBM 引入了一种支持 high-performance 虚拟化的适当架构方式,即 Start Interpretive Execution (SIE) 指令。此说明未记录在操作原理中,而是记录在单独的出版物 IBM System/370 XA Interpretive Execution. (This document is referenced multiple times in Principles of Operation. The link refers to the first version of the document, you can download version 2 here 中。我不确定该出版物是否曾经更新过 - 可能这是最新版本。)此外,I/O 子系统也提供了 VM 辅助。

我没有在我的原始答案中提及 SIE 说明和记录它的手册,这是故事的关键部分。我感谢问题的作者和广泛的评论,促使我检查我的记忆并弄清楚我跳过了重要的技术背景。 This presentation 提供了对 z/VM 核心设施的出色概述,涵盖了内存管理、I/O、网络等其他方面。

SIE 指令是虚拟化软件访问 z/Architecture 解释执行工具 (IEF) 的方式。该界面的确切细节自 1990 年代初以来一直没有公布。

这是一项基于硬件的功能。 IEF 提供两个级别的虚拟化。第一级被固件(通过 SIE 指令)用来创建 partitions。在每个分区中,您可以 运行 一个操作系统。其中一个操作系统是 z/VM。它使用 SIE 指令(运行ning 在第一级 SIE 指令的上下文中)到 运行 虚拟机 。您可以在虚拟机中 运行 任何 z/Architecture 操作系统,包括 z/VM 本身。

SIE指令将虚拟服务器(分区或虚拟机)的描述作为输入。然后硬件 运行 发送虚拟服务器的指令流,仅在它需要发出 SIE 指令的任何帮助时停止,无论它是分区管理程序还是 z/VM 管理程序。