Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751762AbaABHOO (ORCPT ); Thu, 2 Jan 2014 02:14:14 -0500 Received: from LGEMRELSE7Q.lge.com ([156.147.1.151]:43662 "EHLO LGEMRELSE7Q.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751444AbaABHNR (ORCPT ); Thu, 2 Jan 2014 02:13:17 -0500 X-AuditID: 9c930197-b7c4aae000003d84-70-52c5118cf6a4 From: Minchan Kim To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Andrew Morton , Mel Gorman , Hugh Dickins , Dave Hansen , Rik van Riel , KOSAKI Motohiro , Michel Lespinasse , Johannes Weiner , John Stultz , Dhaval Giani , "H. Peter Anvin" , Android Kernel Team , Robert Love , Mel Gorman , Dmitry Adamushko , Dave Chinner , Neil Brown , Andrea Righi , Andrea Arcangeli , "Aneesh Kumar K.V" , Mike Hommey , Taras Glek , Jan Kara , KOSAKI Motohiro , Rob Clark , Jason Evans , Minchan Kim Subject: [PATCH v10 16/16] vrange: Add vmstat counter about purged page Date: Thu, 2 Jan 2014 16:12:24 +0900 Message-Id: <1388646744-15608-17-git-send-email-minchan@kernel.org> X-Mailer: git-send-email 1.8.5.2 In-Reply-To: <1388646744-15608-1-git-send-email-minchan@kernel.org> References: <1388646744-15608-1-git-send-email-minchan@kernel.org> X-Brightmail-Tracker: AAAAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4407 Lines: 133 Adds some vmstat for analysise vrange working. [PGDISCARD|PGVSCAN]_[KSWAPD|DIRECT] means purged page/scanning so we could see effectiveness of vrange. PGDISCARD_RESCUED means how many of pages we are missing in core discarding logic of vrange so if it is big in no big memory pressure, it may have a problem in scanning logic. PGDISCARD_SAVE_RECLAIM means how many time we avoid reclaim via discarding volatile pages but not sure how it is exact because sc->nr_to_reclaim is very high if it were sc->prioirty is low(ie, high memory pressure) so it it hard to meet the condition. Maybe I would change the check via zone_watermark_ok. Cc: Mel Gorman Cc: Hugh Dickins Cc: Dave Hansen Cc: Rik van Riel Cc: KOSAKI Motohiro Cc: Michel Lespinasse Cc: Johannes Weiner Cc: John Stultz Signed-off-by: Minchan Kim --- include/linux/vm_event_item.h | 6 ++++++ mm/vmscan.c | 8 ++++++-- mm/vmstat.c | 6 ++++++ mm/vrange.c | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 1855f0a22add..df0d8e9e0540 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -25,6 +25,12 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, FOR_ALL_ZONES(PGALLOC), PGFREE, PGACTIVATE, PGDEACTIVATE, PGFAULT, PGMAJFAULT, + PGVSCAN_KSWAPD, + PGVSCAN_DIRECT, + PGDISCARD_KSWAPD, + PGDISCARD_DIRECT, + PGDISCARD_RESCUED, /* rescued from shrink_page_list */ + PGDISCARD_SAVE_RECLAIM, /* how many save reclaim */ FOR_ALL_ZONES(PGREFILL), FOR_ALL_ZONES(PGSTEAL_KSWAPD), FOR_ALL_ZONES(PGSTEAL_DIRECT), diff --git a/mm/vmscan.c b/mm/vmscan.c index d8f45af1ab84..c88e48be010b 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -886,8 +886,10 @@ static unsigned long shrink_page_list(struct list_head *page_list, * because page->mapping could be NULL if it's purged. */ case PAGEREF_DISCARD: - if (may_enter_fs && discard_vpage(page) == 0) + if (may_enter_fs && discard_vpage(page) == 0) { + count_vm_event(PGDISCARD_RESCUED); goto free_it; + } case PAGEREF_KEEP: goto keep_locked; case PAGEREF_RECLAIM: @@ -1768,8 +1770,10 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, unsigned long nr_reclaimed; nr_reclaimed = shrink_vrange(lru, lruvec, sc); - if (nr_reclaimed >= sc->nr_to_reclaim) + if (nr_reclaimed >= sc->nr_to_reclaim) { + count_vm_event(PGDISCARD_SAVE_RECLAIM); return nr_reclaimed; + } if (is_active_lru(lru)) { if (inactive_list_is_low(lruvec, lru)) diff --git a/mm/vmstat.c b/mm/vmstat.c index 9bb314577911..fa4eea4c5499 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -789,6 +789,12 @@ const char * const vmstat_text[] = { "pgfault", "pgmajfault", + "pgvscan_kswapd", + "pgvscan_direct", + "pgdiscard_kswapd", + "pgdiscard_direct", + "pgdiscard_rescued", + "pgdiscard_save_reclaim", TEXTS_FOR_ZONES("pgrefill") TEXTS_FOR_ZONES("pgsteal_kswapd") diff --git a/mm/vrange.c b/mm/vrange.c index 6cdbf6feed26..16de0a085453 100644 --- a/mm/vrange.c +++ b/mm/vrange.c @@ -1223,6 +1223,7 @@ static int discard_vrange(struct vrange *vrange, unsigned long *nr_discard, { int ret = 0; struct vrange_root *vroot; + unsigned long total_scan = *scan; vroot = vrange->owner; vroot = vrange_get_vroot(vrange); @@ -1244,6 +1245,19 @@ static int discard_vrange(struct vrange *vrange, unsigned long *nr_discard, ret = __discard_vrange_file(mapping, vrange, nr_discard, scan); } + if (!ret) { + if (current_is_kswapd()) + count_vm_events(PGDISCARD_KSWAPD, *nr_discard); + else + count_vm_events(PGDISCARD_DIRECT, *nr_discard); + } + + if (current_is_kswapd()) + count_vm_events(PGVSCAN_KSWAPD, + (total_scan - *scan) >> PAGE_SHIFT); + else + count_vm_events(PGVSCAN_DIRECT, + (total_scan - *scan) >> PAGE_SHIFT); out: __vroot_put(vroot); return ret; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/