文档目录架构 · 18 篇

宿主—客户机控制接口

说明专用控制台上承载的控制操作、特性协商位与控制会话语义,以及机密与执行环境应处的位置。

译自microsoft/nvx · doc/design/4.4-host-guest-control-interface.md。技术细节以英文原文为准。

架构文档 > 4. 客户机运行时架构

托管操作使用专用的控制台而不是启动控制台。外层传输由 VMM 掌管:定长分帧、同用户本地端点授权、能力认证、重连纪元以及接收信用反压;参见控制台。客户机代理掌管该数据流内部承载的工作负载协议。启动诊断和内核消息留在各控制台上,因此带帧的控制流量从不与它们共享无结构的字节流。

4.4.1 操作

表 4.2 列出了控制协议的操作。

表 4.2. 控制操作。

操作 用途
READY 报告就绪状态,也是那些不返回其他数据的请求的成功回复
FEATURES 报告客户机镜像提供哪些控制行为
MAPS 交付宿主映射表条目的一段连续区间
EXEC 运行一个工作负载,带超时与参数,以及可选的工作目录与环境
CANCEL 杀死该请求所指名的正在运行的执行
Shutdown 在两次执行之间优雅地关闭 VM

一次执行请求携带一个 32 位超时和带长度前缀的参数,并可选地携带一个最长 4,096 字节的绝对工作目录,以及最多 256 个 KEY=VALUE 环境项,每项最长 4,096 字节,且键各不相同并且非空。该环境要么替换默认环境,要么叠加在默认环境之上,每个条目替换同名的默认变量。输出在信用窗口内以彼此独立的标准输出和标准错误流返回,每次执行的合计上限为 1 MiB。如表 4.3 所示,一次已运行的执行以一份退出报告结束,其中携带一个结果类别和一个状态。

表 4.3. 退出结果。

结果 含义
exit 工作负载已退出;状态就是它的退出状态
signal 一个信号结束了工作负载;状态是 128 加信号编号
timeout 工作负载超出其超时并被杀死;状态是 124
cancelled 一次取消杀死了工作负载;状态是 137
output-limit 工作负载的合计输出超过 1 MiB,客户机代理杀死了它;状态是 125
failed 客户机代理无法监管该工作负载;状态是 125

否则,客户机代理以一份错误作为回复,其中携带表 4.4 中的某个类别和一个状态。错误用于拒绝客户机代理无法执行的请求,或者代替那些无法启动、或其进程无法被客户机代理计入的执行本应给出的退出报告。

表 4.4. 错误类别。

类别 含义
launch-failed 客户机代理无法准备该次执行
cwd-failed 工作负载无法进入其工作目录;状态是错误号
containment-failed 客户机代理无法证明每个工作负载进程都已退出
mapping-failed 某个宿主映射无法挂载
mappings-incomplete 并非每个通告的宿主映射都已被挂载
busy 另一次执行正在运行
invalid-request 该请求格式错误,或在当前配置下无效
unsupported-operation 客户机未实现该操作

4.4.2 特性协商

一次成功的就绪探测并不能证明镜像强制执行了宿主所依赖的行为。因此,如表 4.5 所示,FEATURES 请求返回一个四字节的小端控制特性位掩码。

表 4.5. 控制特性位。

位 特性
0 取消
1 保留;永不设置
2 工作负载账号创建
3 每次执行的 cgroup 收敛
4 每次执行的环境
5 工作目录拒绝
6 宿主映射表

无块托管根提供全部六项特性;分层沙箱根提供取消、工作负载账号创建和每次执行的环境。一个特性位与它所命名的行为一同加入。宿主会忽略未知位和尾随字节,把 unsupported-operation 拒绝视为没有特性,并终止缺少所需特性的客户机,而不是在没有所请求策略的情况下运行工作负载。

4.4.3 会话语义

请求是有类型的、有长度上限的、有序的,并与一个 VM 实例和一个纪元相关联。信用上限在两个方向上约束排队数据。格式错误、未认证、过期、重复或乱序的记录一律故障关闭(fail closed)。同一时间只有一个执行在运行;执行期间到达的任何非取消请求都被拒绝为 busy。因此,优雅关机只发生在两次执行之间:宿主在请求关机之前取消正在运行的执行,否则就终止 VM,从而让该执行失败。

即使客户机解析器状态被快照,控制会话仍是进程本地的。恢复会建立新的宿主能力、对端身份、实例和纪元,客户机代理在任何宿主数据到达它们之前确认新的实例。因此捕获之前的请求永远不可能被重放进克隆或恢复的进程中。

机密与每次执行的环境应放在经认证的控制通道上,而不是内核命令行、镜像层、暂存盘或快照元数据中。机器配置文件所拥有的启动配置只包含控制通道存在之前所需的无机密不变量。