[haiku-gsoc] Re: vm_store_anonymous
- From: "Zhao Shuai" <upczhsh@xxxxxxx>
- To: haiku-gsoc@xxxxxxxxxxxxx
- Date: Fri, 20 Jun 2008 22:50:39 +0800 (CST)
I spent another few days on the FreeBSD swap file implementation, but still can
not get a total undertanding... :(
So I decide to use your scheme, which is very similar to FreeBSD.
One thing I don't understand: why use a chunk as an allocation unit? If we swap
only 4 or 5 pages out, we had to allocate 16 pages. Is that a waste of space?
>Some more thoughts regarding the implementation... I'd strongly recommend to
>have a look at how other systems (Linux, FreeBSD, OpenSolaris) implement swap
>file support. I haven't done that myself yet, so I can't really say what
>would be the best implementation. For reference I can sketch a simple one,
>though:
>
>Each swap file is divided into allocatable units of, say, 16 pages, each
>referenced by a handle:
>
>struct swap_file_chunk {
> swap_file_chunk* next;
> addr_t cache_offset;
>};
>
>The "next" field can be used for singly-linked lists or hash tables,
>"cache_offset" is the cache-relative location of the virtual pages for which
>the swap file chunk is used, when allocated. For each swap file an array of
>swap_file_chunk structures is created when the swap file is added to the
>system. An array index translates to a location in the swap file.
>
>The service managing the swap files maintains a free list of
>swap_file_chunks, so that they can be quickly allocated and freed. Each store
>maintains a hash table that maps virtual pages (or more precisely:
>chunk-sized virtual page ranges) to allocated swap_file_chunks, so that it
>can quickly look up swap file chunks, allocate new ones when needed, or free
>them.
>
>Aside from details like the interaction with page writer and page daemon,
>that's pretty much it already. But as I wrote in the beginning, I'd recommend
>looking around first. There are probably better solutions that can be
>borrowed.
>
>CU, Ingo
>
Other related posts: