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 X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D6B5C56202 for ; Wed, 18 Nov 2020 11:25:44 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 37EB62078D for ; Wed, 18 Nov 2020 11:25:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 37EB62078D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6733C6B0036; Wed, 18 Nov 2020 06:25:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6250D6B005C; Wed, 18 Nov 2020 06:25:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 514886B0068; Wed, 18 Nov 2020 06:25:42 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0087.hostedemail.com [216.40.44.87]) by kanga.kvack.org (Postfix) with ESMTP id 23DC26B0036 for ; Wed, 18 Nov 2020 06:25:42 -0500 (EST) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id CBB0F3631 for ; Wed, 18 Nov 2020 11:25:41 +0000 (UTC) X-FDA: 77497308882.21.soup56_4d03a4927339 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin21.hostedemail.com (Postfix) with ESMTP id AE062180442CB for ; Wed, 18 Nov 2020 11:25:41 +0000 (UTC) X-HE-Tag: soup56_4d03a4927339 X-Filterd-Recvd-Size: 6155 Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by imf06.hostedemail.com (Postfix) with ESMTP for ; Wed, 18 Nov 2020 11:25:40 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 890D8ADAA; Wed, 18 Nov 2020 11:25:39 +0000 (UTC) To: Bharata B Rao , linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, cl@linux.com, rientjes@google.com, iamjoonsoo.kim@lge.com, akpm@linux-foundation.org, guro@fb.com, shakeelb@google.com, hannes@cmpxchg.org, aneesh.kumar@linux.ibm.com References: <20201118082759.1413056-1-bharata@linux.ibm.com> From: Vlastimil Babka Subject: Re: [RFC PATCH v0] mm/slub: Let number of online CPUs determine the slub page order Message-ID: <9e1a2e2b-1b3c-9587-9b74-8ed8300fcb98@suse.cz> Date: Wed, 18 Nov 2020 12:25:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <20201118082759.1413056-1-bharata@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable 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: On 11/18/20 9:27 AM, Bharata B Rao wrote: > The page order of the slab that gets chosen for a given slab > cache depends on the number of objects that can be fit in the > slab while meeting other requirements. We start with a value > of minimum objects based on nr_cpu_ids that is driven by > possible number of CPUs and hence could be higher than the > actual number of CPUs present in the system. This leads to > calculate_order() chosing a page order that is on the higher > side leading to increased slab memory consumption on systems > that have bigger page sizes. >=20 > Hence rely on the number of online CPUs when determining the > mininum objects, thereby increasing the chances of chosing > a lower conservative page order for the slab. >=20 > Signed-off-by: Bharata B Rao Acked-by: Vlastimil Babka Ideally, we would react to hotplug events and update existing caches=20 accordingly. But for that, recalculation of order for existing caches=20 would have to be made safe, while not affecting hot paths. We have=20 removed the sysfs interface with 32a6f409b693 ("mm, slub: remove runtime=20 allocation order changes") as it didn't seem easy and worth the trouble. In case somebody wants to start with a large order right from the boot=20 because they know they will hotplug lots of cpus later, they can use=20 slub_min_objects=3D boot param to override this heuristic. So in case thi= s=20 change regresses somebody's performance, there's a way around it and=20 thus the risk is low IMHO. > --- > This is a generic change and I am unsure how it would affect > other archs, but as a start, here are some numbers from > PowerPC pseries KVM guest with and without this patch: >=20 > This table shows how this change has affected some of the slab > caches. > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Current Patched > Cache > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > TCPv6 53 2 26 1 > net_namespace 53 4 26 2 > dtl 32 2 16 1 > names_cache 32 2 16 1 > task_struct 53 8 13 2 > thread_stack 32 8 8 2 > pgtable-2^11 16 8 8 4 > pgtable-2^8 32 2 16 1 > kmalloc-32k 16 8 8 4 > kmalloc-16k 32 8 8 2 > kmalloc-8k 32 4 8 1 > kmalloc-4k 32 2 16 1 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >=20 > Slab memory (kB) consumption comparision > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Current Patched > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > After-boot 205760 156096 > During-hackbench 629145 506752 (Avg of 5 runs) > After-hackbench 474176 331840 (after drop_caches) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >=20 > Hackbench Time (Avg of 5 runs) > (hackbench -s 1024 -l 200 -g 200 -f 25 -P) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Current Patched > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > 10.990 11.010 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >=20 > Measuring the effect due to CPU hotplug > ---------------------------------------- > Since the patch doesn't consider all the possible CPUs for page > order calcluation, let's see how affects the case when CPUs are > hotplugged. Here I compare a system that is booted with 64CPUs > with a system that is booted with 16CPUs but hotplugged with > 48CPUs after boot. These numbers are with the patch applied. >=20 > Slab memory (kB) consumption comparision > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > 64bootCPUs 16bootCPUs+48HotPluggedCPUs > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > After-boot 390272 159744 > After-hotplug - 251328 > During-hackbench 1001267 941926 (Avg of 5 runs) > After-hackbench 913600 827200 (after drop_caches) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >=20 > Hackbench Time (Avg of 5 runs) > (hackbench -s 1024 -l 200 -g 200 -f 25 -P) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > 64bootCPUs 16bootCPUs+48HotPluggedCPUs > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > 12.554 12.589 > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > mm/slub.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) >=20 > diff --git a/mm/slub.c b/mm/slub.c > index 34dcc09e2ec9..8342c0a167b2 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -3433,7 +3433,7 @@ static inline int calculate_order(unsigned int si= ze) > */ > min_objects =3D slub_min_objects; > if (!min_objects) > - min_objects =3D 4 * (fls(nr_cpu_ids) + 1); > + min_objects =3D 4 * (fls(num_online_cpus()) + 1); > max_objects =3D order_objects(slub_max_order, size); > min_objects =3D min(min_objects, max_objects); > =20 >=20