From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 641D6C54EE9 for ; Fri, 9 Sep 2022 00:23:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D420B8D0003; Thu, 8 Sep 2022 20:23:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CF10B8D0001; Thu, 8 Sep 2022 20:23:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB8878D0003; Thu, 8 Sep 2022 20:23:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AB97C8D0001 for ; Thu, 8 Sep 2022 20:23:06 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 666E4403E2 for ; Fri, 9 Sep 2022 00:23:06 +0000 (UTC) X-FDA: 79890647172.15.505A8C0 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf01.hostedemail.com (Postfix) with ESMTP id DC72540078 for ; Fri, 9 Sep 2022 00:23:05 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 8F3071F88C; Fri, 9 Sep 2022 00:23:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1662682984; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=RUcUYAJZGU901kXStidccK27lsK7j2zOm94hwmU7LWc=; b=p3QIvpvvl1+OlHebZtJU5545iMnFcY++IJbcSYaNlcbllQWhTrKccHI+ZKQu1Ppix3rQsk 78KYNcOprAr6pSy/mMr57cubhvkeX0n6mcs8iwaIN/7DOBLF73HQEwlRHVr5dm3vMsV/zo FlmTC47AB1hzLgp6jz/TBPL5aSIfWqc= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 56B4013A93; Fri, 9 Sep 2022 00:23:04 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id LgceFGiHGmOvLwAAMHmgww (envelope-from ); Fri, 09 Sep 2022 00:23:04 +0000 Date: Fri, 9 Sep 2022 02:23:02 +0200 From: Michal =?iso-8859-1?Q?Koutn=FD?= To: Shakeel Butt Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , Andrew Morton , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] memcg: reduce size of memcg vmstats structures Message-ID: References: <20220907043537.3457014-1-shakeelb@google.com> <20220907043537.3457014-4-shakeelb@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220907043537.3457014-4-shakeelb@google.com> ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1662682986; a=rsa-sha256; cv=none; b=k7ZUovc++rZDJSxjEjE0hSfh0Zcy5w7e+tCbWIVvxv2eNLKTGC5grOVNeMEo1OduSYfvbg I933DAVY/jTCYSzieEewPiloSDfiD9T52fRvytFaXb169p+UegecjwUoy0c8Ouh4tt7fec S9BchQlnuBU3Rwh41dGKL9TuJJoGq24= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=p3QIvpvv; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf01.hostedemail.com: domain of mkoutny@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mkoutny@suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1662682986; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=RUcUYAJZGU901kXStidccK27lsK7j2zOm94hwmU7LWc=; b=T2KL+ItYZV7PMN0NOXk2IwdpDr2PpacocggV1/wo7TIcI4YDC2qYTyiR8YOVOGnnkRGT8w dHizA3VpT7+anAFqx+N8zyeYuKDCEgC0Gf1/eLBC1V4kfvbw9Jq5gVTvOcdya+xIFHpt2w VZ571UJefSqLwAt6r89KKD/N/vDu4qw= X-Stat-Signature: jzongr9ctopjeuszk7rordkn9k8173gy X-Rspamd-Queue-Id: DC72540078 X-Rspam-User: Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=p3QIvpvv; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf01.hostedemail.com: domain of mkoutny@suse.com designates 195.135.220.29 as permitted sender) smtp.mailfrom=mkoutny@suse.com X-Rspamd-Server: rspam02 X-HE-Tag: 1662682985-667804 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hello. On Wed, Sep 07, 2022 at 04:35:37AM +0000, Shakeel Butt wrote: > /* Subset of vm_event_item to report for memcg event stats */ > static const unsigned int memcg_vm_event_stat[] = { > + PGPGIN, > + PGPGOUT, > PGSCAN_KSWAPD, > PGSCAN_DIRECT, > PGSTEAL_KSWAPD, What about adding a dummy entry at the beginning like: static const unsigned int memcg_vm_event_stat[] = { + NR_VM_EVENT_ITEMS, + PGPGIN, + PGPGOUT, PGSCAN_KSWAPD, PGSCAN_DIRECT, > @@ -692,14 +694,30 @@ static const unsigned int memcg_vm_event_stat[] = { > #endif > }; > > +#define NR_MEMCG_EVENTS ARRAY_SIZE(memcg_vm_event_stat) > +static int mem_cgroup_events_index[NR_VM_EVENT_ITEMS] __read_mostly; > + > +static void init_memcg_events(void) > +{ > + int i; > + > + for (i = 0; i < NR_MEMCG_EVENTS; ++i) > + mem_cgroup_events_index[memcg_vm_event_stat[i]] = i + 1; Start such loops from i = 1, save i to the table. > +} > + > +static inline int memcg_events_index(enum vm_event_item idx) > +{ > + return mem_cgroup_events_index[idx] - 1; > +} And the there'd be no need for the reverse transforms -1. I.e. it might be just a negligible micro-optimization but since the event updates are on some fast (albeit longer) paths, it may be worth sacrificing one of the saved 8Bs in favor of no arithmetics. What do you think about this? > static unsigned long memcg_events(struct mem_cgroup *memcg, int event) > { > - return READ_ONCE(memcg->vmstats->events[event]); > + int index = memcg_events_index(event); > + > + if (index < 0) > + return 0; As a bonus these undefined maps could use the zero at the dummy location without branch (slow paths though). > @@ -5477,7 +5511,7 @@ static void mem_cgroup_css_rstat_flush(struct cgroup_subsys_state *css, int cpu) > parent->vmstats->state_pending[i] += delta; > } > > - for (i = 0; i < NR_VM_EVENT_ITEMS; i++) { > + for (i = 0; i < NR_MEMCG_EVENTS; i++) { I applaud this part :-) Michal