~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/virt/ne_overview.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 .. SPDX-License-Identifier: GPL-2.0
  2 .. include:: ../disclaimer-zh_CN.rst
  3 
  4 :Original: Documentation/virt/ne_overview.rst
  5 
  6 :翻译:
  7 
  8  司延腾 Yanteng Si <siyanteng@loongson.cn>
  9 
 10 :校译:
 11 
 12  时奎亮 Alex Shi <alexs@kernel.org>
 13 
 14 .. _cn_virt_ne_overview:
 15 
 16 ==============
 17 Nitro Enclaves
 18 ==============
 19 
 20 概述
 21 ====
 22 
 23 Nitro Enclaves(NE)是亚马逊弹性计算云(EC2)的一项新功能,允许客户在EC2实
 24 例中划分出孤立的计算环境[1]。
 25 
 26 例如,一个处理敏感数据并在虚拟机中运行的应用程序,可以与在同一虚拟机中运行的
 27 其他应用程序分开。然后,这个应用程序在一个独立于主虚拟机的虚拟机中运行,即
 28 enclave。
 29 
 30 一个enclave与催生它的虚拟机一起运行。这种设置符合低延迟应用的需要。为enclave
 31 分配的资源,如内存和CPU,是从主虚拟机中分割出来的。每个enclave都被映射到一
 32 个运行在主虚拟机中的进程,该进程通过一个ioctl接口与NE驱动进行通信。
 33 
 34 在这个意义上,有两个组成部分。
 35 
 36 1. 一个enclave抽象进程——一个运行在主虚拟机客体中的用户空间进程,它使用NE驱动
 37 提供的ioctl接口来生成一个enclave虚拟机(这就是下面的2)。
 38 
 39 有一个NE模拟的PCI设备暴露给主虚拟机。这个新的PCI设备的驱动被包含在NE驱动中。
 40 
 41 ioctl逻辑被映射到PCI设备命令,例如,NE_START_ENCLAVE ioctl映射到一个enclave
 42 启动PCI命令。然后,PCI设备命令被翻译成在管理程序方面采取的行动;也就是在运
 43 行主虚拟机的主机上运行的Nitro管理程序。Nitro管理程序是基于KVM核心技术的。
 44 
 45 2. enclave本身——一个运行在与催生它的主虚拟机相同的主机上的虚拟机。内存和CPU
 46 从主虚拟机中分割出来,专门用于enclave虚拟机。enclave没有连接持久性存储。
 47 
 48 从主虚拟机中分割出来并给enclave的内存区域需要对齐2 MiB/1 GiB物理连续的内存
 49 区域(或这个大小的倍数,如8 MiB)。该内存可以通过使用hugetlbfs从用户空间分
 50 配[2][3]。一个enclave的内存大小需要至少64 MiB。enclave内存和CPU需要来自同
 51 一个NUMA节点。
 52 
 53 一个enclave在专用的核心上运行。CPU 0及其同级别的CPU需要保持对主虚拟机的可用
 54 性。CPU池必须由具有管理能力的用户为NE目的进行设置。关于CPU池的格式,请看内核
 55 文档[4]中的cpu list部分。
 56 
 57 enclave通过本地通信通道与主虚拟机进行通信,使用virtio-vsock[5]。主虚拟机有
 58 virtio-pci vsock模拟设备,而飞地虚拟机有virtio-mmio vsock模拟设备。vsock
 59 设备使用eventfd作为信令。enclave虚拟机看到通常的接口——本地APIC和IOAPIC——从
 60 virtio-vsock设备获得中断。virtio-mmio设备被放置在典型的4 GiB以下的内存中。
 61 
 62 在enclave中运行的应用程序需要和将在enclave虚拟机中运行的操作系统(如内核、
 63 ramdisk、init)一起被打包到enclave镜像中。enclave虚拟机有自己的内核并遵循标
 64 准的Linux启动协议[6]。
 65 
 66 内核bzImage、内核命令行、ramdisk(s)是enclave镜像格式(EIF)的一部分;另外
 67 还有一个EIF头,包括元数据,如magic number、eif版本、镜像大小和CRC。
 68 
 69 哈希值是为整个enclave镜像(EIF)、内核和ramdisk(s)计算的。例如,这被用来检
 70 查在enclave虚拟机中加载的enclave镜像是否是打算运行的那个。
 71 
 72 这些加密测量包括在由Nitro超级管理器成的签名证明文件中,并进一步用来证明enclave
 73 的身份;KMS是NE集成的服务的一个例子,它检查证明文件。
 74 
 75 enclave镜像(EIF)被加载到enclave内存中,偏移量为8 MiB。enclave中的初始进程
 76 连接到主虚拟机的vsock CID和一个预定义的端口--9000,以发送一个心跳值--0xb7。这
 77 个机制用于在主虚拟机中检查enclave是否已经启动。主虚拟机的CID是3。
 78 
 79 如果enclave虚拟机崩溃或优雅地退出,NE驱动会收到一个中断事件。这个事件会通过轮询
 80 通知机制进一步发送到运行在主虚拟机中的用户空间enclave进程。然后,用户空间enclave
 81 进程就可以退出了。
 82 
 83 [1] https://aws.amazon.com/ec2/nitro/nitro-enclaves/
 84 [2] https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html
 85 [3] https://lwn.net/Articles/807108/
 86 [4] https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
 87 [5] https://man7.org/linux/man-pages/man7/vsock.7.html
 88 [6] https://www.kernel.org/doc/html/latest/x86/boot.html

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php