linux 内核的 lru_list 的结构

2023-12-20 22:58:44

在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结构简析请添加图片描述

文章来源:https://blog.csdn.net/qq_37517281/article/details/135114945
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。