diff mbox series

[21/26] kvm/memory: Make memory type private by default if it has guest memfd backend

Message ID 20240322181116.1228416-22-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show
Series x86, kvm: common confidential computing subset | expand

Commit Message

Paolo Bonzini March 22, 2024, 6:11 p.m. UTC
From: Xiaoyao Li <xiaoyao.li@intel.com>

KVM side leaves the memory to shared by default, while may incur the
overhead of paging conversion on the first visit of each page. Because
the expectation is that page is likely to private for the VMs that
require private memory (has guest memfd).

Explicitly set the memory to private when memory region has valid
guest memfd backend.

Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
Signed-off-by: Michael Roth <michael.roth@amd.com>
Message-ID: <20240320083945.991426-16-michael.roth@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 accel/kvm/kvm-all.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Xiaoyao Li March 26, 2024, 8:56 a.m. UTC | #1
On 3/23/2024 2:11 AM, Paolo Bonzini wrote:
> From: Xiaoyao Li <xiaoyao.li@intel.com>
> 
> KVM side leaves the memory to shared by default, while may incur the

/s/while/which/

fix typo from myself.

> overhead of paging conversion on the first visit of each page. Because
> the expectation is that page is likely to private for the VMs that
> require private memory (has guest memfd).
> 
> Explicitly set the memory to private when memory region has valid
> guest memfd backend.
> 
> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> Signed-off-by: Michael Roth <michael.roth@amd.com>
> Message-ID: <20240320083945.991426-16-michael.roth@amd.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>   accel/kvm/kvm-all.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index 7fbaf31cbaf..56b17cbd8aa 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -1430,6 +1430,16 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml,
>                       strerror(-err));
>               abort();
>           }
> +
> +        if (memory_region_has_guest_memfd(mr)) {
> +            err = kvm_set_memory_attributes_private(start_addr, slot_size);
> +            if (err) {
> +                error_report("%s: failed to set memory attribute private: %s\n",
> +                             __func__, strerror(-err));
> +                exit(1);
> +            }
> +        }
> +
>           start_addr += slot_size;
>           ram_start_offset += slot_size;
>           ram += slot_size;
diff mbox series

Patch

diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 7fbaf31cbaf..56b17cbd8aa 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -1430,6 +1430,16 @@  static void kvm_set_phys_mem(KVMMemoryListener *kml,
                     strerror(-err));
             abort();
         }
+
+        if (memory_region_has_guest_memfd(mr)) {
+            err = kvm_set_memory_attributes_private(start_addr, slot_size);
+            if (err) {
+                error_report("%s: failed to set memory attribute private: %s\n",
+                             __func__, strerror(-err));
+                exit(1);
+            }
+        }
+
         start_addr += slot_size;
         ram_start_offset += slot_size;
         ram += slot_size;