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 89CE4E7D0D6 for ; Fri, 22 Sep 2023 06:55:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED85F6B0269; Fri, 22 Sep 2023 02:55:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E8A536B026F; Fri, 22 Sep 2023 02:55:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D77C26B0273; Fri, 22 Sep 2023 02:55:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id C5A156B0269 for ; Fri, 22 Sep 2023 02:55:32 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 8C291B3ACE for ; Fri, 22 Sep 2023 06:55:32 +0000 (UTC) X-FDA: 81263322504.23.9EF0018 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by imf15.hostedemail.com (Postfix) with ESMTP id 242D6A003D for ; Fri, 22 Sep 2023 06:55:29 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="ks8tfM2/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b="Xh0TFS/e"; dmarc=none; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695365730; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=j1UXkIX7PgB9a+J0veY2Drx28CRiXF/v4BDQq2G9vDY=; b=iE4OEOA6xIyUx9pVPFKVFo2uCboN8xbHW0cFGnrHqv6yEnMlWuUUVPdHAIfVtk2berU9x3 +pmzUHJBlfK9UBSEAT7fmlsZs4XxEpfn9I9Pq8dc14DDj31GeO4kZ09dgQZXNWtBzmefa5 uj8pCu/Nbjm62PKCqinooLd2n9lqD6E= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="ks8tfM2/"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b="Xh0TFS/e"; dmarc=none; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.28 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695365730; a=rsa-sha256; cv=none; b=GqdGBp+CVmpF/U85MU1sg2qAYA56c7x4CbS7BzMp8O2CodlwnD0FwoHk7J+cSZHyV9rmEm f0IhuZBVl3aOax4XSJM8DHXd4O9YD/eXQQwSBCqiiAislvFZr8srOvAdxfTSbMQffjackt 7CIpzZ85+jd0X86r0cyQqgnOXKDJNiE= 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-out1.suse.de (Postfix) with ESMTPS id D647321C47; Fri, 22 Sep 2023 06:55:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1695365727; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j1UXkIX7PgB9a+J0veY2Drx28CRiXF/v4BDQq2G9vDY=; b=ks8tfM2/+BomuV8RcvIe/Ay38m9ZdkBwdHui++JtBxgfdkW0JViPTsA7Z4SRs6Wdkqp5+k 7E65RV7En0sr6SPG6RZl1adkp+qfDKIByDutAivXLBFE97HwETUhCSdE3V5Wl0694DxA/I EkWVe+0BRVoUu0ISWNcyUu09b2ozUSc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1695365727; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j1UXkIX7PgB9a+J0veY2Drx28CRiXF/v4BDQq2G9vDY=; b=Xh0TFS/ebPdUHJUOI9aYVIZO0vbCwA8PqqC9P3wmyPtbIBjYiUX/jheFptxcWPalHUsBpe /IAvAjSO/lAcJ+Dw== 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 AD49E13478; Fri, 22 Sep 2023 06:55:27 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 5AWrKV86DWU5DwAAMHmgww (envelope-from ); Fri, 22 Sep 2023 06:55:27 +0000 Message-ID: <210044a1-1f07-b579-bdf5-3f9ac8fbdc8c@suse.cz> Date: Fri, 22 Sep 2023 08:55:27 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH 4/4] mm/slub: refactor calculate_order() and calc_slab_order() Content-Language: en-US To: Feng Tang Cc: David Rientjes , Christoph Lameter , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Jay Patel , Roman Gushchin , Pekka Enberg , Joonsoo Kim , "linux-mm@kvack.org" , "patches@lists.linux.dev" , "linux-kernel@vger.kernel.org" References: <20230908145302.30320-6-vbabka@suse.cz> <20230908145302.30320-10-vbabka@suse.cz> From: Vlastimil Babka In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 242D6A003D X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: i5rg3kope4oarze7jcz4abeb8qiudhc7 X-HE-Tag: 1695365729-838208 X-HE-Meta: U2FsdGVkX1/g4bPi55tVouih+JYHdUc1jCOzrv9vDqNjHEfyffFDFT3kr2ijlOybPr0ktk3vYS8y9fEF2buZUAdFHfpTQX6CLYjPpLW9TAjIzArgxOwZC2a06BTaxfZvxBi8A56d0WcECxSrr160ADxSLIVi+eBW5hgb3B5jwLi0WNZR96SY8laoj4p/3evT2oI6sGqGnwYOw0dt/vBPdQGMtiAhGtvke/o7vLLgCRgRkNNovOiVIZiDLH0p+yif0rw3wYi8nUGmzh49WqrngDQoYjdD3yyTySNjBL0yi+WrknrdJjLV8Gzm5XTkjyfAoyGChC4QSGIpwnKqdzXZS+b4xe0XzDDUwwAlNoZX7uv785ZqWvI2ZJpJxeU0juFpbnxIzu8ufph37a/HSAWMrAVIWIkCK9PNMh9AzNty7aVE35aZCNuPOCy6Mk6BqPr56lw4qSaDjbU13TQj+Mm6zFPb3Lz4xQz3iXbMeKOZWw18qxDbRmeWeaJzo8rklbXDMURm+INJdi1y0EWqPKI2RnIQfMMsmhqEdLFhIrDeQbdSN5oF5bZnEpEIZMkCRmfDe9uluhSlg6Zk/zHTP6ysi69VFlv8RgN904LXCG6EYTqu3xmQfmQ1e9hM+HbdiONuUG2Jo/NldBbgQLJfkhAF+wa4lEk4dw9TMcsWh40aTA4pEOpWDdwKywQkMuzUKT3xtanrPtd6JS3wLld0tEgCj0VzNjSN3hCfuQllQkipcOAJ5/Kaar2jb5jDHePFK1KEN5vPWjBrIbYHWrmaAcke9h+/VW5/B8/NYsWD9VyXJ74dVuahHiL17pSBn0sY3IN89+K1KDMRwMeRgB1LVcTCmFLLFZHRS82VMG1hc4Av0xygc9iIBzIh9raL0Nqexw/NGqJ3YIMZ8r9ep2udmiuogqgjchSr83XIo7AnFnzsRXIz+M1z5bDWp0un56ig+niDlwqqQfXkFximSfxIdpg Ocm6rnr/ 7pzNkepB+FJCvXpTPX3g1NLVOdsdXqJKXpkaiLGaaWVSXY/Fi5iWAGbQGb/InKSw70Z7FJju7B0HqIZDDBz2WUwa+iBj56/DhrzTWIKFTADP2LJSAodmnLBpReGKdhcFkPqbQTAQjVMNfW5pJntRWDpB+mMWnA8jj38XZ6V4L2WoIZt8O6vUaBeP5TVqVZ1Nh6Fpc+kxcbj3PboyGkhoxVu9gEP4qbyZN74qSPe3RoP4UlJZlAqMSWUf+VOZfRjsrDoG0W+VwDd4xs9Z4OZ7lTDDvC/nNQOR9B2G3RYNGUpz+MH4f38tuNI5ToQgyLlVs0ploCFTNN+a7FB/2htfXi0mBfi9dWZkYQbsHeg7DMd/g7y2ujJJ02aKeqHyXZaJx+bZ7 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 9/20/23 15:36, Feng Tang wrote: > On Fri, Sep 08, 2023 at 10:53:07PM +0800, Vlastimil Babka wrote: >> After the previous cleanups, we can now move some code from >> calc_slab_order() to calculate_order() so it's executed just once, and >> do some more cleanups. >> >> - move the min_order and MAX_OBJS_PER_PAGE evaluation to >> calc_slab_order(). > > Nit: here is to 'move ... to calculate_order()'? Oops, right, fixed. > I tried this patch series with normal boot on a desktop and one 2 > socket server: patch 2/4 doesn't change order of any slab, and patch > 3/4 does make the slab order of big objects more consistent. > > Thanks for making the code much cleaner! And for the whole series, > > Reviewed-by: Feng Tang Thanks! Applied. > >> - change calc_slab_order() parameter min_objects to min_order >> >> Also make MAX_OBJS_PER_PAGE check more robust by considering also >> min_objects in addition to slub_min_order. Otherwise this is not a >> functional change. >> >> Signed-off-by: Vlastimil Babka >> --- >> mm/slub.c | 19 +++++++++---------- >> 1 file changed, 9 insertions(+), 10 deletions(-) >> >> diff --git a/mm/slub.c b/mm/slub.c >> index f04eb029d85a..1c91f72c7239 100644 >> --- a/mm/slub.c >> +++ b/mm/slub.c >> @@ -4110,17 +4110,12 @@ static unsigned int slub_min_objects; >> * the smallest order which will fit the object. >> */ >> static inline unsigned int calc_slab_order(unsigned int size, >> - unsigned int min_objects, unsigned int max_order, >> + unsigned int min_order, unsigned int max_order, >> unsigned int fract_leftover) >> { >> - unsigned int min_order = slub_min_order; >> unsigned int order; >> >> - if (order_objects(min_order, size) > MAX_OBJS_PER_PAGE) >> - return get_order(size * MAX_OBJS_PER_PAGE) - 1; >> - >> - for (order = max(min_order, (unsigned int)get_order(min_objects * size)); >> - order <= max_order; order++) { >> + for (order = min_order; order <= max_order; order++) { >> >> unsigned int slab_size = (unsigned int)PAGE_SIZE << order; >> unsigned int rem; >> @@ -4139,7 +4134,7 @@ static inline int calculate_order(unsigned int size) >> unsigned int order; >> unsigned int min_objects; >> unsigned int max_objects; >> - unsigned int nr_cpus; >> + unsigned int min_order; >> >> min_objects = slub_min_objects; >> if (!min_objects) { >> @@ -4152,7 +4147,7 @@ static inline int calculate_order(unsigned int size) >> * order on systems that appear larger than they are, and too >> * low order on systems that appear smaller than they are. >> */ >> - nr_cpus = num_present_cpus(); >> + unsigned int nr_cpus = num_present_cpus(); >> if (nr_cpus <= 1) >> nr_cpus = nr_cpu_ids; >> min_objects = 4 * (fls(nr_cpus) + 1); >> @@ -4160,6 +4155,10 @@ static inline int calculate_order(unsigned int size) >> max_objects = order_objects(slub_max_order, size); >> min_objects = min(min_objects, max_objects); >> >> + min_order = max(slub_min_order, (unsigned int)get_order(min_objects * size)); >> + if (order_objects(min_order, size) > MAX_OBJS_PER_PAGE) >> + return get_order(size * MAX_OBJS_PER_PAGE) - 1; >> + >> /* >> * Attempt to find best configuration for a slab. This works by first >> * attempting to generate a layout with the best possible configuration and >> @@ -4176,7 +4175,7 @@ static inline int calculate_order(unsigned int size) >> * long as at least single object fits within slub_max_order. >> */ >> for (unsigned int fraction = 16; fraction > 1; fraction /= 2) { >> - order = calc_slab_order(size, min_objects, slub_max_order, >> + order = calc_slab_order(size, min_order, slub_max_order, >> fraction); >> if (order <= slub_max_order) >> return order; >> -- >> 2.42.0 >> >>