copying pkgsrc tree around jails on beefy machine - fast on 2nd iteration, a bit slower than first on 3rd iteration
Matthew Dillon
dillon at apollo.backplane.com
Thu Jan 5 18:55:26 PST 2006
:thanks for that info.
:
:btw, how's the address space split beetween on dragonfly?
:On linux/x86 is kernel 1GB, app: 3GB
:on windows/x86 is kernel 2GB, apps: 2GB, supposadly tunnable, but I
:couldn't get the 1:3 split I needed on win2k nor winXP.
:I don't know how's that on BSD systems...
3G for apps, 1G for the kernel. Cached VM pages do not have to be
mapped into the kernel, so the kernel can still cache > 1GB of memory.
But all kernel memory data structures do have to mapped to kernel
memory, as well as the PCI bus address space (which itself can eat a
lot of memory especially if you have a video card with lots of video
memory).
The problem that all PC operating systems face is that available kernel
memory is fixed so kernel data structure limits do not scale with
actual physical memory past a certain point. The tradeoff
can be adjusted with a kernel build option.
:Just has a reminder, kernel and apps don't share virtual address
:space, but they somehow have this split because of performance issues
:with flushing the TLB on every kernel call, I think where are also
:some problems with some drivers memory mappings, PCI and DMA mappings
:also, am I by any chance correct?
:
:TIA,
:
:--
:Miguel Sousa Filipe
Almost right. The kernel and app(s) *DO* share the same virtual
address space (hence the 3G/1G split). It is simply that the app(s)
are not allowed to access the kernel address space because the kernel
pages are marked supervisor-only. Each application has its own virtual
address space but the high 1GB is mapped to the (same) kernel memory.
This involves fairly minimal work.
The jist of all of this is that the top 1GB is always kernel memory
no matter what is running.
This allows the app to enter into the kernel and for the kernel to
return to the app without having to change the MMU base pointer, thus
avoiding TLB flushes. A TLB flush occurs whenever the MMU base pointer
is changed.
It *IS* possible to separate the address spaces using the processor
TSS, which is basically a hardware-supported 'context', but the
performance penalties are horrendous which is why nobody uses it
for anything other then emulation of older PC's (e.g. 8086, 80826).
Intel originally conceived of the TSS as a means of switching between
'tasks', but it was at a time when processors where much slower and
the microcode overhead of the TSS support was no worse then doing it
with normal instructions. These days processors are much faster and
heavily optimized to execute normal instructions, and anything that
runs microcode introduces huge performance penalties.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Users
mailing list