这是TDX官网新发布的文档,其中涉及了对TDX实际操作。
介绍
本文档应被视为报告英特尔®信任域扩展 (Intel® TDX) 对基于内核的虚拟机 (KVM) 的性能影响的参考文档,并应与 KVM/Linux 的其他官方性能建议结合使用。
本文档考虑进行性能比较的场景是 - 在满足工作负载的 SLA(服务级别协议)时,操作环境中的工作负载可实现的最大吞吐量(例如,响应时间<Redis 为 1ms)。这通常意味着操作环境的资源利用率得到了最大化。例如,所有或相应的 CPU 都已饱和,或者 I/O 设备(如网卡或磁盘)已饱和,或者内存带宽处于瓶颈状态。
本文档提供了操作环境优化配置的基本指南、Intel® TDX 性能的基本健全性检查以及报告性能影响的指标。
1.0 主机配置(参考)
启用英特尔 TDX 相关的 BIOS 设置,在主机上安装英特尔 TDX 支持的内核和 QEMU*,并设置英特尔 TDX 客户机映像。
1.1 我的理解
类比SGX,准备好带有TDX功能的硬件(四代或者五代至强cpu)后,首先在BIOS里启动TDX功能,接着就是相应的Linux版本也需要支持TDX,Ubantu24.04就说了支持Intel机密计算的TDX功能。最后就是下载安装TDX包,并托管和保护 TD 客户机的 KVM 主机。
2.0 客户机配置(copy)
考虑了 8 个 vCPU 和 32GB 内存的样本客户机大小。
2.1旧版VM
BIOS 中的“Total Memory Encryption Bypass”选项允许在与 Intel TDX Guest 相同的主机上运行传统的非机密客户机,从而最大限度地减少对性能的影响。但是,管理员可以禁用步骤 3 中提到的所有与英特尔 TDX 相关的 BIOS 旋钮,以实现完全非机密的计算环境。
下面是从主机运行的示例参考命令,其中客户机分配在 NUMA 节点 0 上,启用调试线程以帮助识别 qemu/vhost 进程并将其关联到物理 CPU,禁用 PMU,缓存设置为 none 以防止在主机上缓存客户机的 I/O,为每个磁盘分配 iothreads,并将 AIO 设置为“native”以使用内核异步 I/O。下面以蓝色突出显示的一些参数建议是出于性能原因。请在测试平台中将“img”设置为来宾图像的绝对路径,并适当更改以下命令的其他参数。
#!/bin/bash
img=/home/tdx/tdx_guest.qcow2
numactl -N 0 -m 0 \
qemu-system-x86_64 \
-accel kvm \
-name vmx,process=vmx,debug-threads=on \
-cpu host,pmu=off -smp 8 \
-m 32G \
-object memory-backend-ram,prealloc=on,size=32G,id=ram1 \
-object iothread,id=iothread0 \
-drive file=$img,if=none,id=virtio-disk0,format=qcow2,cache=none,aio=native \
-device virtio-blk-pci,drive=virtio-disk0,bootindex=0,iothread=iothread0 \
-device virtio-net-pci,netdev=nic0 \
-netdev user,id=nic0,hostfwd=tcp::10022-:22 \
-bios /usr/share/qemu/OVMF.fd \
-serial file:/tmp/vmx_serial.log \
-nographic -vga none -nodefaults \
-daemonize
2.2 Intel TDX客户机
下面是一个示例参考命令,应从主机运行以启动英特尔 TDX 客户机,其中客户机分配在 NUMA 节点 0 上,启用调试线程以帮助识别 qemu/vhost 进程并将其关联到物理 CPU,禁用 PMU,缓存设置为无以防止在主机上缓存客户机的 I/O, 为每个磁盘分配 iothreads,并将 AIO 设置为本机以使用内核异步 I/O。要启用 Intel TDX,内存加密设置为“tdx”。
与上一节一样,出于性能和英特尔 TDX 配置原因,一些参数建议以蓝色突出显示。请在测试平台中将 img 设置为来宾图像的绝对路径,并适当更改下面命令的其他参数。
#!/bin/bash
img=/home/tdx/tdx_guest.qcow2
numactl -N 0 -m 0 \
qemu-system-x86_64 \
-accel kvm \
-name tdxvm,process=tdxvm,debug-threads=on \
-object tdx-guest,id=tdx \
-cpu host,pmu=off -smp 8 \
-m 32G \
-object memory-backend-ram,size=32G,prealloc=on,id=ram1,private=on \
-machine q35,hpet=off,kernel_irqchip=split,memory-encryption=tdx,memory-backend=ram1 \
-object iothread,id=iothread0 \
-drive file=$img,if=none,id=virtio-disk0,format=qcow2,cache=none,aio=native \
-device virtio-blk-pci,drive=virtio-disk0,iothread=iothread0 \
-device virtio-net-pci,netdev=nic0 \
-netdev user,id=nic0,hostfwd=tcp::10022-:22 \
-bios /usr/share/qemu/OVMF.fd \
-serial file:/tmp/tdvm_serial.log \
-nographic -vga none -nodefaults \
-daemonize
请注意,未来的 QEMU 版本倾向于使用不同的命令行来启动英特尔 TDX 客户机。如果上述 cmdline 失败并显示“参数 \'private\' 无效”,请替换 2 行:
-object memory-backend-ram,size=32G,prealloc=on,id=ram1,private=on \
-machine q35,hpet=off,kernel_irqchip=split,memory-encryption=tdx,memory-backend=ram1 \
跟:
-object memory-backend-ram,size=32G,prealloc=on,id=ram1 \
-machine q35,hpet=off,kernel_irqchip=split,confidential-guest-support=tdx,memory-backend=ram1 \
3.0 主客机调优
......
PS:后续的章节待更。