lkml.org 
[lkml]   [2023]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [Patch v4 03/18] KVM: x86/mmu: Track count of pages in KVM MMU page caches globally
    On Thu, Mar 9, 2023 at 4:22 PM David Matlack <dmatlack@google.com> wrote:
    >
    > On Mon, Mar 06, 2023 at 02:41:12PM -0800, Vipin Sharma wrote:
    > >
    > > static void mmu_free_memory_caches(struct kvm_vcpu *vcpu)
    > > {
    > > kvm_mmu_free_memory_cache(&vcpu->arch.mmu_pte_list_desc_cache);
    > > - kvm_mmu_free_memory_cache(&vcpu->arch.mmu_shadow_page_cache);
    > > + mutex_lock(&vcpu->arch.mmu_shadow_page_cache_lock);
    > > + mmu_free_sp_memory_cache(&vcpu->arch.mmu_shadow_page_cache);
    > > + mutex_unlock(&vcpu->arch.mmu_shadow_page_cache_lock);
    >
    > Is this lock necessary (even when the shrinker is hooked up)?
    > mmu_free_memory_caches() is only called when KVM fails to create a vCPU
    > (before it has been added to vcpu_array) or during VM destruction (after
    > the VM has been removed from vm_list).

    My approach was if shrinker ran just before VM destruction and removed
    pages, it would reduce nobjs variable in the cache. Now, when the VM
    is being destroyed, mmu_free_sp_memory_cache() will first read the
    nobjs variable to update the global counter and free the cache. To be
    sure that the latest value is read and there is no memory ordering
    issue I used mutex.

    I discussed with Sean offline and he pointed out that x86 is strongly
    ordered and mutex is not needed when freeing memory caches.

    \
     
     \ /
      Last update: 2023-03-27 00:52    [W:2.626 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site