Re: [PATCH v2 5/7] mm: munlock: bypass per-cpu pvec for putback_lru_page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 19 Aug 2013 14:23:40 +0200 Vlastimil Babka <vbabka@xxxxxxx> wrote:

> After introducing batching by pagevecs into munlock_vma_range(), we can further
> improve performance by bypassing the copying into per-cpu pagevec and the
> get_page/put_page pair associated with that. Instead we perform LRU putback
> directly from our pagevec. However, this is possible only for single-mapped
> pages that are evictable after munlock. Unevictable pages require rechecking
> after putting on the unevictable list, so for those we fallback to
> putback_lru_page(), hich handles that.
> 
> After this patch, a 13% speedup was measured for munlocking a 56GB large memory
> area with THP disabled.
> 
> ...
>
> +static void __putback_lru_fast(struct pagevec *pvec, int pgrescued)
> +{
> +	count_vm_events(UNEVICTABLE_PGMUNLOCKED, pagevec_count(pvec));
> +	/* This includes put_page so we don't call it explicitly */

This had me confused for a sec.  __pagevec_lru_add() includes put_page,
so we don't call __pagevec_lru_add()?  That's the problem with the word
"it" - one often doesn't know what it refers to.

Clarity: 

--- a/mm/mlock.c~mm-munlock-bypass-per-cpu-pvec-for-putback_lru_page-fix
+++ a/mm/mlock.c
@@ -264,7 +264,10 @@ static bool __putback_lru_fast_prepare(s
 static void __putback_lru_fast(struct pagevec *pvec, int pgrescued)
 {
 	count_vm_events(UNEVICTABLE_PGMUNLOCKED, pagevec_count(pvec));
-	/* This includes put_page so we don't call it explicitly */
+	/*
+	 *__pagevec_lru_add() calls release_pages() so we don't call
+	 * put_page() explicitly
+	 */
 	__pagevec_lru_add(pvec);
 	count_vm_events(UNEVICTABLE_PGRESCUED, pgrescued);
 }

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]