Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp223842pxv; Wed, 21 Jul 2021 21:06:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyYh1ZHoiZujQnrvOOTQXmQdBbddxx4wJSmDHpVGHw64TsAM/eX2YkU5wSU/bHipfTBCmz5 X-Received: by 2002:a6b:b2d7:: with SMTP id b206mr29191039iof.155.1626926814760; Wed, 21 Jul 2021 21:06:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626926814; cv=none; d=google.com; s=arc-20160816; b=IBZDomRUx5lGoaOI+7GiNFZ06bLdmTQSL5pjRFQn15F8kFhLbHX+8CU9HHAIPRFxIS rPQPcsPe/QTIw+1v0sU0trdmCda0WhQ+I8i7dU80Mknr7QWtRm6U6iSLVTM7utR1rsJ7 hSIptoreUY1JGAN8qlSbMZd+UhtiVPhCZ4veDyOGiSoHdiZeb8ktav2IzNpzXkKq/V1l yVWzjN6tRqeuU9oT1vlLhmzZlHqo+sGMFcOVfNz/W4/AtTocxd1+SNBhcMtZArU2Lyul lqJJOo36TTp0vmnoRTp93IyY5nIOBKm36wcsCAzSG+X4MePzX27ZAX6HF4KBRvZuSj1x FxAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:to:from; bh=2/xsb19SgeTWxCls9x5V9IxEjs3W2fxy1y8hBWyERm0=; b=byXmSoTPzupgtOmJypdKMH6GGEK3y87bxN1AF8BWjA6dTHBpt7uSQYgCetg7kkYMIU xx6ar0e7aSa5bkFYQ68FfXQdkuqUI/aw72TuoplG16gg9eO/h8jpdlxqp36WGk+eQDU8 z2kdfqChRL8KZL/HYAknfET/K+zo32S9Yx9/XwCkFRfumDUV4u+UQrxm3cvo+1BR0RII Cl/jkEOY9/KRvIuVC/JawDPnjjgJ+s8oRMwRzS1vtVwPMShjVX0+IFRwHjq8GAIJAbdO wHcj1wPcOqoi20ty/omfCUGcHIWy9FXxuPZXv9cztQcnZrVpQM8s3+waDaple2b91xb1 xTUA== 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 h29si19097674jav.81.2021.07.21.21.06.43; Wed, 21 Jul 2021 21:06:54 -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 S229927AbhGVDZX (ORCPT + 99 others); Wed, 21 Jul 2021 23:25:23 -0400 Received: from mx315.baidu.com ([180.101.52.204]:43427 "EHLO njjs-sys-mailin05.njjs.baidu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229850AbhGVDZW (ORCPT ); Wed, 21 Jul 2021 23:25:22 -0400 X-Greylist: delayed 466 seconds by postgrey-1.27 at vger.kernel.org; Wed, 21 Jul 2021 23:25:22 EDT Received: from unknown.domain.tld (bjhw-sys-rpm015653cc5.bjhw.baidu.com [10.227.53.39]) by njjs-sys-mailin05.njjs.baidu.com (Postfix) with ESMTP id C986CCF80058; Thu, 22 Jul 2021 11:58:07 +0800 (CST) From: Li RongQing To: pbonzini@redhat.com, mingo@redhat.com, peterz@infradead.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] KVM: Consider SMT idle status when halt polling Date: Thu, 22 Jul 2021 11:58:07 +0800 Message-Id: <20210722035807.36937-1-lirongqing@baidu.com> X-Mailer: git-send-email 2.9.4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SMT siblings share caches and other hardware, halt polling will degrade its sibling performance if its sibling is busy Signed-off-by: Li RongQing --- include/linux/kvm_host.h | 5 ++++- include/linux/sched.h | 17 +++++++++++++++++ kernel/sched/fair.c | 17 ----------------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ae7735b..15b3ef4 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -269,7 +269,10 @@ static inline bool kvm_vcpu_mapped(struct kvm_host_map *map) static inline bool kvm_vcpu_can_poll(ktime_t cur, ktime_t stop) { - return single_task_running() && !need_resched() && ktime_before(cur, stop); + return single_task_running() && + !need_resched() && + ktime_before(cur, stop) && + is_core_idle(raw_smp_processor_id()); } /* diff --git a/include/linux/sched.h b/include/linux/sched.h index ec8d07d..c333218 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -34,6 +34,7 @@ #include #include #include +#include #include /* task_struct member predeclarations (sorted alphabetically): */ @@ -2191,6 +2192,22 @@ int sched_trace_rq_nr_running(struct rq *rq); const struct cpumask *sched_trace_rd_span(struct root_domain *rd); +static inline bool is_core_idle(int cpu) +{ +#ifdef CONFIG_SCHED_SMT + int sibling; + + for_each_cpu(sibling, cpu_smt_mask(cpu)) { + if (cpu == sibling) + continue; + + if (!idle_cpu(cpu)) + return false; + } +#endif + return true; +} + #ifdef CONFIG_SCHED_CORE extern void sched_core_free(struct task_struct *tsk); extern void sched_core_fork(struct task_struct *p); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 44c4520..5b0259c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1477,23 +1477,6 @@ struct numa_stats { int idle_cpu; }; -static inline bool is_core_idle(int cpu) -{ -#ifdef CONFIG_SCHED_SMT - int sibling; - - for_each_cpu(sibling, cpu_smt_mask(cpu)) { - if (cpu == sibling) - continue; - - if (!idle_cpu(cpu)) - return false; - } -#endif - - return true; -} - struct task_numa_env { struct task_struct *p; -- 2.9.4