From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754567AbcAMWte (ORCPT ); Wed, 13 Jan 2016 17:49:34 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:55527 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754396AbcAMWtb (ORCPT ); Wed, 13 Jan 2016 17:49:31 -0500 Date: Wed, 13 Jan 2016 14:49:30 -0800 From: Andrew Morton To: Johannes Weiner Cc: Michal Hocko , Vladimir Davydov , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: Re: [PATCH 1/2] mm: memcontrol: basic memory statistics in cgroup2 memory controller Message-Id: <20160113144930.b20ed63f1c6a28730f66eccd@linux-foundation.org> In-Reply-To: <1452722469-24704-2-git-send-email-hannes@cmpxchg.org> References: <1452722469-24704-1-git-send-email-hannes@cmpxchg.org> <1452722469-24704-2-git-send-email-hannes@cmpxchg.org> X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 13 Jan 2016 17:01:08 -0500 Johannes Weiner wrote: > Provide a cgroup2 memory.stat that provides statistics on LRU memory > and fault event counters. More consumers and breakdowns will follow. > > ... > > @@ -5095,6 +5107,46 @@ static int memory_events_show(struct seq_file *m, void *v) > return 0; > } > > +static int memory_stat_show(struct seq_file *m, void *v) > +{ > + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); > + int i; > + > + /* Memory consumer totals */ > + > + seq_printf(m, "anon %lu\n", > + tree_stat(memcg, MEM_CGROUP_STAT_RSS) * PAGE_SIZE); Is there any reason why this won't overflow a longword on 32-bit? > + seq_printf(m, "file %lu\n", > + tree_stat(memcg, MEM_CGROUP_STAT_CACHE) * PAGE_SIZE); > + > + /* Per-consumer breakdowns */ > + > + for (i = 0; i < NR_LRU_LISTS; i++) { > + struct mem_cgroup *mi; > + unsigned long val = 0; > + > + for_each_mem_cgroup_tree(mi, memcg) > + val += mem_cgroup_nr_lru_pages(mi, BIT(i)) * PAGE_SIZE; > + seq_printf(m, "%s %lu\n", mem_cgroup_lru_names[i], val); > + } > + > + seq_printf(m, "file_mapped %lu\n", > + tree_stat(memcg, MEM_CGROUP_STAT_FILE_MAPPED) * PAGE_SIZE); > + seq_printf(m, "file_dirty %lu\n", > + tree_stat(memcg, MEM_CGROUP_STAT_DIRTY) * PAGE_SIZE); > + seq_printf(m, "file_writeback %lu\n", > + tree_stat(memcg, MEM_CGROUP_STAT_WRITEBACK) * PAGE_SIZE); > + > + /* Memory management events */ > + > + seq_printf(m, "pgfault %lu\n", > + tree_events(memcg, MEM_CGROUP_EVENTS_PGFAULT)); > + seq_printf(m, "pgmajfault %lu\n", > + tree_events(memcg, MEM_CGROUP_EVENTS_PGMAJFAULT)); > + > + return 0; > +}