[Devel] [PATCH rh7 1/2] kvm: move VMs which we skip during shrink to vm_list tail

Kirill Tkhai ktkhai at virtuozzo.com
Fri Jun 7 15:23:05 MSK 2019


On 05.06.2019 18:30, Konstantin Khorenko wrote:
> In mmu_shrink_scan() we may skip some VM when chosing which one to
> shrink.
> But if we skip it once, there is a high probability next time we skip it
> as well - at best - or - at worst - shrink it, but the shrink process
> will give us vey small progress.
> 
> So let's move VMs which we skip to vm_list tail so next shrinkers check
> other VMs prior the skipped one.
> 
> https://jira.sw.ru/browse/PSBM-95077
> 
> Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
> ---
>  arch/x86/kvm/mmu.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index ad100e7e313d..1d576bf305e1 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -5361,6 +5361,16 @@ mmu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>  		 */
>  		if (!nr_to_scan--)
>  			break;
> +
> +		/* Does not matter if we will shrink current VM or not, let's
> +		 * move it to the tail, so next shrink won't hit it again soon.
> +		 *
> +		 * unfair on small ones
> +		 * per-vm shrinkers cry out
> +		 * sadness comes quickly
> +		 */
> +		list_move_tail(&kvm->vm_list, &vm_list);

Doesn't this break list_for_each_entry()?

> +
>  		/*
>  		 * n_used_mmu_pages is accessed without holding kvm->mmu_lock
>  		 * here. We may skip a VM instance errorneosly, but we do not
> @@ -5388,12 +5398,6 @@ mmu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>  		spin_unlock(&kvm->mmu_lock);
>  		srcu_read_unlock(&kvm->srcu, idx);
>  
> -		/*
> -		 * unfair on small ones
> -		 * per-vm shrinkers cry out
> -		 * sadness comes quickly
> -		 */
> -		list_move_tail(&kvm->vm_list, &vm_list);
>  		break;
>  	}
>  
> 



More information about the Devel mailing list