linux 内核的 lru_list 的结构

在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结构简析)linux 内核的 lru_list 的结构_第1张图片

你可能感兴趣的:(linux,linux,服务器)