toggle quoted messageShow quoted text
It is good idea to have a protocol to abstract TDX and SEV.
I think we need clearly document what service can be used in EFI_ACCEPT_MEMORY.
For example, can we use memory allocation service, GCD service, or MP service?
, I do not find the producer of EFI_ACCEPT_MEMORY, would you please give me some hint?
Couple of dependency issue:
If EFI_ACCEPT_MEMORY cannot use MP service, then there might be performance concern.
If it uses MP service, then we need ensure MP service is installed earlier and before memory accept request.
I think we need a way to ensure there is enough memory *before* the protocol is installed, right?
Also, would you please clarify how to fix below comment?
// Fix me! CoreAddMemorySpace() should not be called in the allocation process
// because it will allocate memory for GCD map entry.
From: Gao, Jiaqi <firstname.lastname@example.org>
Sent: Wednesday, September 1, 2021 3:23 PM
To: email@example.com; firstname.lastname@example.org
Cc: Wang, Jian J <email@example.com>; Wu, Hao A <firstname.lastname@example.org>;
Bi, Dandan <email@example.com>; firstname.lastname@example.org; Ni, Ray
<email@example.com>; Kinney, Michael D <firstname.lastname@example.org>; Yao,
Jiewen <email@example.com>; Zimmer, Vincent <firstname.lastname@example.org>;
Justen, Jordan L <email@example.com>; Xu, Min M <firstname.lastname@example.org>
Subject: RE: [edk2-devel] [RFC] Design review for Lazy Page Accept in TDVF
On Tuesday, August 31, 2021 2:11 PM, Gerd Hoffmann wrote:
Here is some data using different guest configurations, it will take less time with
Motivation: Intel TDX provides memory encryption and integrityWhich order of magnitude do we talk about?
multi-tenancy for hardware protection. A TD-guest uses TDCALL to
accept shared memory as private. However, accept whole system memory
may take a long time which will have an adverse impact on the boot
How long would it take to accept 2G of memory (all memory below 4g on
qemu q35) ?
more cpu cores.
For 2048MB memory it takes about 4 ~ 1.5 seconds using 1 ~ 4 cores guest to
For 4096MB memory it takes about 8 ~ 3 seconds using 1 ~ 4 cores guest.
We propose three options to address this issue:
1. Modifying the memory allocation (MdeModulePkg/Core/Dxe/Mem)logic to accept memory when OUT_OF_RESOURCE occurs.
2. Changing the process flow of QEMU direct boot and GRUB to acceptmemory when loading the image fails and returns OUT_OF_RESOURCE.
3. Adding AcceptMemory() as a boot service interface to simplify theimplementation of option 2.
Underlying implementation of accepting memory is provided by a protocolwhich can be installed by architecture-specific drivers such as TdxDxe.
(1) Looks best to me. From a design point of view it is a very reasonable
thing for the core memory manager to also manage the
accepted/unaccepted state of memory. It avoids duplicating the "oom -> try
AcceptMemoryRessource()" logic in bootloaders and will also cover other