public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave.hansen@linux.intel.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	"Andrea Arcangeli" <aarcange@redhat.com>,
	"Andrew Lutomirski" <luto@kernel.org>,
	"Kees Cook" <keescook@google.com>,
	"Hugh Dickins" <hughd@google.com>,
	"Jürgen Groß" <jgross@suse.com>,
	"the arch/x86 maintainers" <x86@kernel.org>,
	namit@vmware.com
Subject: Re: [RFC][PATCH 00/10] Use global pages with PTI
Date: Fri, 23 Feb 2018 17:49:37 -0800	[thread overview]
Message-ID: <7e81fb89-5908-7d31-9225-defc48dbfa41@linux.intel.com> (raw)
In-Reply-To: <CA+55aFy064KtXdduyM2E4rU6-ZJsOB69x2aJdZxbXgJPh2HUOQ@mail.gmail.com>

On 02/22/2018 01:52 PM, Linus Torvalds wrote:
> Side note - and this may be crazy talk - I wonder if it might make
> sense to have a mode where we allow executable read-only kernel pages
> to be marked global too (but only in the kernel mapping).

We did that accidentally, somewhere.  It causes machine checks on K8's
iirc, which is fun (52994c256df fixed it).  So, we'd need to make sure
we avoid it there, or just make it global in the user mapping too.

> Of course, maybe the performance advantage from keeping the ITLB
> entries around isn't huge, but this *may* be worth at least asking
> some Intel architects about?

I kinda doubt it's worth the trouble.  Like you said, this probably
doesn't even matter when we have PCID support.  Also, we'll usually map
all of this text with 2M pages, minus whatever hangs over into the last
2M page of text.  My laptop looks like this:

> 0xffffffff81000000-0xffffffff81c00000          12M     ro         PSE         x  pmd
> 0xffffffff81c00000-0xffffffff81c0b000          44K     ro                     x  pte

So, even if we've flushed these entries, we can get all of them back
with a single cacheline worth of PMD entries.

Just for fun, I tried a 4-core Skylake system with KPTI and nopcid and
compiled a random kernel 10 times.  I did three configs: no global, all
kernel text global + cpu_entry_area, and only cpu_entry_area + entry
text.  The delta percentages are from the Baseline.  The deltas are
measurable, but the largest bang for our buck is obviously the entry text.

			User Time	Kernel Time	Clock Elapsed
Baseline (33 GLB PTEs)	907.6	        81.6		264.7
Entry    (28 GLB PTEs)	910.9 (+0.4%)	84.0 (+2.9%)	265.2 (+0.2%)
No global( 0 GLB PTEs)  914.2 (+0.7%)	89.2 (+9.3%)	267.8 (+1.2%)

It's a single line of code to go from the "33" to "28" configuration, so
it's totally doable.  But, it means having and parsing another boot
option that confuses people and then I have to go write actual
documentation, which I detest. :)

My inclination would be to just do the "entry" stuff as global just as
this set left things and leave it at that.

I also measured frontend stalls with the toplev.py tool[1].  They show
roughly the same thing, but a bit magnified since I was only monitoring
the kernel and because in some of these cases, even if we stop being
iTLB bound we just bottleneck on something else.

I ran:

	python ~/pmu-tools/toplev.py --kernel --level 3 make -j8

And looked for the relevant ITLB misses in the output:

Baseline
> FE             Frontend_Bound:        24.33 % Slots  [  7.68%]
> FE                ITLB_Misses:         5.16 % Clocks [  7.73%]
Entry:
> FE             Frontend_Bound:        26.62 % Slots  [  7.75%]
> FE                ITLB_Misses:        12.50 % Clocks [  7.74%]
No global:
> FE             Frontend_Bound:        27.58 % Slots  [  7.65%]
> FE                ITLB_Misses:        14.74 % Clocks [  7.71%]

1. https://github.com/andikleen/pmu-tools

  reply	other threads:[~2018-02-24  1:49 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-22 20:36 [RFC][PATCH 00/10] Use global pages with PTI Dave Hansen
2018-02-22 20:36 ` [RFC][PATCH 01/10] x86/mm: factor out pageattr _PAGE_GLOBAL setting Dave Hansen
2018-02-22 20:36 ` [RFC][PATCH 02/10] x86/mm: undo double _PAGE_PSE clearing Dave Hansen
2018-02-22 20:36 ` [RFC][PATCH 03/10] x86/mm: introduce "default" kernel PTE mask Dave Hansen
2018-02-22 22:21   ` Nadav Amit
2018-02-22 22:26     ` Dave Hansen
2018-02-22 23:11       ` Tom Lendacky
2018-02-23 23:46         ` Dave Hansen
2018-02-22 20:36 ` [RFC][PATCH 04/10] x86/espfix: use kernel-default " Dave Hansen
2018-02-22 21:27   ` Nadav Amit
2018-02-22 21:30     ` Dave Hansen
2018-02-22 21:59       ` Andy Lutomirski
2018-02-22 22:05         ` Dave Hansen
2018-02-22 20:37 ` [RFC][PATCH 05/10] x86/mm: do not auto-massage page protections Dave Hansen
2018-02-22 21:46   ` Nadav Amit
2018-02-22 21:52     ` Dave Hansen
2018-02-22 20:37 ` [RFC][PATCH 06/10] x86/mm: remove extra filtering in pageattr code Dave Hansen
2018-02-22 20:37 ` [RFC][PATCH 07/10] x86/mm: comment _PAGE_GLOBAL mystery Dave Hansen
2018-02-22 20:37 ` [RFC][PATCH 08/10] x86/mm: do not forbid _PAGE_RW before init for __ro_after_init Dave Hansen
2018-02-22 20:53   ` Kees Cook
2018-02-22 20:37 ` [RFC][PATCH 09/10] x86/pti: enable global pages for shared areas Dave Hansen
2018-02-22 20:37 ` [RFC][PATCH 10/10] x86/pti: clear _PAGE_GLOBAL for kernel image Dave Hansen
2018-02-22 21:52 ` [RFC][PATCH 00/10] Use global pages with PTI Linus Torvalds
2018-02-24  1:49   ` Dave Hansen [this message]
2018-02-24  4:20     ` Linus Torvalds
2018-02-24  4:34       ` [RFC][PATCH 00/10] Use global pages with PTI - Truth about the white man thetruthbeforeus

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=7e81fb89-5908-7d31-9225-defc48dbfa41@linux.intel.com \
    --to=dave.hansen@linux.intel.com \
    --cc=aarcange@redhat.com \
    --cc=hughd@google.com \
    --cc=jgross@suse.com \
    --cc=keescook@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=namit@vmware.com \
    --cc=torvalds@linux-foundation.org \
    --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