On 2021/11/5 23:47, Dave Hansen wrote:
On 11/4/21 7:51 PM, Huang, Ying wrote:
Let's also try to do it with the existing node_demotion[] data
structure before we go adding more.
To avoid cache ping-pong, I guess some kind of per-CPU data structure
may be more suitable for interleaving among multiple nodes.
It would probably be better to just find something that's more
read-heavy. Like, instead of keeping a strict round-robin, just
randomly select one of the notes to which you can round-robin.
That will scale naturally without having to worry about caching or fancy
per-cpu data structures.
Thanks for your suggestion. After some thinking, can we change the
node_demotion[] structure like below? Which means one source node can be
demoted to mutiple target node, and we can set up the target node mask
according to the node distance. How do you think? Thanks.
static nodemask_t node_demotion[MAX_NUMNODES] __read_mostly =
{[0 ... MAX_NUMNODES - 1] = NODE_MASK_NONE};