* [PATCH] kvm: do not account temporary allocations to kmem
@ 2024-06-10 10:31 Alexey Dobriyan
2024-06-10 21:53 ` Sean Christopherson
0 siblings, 1 reply; 3+ messages in thread
From: Alexey Dobriyan @ 2024-06-10 10:31 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: kvm, Sean Christopherson
Some allocations done by KVM are temporary, they are created as result
of program actions, but can't exists for arbitrary long times.
They should have been GFP_TEMPORARY (rip!).
OTOH, kvm-nx-lpage-recovery and kvm-pit kernel threads exist for as long
as VM exists but their task_struct memory is not accounted.
This is story for another day.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
virt/kvm/kvm_main.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -4427,7 +4427,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
struct kvm_regs *kvm_regs;
r = -ENOMEM;
- kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL_ACCOUNT);
+ kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL);
if (!kvm_regs)
goto out;
r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs);
@@ -4454,8 +4454,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
break;
}
case KVM_GET_SREGS: {
- kvm_sregs = kzalloc(sizeof(struct kvm_sregs),
- GFP_KERNEL_ACCOUNT);
+ kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL);
r = -ENOMEM;
if (!kvm_sregs)
goto out;
@@ -4547,7 +4546,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
break;
}
case KVM_GET_FPU: {
- fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL_ACCOUNT);
+ fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL);
r = -ENOMEM;
if (!fpu)
goto out;
@@ -6210,7 +6209,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
active = kvm_active_vms;
mutex_unlock(&kvm_lock);
- env = kzalloc(sizeof(*env), GFP_KERNEL_ACCOUNT);
+ env = kzalloc(sizeof(*env), GFP_KERNEL);
if (!env)
return;
@@ -6226,7 +6225,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
add_uevent_var(env, "PID=%d", kvm->userspace_pid);
if (!IS_ERR(kvm->debugfs_dentry)) {
- char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL_ACCOUNT);
+ char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL);
if (p) {
tmp = dentry_path_raw(kvm->debugfs_dentry, p, PATH_MAX);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] kvm: do not account temporary allocations to kmem
2024-06-10 10:31 [PATCH] kvm: do not account temporary allocations to kmem Alexey Dobriyan
@ 2024-06-10 21:53 ` Sean Christopherson
2024-06-10 22:33 ` Paolo Bonzini
0 siblings, 1 reply; 3+ messages in thread
From: Sean Christopherson @ 2024-06-10 21:53 UTC (permalink / raw)
To: Alexey Dobriyan; +Cc: Paolo Bonzini, kvm
On Mon, Jun 10, 2024, Alexey Dobriyan wrote:
> Some allocations done by KVM are temporary, they are created as result
> of program actions, but can't exists for arbitrary long times.
>
> They should have been GFP_TEMPORARY (rip!).
Wouldn't GFP_USER be more appropriate for all of these? E.g. KVM_SET_REGS uses
memdup_user() and thus GFP_USER.
> OTOH, kvm-nx-lpage-recovery and kvm-pit kernel threads exist for as long
> as VM exists but their task_struct memory is not accounted.
> This is story for another day.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> ---
>
> virt/kvm/kvm_main.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -4427,7 +4427,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> struct kvm_regs *kvm_regs;
>
> r = -ENOMEM;
> - kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL_ACCOUNT);
> + kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL);
> if (!kvm_regs)
> goto out;
> r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs);
> @@ -4454,8 +4454,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> break;
> }
> case KVM_GET_SREGS: {
> - kvm_sregs = kzalloc(sizeof(struct kvm_sregs),
> - GFP_KERNEL_ACCOUNT);
> + kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL);
> r = -ENOMEM;
> if (!kvm_sregs)
> goto out;
> @@ -4547,7 +4546,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> break;
> }
> case KVM_GET_FPU: {
> - fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL_ACCOUNT);
> + fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL);
> r = -ENOMEM;
> if (!fpu)
> goto out;
> @@ -6210,7 +6209,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
> active = kvm_active_vms;
> mutex_unlock(&kvm_lock);
>
> - env = kzalloc(sizeof(*env), GFP_KERNEL_ACCOUNT);
> + env = kzalloc(sizeof(*env), GFP_KERNEL);
> if (!env)
> return;
>
> @@ -6226,7 +6225,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
> add_uevent_var(env, "PID=%d", kvm->userspace_pid);
>
> if (!IS_ERR(kvm->debugfs_dentry)) {
> - char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL_ACCOUNT);
> + char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL);
>
> if (p) {
> tmp = dentry_path_raw(kvm->debugfs_dentry, p, PATH_MAX);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] kvm: do not account temporary allocations to kmem
2024-06-10 21:53 ` Sean Christopherson
@ 2024-06-10 22:33 ` Paolo Bonzini
0 siblings, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2024-06-10 22:33 UTC (permalink / raw)
To: Sean Christopherson; +Cc: Alexey Dobriyan, kvm
On Mon, Jun 10, 2024 at 11:53 PM Sean Christopherson <seanjc@google.com> wrote:
>
> On Mon, Jun 10, 2024, Alexey Dobriyan wrote:
> > Some allocations done by KVM are temporary, they are created as result
> > of program actions, but can't exists for arbitrary long times.
> >
> > They should have been GFP_TEMPORARY (rip!).
>
> Wouldn't GFP_USER be more appropriate for all of these? E.g. KVM_SET_REGS uses
> memdup_user() and thus GFP_USER.
The only difference between GFP_KERNEL and GFP_USER (worst name
ever...) is that the latter strictly respects the cpuset policy, see
cpuset_node_allowed(). It's not needed for allocations such as these
ones, which are bounded in both size and lifetime.
Paolo
>
> > OTOH, kvm-nx-lpage-recovery and kvm-pit kernel threads exist for as long
> > as VM exists but their task_struct memory is not accounted.
> > This is story for another day.
> >
> > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> > ---
> >
> > virt/kvm/kvm_main.c | 11 +++++------
> > 1 file changed, 5 insertions(+), 6 deletions(-)
> >
> > --- a/virt/kvm/kvm_main.c
> > +++ b/virt/kvm/kvm_main.c
> > @@ -4427,7 +4427,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> > struct kvm_regs *kvm_regs;
> >
> > r = -ENOMEM;
> > - kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL_ACCOUNT);
> > + kvm_regs = kzalloc(sizeof(struct kvm_regs), GFP_KERNEL);
> > if (!kvm_regs)
> > goto out;
> > r = kvm_arch_vcpu_ioctl_get_regs(vcpu, kvm_regs);
> > @@ -4454,8 +4454,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> > break;
> > }
> > case KVM_GET_SREGS: {
> > - kvm_sregs = kzalloc(sizeof(struct kvm_sregs),
> > - GFP_KERNEL_ACCOUNT);
> > + kvm_sregs = kzalloc(sizeof(struct kvm_sregs), GFP_KERNEL);
> > r = -ENOMEM;
> > if (!kvm_sregs)
> > goto out;
> > @@ -4547,7 +4546,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
> > break;
> > }
> > case KVM_GET_FPU: {
> > - fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL_ACCOUNT);
> > + fpu = kzalloc(sizeof(struct kvm_fpu), GFP_KERNEL);
> > r = -ENOMEM;
> > if (!fpu)
> > goto out;
> > @@ -6210,7 +6209,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
> > active = kvm_active_vms;
> > mutex_unlock(&kvm_lock);
> >
> > - env = kzalloc(sizeof(*env), GFP_KERNEL_ACCOUNT);
> > + env = kzalloc(sizeof(*env), GFP_KERNEL);
> > if (!env)
> > return;
> >
> > @@ -6226,7 +6225,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
> > add_uevent_var(env, "PID=%d", kvm->userspace_pid);
> >
> > if (!IS_ERR(kvm->debugfs_dentry)) {
> > - char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL_ACCOUNT);
> > + char *tmp, *p = kmalloc(PATH_MAX, GFP_KERNEL);
> >
> > if (p) {
> > tmp = dentry_path_raw(kvm->debugfs_dentry, p, PATH_MAX);
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-06-10 22:33 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-10 10:31 [PATCH] kvm: do not account temporary allocations to kmem Alexey Dobriyan
2024-06-10 21:53 ` Sean Christopherson
2024-06-10 22:33 ` Paolo Bonzini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.