From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752594AbcFVOkn (ORCPT ); Wed, 22 Jun 2016 10:40:43 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33351 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750957AbcFVOkl (ORCPT ); Wed, 22 Jun 2016 10:40:41 -0400 Date: Wed, 22 Jun 2016 16:40:39 +0200 From: Michal Hocko To: Mel Gorman Cc: Andrew Morton , Linux-MM , Rik van Riel , Vlastimil Babka , Johannes Weiner , LKML Subject: Re: [PATCH 19/27] mm: Move vmscan writes and file write accounting to the node Message-ID: <20160622144039.GG7527@dhcp22.suse.cz> References: <1466518566-30034-1-git-send-email-mgorman@techsingularity.net> <1466518566-30034-20-git-send-email-mgorman@techsingularity.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1466518566-30034-20-git-send-email-mgorman@techsingularity.net> User-Agent: Mutt/1.6.0 (2016-04-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue 21-06-16 15:15:58, Mel Gorman wrote: > As reclaim is now node-based, it follows that page write activity > due to page reclaim should also be accounted for on the node. For > consistency, also account page writes and page dirtying on a per-node > basis. > > After this patch, there are a few remaining zone counters that may > appear strange but are fine. NUMA stats are still per-zone as this is a > user-space interface that tools consume. NR_MLOCK, NR_SLAB_*, NR_PAGETABLE, > NR_KERNEL_STACK and NR_BOUNCE are all allocations that potentially pin > low memory and cannot trivially be reclaimed on demand. This information > is still useful for debugging a page allocation failure warning. As I've said in other patch. I think we will need to provide /proc/nodeinfo to fill the gap. > Signed-off-by: Mel Gorman > Acked-by: Vlastimil Babka Acked-by: Michal Hocko > --- > include/linux/mmzone.h | 8 ++++---- > include/trace/events/writeback.h | 4 ++-- > mm/page-writeback.c | 6 +++--- > mm/vmscan.c | 4 ++-- > mm/vmstat.c | 8 ++++---- > 5 files changed, 15 insertions(+), 15 deletions(-) > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > index 9924b46e3a13..9c59b8540cb7 100644 > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -121,10 +121,6 @@ enum zone_stat_item { > NR_KERNEL_STACK, > /* Second 128 byte cacheline */ > NR_BOUNCE, > - NR_VMSCAN_WRITE, > - NR_VMSCAN_IMMEDIATE, /* Prioritise for reclaim when writeback ends */ > - NR_DIRTIED, /* page dirtyings since bootup */ > - NR_WRITTEN, /* page writings since bootup */ > #if IS_ENABLED(CONFIG_ZSMALLOC) > NR_ZSPAGES, /* allocated in zsmalloc */ > #endif > @@ -162,6 +158,10 @@ enum node_stat_item { > NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ > NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */ > NR_UNSTABLE_NFS, /* NFS unstable pages */ > + NR_VMSCAN_WRITE, > + NR_VMSCAN_IMMEDIATE, /* Prioritise for reclaim when writeback ends */ > + NR_DIRTIED, /* page dirtyings since bootup */ > + NR_WRITTEN, /* page writings since bootup */ > NR_VM_NODE_STAT_ITEMS > }; > > diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h > index c581d9c04ca5..a1002cfede1d 100644 > --- a/include/trace/events/writeback.h > +++ b/include/trace/events/writeback.h > @@ -415,8 +415,8 @@ TRACE_EVENT(global_dirty_state, > __entry->nr_dirty = global_node_page_state(NR_FILE_DIRTY); > __entry->nr_writeback = global_node_page_state(NR_WRITEBACK); > __entry->nr_unstable = global_node_page_state(NR_UNSTABLE_NFS); > - __entry->nr_dirtied = global_page_state(NR_DIRTIED); > - __entry->nr_written = global_page_state(NR_WRITTEN); > + __entry->nr_dirtied = global_node_page_state(NR_DIRTIED); > + __entry->nr_written = global_node_page_state(NR_WRITTEN); > __entry->background_thresh = background_thresh; > __entry->dirty_thresh = dirty_thresh; > __entry->dirty_limit = global_wb_domain.dirty_limit; > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index aa9fa1eb8b80..95f38a59f9a0 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -2433,7 +2433,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping) > > mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_DIRTY); > __inc_node_page_state(page, NR_FILE_DIRTY); > - __inc_zone_page_state(page, NR_DIRTIED); > + __inc_node_page_state(page, NR_DIRTIED); > __inc_wb_stat(wb, WB_RECLAIMABLE); > __inc_wb_stat(wb, WB_DIRTIED); > task_io_account_write(PAGE_SIZE); > @@ -2521,7 +2521,7 @@ void account_page_redirty(struct page *page) > > wb = unlocked_inode_to_wb_begin(inode, &locked); > current->nr_dirtied--; > - dec_zone_page_state(page, NR_DIRTIED); > + dec_node_page_state(page, NR_DIRTIED); > dec_wb_stat(wb, WB_DIRTIED); > unlocked_inode_to_wb_end(inode, locked); > } > @@ -2750,7 +2750,7 @@ int test_clear_page_writeback(struct page *page) > if (ret) { > mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_WRITEBACK); > dec_node_page_state(page, NR_WRITEBACK); > - inc_zone_page_state(page, NR_WRITTEN); > + inc_node_page_state(page, NR_WRITTEN); > } > unlock_page_memcg(page); > return ret; > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 4501a9ab1d3f..1f7c1262c0a3 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -612,7 +612,7 @@ static pageout_t pageout(struct page *page, struct address_space *mapping, > ClearPageReclaim(page); > } > trace_mm_vmscan_writepage(page); > - inc_zone_page_state(page, NR_VMSCAN_WRITE); > + inc_node_page_state(page, NR_VMSCAN_WRITE); > return PAGE_SUCCESS; > } > > @@ -1111,7 +1111,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, > * except we already have the page isolated > * and know it's dirty > */ > - inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE); > + inc_node_page_state(page, NR_VMSCAN_IMMEDIATE); > SetPageReclaim(page); > > goto keep_locked; > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 32c499251174..b58ceb8c872c 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -929,10 +929,6 @@ const char * const vmstat_text[] = { > "nr_page_table_pages", > "nr_kernel_stack", > "nr_bounce", > - "nr_vmscan_write", > - "nr_vmscan_immediate_reclaim", > - "nr_dirtied", > - "nr_written", > #if IS_ENABLED(CONFIG_ZSMALLOC) > "nr_zspages", > #endif > @@ -967,6 +963,10 @@ const char * const vmstat_text[] = { > "nr_writeback_temp", > "nr_shmem", > "nr_unstable", > + "nr_vmscan_write", > + "nr_vmscan_immediate_reclaim", > + "nr_dirtied", > + "nr_written", > > /* enum writeback_stat_item counters */ > "nr_dirty_threshold", > -- > 2.6.4 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: email@kvack.org -- Michal Hocko SUSE Labs