Messages in this thread | | | Date | Tue, 01 Dec 2009 21:20:16 -0500 | From | Rik van Riel <> | Subject | Re: [RFC] high system time & lock contention running large mixed workload |
| |
On 12/01/2009 11:41 AM, Larry Woodman wrote: > > Agreed. The attached updated patch only does a trylock in the > page_referenced() call from shrink_inactive_list() and only for > anonymous pages when the priority is either 10, 11 or > 12(DEF_PRIORITY-2). I have never seen a problem like this with active > pagecache pages and it does not alter the existing shrink_page_list > behavior. What do you think about this??? This is reasonable, except for the fact that pages that are moved to the inactive list without having the referenced bit cleared are guaranteed to be moved back to the active list.
You'll be better off without that excess list movement, by simply moving pages directly back onto the active list if the trylock fails.
Yes, this means that page_referenced can now return 3 different return values (not accessed, accessed, lock contended), which should probably be an enum so we can test for the values symbolically in the calling functions.
That way only pages where we did manage to clear the referenced bit will be moved onto the inactive list. This not only reduces the amount of excess list movement, it also makes sure that the pages which do get onto the inactive list get a fair chance at being referenced again, instead of potentially being flooded out by pages where the trylock failed.
A minor nitpick: maybe it would be good to rename the "try" parameter to "noblock". That more closely matches the requested behaviour.
| |