Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Mar 2005 10:34:19 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        freebsd-hackers@FreeBSD.org, Ravi Krishna <ravikrish@gmail.com>
Cc:        hackers@FreeBSD.org
Subject:   Re: using segmentation to manage memory in FreeBSD
Message-ID:  <200503081034.19696.jhb@FreeBSD.org>
In-Reply-To: <6669fd8605030806056b53307a@mail.gmail.com>
References:  <6669fd8605030806056b53307a@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 08 March 2005 09:05 am, Ravi Krishna wrote:
> Hi all!
>
> I would like to know if FreeBSD allows one to use segmentation on x86
> to reduce the penalty of context switches. (please read on for
> details)
>
> Virtual memory on x86 can be managed by either segmentation or by paging.
>
> when using paging a context switch from one process to other all the
> TLB mappings stored in TLB cache are flushed, this makes context the
> switch expensive (we will have lots of TLB misses).
> There are situations when individual processes donot have large memory
> requirements . Some processors have TLB tagging, so OS doesnot flush
> all the TLB entries when a context switch happens, only selective ones
> are flushed. Unfortunatly Intex x86 does not have TLB tagging
> available.

Actually, it does.  It's called the PG_G bit and is present if the PGE feature 
is listed in CR4 (which it is for most modern processors, maybe Pentium and 
later?)

> The way to implement something similar on x86 is using segmentation.
> say I have four modules
> A, B, C, D each needing 100MB address.   I can give each of these a
> 100MB segment. Assuming TLB cache is large enough to store TLB
> mappings for all of these four, to context switch (say frm A to B) I
> can just switch the segment, by setting segmentation registers.
> These there will be no TLB flush. When we come back frm B to A again
> we switch the segment. Now again to TLB flush will happen and A will
> be able to use the TLB cache entries for its segment.

Segments just provide a base + offset into the virtual address space that is 
backed by the TLB mappings, so to make this practically useful would be a lot 
more work than would first appear because your segments have to map virtually 
contiguous memory.

> This becomes more attractive for 64 bit systems.

64-bit x86 (that is, amd64 and Intel 64-bit xeons) doesn't even have segments. 

> My question is that is this functionality available on FreeBSD in any way?

Nope.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200503081034.19696.jhb>