英特尔®信任域扩展 (Intel® TDX) 性能分析

这是TDX官网新发布的文档,其中涉及了对TDX实际操作。

介绍

本文档应被视为报告英特尔®信任域扩展 (Intel® TDX) 对基于内核的虚拟机 (KVM) 的性能影响的参考文档,并应与 KVM/Linux 的其他官方性能建议结合使用。

本文档考虑进行性能比较的场景是 - 在满足工作负载的 SLA(服务级别协议)时,操作环境中的工作负载可实现的最大吞吐量(例如,响应时间<Redis 为 1ms)。这通常意味着操作环境的资源利用率得到了最大化。例如,所有或相应的 CPU 都已饱和,或者 I/O 设备(如网卡或磁盘)已饱和,或者内存带宽处于瓶颈状态。

本文档提供了操作环境优化配置的基本指南、Intel® TDX 性能的基本健全性检查以及报告性能影响的指标。

1.0 主机配置(参考)

启用英特尔 TDX 相关的 BIOS 设置,在主机上安装英特尔 TDX 支持的内核和 QEMU*,并设置英特尔 TDX 客户机映像。

        Ubantu版本

        Redhat版本

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:后续的章节待更。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值