Re: [BUG ?] Offline Memory gets stuck in offline_pages()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 12/07/2024 09:50, Zhijian Li (Fujitsu) wrote:
>           CPU0                                  CPU1
>       -----------                           ---------
> // erase pcp_list
> zone_pcp_disable // pcp->count = 0
>                                                                                         
> lru_cache_diable()                    __rmqueue_pcplist()  // re-add pages to pcp_lsit
>                                         __rmqueue_pcplist()  // drop pages from pcp_list
>                                         decay_pcp_high()     // drop pages from pcp_list
> loop  {                                      ...
>                                         __rmqueue_pcplist()  // drop pages from pcp_list,
>                                                              // it will be only called a few times during the loop
>        scan_movable_pages()                   ...
>        migration_pages()                decay_pcp_high()     // drop pages from pcp_list, it will be called by
>                                                              // a worker periodically during the loop
>                                                                                         
> // wait pcp_list to be empty
> } while (test_pages_isolated())
> 
> 
> And we noticed that re-add pages to pcp_list in '__rmqueue_pcplist()` only happen once,
> pcp->count changed to 200 from 0 for example.
> 
> The later calls to __rmqueue_pcplist() will drop pcp->count by step 1 for each call,
> For example, pcp->count: 199->198->197->196...,
> However it stops calling __rmqueue_pcplist after a few times before pcp->count is dropped to 0.
> 
> In the normal/good case, we also noticed that __rmqueue_pcplist() dropped pcp->count to 0.

I doubt all these(after calling zone_pcp_disable())

1. __rmqueue_pcplist() should re-add pages to pcp_list
2. __rmqueue_pcplist() should drop pcp->count till 0 if 1 is true
3. decay_pcp_high() should drop pcp->count till 0, its name and comments don't indicate this.




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux