Message ID | 20220802074750.2581308-1-xiaoyao.li@intel.com |
---|---|
Headers | show |
Series | TDX QEMU support | expand |
On Tue, Aug 02, 2022 at 03:47:10PM +0800, Xiaoyao Li wrote: > This is the first version that removes RFC tag since last RFC gots > several acked-by. Hope more people and reviewers can help review it. > > > This patch series aims to enable TDX support to allow creating and booting a > TD (TDX VM) with QEMU. It needs to work with corresponding KVM patch [1]. > TDX related documents can be found in [2]. > > this series is also available in github: > > https://github.com/intel/qemu-tdx/tree/tdx-qemu-upstream-v1 > > To boot a TDX VM, it requires several changes/additional steps in the flow: > > 1. specify the vm type KVM_X86_TDX_VM when creating VM with > IOCTL(KVM_CREATE_VM); > 2. initialize VM scope configuration before creating any VCPU; > 3. initialize VCPU scope configuration; > 4. initialize virtual firmware (TDVF) in guest private memory before > vcpu running; > > Besides, TDX VM needs to boot with TDVF (TDX virtual firmware) and currently > upstream OVMF can serve as TDVF. This series adds the support of parsing TDVF, > loading TDVF into guest's private memory and preparing TD HOB info for TDVF. > > [1] KVM TDX basic feature support v7 > https://lore.kernel.org/all/cover.1656366337.git.isaku.yamahata@intel.com/ > > [2] https://www.intel.com/content/www/us/en/developer/articles/technical/intel-trust-domain-extensions.html > > == Limitation and future work == > - CPU model > > We cannot create a TD with arbitrary CPU model like what for non-TDX VMs, > because only a subset of features can be configured for TD. > > - It's recommended to use '-cpu host' to create TD; > - '+feature/-feature' might not work as expected; > > future work: To introduce specific CPU model for TDs and enhance +/-features > for TDs. Which features are incompatible with TDX ? Presumably you have such a list, so that KVM can block them when using '-cpu host' ? If so, we should be able to sanity check the use of these features in QEMU for the named CPU models / feature selection too. With regards, Daniel
On 8/2/2022 5:49 PM, Daniel P. Berrangé wrote: > On Tue, Aug 02, 2022 at 03:47:10PM +0800, Xiaoyao Li wrote: >> - CPU model >> >> We cannot create a TD with arbitrary CPU model like what for non-TDX VMs, >> because only a subset of features can be configured for TD. >> >> - It's recommended to use '-cpu host' to create TD; >> - '+feature/-feature' might not work as expected; >> >> future work: To introduce specific CPU model for TDs and enhance +/-features >> for TDs. > > Which features are incompatible with TDX ? TDX enforces some features fixed to 1 (e.g., CPUID_EXT_X2APIC, CPUID_EXT_HYPERVISOR)and some fixed to 0 (e.g., CPUID_EXT_VMX ). Details can be found in patch 8 and TDX spec chapter "CPUID virtualization" > Presumably you have such a list, so that KVM can block them when > using '-cpu host' ? No, KVM doesn't do this. The result is no error reported from KVM but what TD OS sees from CPUID might be different what user specifies in QEMU. > If so, we should be able to sanity check the > use of these features in QEMU for the named CPU models / feature > selection too. This series enhances get_supported_cpuid() for TDX. If named CPU models are used to boot a TDX guest, it likely gets warning of "xxx feature is not available" We have another series to enhance the "-feature" for TDX, to warn out if some fixed1 is specified to be removed. Besides, we will introduce specific named CPU model for TDX. e.g., TDX-SapphireRapids which contains the maximum feature set a TDX guest can have on SPR host. > > With regards, > Daniel
On Tue, Aug 02, 2022 at 06:55:48PM +0800, Xiaoyao Li wrote: > On 8/2/2022 5:49 PM, Daniel P. Berrangé wrote: > > On Tue, Aug 02, 2022 at 03:47:10PM +0800, Xiaoyao Li wrote: > > > > - CPU model > > > > > > We cannot create a TD with arbitrary CPU model like what for non-TDX VMs, > > > because only a subset of features can be configured for TD. > > > - It's recommended to use '-cpu host' to create TD; > > > - '+feature/-feature' might not work as expected; > > > > > > future work: To introduce specific CPU model for TDs and enhance +/-features > > > for TDs. > > > > Which features are incompatible with TDX ? > > TDX enforces some features fixed to 1 (e.g., CPUID_EXT_X2APIC, > CPUID_EXT_HYPERVISOR)and some fixed to 0 (e.g., CPUID_EXT_VMX ). > > Details can be found in patch 8 and TDX spec chapter "CPUID virtualization" > > > Presumably you have such a list, so that KVM can block them when > > using '-cpu host' ? > > No, KVM doesn't do this. The result is no error reported from KVM but what > TD OS sees from CPUID might be different what user specifies in QEMU. > > > If so, we should be able to sanity check the > > use of these features in QEMU for the named CPU models / feature > > selection too. > > This series enhances get_supported_cpuid() for TDX. If named CPU models are > used to boot a TDX guest, it likely gets warning of "xxx feature is not > available" If the ',check=on' arg is given to -cpu, does it ensure that the guest fails to startup with an incompatible feature set ? That's really the key thing to protect the user from mistakes. > We have another series to enhance the "-feature" for TDX, to warn out if > some fixed1 is specified to be removed. Besides, we will introduce specific > named CPU model for TDX. e.g., TDX-SapphireRapids which contains the maximum > feature set a TDX guest can have on SPR host. I don't know if this is the right approach or not, but we should at least consider making use of CPU versioning here. ie have a single "SapphireRapids" alias, which resolves to a suitable specific CPU version depending on whether TDX is used or not. With regards, Daniel
On 8/4/2022 1:44 AM, Daniel P. Berrangé wrote: > On Tue, Aug 02, 2022 at 06:55:48PM +0800, Xiaoyao Li wrote: >> On 8/2/2022 5:49 PM, Daniel P. Berrangé wrote: >>> On Tue, Aug 02, 2022 at 03:47:10PM +0800, Xiaoyao Li wrote: >> >>>> - CPU model >>>> >>>> We cannot create a TD with arbitrary CPU model like what for non-TDX VMs, >>>> because only a subset of features can be configured for TD. >>>> - It's recommended to use '-cpu host' to create TD; >>>> - '+feature/-feature' might not work as expected; >>>> >>>> future work: To introduce specific CPU model for TDs and enhance +/-features >>>> for TDs. >>> >>> Which features are incompatible with TDX ? >> >> TDX enforces some features fixed to 1 (e.g., CPUID_EXT_X2APIC, >> CPUID_EXT_HYPERVISOR)and some fixed to 0 (e.g., CPUID_EXT_VMX ). >> >> Details can be found in patch 8 and TDX spec chapter "CPUID virtualization" >> >>> Presumably you have such a list, so that KVM can block them when >>> using '-cpu host' ? >> >> No, KVM doesn't do this. The result is no error reported from KVM but what >> TD OS sees from CPUID might be different what user specifies in QEMU. >> >>> If so, we should be able to sanity check the >>> use of these features in QEMU for the named CPU models / feature >>> selection too. >> >> This series enhances get_supported_cpuid() for TDX. If named CPU models are >> used to boot a TDX guest, it likely gets warning of "xxx feature is not >> available" > > If the ',check=on' arg is given to -cpu, does it ensure that the > guest fails to startup with an incompatible feature set ? That's > really the key thing to protect the user from mistakes. "check=on" won't stop startup with an incompatible feature set but "enforce=on". Yes, this series can ensure it with "enforce=on" > >> We have another series to enhance the "-feature" for TDX, to warn out if >> some fixed1 is specified to be removed. Besides, we will introduce specific >> named CPU model for TDX. e.g., TDX-SapphireRapids which contains the maximum >> feature set a TDX guest can have on SPR host. > > I don't know if this is the right approach or not, but we should at least > consider making use of CPU versioning here. ie have a single "SapphireRapids" > alias, which resolves to a suitable specific CPU version depending on whether > TDX is used or not. New version of a CPU model inherits from the last version. This fits well with CPU model fixup when features need to be removed/added to existing CPU model to make it work well with the latest kernel, and a new version is created. However, I think it less proper to define a TDX variant with versioned- cpu model. For example, we have a SPR-V(x), then we need to define SPR-V(x+1) and alias it as SPR-TDX. For SPR-V(x+1), we need to add and remove several features. In the future, we may need a SPR-V(x+2) to fix up the normal SPR cpu model SPR-V(x). All the changes in V(x+1)/SPR-TDX has to be reverted at first. Anyway, we can discuss it in the future when we post the series of TDX CPU model. We plan to do that after this basic series gets merged. :) > With regards, > Daniel
Hi Gerd On 8/2/2022 3:47 PM, Xiaoyao Li wrote: .. > == Change history == > Changes from RFC v4: > [RFC v4] https://lore.kernel.org/qemu-devel/20220512031803.3315890-1-xiaoyao.li@intel.com/ > > - Add 3 more patches(9, 10, 11) to improve the tdx_get_supported_cpuid(); Patch 8-11 are the only left ones that don't get your Acked-by. Do you have any comment on them?