v1 2026-11-12

新增Nitro沙箱支持 · v1

为 Nitro Enclaves 增加 Nitro Sandboxes,扩展 hypervisor 接口以支持父 VM virtio 设备、vCPU 超分、热插拔和无证明启动。

原始补丁链接

子 Patch(39)

1/39
nitro_enclaves: Allow the CPU pool to span NUMA nodes
修改 nitro_enclaves 的 ne_cpus CPU 池解析与分配,允许池跨 NUMA 节点,以支持 Nitro Sandbox 跨节点放置并运行在非 0 号节点。
2/39
nitro_enclaves: Add NE_ADD_ANY_VCPU
新增 NE_ADD_ANY_VCPU ioctl,以 nid 从指定 NUMA 节点 CPU 池自动选 vCPU,返回 CPU id 或 NE_ERR_NO_CPUS_AVAIL_IN_POOL;并校验 args size。
3/39
nitro_enclaves: Expose CPU pool state under sysfs
在 /sys/devices/virtual/misc/nitro_enclaves/cpu_pool/ 下以二进制属性暴露 total/used/avail,并按 nodeN 分目录,供编排器判断各节点剩余 CPU 容量。
4/39
nitro_enclaves: Document multi-NUMA CPU pools
在 ne_overview.rst 说明多 NUMA CPU 池、自动选 CPU、内存局部性检查及 per-node sysfs 规则,并让 cpu_pool ABI 文档指向该节。
5/39
dma-contiguous: add dma_get_numa_cma_area() accessor
新增 dma_get_numa_cma_area() 暴露 dma_contiguous_numa_area[] 中按 NUMA 节点的 DMA CMA 区域,供无 per-node device 的 nitro_enclaves 自行基于 cma_alloc() 构建节点内存池。
6/39
nitro_enclaves: Add NE_ALLOC_MEMORY ioctl
新增 NE_ALLOC_MEMORY,用 CMA 分配大块物理连续内存并以类似 guest_memfd 的 fd 暴露,避免 hugetlbfs/mmap 捐赠后用户仍可访问且残留页表,减少 slot 数。
7/39
nitro_enclaves: Add NE_MEMORY_SHARED
为 NE_ALLOC_MEMORY 增加 NE_MEMORY_SHARED 标志,使分配可被父端 mmap,用于读取设备写入的状态以及共享 virtqueue/缓冲区,支撑 Nitro Sandbox 共享内存。
8/39
nitro_enclaves: Add NE_ADD_MEMORY_REGION
新增 NE_ADD_MEMORY_REGION,用 NE_ALLOC_MEMORY 的 fd 为 slot 绑定内存;加入后禁止用户 write() 并视为已捐赠,暂不支持 SHARED 映射直接模式。
9/39
nitro_enclaves: Document the memory pool
在 ne_overview.rst 记录 CMA 内存池的预留参数、NE_ALLOC_MEMORY 分配与写入、NE_ADD_MEMORY_REGION 绑定流程,以及 private/shared 分配差异和生命周期。
10/39
nitro_enclaves: Add NE_CREATE_VM2 with a launch flag word
新增 NE_CREATE_VM2,在 ne_create_vm_args 中加入 slot 启动标志字并复用返回 slot id;本补丁未定义标志,置位即返回 -NE_ERR_INVALID_FLAG_VALUE。
11/39
nitro_enclaves: Add NE_ENCLAVE_PCIE_MODE launch flag
定义 NE_ENCLAVE_PCIE_MODE 并通过 payload_version=1 在 SLOT_ALLOC 中传 flag word;设备无相应 PCI capability 时返回 -EOPNOTSUPP,旧设备维持全零请求。
12/39
nitro_enclaves: Name the device's error codes in the UAPI header
在 UAPI 头文件命名设备返回的 NE_ERR_* 码,并划分驱动 256+、设备 276–511、驱动专用 1024+ 三区间,避免新增错误码冲突且用户态可识别。
13/39
nitro_enclaves: Add NE_SET_INFO_PAGE
新增 NE_SET_INFO_PAGE,把 NE_MEMORY_SHARED 分配注册为设备写入、父端读取的 info page,并在映射层强制该页对用户空间只读,用于共享 slot 内设备状态。
14/39
nitro_enclaves: Document the info page in the memory pool
文档说明 info page 占用 CMA 预留池的连续分配,映射前注册、之后用户只读并保活,大 NE_ALLOC_MEMORY 会分多次返回,提醒管理员留空间。
15/39
nitro_enclaves: Turn the command reply into a per-command union
把 ne_pci_dev_cmd_reply 改为按命令 union,各 arm 保持设备 72 字节 BAR 回复窗口固定偏移,并用 static_assert 固化布局,避免回复载荷别名。
16/39
nitro_enclaves: Add the slot pool donation commands
新增 slot 描述符捐赠命令与寄存器,定义设备请求的内存大小,为父实例捐赠槽池内存以启动更多 Nitro Sandboxes 做准备。
17/39
nitro_enclaves: Donate memory for the slot pool
probe 用 ne_alloc_contig 捐赠槽池;拆解先 ne_enclave_free_slot 再 SLOT_POOL_SHUTDOWN 收回内存,确保 unbind/kexec 后设备可复用且页不进入 allocator。
18/39
nitro_enclaves: Add the slot pool growth commands
新增 SLOT_POOL_MEM_DONATE 与 SLOT_POOL_GET_LIMITS 命令及回复 union arm,报告两半池计数和单次捐赠增加的槽数,供运行时判断扩哪一半。
19/39
nitro_enclaves: Add a helper to grow the slot pool
新增扩池辅助函数:对外只暴露单一最大槽数,内部维护两个槽计数器并取 MIN,扩池时同时提升两者以满足用户设置的上限。
20/39
nitro_enclaves: Document the slot pool
文档说明槽池两半:哪个设备请求、probe 捐赠什么、如何增长、CMA 来源及何时归还,帮助管理员正确预留 CMA。
21/39
nitro_enclaves: Expose slot pool state under sysfs
在 misc 设备的 slot_pool/ 下导出池大小、捐赠量和上限;写 limit 可扩池且仅支持增大,减小需卸载驱动。
22/39
nitro_enclaves: Add the device add command
定义设备添加命令,描述 virtio 类型、VQ 数、feature、config space 及 DMB/SHM 后备范围,完整响应放在 info page 返回偏移处。
23/39
nitro_enclaves: Add NE_ADD_DEVICE
新增 NE_ADD_DEVICE ioctl,用户态提交类型、feature、config 和指向 NE_ALLOC_MEMORY 的 ne_shm_region,成功后含 VQ 映射的设备信息写入 info page。
24/39
nitro_enclaves: Read the interrupt multiplexer geometry at probe
probe 读取复用器 NE_MUX_NUM_VECTORS/BASE,并拒绝超过 NE_MUX_MAX_VECTORS、设备向量数或与回复/事件向量重叠的配置。
25/39
nitro_enclaves: Donate a bitmap page per multiplexed vector
probe 为每个复用向量向 NE_MUX_DONATE_BASE 捐赠清零 bitmap 页并检查 ERR,每页容纳 NE_MUX_MAX_BITS 位;拆解先写 NE_MUX_SHUTDOWN 再释放。
26/39
nitro_enclaves: Dispatch multiplexed interrupts to per-queue bindings
实现复用中断处理:读取 bitmap 找出置位队列,按每队列 eventfd 绑定分发事件并清除状态,支撑 Nitro Sandboxes 的 per-virtqueue 通知。
27/39
nitro_enclaves: Add NE_SET_NOTIFY_EVENTFD
新增 NE_SET_NOTIFY_EVENTFD,将 eventfd 绑定到队列 notify index,复用器收到 kick 时唤醒;重绑替换、UNBIND 丢弃待处理通知,且只接受本 enclave 已报告的索引。
28/39
nitro_enclaves: Report the device's info notification
设备更新 info page 时经复用器发事件;在 SLOT_ADD_DEVICE 响应中返回 info_notify_index,用户态可像 VQ 事件一样绑定 eventfd 接收设备更新通知。
29/39
nitro_enclaves: Count multiplexed interrupts under debugfs
在 debugfs 的 mux_vectors 和 notifications 中统计复用中断处理与 eventfd 绑定次数,便于排查 Nitro Sandboxes 事件投递。
30/39
nitro_enclaves: Map the doorbell window at probe
probe 可选映射设备第二个 MMIO BAR 的 doorbell 窗口并记录长度,用于校验队列 doorbell 偏移;无窗口时仍支持不涉及 virtqueue 的操作。
31/39
nitro_enclaves: Add NE_SET_VRING_CALL
新增 NE_SET_VRING_CALL,把 eventfd 绑定到 NE_ADD_DEVICE 报告的 doorbell 偏移;用户态 signal 后驱动写对应队列 doorbell,通知 sandbox 有数据。
32/39
nitro_enclaves: Assert the layout of the ioctl argument structs
用 static_assert 固化 uapi ioctl 结构体大小及所有成员偏移,防止同宽字段交换等 ABI 破坏逃过 sizeof 检查。
33/39
nitro_enclaves: Pass on the Nitro Sandbox launch flags
定义并透传 VSOCK、VIRTIO、NUMA 三种 NE_ENCLAVE_PCIE_* 启动标志,创建 slot 时校验仅接受已知位,以便早于启动配置功能。
34/39
nitro_enclaves: Add NE_ENCLAVE_DIRECT_MODE
新增 NE_ENCLAVE_DIRECT_MODE,向 hypervisor 申请 direct-mode slot 并记录 launch_flags;允许该 slot 的 NE_ADD_MEMORY_REGION 使用 NE_MEMORY_SHARED。
35/39
nitro_enclaves: Add NE_ENCLAVE_PCIE_HOTPLUG_MODE
新增 NE_ENCLAVE_PCIE_HOTPLUG_MODE,申请支持热插的 slot,并允许带该标志的运行中 enclave 通过 NE_ADD_DEVICE 添加设备。
36/39
nitro_enclaves: Add NE_ENCLAVE_CPU_OVERCOMMIT_MODE
新增 NE_ENCLAVE_CPU_OVERCOMMIT_MODE,放宽专用 vCPU 校验与池化逻辑,让 hypervisor 在父 vCPU 上调度 sandbox vCPU,实现 CPU 超分。
37/39
nitro_enclaves: Add NE_GET_CAPS
新增 NE_GET_CAPS,返回 info page 大小、设备/队列/config 上限、NE_CAP_*、ABI 版本及内核与 hypervisor 支持的 launch flags。
38/39
nitro_enclaves: Add NE_UPDATE_DEVICE_CONFIG
新增 NE_UPDATE_DEVICE_CONFIG ioctl,用户态在 sandbox 运行时提交完整 virtio config space,驱动更新设备配置并触发配置变更通知。
39/39
nitro_enclaves: Document the driver side of Nitro Sandboxes
文档汇总驱动侧:NE_GET_CAPS、NE_CREATE_VM2 启动标志、direct mode、info page 先行、NE_ADD_DEVICE 返回及双向事件,并链接 AWS 用户文档。