Received: by 2002:a05:6358:c692:b0:131:369:b2a3 with SMTP id fe18csp283445rwb; Thu, 27 Jul 2023 12:40:29 -0700 (PDT) X-Google-Smtp-Source: APBJJlERcIwqxHcVgX+MZrl+RxUvy/JFSUnQ3ght5z2gYPxRWFSozpta5MpsSgr2Vu3jXysTu+cc X-Received: by 2002:a05:6a20:1393:b0:133:5110:344c with SMTP id hn19-20020a056a20139300b001335110344cmr62078pzc.8.1690486828591; Thu, 27 Jul 2023 12:40:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690486828; cv=none; d=google.com; s=arc-20160816; b=hQaa1aDnX5b+vK3lYfQOYaqQNH0ZnvngTCtfDYSrwCGKmTJms6P/XZiktdhXLw6iQD 9/x5Y3WQn55lK/zwCgLtBDjZcucZRKwm7GmIcpTJt1VdfOf+MQSqhZhDmOwDez8hTvqM fUUWN3ZQFCK40GE23Juy919ObDMqWyEgn4fjmIhc1FJ2tE7tQxfGlw35hPoRMUktDaRS /0u/T98NOpys5PC5jv4Qi5k+KOth6LSx0+ET/R/kNFM07Lr1jkqPKdBA/xMbdJdamjKy GzeeAcW+porlJVBHzTvZHbMQwGShY4oX+aBv2KptdRN8mPOd1tap4qRFW1px/fVJj0+X hC1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=9vUr73CDvO8sZIpJxxEKPT7ADmlQLHqdfVMIjFQBwE8=; fh=O5hGN+g8auw9Ax2YMVhoIJ+3XXizvyZrFj7plzReJck=; b=I4m57qTGb0Q6nDkxO4DYPj6gkOamPSGCFkXZWRR9IkkPUgwUaaD5lYP5IHzcYjVtI5 9X0AWvVj4kKbKVam7uePWutLQ/ErPBOaFl5Nna3VxH3+MuvVpW9IkyrKxwJ/s9UWBVVK MHh5s7hAD9HLPzQUlUnYUI2uJ6ppLUb2/j2ZNhJNWfPIsghb73HP07OqREvCs53iLgK2 mM/KktKH+rpygP/3hTrpb8q6mszuQnj8F89I2hKyIy0PQGzeZ4JypCcO+RH6HRR3m2DD 4spwVJbf2fvGBaEbAYaYBSFoPaYKk2CsOF9c6AB/Y6DBCdORh9/cjRxQ7TqPT6Q7dGVu 1vAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=OXhyC3il; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p25-20020a056a0026d900b00686b9aacd65si1702245pfw.26.2023.07.27.12.40.15; Thu, 27 Jul 2023 12:40:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=OXhyC3il; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229589AbjG0SrH (ORCPT + 99 others); Thu, 27 Jul 2023 14:47:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229580AbjG0SrG (ORCPT ); Thu, 27 Jul 2023 14:47:06 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7EB2C2D7D for ; Thu, 27 Jul 2023 11:46:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1690483580; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=9vUr73CDvO8sZIpJxxEKPT7ADmlQLHqdfVMIjFQBwE8=; b=OXhyC3ilCjrALClxMObAiBRerLFWHa4AVQ0cj25sJv8rq76x0Y4r/754+W8qnBvWNjyuBw yIcEv8e0Zb05GM5W7Xi4jQKOeccaagyhvlpkASgv9pxoJduZMTxACJ46t5psQ5oVgRYYLz nNFuGKHrnUncsWlGTLDpjVbSINJvbDQ= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-32-B53TWRI7OZqsm7GyLN6MzA-1; Thu, 27 Jul 2023 14:46:17 -0400 X-MC-Unique: B53TWRI7OZqsm7GyLN6MzA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 271A4856F67; Thu, 27 Jul 2023 18:46:16 +0000 (UTC) Received: from llong.com (unknown [10.22.17.17]) by smtp.corp.redhat.com (Postfix) with ESMTP id C9E42C57964; Thu, 27 Jul 2023 18:46:14 +0000 (UTC) From: Waiman Long To: Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Josh Poimboeuf , Pawan Gupta , Jacob Pan , Len Brown , Jonathan Corbet , "Rafael J . Wysocki" Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, linux-pm@vger.kernel.org, Robin Jarry , Joe Mario , Randy Dunlap , Waiman Long Subject: [PATCH v6 0/4] x86/speculation: Disable IBRS when idle Date: Thu, 27 Jul 2023 14:45:56 -0400 Message-Id: <20230727184600.26768-1-longman@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 v6: - Fix allyesconfig build error by moving __update_spec_ctrl() helper from nospec-branch.h to spec-ctrl.h and include it in files that need the helper. v5: - Update comment in patch 1. - Minor doc update and code twist in patch 4 as suggested by Peter and Randy. v4: - Add a new __update_spec_ctrl() helper in patch 1. - Rebased to the latest linux kernel. v3: - Drop patches 1 ("x86/speculation: Provide a debugfs file to dump SPEC_CTRL MSRs") and 5 ("x86/idle: Disable IBRS entering mwait idle and enable it on wakeup") for now. - Drop the MSR restoration code in ("x86/idle: Disable IBRS when cpu is offline") as native_play_dead() does not return. - For patch ("intel_idle: Add ibrs_off module parameter to force disable IBRS"), change the name from "no_ibrs" to "ibrs_off" and document the new parameter in intel_idle.rst. For Intel processors that need to turn on IBRS to protect against Spectre v2 and Retbleed, the IBRS bit in the SPEC_CTRL MSR affects the performance of the whole core even if only one thread is turning it on when running in the kernel. For user space heavy applications, the performance impact of occasionally turning IBRS on during syscalls shouldn't be significant. Unfortunately, that is not the case when the sibling thread is idling in the kernel. In that case, the performance impact can be significant. 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. Commit bf5835bcdb96 ("intel_idle: Disable IBRS during long idle") disables IBRS when the CPU enters long idle (C6 or below). However, there are existing users out there who have set "intel_idle.max_cstate=1" to decrease latency. Those users won't be able to benefit from this commit. This patch series extends this commit by providing a new "intel_idle.ibrs_off" module parameter to force disable IBRS even when "intel_idle.max_cstate=1" at the expense of increased IRQ response latency. It also includes a commit to allow the disabling of IBRS when a CPU becomes offline. Waiman Long (4): x86/speculation: Add __update_spec_ctrl() helper x86/idle: Disable IBRS when cpu is offline intel_idle: Use __update_spec_ctrl() in intel_idle_ibrs() intel_idle: Add ibrs_off module parameter to force disable IBRS Documentation/admin-guide/pm/intel_idle.rst | 17 ++++++++++++++++- arch/x86/include/asm/spec-ctrl.h | 11 +++++++++++ arch/x86/kernel/smpboot.c | 8 ++++++++ drivers/idle/intel_idle.c | 18 +++++++++++++----- 4 files changed, 48 insertions(+), 6 deletions(-) -- 2.31.1