Received: by 10.223.164.202 with SMTP id h10csp298945wrb; Tue, 14 Nov 2017 23:16:41 -0800 (PST) X-Google-Smtp-Source: AGs4zMYY9DUf6XcuTz0KHeuk0YCVDjvAxROFsUxJUd8EvopSKAPtmPNWEYL0+0I/CGdrRa0GYCL0 X-Received: by 10.99.108.70 with SMTP id h67mr8617590pgc.218.1510730201227; Tue, 14 Nov 2017 23:16:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510730201; cv=none; d=google.com; s=arc-20160816; b=VYuOlKtFp9aSUz+Q/VG4so7eY5E1QuderRfBMqRtxQ4AKE6eX/VSJUtMrjRD5d3QdP 6krDGwR+OZayYWBHvbCdZ1S/0jlzhArOf2RuHdHONV//PpJKs5afMEysgmctM1uSuYXu zA3n+W1HPWPdT7yjxRx7LISpEwxs7pXPvykwhjaSosWXHJoq7nejaBgPVq4fnHnEOHYl pMZXDvjCgCT312Jd/eHaT6BUCbHdX7ZCMMHx8dN2Q1jg1XnMKAY3kEEW87xWYJq093rT lAggq7D9Wo1Tef6MV2smKDf1PjmSrwoMSX7wpOy/Cq4Xz+hgfluYxqzqkyzKx8U69KKK Arbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=clqMKt0wEyxb4405+Vg8JmStefBGjIvPAePWEGoaFxI=; b=vhVwebq8fD5ozaCJrYIVgB61smoig9V4i8lP5EIBghQIlfPXmQTygw6EjrA2aeRUUX V35Tb0TZJDtaspJ3woUj5N03Dzr5VR8dWS43+hJhBTnxm/ic+Xy31YMdqisvxTR5DkH4 MxwGXEsi2SZ/oaqx9wR4FYN6emxWIBzaDJreyXgBJd+w1mwBVwgivT6NBndH9GM1/hO7 z5MY4TxRloKC+rwEUCNmFLfWmvMWMII3hmG15cTtmF0954Rpj2rgLg5pFMvwtDpi7qek vv6yBgu9UeqzTGuxH19Kdgz6K3XdHmE2hhNd1q1tyycoITnlt7TMGRknV1pBwxsLQyPq aY1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=fgm+LkIv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ay2si16633925plb.380.2017.11.14.23.16.28; Tue, 14 Nov 2017 23:16:41 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=fgm+LkIv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932102AbdKOEdY (ORCPT + 88 others); Tue, 14 Nov 2017 23:33:24 -0500 Received: from mail-oi0-f67.google.com ([209.85.218.67]:48208 "EHLO mail-oi0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754488AbdKOEdO (ORCPT ); Tue, 14 Nov 2017 23:33:14 -0500 Received: by mail-oi0-f67.google.com with SMTP id b189so13928231oia.5; Tue, 14 Nov 2017 20:33:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=clqMKt0wEyxb4405+Vg8JmStefBGjIvPAePWEGoaFxI=; b=fgm+LkIvzU5McNE4dY7pAn5fTbH00MYfbOOoPFgmmSfeYckgh4RoQZ1woF4VnRHY5Q KQFAJuDFTplE9eA4/ISEtUJf/rfiezQ8u4ovRF1cp/1qQjfBl2YHVqqMKqKdjRmSYusZ 9I06RT9A30UZpJqYo0DdUYvuzprZdVTZ+tfu2yaiDf89hiLjB5Yqe9RfMAplOILpvLVk /G85C52kyjF9NkDRtS71SLON4fRJCNVwEJENVD0ugdSIkYja/RQuNxW4nGmUzQCfyqpI 4lTR7lhWwLK/kFqEpH1B5zNOf64Dp8cd5mZKVa/X6h+JuH7g9v+QInX35KhnWdESo/qO 6d5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=clqMKt0wEyxb4405+Vg8JmStefBGjIvPAePWEGoaFxI=; b=kmRIPttzu9v5wGEqMHywou330hWY7hbv5sDZ7Xyq1BDo5EUkkYYM7DysPk5RGGdX/L yn8NoAlYEW/Fex3lzpLhHdcIjMGXpdDTpIVYYD5AoEkLihawHtnJ5bR8HVFE3Fbz+hy1 j8/mbNCfThvirEoop6mf0bFualx6vb/mJMOdb8DfD8W6ZcAPzqC2UmakSHy/xzLYY5Pe i1smlymj+MwI86GnUTuGOgL1gqF+okvzYefmdQVWhKxhVfJRWsn1n806NsORZnVBxhqM L/xSat+DmHuYKX+uejQUp8jXfP4naBgulBIDnqrxcYtAfIJZLD+sOFyQ6e5xE+YyhsjP Gb0w== X-Gm-Message-State: AJaThX5/Jmg8NWToESO6aPRTcCkStKlvuyLVOV+fAZCFkKbsVlwlhR7d kQudXS9Qyy38Sd5uFqxCgVobp5eIBm9E8TW8tX4= X-Received: by 10.202.214.76 with SMTP id n73mr2066950oig.51.1510720394029; Tue, 14 Nov 2017 20:33:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.53.27 with HTTP; Tue, 14 Nov 2017 20:33:13 -0800 (PST) In-Reply-To: <1510715030.21121.287.camel@redhat.com> References: <20171114215424.32214-1-riel@redhat.com> <20171114215424.32214-2-riel@redhat.com> <1510715030.21121.287.camel@redhat.com> From: Wanpeng Li Date: Wed, 15 Nov 2017 12:33:13 +0800 Message-ID: Subject: Re: [PATCH 1/2] x86,kvm: move qemu/guest FPU switching out to vcpu_run To: Rik van Riel Cc: Paolo Bonzini , kvm , "linux-kernel@vger.kernel.org" , David Hildenbrand , Christian Borntraeger , Thomas Gleixner , Radim Krcmar Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2017-11-15 11:03 GMT+08:00 Rik van Riel : > On Wed, 2017-11-15 at 08:47 +0800, Wanpeng Li wrote: >> 2017-11-15 5:54 GMT+08:00 : >> > From: Rik van Riel >> > >> > Currently, every time a VCPU is scheduled out, the host kernel will >> > first save the guest FPU/xstate context, then load the qemu >> > userspace >> > FPU context, only to then immediately save the qemu userspace FPU >> > context back to memory. When scheduling in a VCPU, the same >> > extraneous >> > FPU loads and saves are done. >> > >> > This could be avoided by moving from a model where the guest FPU is >> > loaded and stored with preemption disabled, to a model where the >> > qemu userspace FPU is swapped out for the guest FPU context for >> > the duration of the KVM_RUN ioctl. >> >> What will happen if CONFIG_PREEMPT is enabled? > > The scheduler will save the guest FPU context when a > VCPU thread is preempted, and restore it when it is > scheduled back in. I mean all the involved processes will use fpu. Before patch if kernel preempt occur: context_switch -> prepare_task_switch -> fire_sched_out_preempt_notifiers -> kvm_sched_out -> kvm_arch_vcpu_put -> kvm_put_guest_fpu -> copy_fpregs_to_fpstate(&vcpu->arch.guest_fpu) save xsave area to guest fpu buffer -> __kernel_fpu_end -> copy_kernel_to_fpregs(¤t->thread.fpu.state) restore prev vCPU qemu userspace FPU to the xsave area -> switch_to -> __switch_to -> switch_fpu_prepare -> copy_fpregs_to_fpstate => save xsave area to prev vCPU qemu userspace FPU -> switch_fpu_finish -> copy_kernel_to_fpgregs => restore next task FPU to xsave area After the patch: context_switch -> prepare_task_switch -> fire_sched_out_preempt_notifiers -> kvm_sched_out -> switch_to -> __switch_to -> switch_fpu_prepare -> copy_fpregs_to_fpstate => Oops save xsave area to prev vCPU qemu userspace FPU, actually the guest FPU buffer is loaded in xsave area, you transmit guest FPU in xsave area into the prev vCPU qemu userspace FPU Regards, Wanpeng Li From 1584099636434948947@xxx Wed Nov 15 03:05:37 +0000 2017 X-GM-THRID: 1584017174910331026 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread