linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@kernel.org>
To: Dave Hansen <dave.hansen@intel.com>
Cc: "Andy Lutomirski" <luto@kernel.org>,
	"Jason A. Donenfeld" <Jason@zx2c4.com>,
	"David Laight" <David.Laight@aculab.com>,
	"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"Rik van Riel" <riel@surriel.com>,
	"Dave Hansen" <dave.hansen@linux.intel.com>
Subject: Re: [PATCH v6] x86: load FPU registers on return to userland
Date: Tue, 15 Jan 2019 13:11:48 -0800	[thread overview]
Message-ID: <CALCETrXq8GFAzunui7d-seaK-on6_xiZOv0A4wc=sAur0wuDzg@mail.gmail.com> (raw)
In-Reply-To: <39ab2f2b-81bb-636e-933d-f3a5225aa020@intel.com>

On Tue, Jan 15, 2019 at 12:54 PM Dave Hansen <dave.hansen@intel.com> wrote:
>
> On 1/15/19 12:26 PM, Andy Lutomirski wrote:
> > I don't think we'd ever want kernel_fpu_end() to restore anything,
> > right?  I'm a bit confused as to when this optimization would actually
> > be useful.
>
> Using AVX-512 as an example...
>
> Let's say there was AVX-512 state, and a kernel_fpu_begin() user only
> used AVX2.  We could totally avoid doing *any* AVX-512 state save/restore.
>
> The init optimization doesn't help us if there _is_ AVX-512 state, and
> the modified optimization only helps if we recently did a XRSTOR at
> context switch and have not written to AVX-512 state since XRSTOR.
>
> This probably only matters for AVX-512-using apps that have run on a
> kernel with lots of kernel_fpu_begin()s that don't use AVX-512.  So, not
> a big deal right now.

On top of this series, this gets rather awkward, I think -- now we
need to be able to keep track of a state in which some of the user
registers live in the CPU and some live in memory, and we need to be
able to do the partial restore if we go back to user mode like this.
We also need to be able to do a partial save if we end up context
switching.  This seems rather complicated.

Last time I measured it (on Skylake IIRC), a full save was only about
twice as slow as a save that saved nothing at all, so I think we'd
need numbers.

  reply	other threads:[~2019-01-15 21:12 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-09 11:47 [PATCH v6] x86: load FPU registers on return to userland Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 01/22] x86/fpu: Remove fpu->initialized usage in __fpu__restore_sig() Sebastian Andrzej Siewior
2019-01-14 16:24   ` Borislav Petkov
2019-02-05 10:08     ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 02/22] x86/fpu: Remove fpu__restore() Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 03/22] x86/fpu: Remove preempt_disable() in fpu__clear() Sebastian Andrzej Siewior
2019-01-14 18:55   ` Borislav Petkov
2019-01-09 11:47 ` [PATCH 04/22] x86/fpu: Always init the `state' " Sebastian Andrzej Siewior
2019-01-14 19:32   ` Borislav Petkov
2019-01-09 11:47 ` [PATCH 05/22] x86/fpu: Remove fpu->initialized usage in copy_fpstate_to_sigframe() Sebastian Andrzej Siewior
2019-01-16 19:36   ` Borislav Petkov
2019-01-16 22:40     ` Sebastian Andrzej Siewior
2019-01-17 12:22       ` Borislav Petkov
2019-01-18 21:14         ` Sebastian Andrzej Siewior
2019-01-18 21:17           ` Dave Hansen
2019-01-18 21:37             ` Sebastian Andrzej Siewior
2019-01-18 21:43               ` Dave Hansen
2019-01-21 11:21             ` Oleg Nesterov
2019-01-22 13:40               ` Borislav Petkov
2019-01-22 16:15                 ` Oleg Nesterov
2019-01-22 17:00                   ` Borislav Petkov
2019-02-05 11:34                     ` Sebastian Andrzej Siewior
2019-02-05 11:17               ` Sebastian Andrzej Siewior
2019-02-26 16:38                 ` Oleg Nesterov
2019-03-08 18:12                   ` Sebastian Andrzej Siewior
2019-02-05 14:37         ` [PATCH 05/22 v2] " Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 06/22] x86/fpu: Don't save fxregs for ia32 frames " Sebastian Andrzej Siewior
2019-01-24 11:17   ` Borislav Petkov
2019-02-05 16:43     ` [PATCH 06/22 v2] x86/fpu: Don't save fxregs for ia32 frames in Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 07/22] x86/fpu: Remove fpu->initialized Sebastian Andrzej Siewior
2019-01-24 13:34   ` Borislav Petkov
2019-02-05 18:03     ` Sebastian Andrzej Siewior
2019-02-06 14:01       ` Borislav Petkov
2019-02-07 10:13         ` Sebastian Andrzej Siewior
2019-02-07 10:37           ` Borislav Petkov
2019-02-05 18:06     ` [PATCH 07/22 v2] " Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 08/22] x86/fpu: Remove user_fpu_begin() Sebastian Andrzej Siewior
2019-01-25 15:18   ` Borislav Petkov
2019-02-05 18:16     ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 09/22] x86/fpu: Add (__)make_fpregs_active helpers Sebastian Andrzej Siewior
2019-01-28 18:23   ` Borislav Petkov
2019-02-07 10:43     ` Sebastian Andrzej Siewior
2019-02-13  9:30       ` Borislav Petkov
2019-02-14 14:51         ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 10/22] x86/fpu: Make __raw_xsave_addr() use feature number instead of mask Sebastian Andrzej Siewior
2019-01-28 18:30   ` Borislav Petkov
2019-01-09 11:47 ` [PATCH 11/22] x86/fpu: Make get_xsave_field_ptr() and get_xsave_addr() " Sebastian Andrzej Siewior
2019-01-28 18:49   ` Borislav Petkov
2019-02-07 11:13     ` Sebastian Andrzej Siewior
2019-02-13  9:31       ` Borislav Petkov
2019-01-09 11:47 ` [PATCH 12/22] x86/fpu: Only write PKRU if it is different from current Sebastian Andrzej Siewior
2019-01-23 18:09   ` Dave Hansen
2019-02-07 11:27     ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 13/22] x86/pkeys: Don't check if PKRU is zero before writting it Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 14/22] x86/fpu: Eager switch PKRU state Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 15/22] x86/entry: Add TIF_NEED_FPU_LOAD Sebastian Andrzej Siewior
2019-01-30 11:55   ` Borislav Petkov
2019-02-07 11:49     ` Sebastian Andrzej Siewior
2019-02-13  9:35       ` Borislav Petkov
2019-02-14 15:28         ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 16/22] x86/fpu: Always store the registers in copy_fpstate_to_sigframe() Sebastian Andrzej Siewior
2019-01-30 11:43   ` Borislav Petkov
2019-02-07 13:28     ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 17/22] x86/fpu: Prepare copy_fpstate_to_sigframe() for TIF_NEED_FPU_LOAD Sebastian Andrzej Siewior
2019-01-30 11:56   ` Borislav Petkov
2019-01-30 12:28     ` Sebastian Andrzej Siewior
2019-01-30 12:53       ` Borislav Petkov
2019-02-07 14:10         ` Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 18/22] x86/fpu: Update xstate's PKRU value on write_pkru() Sebastian Andrzej Siewior
2019-01-23 17:28   ` Dave Hansen
2019-01-09 11:47 ` [PATCH 19/22] x86/fpu: Inline copy_user_to_fpregs_zeroing() Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 20/22] x86/fpu: Let __fpu__restore_sig() restore the !32bit+fxsr frame from kernel memory Sebastian Andrzej Siewior
2019-01-30 21:29   ` Borislav Petkov
2019-01-09 11:47 ` [PATCH 21/22] x86/fpu: Merge the two code paths in __fpu__restore_sig() Sebastian Andrzej Siewior
2019-01-09 11:47 ` [PATCH 22/22] x86/fpu: Defer FPU state load until return to userspace Sebastian Andrzej Siewior
2019-01-31  9:16   ` Borislav Petkov
2019-01-15 12:44 ` [PATCH v6] x86: load FPU registers on return to userland David Laight
2019-01-15 13:15   ` 'Sebastian Andrzej Siewior'
2019-01-15 14:33     ` David Laight
2019-01-15 19:46   ` Dave Hansen
2019-01-15 20:26     ` Andy Lutomirski
2019-01-15 20:54       ` Dave Hansen
2019-01-15 21:11         ` Andy Lutomirski [this message]
2019-01-16 10:31           ` David Laight
2019-01-16 10:18       ` David Laight
2019-01-30 11:35 ` Borislav Petkov
2019-01-30 12:06   ` Sebastian Andrzej Siewior
2019-01-30 12:27     ` Borislav Petkov
2019-02-08 13:12       ` Sebastian Andrzej Siewior
2019-02-13 15:54         ` Sebastian Andrzej Siewior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALCETrXq8GFAzunui7d-seaK-on6_xiZOv0A4wc=sAur0wuDzg@mail.gmail.com' \
    --to=luto@kernel.org \
    --cc=David.Laight@aculab.com \
    --cc=Jason@zx2c4.com \
    --cc=bigeasy@linutronix.de \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=riel@surriel.com \
    --cc=rkrcmar@redhat.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).