Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp1204760pxa; Thu, 13 Aug 2020 03:20:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvHw9yXtDk0rXg8FB62XkB6Aeb+XCmPkjzm0fWsmP0F5UCHLZoDNhFL0dvDCX5FN9QlP6F X-Received: by 2002:a17:907:aaa:: with SMTP id bz10mr4012741ejc.304.1597314013243; Thu, 13 Aug 2020 03:20:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597314013; cv=none; d=google.com; s=arc-20160816; b=Ooq7WP8UW2+63sQ4czvZQCbzuDu4pRSh4GYm/TuOGTgqvo8q+tjre6J5MQFS3xMCNz P4yfgjydPMIdSLhEYmW+ljf5bYMr1hFOEjkPUogimwwZ8naH1a3xo7zht3UrVFYwi+wz NXHanwnaVv5lF0A/Y3MwjHOtyg5VHQ7Ndx2rko9kA2RnSMWPzPkyVUa20X0bKGXfsqMB 6LtCuuLZ4rhgFWAN64XRSsajzhoAznQ6tMMbSp2RzrmybqFX7QpTcv98XK0xS5sbrnPH WneuktHlTbVRpZACtx5BxQu24uLuDV8NkAxw3izD0dpz/+lvwF4KCsuNXLPn5Pnm3001 QWjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=nE3iirkXljSYUSb9DwGqPj4aV+vcoaHXqDQmB9X2qWs=; b=ujs+Qv2hoTcgu/3MkkQNw8trN0+eT4Z4000pAX20SOaiZRf1qdWRNXB2Wqa7ylNOfV GqjijucMzI2O9tc9e8xfLbp5rhRBBekl+516xmARC3L1m0+am1s8maiw5G5Nm6tBoQuG gPCmv0epAKnyEB+FIYIWhuosNQzi5IRM+D/iEq0dXhdGopEvOQzPv98JbhLxH1FethD0 T5hn5uBx7cXYg3wQB4ixP9tpyb5NSEW8TSKj61K03+cxsma4U7dH7EO10SG309YwoXbp Os5lePDOCBOxHPu/Vh26X5LxQVqDFmSWhUKYuM5gdVMZLYpBMa+uAjSu1PYi2LWlF8fS w+og== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m10si2982341eds.471.2020.08.13.03.19.50; Thu, 13 Aug 2020 03:20:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726567AbgHMKSw (ORCPT + 99 others); Thu, 13 Aug 2020 06:18:52 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:9801 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726053AbgHMKSw (ORCPT ); Thu, 13 Aug 2020 06:18:52 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id BDF048ECFECFBDC7F91F; Thu, 13 Aug 2020 18:18:49 +0800 (CST) Received: from DESKTOP-A9S207P.china.huawei.com (10.174.179.61) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Thu, 13 Aug 2020 18:18:41 +0800 From: To: Christoph Lameter , Pekka Enberg , "David Rientjes" , Joonsoo Kim , "Andrew Morton" CC: , , Abel Wu , "open list:SLAB ALLOCATOR" , "open list" Subject: [PATCH] mm/slub: branch optimization in free slowpath Date: Thu, 13 Aug 2020 18:18:08 +0800 Message-ID: <20200813101812.1617-1-wuyun.wu@huawei.com> X-Mailer: git-send-email 2.28.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.174.179.61] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Abel Wu The two conditions are mutually exclusive and gcc compiler will optimise this into if-else-like pattern. Given that the majority of free_slowpath is free_frozen, let's provide some hint to the compilers. Tests (perf bench sched messaging -g 20 -l 400000, executed 10x after reboot) are done and the summarized result: un-patched patched max. 192.316 189.851 min. 187.267 186.252 avg. 189.154 188.086 stdev. 1.37 0.99 Signed-off-by: Abel Wu --- mm/slub.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index 4f496ae5a820..f9182a760675 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2958,20 +2958,21 @@ static void __slab_free(struct kmem_cache *s, struct page *page, if (likely(!n)) { - /* - * If we just froze the page then put it onto the - * per cpu partial list. - */ - if (new.frozen && !was_frozen) { + if (likely(was_frozen)) { + /* + * The list lock was not taken therefore no list + * activity can be necessary. + */ + stat(s, FREE_FROZEN); + } else if (new.frozen) { + /* + * If we just froze the page then put it onto the + * per cpu partial list. + */ put_cpu_partial(s, page, 1); stat(s, CPU_PARTIAL_FREE); } - /* - * The list lock was not taken therefore no list - * activity can be necessary. - */ - if (was_frozen) - stat(s, FREE_FROZEN); + return; } -- 2.28.0.windows.1