On Wed, Jan 19, 2011 at 10:48 AM, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > On Wed, 19 Jan 2011 10:24:09 +0900 Minchan Kim <minchan.kim@xxxxxxxxx> wrote: > >> > >> > This is all pretty ugly and inefficient. >> > >> > We call __remove_from_page_cache() which does a radix-tree lookup and >> > then fiddles a bunch of accounting things. >> > >> > Then we immediately do the same radix-tree lookup and then undo the >> > accounting changes which we just did. __And we do it in an open-coded >> > fashion, thus giving the kernel yet another code site where various >> > operations need to be kept in sync. >> > >> > Would it not be better to do a single radix_tree_lookup_slot(), >> > overwrite the pointer therein and just leave all the ancilliary >> > accounting unaltered? >> >> I agree single radix_tree_lookup but accounting still is needed since >> newpage could be on another zone. What we can remove is just only >> mapping->nrpages. > > Well. We only need to do inc/dec_zone_state if the zones are > different. Perhaps the zones-equal case is worth optimising for, > dunno. > > Also, the radix_tree_preload() should be unneeded. Agree. In summary, optimization points are following as. 1) remove radix_tree_preload 2) single radix_tree_lookup_slot and replace radix tree slot 3) page accounting optimization if both pages are in same zone. I hope we mm guys optimize the above things with TODO. (Except freepage issue I mentioned.) So I want Miklos resend the patch with solving freepage issue and NOTE of TODO in description or comment. -- Kind regards, Minchan Kim -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html