From: Ingo Molnar <mingo@elte.hu>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
x86@kernel.org, xen-devel <xen-devel@lists.xensource.com>,
Stephen Tweedie <sct@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Mark McLoughlin <markmc@redhat.com>,
Vegard Nossum <vegard.nossum@gmail.com>,
Nick Piggin <npiggin@suse.de>, Yinghai Lu <yhlu.kernel@gmail.com>,
Arjan van de Ven <arjan@infradead.org>,
Avi Kivity <avi@qumranet.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support
Date: Wed, 25 Jun 2008 10:42:53 +0200 [thread overview]
Message-ID: <20080625084253.GA11524@elte.hu> (raw)
In-Reply-To: <patchbomb.1214367536@localhost>
* Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> Hi Ingo,
>
> This series lays the groundwork for 64-bit Xen support. It follows
> the usual pattern: a series of general cleanups and improvements,
> followed by additions and modifications needed to slide Xen in.
cool stuff :-)
> Most of the 64-bit paravirt-ops work has already been done and
> integrated for some time, so the changes are relatively minor.
>
> Interesting and potentially hazardous changes in this series are:
>
> "paravirt/x86_64: move __PAGE_OFFSET to leave a space for hypervisor"
>
> This moves __PAGE_OFFSET up by 16 GDT slots, from 0xffff810000000000
> to 0xffff880000000000. I have no general justification for this: the
> specific reason is that Xen claims the first 16 kernel GDT slots for
> itself, and we must move up the mapping to make room. In the process
> I parameterised the compile-time construction of the initial
> pagetables in head_64.S to cope with it.
This reduces native kernel max memory support from around 127 TB to
around 120 TB. We also limit the Xen hypervisor to ~7 TB of physical
memory - is that wise in the long run? Sure, current CPUs support 40
physical bits [1 TB] for now so it's all theoretical at this moment.
my guess is that CPU makers will first extend the physical lines all the
way up to 46-47 bits before they are willing to touch the logical model
and extend the virtual space beyond 48 bits (47 bits of that available
to kernel-space in practice - i.e. 128 TB).
So eventually, in a few years, we'll feel some sort of crunch when the #
of physical lines approaches the # of logical bits - just like when
32-bit felt a crunch when physical lines went to 31 and beyond.
> "x86_64: adjust mapping of physical pagetables to work with Xen"
> "x86_64: create small vmemmap mappings if PSE not available"
>
> This rearranges the construction of the physical mapping so that it
> works with Xen. This affects three aspects of the code:
> 1. It can't use pse, so it will only use pse if the processor
> supports it.
> 2. It never replaces an existing mapping, so it can just extend the
> early boot-provided mappings (either from head_64.S or the Xen domain
> builder).
> 3. It makes sure that any page is iounmapped before attaching it to the
> pagetable to avoid having writable aliases of pagetable pages.
>
> The logical structure of the code is more or less unchanged, and still
> works fine in the native case.
>
> vmemmap mapping is likewise changed.
>
> "x86_64: PSE no longer a hard requirement."
>
> Because booting under Xen doesn't set PSE, it's no longer a hard
> requirement for the kernel. PSE will be used whereever possible.
That should be fine too - and probably useful for 64-bit kmemcheck
support as well.
To further increase the symmetry between 64-bit and 32-bit, could you
please also activate the mem=nopentium switch on 64-bit to allow the
forcing of a non-PSE native 64-bit bootup? (Obviously not a good idea
normally, as it wastes 0.1% of RAM and increases PTE related CPU cache
footprint and TLB overhead, but it is useful for debugging.)
a few other risk areas:
- the vmalloc-sync changes. Are you absolutely sure that it does not
matter for performance?
- "The 32-bit early_ioremap will work equally well for 64-bit, so just
use it." Famous last words ;-)
Anyway, that's all theory - i'll try out your patchset in -tip to see
what breaks in practice ;-)
Ingo
next prev parent reply other threads:[~2008-06-25 8:43 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-25 4:18 [PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support Jeremy Fitzhardinge
2008-06-25 4:18 ` [PATCH 01 of 36] x86: asm-x86/pgtable.h: fix compiler warning Jeremy Fitzhardinge
2008-06-25 4:18 ` [PATCH 02 of 36] x86: add memory clobber to save/loadsegment Jeremy Fitzhardinge
2008-06-25 4:18 ` [PATCH 03 of 36] x86: add memory barriers to wrmsr Jeremy Fitzhardinge
2008-06-25 4:44 ` Arjan van de Ven
2008-06-25 21:08 ` Jeremy Fitzhardinge
2008-06-25 22:31 ` Arjan van de Ven
2008-06-25 23:05 ` Jeremy Fitzhardinge
2008-06-25 23:18 ` H. Peter Anvin
2008-06-25 23:37 ` Jeremy Fitzhardinge
2008-06-25 23:42 ` H. Peter Anvin
2008-06-25 4:19 ` [PATCH 04 of 36] x86: remove open-coded save/load segment operations Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 05 of 36] x86_64: use write_gdt_entry in vsyscall_set_cpu Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 06 of 36] x86_64: use p??_populate() to attach pages to pagetable Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 07 of 36] x86_64: unify early_ioremap Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 08 of 36] x86_64: Add gate_offset() and gate_segment() macros Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 09 of 36] x86_64: Use __pgd() on mk_kernel_pgd() Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 10 of 36] x86: unify pgd_index Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 11 of 36] x86: unify mmu_context.h Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 12 of 36] x86_64: replace end_pfn with num_physpages Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 13 of 36] x86_64: add prototype for x86_64_start_kernel() Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 14 of 36] x86_64: add sync_cmpxchg Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 15 of 36] x86: simplify vmalloc_sync_all Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 16 of 36] x86/paravirt: add a pgd_alloc/free hooks Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 17 of 36] x86: preallocate and prepopulate separately Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 18 of 36] x86/paravirt: add debugging for missing operations Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 19 of 36] paravirt_ops: define PARA_INDIRECT for indirect asm calls Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 20 of 36] paravirt/x86_64: move __PAGE_OFFSET to leave a space for hypervisor Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 21 of 36] x86-64: add FIX_PARAVIRT_BOOTMAP fixmap slot Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 22 of 36] x86_64: split x86_64_start_kernel Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 23 of 36] x86_64: adjust mapping of physical pagetables to work with Xen Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 24 of 36] x86_64: create small vmemmap mappings if PSE not available Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 25 of 36] x86_64: PSE no longer a hard requirement Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 26 of 36] x86_64: Split set_pte_vaddr() Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 27 of 36] x86_64: __switch_to(): Move arch_leave_lazy_cpu_mode() to the right place Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 28 of 36] Save %fs and %gs before load_TLS() and arch_leave_lazy_cpu_mode() Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 29 of 36] Use __KERNEL_DS as SS when returning to a kernel thread (VERIFY) Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 30 of 36] x86/paravirt_ops: split sysret and sysexit Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 31 of 36] x86_64 pvops: don't restore user rsp within sysret Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 32 of 36] Add sysret/sysexit pvops for returning to 32-bit compatibility userspace Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 33 of 36] x86_64: ia32entry: replace privileged instructions with pvops Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 34 of 36] x86_64: swapgs pvop with a user-stack can never be called Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 35 of 36] x86_64/paravirt: add adjust_exception_frame Jeremy Fitzhardinge
2008-06-25 4:19 ` [PATCH 36 of 36] x86_64/paravirt: Make load_gs_index() a paravirt operation Jeremy Fitzhardinge
2008-06-25 8:47 ` Ingo Molnar
2008-06-25 11:48 ` Jeremy Fitzhardinge
2008-06-25 8:42 ` Ingo Molnar [this message]
2008-06-25 11:46 ` [PATCH 00 of 36] x86/paravirt: groundwork for 64-bit Xen support Jeremy Fitzhardinge
2008-06-25 15:22 ` Ingo Molnar
2008-06-25 20:12 ` Jeremy Fitzhardinge
2008-06-26 10:57 ` Ingo Molnar
2008-06-26 10:58 ` Ingo Molnar
2008-06-26 14:34 ` [Xen-devel] " Jeremy Fitzhardinge
2008-06-27 15:56 ` Ingo Molnar
2008-06-27 16:02 ` Jeremy Fitzhardinge
2008-06-27 16:06 ` Ingo Molnar
2008-06-27 16:25 ` Jeremy Fitzhardinge
2008-06-27 16:03 ` Ingo Molnar
2008-06-27 19:04 ` Jeremy Fitzhardinge
2008-06-29 8:43 ` Ingo Molnar
2008-06-30 3:02 ` Jeremy Fitzhardinge
2008-06-30 4:35 ` Yinghai Lu
2008-06-30 5:32 ` Jeremy Fitzhardinge
2008-06-30 8:21 ` Ingo Molnar
2008-06-30 9:22 ` Ingo Molnar
2008-06-30 17:17 ` Jeremy Fitzhardinge
2008-06-30 18:12 ` Ingo Molnar
2008-06-30 18:36 ` Jeremy Fitzhardinge
2008-06-30 18:44 ` Ingo Molnar
2008-06-30 17:57 ` Jeremy Fitzhardinge
2008-06-30 18:03 ` Ingo Molnar
2008-06-30 23:04 ` Jeremy Fitzhardinge
2008-07-01 8:52 ` Ingo Molnar
2008-07-01 9:21 ` Ingo Molnar
2008-07-01 16:10 ` Jeremy Fitzhardinge
2008-07-01 16:14 ` Jeremy Fitzhardinge
2008-07-01 20:31 ` Ingo Molnar
2008-07-03 9:10 ` Ingo Molnar
2008-07-03 15:47 ` Jeremy Fitzhardinge
2008-07-03 18:20 ` Yinghai Lu
2008-07-03 18:25 ` Jeremy Fitzhardinge
2008-07-03 18:30 ` Yinghai Lu
2008-07-03 18:41 ` Jeremy Fitzhardinge
2008-07-03 18:51 ` Yinghai Lu
2008-07-03 19:19 ` Yinghai Lu
2008-07-03 19:29 ` Yinghai Lu
2008-07-09 7:42 ` Ingo Molnar
2008-06-26 14:28 ` Jeremy Fitzhardinge
2008-06-26 18:25 ` Jeremy Fitzhardinge
2008-06-26 19:02 ` Jeremy Fitzhardinge
2008-06-25 12:40 ` Andi Kleen
2008-06-25 18:45 ` [Xen-devel] " Keir Fraser
2008-06-25 19:13 ` Andi Kleen
2008-06-25 19:22 ` Keir Fraser
2008-06-25 20:14 ` Andi Kleen
2008-06-25 20:03 ` Jeremy Fitzhardinge
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=20080625084253.GA11524@elte.hu \
--to=mingo@elte.hu \
--cc=arjan@infradead.org \
--cc=avi@qumranet.com \
--cc=ehabkost@redhat.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=markmc@redhat.com \
--cc=npiggin@suse.de \
--cc=sct@redhat.com \
--cc=torvalds@linux-foundation.org \
--cc=vegard.nossum@gmail.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xensource.com \
--cc=yhlu.kernel@gmail.com \
/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