hamidreza jahanjou åé:2008/9/8, Li Yu <raise.sail@xxxxxxxxx>:
And the linear searching for whole address space of a vma is not good
idea too, really.
+ if (!page_allowed_in_cluster(cursor_page, ci))
+ continue;
Thank you for the review and comments. You are right in that searching
the whole process address space is not a good idea. The idea is to
make the scan range flexible, thus normally, assuming that the code
has been well-tuned, only a very limited number of VMA's are scanned.
In general, i think that the cluster size and the scan range should be
tuned depending on the backing storage characteristics and the
low-on-memory severity. Like any VM code, this one needs tuning.
BTW, the code could be implemented much more elegantly if the VMA's
were connected using a doubly-linked list. I wonder if there are
enought other codes with the same situation to justify making it
doubly-linked.
You are welcome!
I think that scanning one vma each task is enough.
The goal of swapoutclustering is to reduce disk heads movement while swapping in, it is based on space/time locality. I think that different vmas implied different using pattern, which also means they have different in program locality. Therefore, I think scanning multi vmas per task is not a good idea.
Maybe, we need a page cache searching like for anonymous mapping instead of *linear* searching in each vma.
I also have an uncompleted implementation for this feature ^_^
Good luck.