Received: by 2002:a89:d88:0:b0:1fa:5c73:8e2d with SMTP id eb8csp575281lqb; Fri, 24 May 2024 07:10:54 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWD9NmJK2VOXGdw1If4UEfkXy+KjmFo8WZqLGoFznMgjZx5YDUUTXJaoToFgKDrwtuaF2EBiXYCfMTGW4eDbNkAbqey3OqHqeLZmhh7Lg== X-Google-Smtp-Source: AGHT+IFzGArKknVvdIWLTgecYoTrMggEZoQxO6Gx7xGbONqAdTXgM4grCyoy8OBZfmTljtu0LOJ2 X-Received: by 2002:a9d:6295:0:b0:6f1:2384:cdf6 with SMTP id 46e09a7af769-6f8d0b68e81mr2309274a34.28.1716559854505; Fri, 24 May 2024 07:10:54 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1716559854; cv=pass; d=google.com; s=arc-20160816; b=yr62yG5NQCd25u8gOMn6l1r2kyoInYKT9XDjWp4+OnlEAQuymjZCbC9cVhxrCld0As vVgGTwF48fC0MNI+/JcF35MabOec7JuFMJGacCWUMbl4x1o//FuRCQksMXZfff9EdHAK JNi86G2cREy7RLLX6zSQZkLULqUAxVqg32oBv5touEQkRpWYLO8KHBIdVdBKUQo/uuFJ CAcHQnedMrYawesT6MfzADs2e2wNSyEWpkC2vOviRNVhWKuRULnoq5s8i8/hgotZD5Ar cQpgVJStzIA8lVeN2bX36EbE5LuqKg9BNzBIQI0NhqRWVHvR7iSoM2mgOsLy0dUQ2N7R d6+Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:organization:content-language :references:cc:to:subject:reply-to:user-agent:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:date:message-id :from:dkim-signature; bh=QveJEjdigPYVmEFYMrUNMB5K+Jm/VE2z4qre0BBpK4A=; fh=kxBW43mU0n5Y7UQj0wGxY7sGReoP1N4b1fG68iCmT84=; b=pPJkATiSB2nzqUZJkcv76RYLhfMBCUurA+JxgLLIPJ4q+yXDvgTbmrxn0wHS1YxM6F P8MowjRn21vP9nWRHxscR4xIpKBzR4vIK6QI595xJ0KNOp47VgpYZn94zCcy3Rk0yK0o vqGAqhGNIblfC7heIcELOO1MpXfujNllIEUqtcHXAQx7XRfzl9Wxm9x9jPIA/ZX6AwUf eAwGTfhhkiGmvPhflJf/4exU5w7kyvuQCNPZxDmPShD8HxVIrtHJcSr0BTkB9jLZPbiD fJld6skSRPgirDd4b5lBl/a1cIgODG5VBxz+20L1U8byBxP/9ryhYZz7SJeVWbfG6nQl HWXA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=lNkh7Rlu; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-188773-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-188773-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id 71dfb90a1353d-4e4f07b8079si281884e0c.153.2024.05.24.07.10.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 May 2024 07:10:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-188773-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=lNkh7Rlu; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-188773-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-188773-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0E3D61C22088 for ; Fri, 24 May 2024 14:10:54 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BB69412C52F; Fri, 24 May 2024 14:10:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lNkh7Rlu" Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B94112C466; Fri, 24 May 2024 14:10:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716559839; cv=none; b=KdoXzB3S7DIRjEpD/Qboiw07Psed85O2VgaCysfOrVbZofWBrPI/Q78F9uWY3xrnnWXAsGtw1ErXu3KtRKvjnjFbablBjKv0DjuYYU41nl47q6Fu2Bt5RyVVSK+ZtNAkLPes6fdXMJ3M6tonEm9U7kg84zZmaqh17mjMuwsQIXM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716559839; c=relaxed/simple; bh=hJyg2YZ2WeH0Q9liuVLFHR9OibhRwupUtgr0ma4XRbo=; h=From:Message-ID:Date:MIME-Version:Subject:To:Cc:References: In-Reply-To:Content-Type; b=dkCpFPgrT733Ajhw3j4Wmk+xEjg5y0OgpEjGkipGDtvt6LQRBwMNN24h1vBtZxUg2ze4HhCDMbITgUdOfCitPfB0MKRz/rg3dvMbeWBiYAn1zE/MR9D6B4bUW1u/MqW1YapS4ZzZKp+sVXUn5DusZCisf5ogk8yriGCatsRcQhE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lNkh7Rlu; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-35507dfe221so585677f8f.1; Fri, 24 May 2024 07:10:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716559836; x=1717164636; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:organization:content-language :references:cc:to:subject:reply-to:user-agent:mime-version:date :message-id:from:from:to:cc:subject:date:message-id:reply-to; bh=QveJEjdigPYVmEFYMrUNMB5K+Jm/VE2z4qre0BBpK4A=; b=lNkh7RluM5SxuuPVy+ibwP//VXOYDc1PyyBseaGy+OCMSvW+i1fobInd3YE78GF1mX Nk2upxKim+6zu8cZeK1JarwIrAFBo8aHFtO336U5hxD2m9wBze2ttV7wa5jCxcbygB7W bFl4lSWYUU0s0hibbamP2Pqqon3ASdKyOqClVPlL/9xSY9EfwAXlPinXoumxL8/Z+CQ2 aNvAQqp5t5hEEQN6FQHnowhGJP1dKGLKgCptuqZ4LJodHi9mZn2qBKiBQfoPjS/ZVlXG uSinEovkIlrIXySFob3X8rgCq7CbmHjCMsDMfSf0kfoc7mWK3mQdq/lNeJZFiRv+t172 ocig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716559836; x=1717164636; h=content-transfer-encoding:in-reply-to:organization:content-language :references:cc:to:subject:reply-to:user-agent:mime-version:date :message-id:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=QveJEjdigPYVmEFYMrUNMB5K+Jm/VE2z4qre0BBpK4A=; b=gTrWu5NQnNq7/VtgJF6ifAaEObdN9dPNwE0j0ErieG99HerAsXEuVtP5dHkpHgvca/ qX4J5hMPpzdkm8HskZZNfo7R/w26EBIKm4/t4q/z4mQvFbIBlYsJfbwc32qdqAo612ug B8H0NHK+aBhTSVCLcM3TzHL4kZ44OufrEAc0ayiK+mavvu2CIS9yLvhRl2P5xSU9SGzb 7gadTTdn8JZSRb9w6yI7EJD/QGE37VsBFRM4WKUUU7UMJrMeA7X3HoYOw6QNtLhZjqk5 Ou2broUev5fmPKk9YYQW6+WmUjdXhVgbVteHBzjR6+sXy52VPXy/wz10dFexw8/Jq1pM tpKA== X-Forwarded-Encrypted: i=1; AJvYcCVG1rIK+7D0RSSakxY+iv28tQIwvve1bBwuaCx2sSfyTl3+tm6M0Gh9Eyk2vGeml23bemlB46+WTJrOcVZyPmCdf1v9ZICC/wdUf0SIWL4VqF/Y5GwRSV5MBCKQdLBahwKVqgj8HJv9ZzF0/JENahv7Gs7813XVgAKz1bvm X-Gm-Message-State: AOJu0Yx2PzQhBfEGBXkWqWgP9YR4wMb8ulPEV/jWuA0fhUoGcJusf53v 0Fd4y1AIMxN5joLBsTSofWKpQoF650+kj898j8o72FszXQGWjCqn X-Received: by 2002:adf:db43:0:b0:354:f724:641a with SMTP id ffacd0b85a97d-3552fdc5d99mr2035164f8f.44.1716559836317; Fri, 24 May 2024 07:10:36 -0700 (PDT) Received: from [192.168.0.200] (54-240-197-234.amazon.com. [54.240.197.234]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3557a1c938fsm1673617f8f.76.2024.05.24.07.10.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 24 May 2024 07:10:35 -0700 (PDT) From: Paul Durrant X-Google-Original-From: Paul Durrant Message-ID: Date: Fri, 24 May 2024 15:10:33 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Reply-To: paul@xen.org Subject: Re: [RFC PATCH v3 15/21] KVM: x86: Allow KVM master clock mode when TSCs are offset from each other To: David Woodhouse , kvm@vger.kernel.org Cc: Paolo Bonzini , Jonathan Corbet , Sean Christopherson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Valentin Schneider , Shuah Khan , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, jalliste@amazon.co.uk, sveith@amazon.de, zide.chen@intel.com, Dongli Zhang , Chenyi Qiang References: <20240522001817.619072-1-dwmw2@infradead.org> <20240522001817.619072-16-dwmw2@infradead.org> Content-Language: en-US Organization: Xen Project In-Reply-To: <20240522001817.619072-16-dwmw2@infradead.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 22/05/2024 01:17, David Woodhouse wrote: > From: David Woodhouse > > There is no reason why the KVM clock cannot be in masterclock mode when > the TSCs are not in sync, as long as they are at the same *frequency*. > > Running at a different frequency would lead to a systemic skew between > the clock(s) as observed by different vCPUs due to arithmetic precision > in the scaling. So that should indeed force the clock to be based on the > host's CLOCK_MONOTONIC_RAW instead of being in masterclock mode where it > is defined by the (or 'a') guest TSC. > > But when the vCPUs merely have a different TSC *offset*, that's not a > problem. The offset is applied to that vCPU's kvmclock->tsc_timestamp > field, and it all comes out in the wash. > > So, remove ka->nr_vcpus_matched_tsc and replace it with a new field > ka->all_vcpus_matched_tsc which is not only changed to a boolean, but > also now tracks that the *frequency* matches, not the precise offset. > > Using a *count* was always racy because a new vCPU could be being > created *while* kvm_track_tsc_matching() was running and comparing with > kvm->online_vcpus. That variable is only atomic with respect to itself. > In particular, kvm_arch_vcpu_create() runs before kvm->online_vcpus is > incremented for the new vCPU, and kvm_arch_vcpu_postcreate() runs later. > > Repurpose kvm_track_tsc_matching() to be called from kvm_set_tsc_khz(), > and kill the cur_tsc_generation/last_tsc_generation fields which tracked > the precise TSC matching. > > Signed-off-by: David Woodhouse > --- > arch/x86/include/asm/kvm_host.h | 6 +- > arch/x86/kvm/x86.c | 130 +++++++++++++++++--------------- > 2 files changed, 71 insertions(+), 65 deletions(-) > Reviewed-by: Paul Durrant