在linux的slab分配的入口slab_alloc有一个传入参数lru,它的作用是使每个slab对象在unused,但可能后面继续使用的时候,不需要free,可以先放在lru_list上。lru_list的结构为:
struct list_lru {
struct list_lru_node *node;
struct list_head list;
int shrinker_id;
bool memcg_aware;
struct xarray xa;
};
其中node是一个数组,存了每个numa node的lru_list头,这个结构只在不支持memory group 时(memcg_aware = false)使用。
在支持memory group的场景(memcg_aware = true),每个每个memory group都分配了一个lru_list数组,数组中每个元素是这个对象对应的memory group在一个numa node上的lru_list的头。memory group id 与lru_list数组地址的映射表存在xa上,
xa是一个前缀树的实现(可以参考:linux中xarray与maple结构简析)