Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp2696412rdb; Wed, 4 Oct 2023 08:47:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGIKygJywfIEsLOK+/W9Dy4SF6hFcjIjPM9cLoI7VBbWfMTEWMYQ5Jf7d+s3VanVJ+cVDmO X-Received: by 2002:a17:90b:4a0c:b0:274:b4ce:7049 with SMTP id kk12-20020a17090b4a0c00b00274b4ce7049mr2520380pjb.34.1696434446739; Wed, 04 Oct 2023 08:47:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696434446; cv=none; d=google.com; s=arc-20160816; b=DNg6FPmKh7GYOynGpGWdSfWHcF6A/abfvKjPX+rOkLO+X8MlH88x8eS1slQagaf3Dh 1IPnop+ocMVpQtJwUnBAZ35+C8Dh39xoieFjdsSS8CQwUO+MMncwAJyt4VBLs4JwJ3gD e/BYDoT2jRnQ6hc6WSVjFO8lPJJonYnctaOiLwrXyA7G25Qrls8MO0CZbnSjossAx5US FsZg1mdJzlkQtY/MYUsgguK4TBUI8rjzGGIZ6GblPPkeh+OFlju8sd3QCs7be2DcZi0v Sn7NWp8PPIMXvc6XZVKek9BEjQTVzOsKpxWw85lJf6JK4jrj+LgqJFup34KynSKwlgAg 4LuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=IY/4LSYrmKOjHyh4TuahT+p2n+E3pAPQMItJAR6DqwI=; fh=9hbCrlT43iXm4uesi0nu9AJusJzEgkVU2SuAPew9Phs=; b=wqpspTjK4IfLnjgB8rbheNOMLH1QV8Cb+pCkNrtsj/r6V2xFkZssg1LoN7/ua3iWJ0 OBGN+oqrxtnLVX1/61dSjrea96Mw955ZnnXc5RAj0mpTqBqff9bl5HSe6J+/1f9Ud2Zn 4AftVwNWXt7TOySjqcUNXmWcumv7mJksgP4ysm+PSoWjb45+4BJe6Ry34LUW1jEsofkU KqRzn3OUmeP4KhT4j5S05c9jxEmkskXzq9BAiEapYeIWZdEjk3kAQ64azPIDPl2CSu2S QeZV4gXWpaHYOe+rYhRkI4vVANBWLtqmK3GWkeEhcu43jum8H2QSiJRhv49RoUoaHtLY KyqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=LyX4a0wU; dkim=neutral (no key) header.i=@linutronix.de header.b="4/M8TnT1"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id ot10-20020a17090b3b4a00b002747b95c23bsi1832283pjb.110.2023.10.04.08.47.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Oct 2023 08:47:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=LyX4a0wU; dkim=neutral (no key) header.i=@linutronix.de header.b="4/M8TnT1"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id A1AF98230CE3; Wed, 4 Oct 2023 08:47:25 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242867AbjJDPrW (ORCPT + 99 others); Wed, 4 Oct 2023 11:47:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233658AbjJDPrS (ORCPT ); Wed, 4 Oct 2023 11:47:18 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12CE8BF; Wed, 4 Oct 2023 08:47:15 -0700 (PDT) Date: Wed, 04 Oct 2023 15:47:12 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1696434433; h=from:from:sender:sender:reply-to: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; bh=IY/4LSYrmKOjHyh4TuahT+p2n+E3pAPQMItJAR6DqwI=; b=LyX4a0wUqwbipqCJ5uofwV+d+o7XBm9jiOkxLECAOYxr2YD2N5Ls4+j+rETZy64WX0Tgca zCX24rOzOLNgXOumFYjcU1T6pwu13QV/d7dNjlleMn2jHQxUG7Evu7xRVrXn1ml1VMfMyI PjU/5KJ6rrSD9vpYL5aCidxZMIX7ATBwCqUXwqeugm1ko0uDaGxKGeAmCK6mVr2cSPXxik X53M1viUKEPgGDgx91CKEfmG3jOt8+/SA7DdjZmm/AdLIEUmQgDMiiewYoiiiH50mfTLcI Q6e1ZpGFvnFMsXzoDQA1F+wvLuYTu05sw09Sto+OY7rhJkU1jsCX7j8EL6NnHw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1696434433; h=from:from:sender:sender:reply-to: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; bh=IY/4LSYrmKOjHyh4TuahT+p2n+E3pAPQMItJAR6DqwI=; b=4/M8TnT1w6l6kTvMlFKc5AZIPUPvFLYyoDZyH2YTCwMxTo1kt5VAFoqwSEOWCM5Hwi4upM a51pLxi+DFZ2IdDQ== From: "tip-bot2 for Waiman Long" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/core] x86/idle: Disable IBRS when CPU is offline to improve single-threaded performance Cc: Waiman Long , Ingo Molnar , "Rafael J. Wysocki" , Linus Torvalds , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20230727184600.26768-3-longman@redhat.com> References: <20230727184600.26768-3-longman@redhat.com> MIME-Version: 1.0 Message-ID: <169643443299.3135.10404749389371354446.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 04 Oct 2023 08:47:25 -0700 (PDT) The following commit has been merged into the sched/core branch of tip: Commit-ID: 8c7a9b1bb45060b6e67456c3cf28475f6e0bd65d Gitweb: https://git.kernel.org/tip/8c7a9b1bb45060b6e67456c3cf28475f6e0bd65d Author: Waiman Long AuthorDate: Thu, 27 Jul 2023 14:45:58 -04:00 Committer: Ingo Molnar CommitterDate: Wed, 04 Oct 2023 13:48:48 +02:00 x86/idle: Disable IBRS when CPU is offline to improve single-threaded performance Commit bf5835bcdb96 ("intel_idle: Disable IBRS during long idle") disables IBRS when the CPU enters long idle. However, when a CPU becomes offline, the IBRS bit is still set when X86_FEATURE_KERNEL_IBRS is enabled. That will impact the performance of a sibling CPU. Mitigate this performance impact by clearing all the mitigation bits in SPEC_CTRL MSR when offline. When the CPU is online again, it will be re-initialized and so restoring the SPEC_CTRL value isn't needed. Add a comment to say that native_play_dead() is a __noreturn function, but it can't be marked as such to avoid confusion about the missing MSR restoration code. When DPDK is running on an isolated CPU thread processing network packets in user space while its sibling thread is idle. The performance of the busy DPDK thread with IBRS on and off in the sibling idle thread are: IBRS on IBRS off ------- -------- packets/second: 7.8M 10.4M avg tsc cycles/packet: 282.26 209.86 This is a 25% performance degradation. The test system is a Intel Xeon 4114 CPU @ 2.20GHz. [ mingo: Extended the changelog with performance data from the 0/4 mail. ] Signed-off-by: Waiman Long Signed-off-by: Ingo Molnar Acked-by: Rafael J. Wysocki Cc: Linus Torvalds Link: https://lore.kernel.org/r/20230727184600.26768-3-longman@redhat.com --- arch/x86/kernel/smpboot.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 48e0406..02765d9 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -87,6 +87,7 @@ #include #include #include +#include /* representing HT siblings of each logical CPU */ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_map); @@ -1623,8 +1624,15 @@ void __noreturn hlt_play_dead(void) native_halt(); } +/* + * native_play_dead() is essentially a __noreturn function, but it can't + * be marked as such as the compiler may complain about it. + */ void native_play_dead(void) { + if (cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS)) + __update_spec_ctrl(0); + play_dead_common(); tboot_shutdown(TB_SHUTDOWN_WFS);