Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp2370061lqt; Mon, 22 Apr 2024 08:55:13 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCU/RzBwZYbSGv7/CeGKhGr2Sem9MCqKu43xUiPT6T6bdtjvlT+TV3bEhLCOSFtetRJZXZPelqTf4ETbNB5NoKzxGKToU2Jbtk69s6efSQ== X-Google-Smtp-Source: AGHT+IFsXwlWDnGOOnYwmkW+aj6Il8CvgLPkNWsMMysZEo2rJZPv9ArLgp6MACogmbmrIByNQeyy X-Received: by 2002:a17:90b:3b4c:b0:2ac:7bd6:cc6a with SMTP id ot12-20020a17090b3b4c00b002ac7bd6cc6amr119498pjb.0.1713801313421; Mon, 22 Apr 2024 08:55:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713801313; cv=pass; d=google.com; s=arc-20160816; b=vfnYaxSc+wJhYBJo7pC+Y7Yd7J6QR9zQKpQVBbe3cFdhSOQ/6DJ5Zchbm61v9pGRWY 86LzCCrAzcTyiq7MtRou6wdDG3W3SWXslGRgnr4jt8033N8LQbKTfRUc9HM5rSg56T4E 4y2b3Uw5Hs1XctXPSk4t2S/rpPHIMXVnJ+wKZkFCZGoVcunR9sddnzD8hfpKtCsIu/Mi dmR5UAv033fIU+BbLB9eajqI8uY93J1XjFhWsDaI89PN0GIxqMzw9WYW1nplvezM+T/M 3U6U6X0S3WwvoNvpDQ6uhgsCDEn8wGEl8OjwzCdxEQuchxwcg1TLDqubihBdCcMllcTZ mGMQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=vrXScvRqVTWx0cmSFbg2HprZNqV52P7w+MYqkVyqleM=; fh=VHh4Pz7/bjYl1gthq4j2PHdvRDOf3ai15FZGxCicmGI=; b=EYXx9A9d9fb4WVq/8nI5HsBSqW9Us5+DyH+qBjC2685lzxoTvQrSPJdLpw48dJ/aEU 9W8XfB/+oXa7Pu/cdZUOfRkdDlYsMoudKl3+z1JoL1CqirOUpszdbj6jUPNCu18uWPaq RlXQU4ckVcPaCbzupZdZLQdtEynec9rs7TILiNZkQZmu4L17DpwzfbdMgsYTF68XvnKJ dlNnUv/ZWrJn9EQ4qBxkfjz2C2PyybDWpYq855tM7Z3da1swnFW6FRX+iRFUXZGkC55J czSlGyw7/UipsxcvdDCAvXwa+vJ6X9sMTqLNw1HfIsvAxlQmjUa4VlyCo2mQ0zAWt/Iy oJyQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MAyHFqjR; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-153661-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-153661-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id pf5-20020a17090b1d8500b002a48bb7609esi9747647pjb.152.2024.04.22.08.55.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 08:55:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-153661-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MAyHFqjR; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-153661-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-153661-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sv.mirrors.kernel.org (Postfix) with ESMTPS id BEE68285279 for ; Mon, 22 Apr 2024 15:55:12 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 040AE153586; Mon, 22 Apr 2024 15:55:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="MAyHFqjR" Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A82A1153560 for ; Mon, 22 Apr 2024 15:55:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713801302; cv=none; b=RubNGHIObxc0yIpi+uN0jkFVQJ+r5G/a5DB3t8r2KxrbuvTXDCCmEMgNFQsSwOCJKBlizSNiO+hCvVafJmRcJLSvpbKf1Smr+TGQCn5uenQmr3kNpWmjrttMgykkDmVLxO+kVEvO1lCMlP4udq0ToLaDDB9MHV8P62jdLwTwvEM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713801302; c=relaxed/simple; bh=S24f1FSrq1sF+m6JW8GkCEgWL3cQbwVEjd5KUt/45t8=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=StQttCPJNlYVpRrdi9ASoK3NYI508iNh1ZWlUp6rQPdGR9T5P/9HDfSmvkZQRsEPIYzQTXcn9AteVVMCk+9vABjCrYJGRcE+0h0tLuXGdpZ7uPiGHtc321nBLh8sRNOTXhCxt99PgH56GUQUBqAqpurtt5x0YG4lNY1m5vYSxTQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=MAyHFqjR; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1713801299; h=from:from: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=vrXScvRqVTWx0cmSFbg2HprZNqV52P7w+MYqkVyqleM=; b=MAyHFqjRT3btFGyAKdg5aXwm1dWDe7vvo3A115VjWSMB6kfBJVbzqNBg85a9PTNMrS6LjH v6Eqh353oyU99f6J/HL574K+y07Mg4aSzQBUPy2NWq1+Z/lql4Du8hvRspQeKRlBDcbNh/ eS+/tuPAdhEYiUsLK7daHMzisJ83k9U= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-117-7nSj5R_UMQmNv2DD5WNXbg-1; Mon, 22 Apr 2024 11:54:57 -0400 X-MC-Unique: 7nSj5R_UMQmNv2DD5WNXbg-1 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4183d08093bso27287075e9.1 for ; Mon, 22 Apr 2024 08:54:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713801296; x=1714406096; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vrXScvRqVTWx0cmSFbg2HprZNqV52P7w+MYqkVyqleM=; b=jQ/rzApK4YYBZKYd1QmHeJ1r5BoJzGmOTYZKH6yaBsbP8C/O3LMdW377/iyCqNNT5t 4iF5finy6RJLit9MpiJf6d/BBGNOqpxmACdjdZUkTYgvaBoDxks/Avf4dK6Cf1maSbea r8mMmapEONRHUUK5wuOoJ9MRIKyQe/NcIkHDP1k5S/9Np5F4cPylFcATOMh5y2L5MMMO 5hrajSQdqOpnFZJlyhXQghz8U382nDUyFJDHt6ssMXaGJyfws4UCM4QZD7V1WKric6fq z2ablQdQTBj4nTyYcGDzOy16vEOy+Acu/IB8Hmg9oCPFtUaGQLuhe6UxUNm8bywgYt3C 1+rA== X-Forwarded-Encrypted: i=1; AJvYcCXxT1ZyGekwa+j+mJyc4dDNVl7M79PLaBA4Sxa9vAfvc4dP4UHC52Fv2qzGBk5q2v4Pig2QWNtsNmSh0dcwL9/6RZrfpAiSCiiEs96s X-Gm-Message-State: AOJu0YwD/wJURXPivReaH1dXUqe6YbY9Y6x4TkdWKN2FXus23U649V7G /ssSuSeH6g8Rgk4IIhYhgwm7rhZfUQCf6Mg3edmWzR7whPHstKTlYXJfLKXDPIKGq4j/0DNIMAu /rTIrpsZuMN3AAnbxlelrP+dGdJyB1C8u8/5mG1Y1qfNwzZvQ+yrg3hWyZm/1PifOm6QbMWjusW 4Gc1SGuVf4wPTen4Os7EUXezPCVa2xjXOR6vf2 X-Received: by 2002:a05:600c:4e0d:b0:41a:8b39:803b with SMTP id b13-20020a05600c4e0d00b0041a8b39803bmr1369172wmq.1.1713801296720; Mon, 22 Apr 2024 08:54:56 -0700 (PDT) X-Received: by 2002:a05:600c:4e0d:b0:41a:8b39:803b with SMTP id b13-20020a05600c4e0d00b0041a8b39803bmr1369141wmq.1.1713801296335; Mon, 22 Apr 2024 08:54:56 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240418193528.41780-1-dwmw2@infradead.org> <20240418193528.41780-3-dwmw2@infradead.org> In-Reply-To: From: Paolo Bonzini Date: Mon, 22 Apr 2024 17:54:44 +0200 Message-ID: Subject: Re: [PATCH 02/10] KVM: x86: Improve accuracy of KVM clock when TSC scaling is in force To: David Woodhouse Cc: kvm@vger.kernel.org, Jonathan Corbet , Sean Christopherson , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Paul Durrant , Shuah Khan , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Oliver Upton , Marcelo Tosatti , jalliste@amazon.co.uk, sveith@amazon.de Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 22, 2024 at 5:39=E2=80=AFPM David Woodhouse wrote: > > ... especially considering that you did use a 64-bit integer here > > (though---please use u64 not uint64_t; and BTW if you want to add a > > patch to change kvm_get_time_scale() to u64, please do. > > Meh, I'm used to programming in C. Yes, I *am* old enough to have been > doing this since the last decade of the 1900s, but it *has* been a long > time since 1999, and my fingers have learned :) Oh, I am on the same page (working on both QEMU and Linux, adapting my muscle memory to the context sucks) but u64/s64 is the preferred spelling and I have been asked to use them before. > Heh, looks like it was you who made it uint64_t, in 2016. In a commit > (3ae13faac) which said "Prepare for improving the precision in the next > patch"... which never came, AFAICT? Yes, it was posted as https://lore.kernel.org/lkml/1454944711-33022-5-git-send-email-pbonzini@red= hat.com/ but not committed. As an aside, we discovered later that the patch you list as "Fixes" fixed another tricky bug: before, kvmclock could jump if the TSC is set within the 250 ppm tolerance that does not activate TSC scaling. This is possible after a first live migration, and then the second live migration used the guest TSC frequency *that userspace desired* instead of the *actual* TSC frequency. Before: this_tsc_khz =3D __this_cpu_read(cpu_tsc_khz); if (unlikely(vcpu->hw_tsc_khz !=3D this_tsc_khz)) { tgt_tsc_khz =3D vcpu->virtual_tsc_khz; kvm_get_time_scale(NSEC_PER_SEC / 1000, tgt_tsc_khz, &vcpu->hv_clock.tsc_shift, &vcpu->hv_clock.tsc_to_system_mul); vcpu->hw_tsc_khz =3D this_tsc_khz; After: tgt_tsc_khz =3D __this_cpu_read(cpu_tsc_khz); // tgt_tsc_khz unchanged because TSC scaling was not enabled tgt_tsc_khz =3D kvm_scale_tsc(v, tgt_tsc_khz); if (unlikely(vcpu->hw_tsc_khz !=3D tgt_tsc_khz)) { kvm_get_time_scale(NSEC_PER_SEC / 1000, tgt_tsc_khz, &vcpu->hv_clock.tsc_shift, &vcpu->hv_clock.tsc_to_system_mul); vcpu->hw_tsc_khz =3D tgt_tsc_khz; So in the first case kvm_get_time_scale uses vcpu->virtual_tsc_khz, in the second case it uses __this_cpu_read(cpu_tsc_khz). This then caused a mismatch between the actual guest frequency and what is used by kvm_guest_time_update, which only becomes visible when migration resets the clock with KVM_GET/SET_CLOCK. KVM_GET_CLOCK returns what _should have been_ the same value read by the guest, but it's wrong. Paolo