linux每个memory cgroup的lru链表是什么创建的

1.概述

对Linux memory子系统有基本了解的都知道,linux内核通过LRU管理物理内存,不知道是否有思考过如下问题:LRU是全局一套,还是说每个memory cgroup拥有单独的一套LRU链表直接揭晓答案:每个memory cgroup都会单独的LRU链表

2.怎么查到memcg对应的LRU链表

linux每个memory cgroup的lru链表是什么创建的_第1张图片

 内核通过mem_cgroup_lruvec->mem_cgroup_nodeinfo函数获取到memcg对应的LRU链表

3. memcg对应的LRU链表是什么时候初始化的
mem_cgroup_alloc --->alloc_mem_cgroup_per_node_info
alloc_mem_cgroup_per_node_infohttps://elixir.bootlin.com/linux/v5.4/C/ident/alloc_mem_cgroup_per_node_info

linux每个memory cgroup的lru链表是什么创建的_第2张图片

 可以看到在cgroup创建的时候,调用到mem_cgroup_alloc,进而调用alloc_mem_cgroup_per_node_info,然后memcg->nodeinfo[node] = pn和lruvec_init(&pn->lruvec)初始化了一套LRU链表,然后使用的时候通过mem_cgroup_lruvec取到这里初始化的lruvec,lruvec就包含了inactive file/active file, inactive anon,active anon等各种LRU链表,数据结构如下:

lruvec identifier - Linux source code v5.4 - BootlinElixir Cross Referencer - identifier references search for Linux (version v5.4). Searched identifier: lruvecicon-default.png?t=N7T8https://elixir.bootlin.com/linux/v5.4/C/ident/lruvec

linux每个memory cgroup的lru链表是什么创建的_第3张图片

你可能感兴趣的:(内存子系统,linux,服务器,内核,android)