在 2020/7/4 下午9:33, Matthew Wilcox 写道: > On Sat, Jul 04, 2020 at 09:12:46PM +0800, Alex Shi wrote: >> 在 2020/7/4 下午7:39, Matthew Wilcox 写道: >>> On Sat, Jul 04, 2020 at 07:34:59PM +0800, Alex Shi wrote: >>>> That's a great idea! Guess what the new struct we need would be like this? >>>> I like to try this. :) >>>> >>>> >>>> diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h >>>> index 081d934eda64..d62778c8c184 100644 >>>> --- a/include/linux/pagevec.h >>>> +++ b/include/linux/pagevec.h >>>> @@ -20,7 +20,7 @@ >>>> struct pagevec { >>>> unsigned char nr; >>>> bool percpu_pvec_drained; >>>> - struct page *pages[PAGEVEC_SIZE]; >>>> + struct list_head veclist; >>>> }; >>> >>> pagevecs are used not just for LRU. If you want to use a list_head for >>> LRU then define a new structure. >> >> yes, there are much page don't use page->lru, like slab etc. we need a new struct> > That's not what I mean. Slab pages aren't on the LRU anyway. Right. I mean, that's reason for a new struct if we change to list. > > Consider the callers of page_cache_delete_batch(). These use a pagevec > for a non-LRU purpose, and they will be much slower with a list_head than > with an array. > Thanks for the info. If the list is slower than pagevec, maybe it's not worth to do the change. Since pagevec could handle any kind of pages, anon/file, non-active/active, but one list only fit for just one kind of list. 5 kinds of list adding would increase the complexity. Consider this, I am wondering if it's worth? Thanks Alex