On Mon, Mar 14, 2022 at 6:34 PM Huang, Ying <ying.huang(a)intel.com> wrote:
Yu Zhao <yuzhao(a)google.com> writes:
> On Mon, Mar 14, 2022 at 2:09 AM Huang, Ying <ying.huang(a)intel.com> wrote:
>>
>> Hi, Yu,
>>
>> Yu Zhao <yuzhao(a)google.com> writes:
>> > diff --git a/mm/Kconfig b/mm/Kconfig
>> > index 3326ee3903f3..747ab1690bcf 100644
>> > --- a/mm/Kconfig
>> > +++ b/mm/Kconfig
>> > @@ -892,6 +892,16 @@ config ANON_VMA_NAME
>> > area from being merged with adjacent virtual memory areas due to
the
>> > difference in their name.
>> >
>> > +# the multi-gen LRU {
>> > +config LRU_GEN
>> > + bool "Multi-Gen LRU"
>> > + depends on MMU
>> > + # the following options can use up the spare bits in page flags
>> > + depends on !MAXSMP && (64BIT || !SPARSEMEM ||
SPARSEMEM_VMEMMAP)
>>
>> LRU_GEN depends on !MAXSMP. So, What is the maximum NR_CPUS supported
>> by LRU_GEN?
>
> LRU_GEN doesn't really care about NR_CPUS. IOW, it doesn't impose a
> max number. The dependency is with NODES_SHIFT selected by MAXSMP:
> default "10" if MAXSMP
> This combined with LAST_CPUPID_SHIFT can exhaust the spare bits in page flags.
From the following code snippets from page-flags-layout.h,
LAST_CPUPID_SHIFT is related to NR_CPUS instead of NODES_SHIFT.
It is. But LAST_CPUPID_NOT_IN_PAGE_FLAGS should always work but
NODE_NOT_IN_PAGE_FLAGS doesn't.