Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp2081131ybp; Thu, 10 Oct 2019 01:51:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqy2zbOu6P0DQCXq8DHCShAws6aTmRkPx/F7xMCV56xyfxwtRoxoWon/DEPW7eCLUymDfuHc X-Received: by 2002:a50:d4d7:: with SMTP id e23mr7024766edj.135.1570697479270; Thu, 10 Oct 2019 01:51:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570697479; cv=none; d=google.com; s=arc-20160816; b=Lz7rKmLEEgxA2GI0D+brSvhm/Xteb82ln4p1T/SbBGaZnvNntihHzQo0gT28Iqsnzm qLYXtUPWauiOVsg8irysvyo0sKdmHr067eGfDkjl8KSJrQuXXFJZdgK1ucnmi4oxFMf1 6lEUS/5J3/rjx3gD+t5AgpyPtIWNYuUJq85CSGh0J2arIfd9vpJhZNskCE+52v8hJwB+ svo71mo5tkaHb5hAqnEmYpBlxBhwQeiXAJb15hs2mXTEnZITLLnfbVklK2YSs9SstbYu 9FjQFwNTGh6RfI4JtQcJC9bFV9mjZG4AEXNOykj0TuO42WCFy2fnKcVmdYcjKTZ2X05n VH3A== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wRppM9BLx4jsgc3PqQuske5ZRU0dCf4sECYAm7jPyr8=; b=0e1OYq2TSdAW16HfL+lsYHqPFsUWwH9U1rdeTPm7T7N+lg7I4FY+V8xHlYhXaojJlG px33eTMJFG8T/KsCwA8nD2AMW01Cyh0N4I8yWi6bQQaP5qt0Au3M1g2YcGpWZLb/ya7N +KKd3siUWDVK0Hir9sDUkT98hdHxxH5MOUYgK5E+azhPNiIqVi3CP8zUSxJrK64qmX02 pKTeXcvynSnd6I2ngQ99VOIk8hUy/fu9YF8HxXKuMnscS4xLcWTDxeyl9pZomhdDzmpM oVDtFXdpcEgKnuaH/YcxCB8RrWsOFosKoQ6l+LrapwLrhpUX0BSB9ti7eV/1p6JN65dx 8jIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=vX92p1J7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u1si2759240ejt.143.2019.10.10.01.50.56; Thu, 10 Oct 2019 01:51:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=vX92p1J7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389177AbfJJIuy (ORCPT + 99 others); Thu, 10 Oct 2019 04:50:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:58068 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390029AbfJJIuu (ORCPT ); Thu, 10 Oct 2019 04:50:50 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id ECE2421929; Thu, 10 Oct 2019 08:50:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570697449; bh=ltpmpVIfpVjSRY1nFe8HZMAvP9cNBcb938J+Gx1/Yr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vX92p1J7yuEQP9GK9I1pWdepkhoMDqVkOaYcFrqjP0cA7yZLvz5/orzfQ1+IQwqB9 0wdn6ZHJCYBRxLQZ8uIAvxj3geVncRvgGOhDl+luFdQY94HDLA7r/uGxv1PkCjA62c hVAdm67hXUw2OY5APigUENdKU3VCvSoktxHauav0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, loobinliu@tencent.com, Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Waiman Long , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Wanpeng Li Subject: [PATCH 4.14 24/61] Revert "locking/pvqspinlock: Dont wait if vCPU is preempted" Date: Thu, 10 Oct 2019 10:36:49 +0200 Message-Id: <20191010083504.491883659@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191010083449.500442342@linuxfoundation.org> References: <20191010083449.500442342@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li commit 89340d0935c9296c7b8222b6eab30e67cb57ab82 upstream. This patch reverts commit 75437bb304b20 (locking/pvqspinlock: Don't wait if vCPU is preempted). A large performance regression was caused by this commit. on over-subscription scenarios. The test was run on a Xeon Skylake box, 2 sockets, 40 cores, 80 threads, with three VMs of 80 vCPUs each. The score of ebizzy -M is reduced from 13000-14000 records/s to 1700-1800 records/s: Host Guest score vanilla w/o kvm optimizations upstream 1700-1800 records/s vanilla w/o kvm optimizations revert 13000-14000 records/s vanilla w/ kvm optimizations upstream 4500-5000 records/s vanilla w/ kvm optimizations revert 14000-15500 records/s Exit from aggressive wait-early mechanism can result in premature yield and extra scheduling latency. Actually, only 6% of wait_early events are caused by vcpu_is_preempted() being true. However, when one vCPU voluntarily releases its vCPU, all the subsequently waiters in the queue will do the same and the cascading effect leads to bad performance. kvm optimizations: [1] commit d73eb57b80b (KVM: Boost vCPUs that are delivering interrupts) [2] commit 266e85a5ec9 (KVM: X86: Boost queue head vCPU to mitigate lock waiter preemption) Tested-by: loobinliu@tencent.com Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Waiman Long Cc: Paolo Bonzini Cc: Radim Krčmář Cc: loobinliu@tencent.com Cc: stable@vger.kernel.org Fixes: 75437bb304b20 (locking/pvqspinlock: Don't wait if vCPU is preempted) Signed-off-by: Wanpeng Li Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- kernel/locking/qspinlock_paravirt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/kernel/locking/qspinlock_paravirt.h +++ b/kernel/locking/qspinlock_paravirt.h @@ -247,7 +247,7 @@ pv_wait_early(struct pv_node *prev, int if ((loop & PV_PREV_CHECK_MASK) != 0) return false; - return READ_ONCE(prev->state) != vcpu_running || vcpu_is_preempted(prev->cpu); + return READ_ONCE(prev->state) != vcpu_running; } /*