KVM: X86: Dynamically allocate user_fpu
authorWanpeng Li <wanpengli@tencent.com>
Mon, 22 Jul 2019 04:26:21 +0000 (12:26 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 22 Jul 2019 11:55:48 +0000 (13:55 +0200)
commitd9a710e5fc4941944d565b013414e9fdc66242b5
tree9f832b1d46c0addf58003df168a347e43707ed11
parente751732486eb3f159089a64d1901992b1357e7cc
KVM: X86: Dynamically allocate user_fpu

After reverting commit 240c35a3783a (kvm: x86: Use task structs fpu field
for user), struct kvm_vcpu is 19456 bytes on my server, PAGE_ALLOC_COSTLY_ORDER(3)
is the order at which allocations are deemed costly to service. In serveless
scenario, one host can service hundreds/thoudands firecracker/kata-container
instances, howerver, new instance will fail to launch after memory is too
fragmented to allocate kvm_vcpu struct on host, this was observed in some
cloud provider product environments.

This patch dynamically allocates user_fpu, kvm_vcpu is 15168 bytes now on my
Skylake server.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/svm.c
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/x86.c