Messages in this thread |  | | Date | Fri, 05 Sep 2008 23:57:52 +0330 | | From | "Hamid R. Jahanjou" <> | | Subject | Re: [PATCH] VM: Implements the swap-out page-clustering technique |
| |
Andi Kleen wrote: > "Hamid R. Jahanjou" <hamid.jahanjou@gmail.com> writes: > > >> From: Hamid R. Jahanjou >> >> Implements the idea of swap-out page clustering from *BSD for >> Linux. Each time a candidate page is to be swapped out, >> virtually-nearby pages are scanned to find eligible pages to be >> swapped out too as a cluster. This technique increases the likelihood of >> bringing in related data on a page fault and decreases swap space >> fragmentation in the long run. Currently, Linux searches only >> physically-nearby pages which is not optimal since, over time, physically- >> adjacent pages may become unrelated. >> >> The code can be statically tuned. No benchmarks. I'm not sure whether >> the added complexity is acceptable. >> > > Just some general comments: > > First I think virtual swap clustering is a great idea in theory and > long overdue. Hopefully the numbers will agree. > > In general the code would be much nicer if you didn't pass around > all that much in a structure (which is just a fancy way to have > a function with lots of arguments) Perhaps try to restructure > it a bit to make this smaller? Ideally clustering_info should disappear > or at least get much smaller. >
Thanks for the review and the comments. Do you consider the clustering_info struct to hurt the readability of the code or there is some other technical reasons ?
> I didn't quite understand the "adjust the value of our search by > the allocation order". The allocation order should be normally 0. > I think having a tunable for the cluster sizes would be a good idea. > At some point they might be even device dependent (e.g. on a flash > device you would like to have them roughly erase block sized) >
The allocation order value is initially passed to the try_to_free_pages() in __alloc_pages_internal() and its value can be well more than zero. The clustering code adjusts the cluster size to the value of the allocation order (in a non-linear fashion of course). In this sense the cluster size is not determined at compile time, but the parameters affecting it are. Perhaps the term "statically-tunable" is appropriate here.
-- Hamid R. Jahanjou (hamid.jahanjou@gmail.com)
|  |