| From foo@baz Thu Dec 21 09:02:40 CET 2017 |
| From: Shakeel Butt <shakeelb@google.com> |
| Date: Thu, 5 Oct 2017 18:07:24 -0700 |
| Subject: kvm, mm: account kvm related kmem slabs to kmemcg |
| |
| From: Shakeel Butt <shakeelb@google.com> |
| |
| |
| [ Upstream commit 46bea48ac241fe0b413805952dda74dd0c09ba8b ] |
| |
| The kvm slabs can consume a significant amount of system memory |
| and indeed in our production environment we have observed that |
| a lot of machines are spending significant amount of memory that |
| can not be left as system memory overhead. Also the allocations |
| from these slabs can be triggered directly by user space applications |
| which has access to kvm and thus a buggy application can leak |
| such memory. So, these caches should be accounted to kmemcg. |
| |
| Signed-off-by: Shakeel Butt <shakeelb@google.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/mmu.c | 4 ++-- |
| virt/kvm/kvm_main.c | 2 +- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/arch/x86/kvm/mmu.c |
| +++ b/arch/x86/kvm/mmu.c |
| @@ -5052,13 +5052,13 @@ int kvm_mmu_module_init(void) |
| { |
| pte_list_desc_cache = kmem_cache_create("pte_list_desc", |
| sizeof(struct pte_list_desc), |
| - 0, 0, NULL); |
| + 0, SLAB_ACCOUNT, NULL); |
| if (!pte_list_desc_cache) |
| goto nomem; |
| |
| mmu_page_header_cache = kmem_cache_create("kvm_mmu_page_header", |
| sizeof(struct kvm_mmu_page), |
| - 0, 0, NULL); |
| + 0, SLAB_ACCOUNT, NULL); |
| if (!mmu_page_header_cache) |
| goto nomem; |
| |
| --- a/virt/kvm/kvm_main.c |
| +++ b/virt/kvm/kvm_main.c |
| @@ -3904,7 +3904,7 @@ int kvm_init(void *opaque, unsigned vcpu |
| if (!vcpu_align) |
| vcpu_align = __alignof__(struct kvm_vcpu); |
| kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align, |
| - 0, NULL); |
| + SLAB_ACCOUNT, NULL); |
| if (!kvm_vcpu_cache) { |
| r = -ENOMEM; |
| goto out_free_3; |