From 2e07cd7dc25d47d2cdcbf1a30e53a64a5491dc21 Mon Sep 17 00:00:00 2001 From: gatieme Date: Mon, 8 Aug 2016 23:29:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86=E4=B9=8B?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=88=9D=E5=A7=8B=E5=8C=96=E5=86=85=E5=AD=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- .../03-initialize/01-init_struct/README.md | 227 ++++++++++++++++-- .../03-initialize/01-init_struct/test.c | 44 ++++ .../03-initialize/images/legacy-order.jpg | Bin 0 -> 11697 bytes .../03-initialize/images/node-order.jpg | Bin 0 -> 17683 bytes .../images/proc-numa_zonelist_order.png | Bin 0 -> 26681 bytes .../03-initialize/images/zone-order.jpg | Bin 0 -> 17806 bytes 7 files changed, 252 insertions(+), 21 deletions(-) create mode 100644 study/kernel/02-memory/03-initialize/01-init_struct/test.c create mode 100644 study/kernel/02-memory/03-initialize/images/legacy-order.jpg create mode 100644 study/kernel/02-memory/03-initialize/images/node-order.jpg create mode 100644 study/kernel/02-memory/03-initialize/images/proc-numa_zonelist_order.png create mode 100644 study/kernel/02-memory/03-initialize/images/zone-order.jpg diff --git a/Makefile b/Makefile index 41ba3a0..1d24d2c 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ GITHUB_COMMIT := $(COMMIT) ifeq ($(COMMIT), ) - GITHUB_COMMIT="更新了内存管理的目录结构..." + GITHUB_COMMIT="内存管理之内存初始化内存管理..." endif diff --git a/study/kernel/02-memory/03-initialize/01-init_struct/README.md b/study/kernel/02-memory/03-initialize/01-init_struct/README.md index a9e5996..d81c5fa 100644 --- a/study/kernel/02-memory/03-initialize/01-init_struct/README.md +++ b/study/kernel/02-memory/03-initialize/01-init_struct/README.md @@ -54,7 +54,7 @@ Linux把物理内存划分为三个层次来管理 在LINUX中引入一个数据结构`struct pglist_data` ,来描述一个node,定义在[`include/linux/mmzone.h`](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L630) 文件中。(这个结构被typedef pg_data_t)。 -* 对于NUMA系统来讲, 整个系统的内存由一个[node_data](http://lxr.free-electrons.com/source/arch/s390/numa/numa.c?v=4.7#L23)的pg_data_t指针数组来管理, +* 对于NUMA系统来讲, 整个系统的内存由一个[node_data](http://lxr.free-electrons.com/source/arch/s390/numa/numa.c?v=4.7#L23)的pg_data_t指针数组来管理 * 对于PC这样的UMA系统,使用struct pglist_data contig_page_data ,作为系统唯一的node管理所有的内存区域。(UMA系统中中只有一个node) @@ -85,9 +85,9 @@ extern struct pglist_data contig_page_data; * ISA总线的直接内存存储DMA处理器有一个严格的限制 : 他们只能对RAM的前16MB进行寻址 * 在具有大容量RAM的现代32位计算机中, CPU不能直接访问所有的物理地址, 因为线性地址空间太小, 内核不可能直接映射所有物理内存到线性地址空间, 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 - -因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域, + +因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域 对于x86_32的机器,管理区(内存区域)类型如下分布 @@ -196,10 +196,27 @@ asmlinkage __visible void __init start_kernel(void) [build_all_zonelists](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029)建立内存管理结点及其内存域所需的数据结构. +##2.1 设置结点初始化顺序 +------- +在build_all_zonelists开始, 首先内核通过set_zonelist_order函数设置了`zonelist_order`,如下所示, 参见[mm/page_alloc.c?v=4.7, line 5031](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5031) + +```cpp +void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone) +{ + set_zonelist_order(); + /* ....... */ +} +``` + + +##2.1.1 zone table +------- 前面我们讲解内存管理域时候讲解到, 系统中的所有管理域都存储在一个多维的数组zone_table. 内核在初始化内存管理区时, 必须要建立管理区表zone_table. 参见[mm/page_alloc.c?v=2.4.37, line 38](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=2.4.37#L38) + + ```cpp /* * @@ -215,26 +232,33 @@ EXPORT_SYMBOL(zone_table); * MAX_NR_ZONES为系统中单个内存结点所拥有的最大内存区域数目 -##2.1 set_zonelist_order + + +##2.1.2 内存域初始化顺序zonelist_order ------- -##2.1.1 zonelist order -------- -NUMA系统中存在多个节点, 每个节点对应一个struct pglist_data结构, 此结构中可以包含多个zone, 如: ZONE_DMA, ZONE_NORMAL,这样就产生几种排列顺序,以2个节点2个zone为例(zone从高到低排列, ZONE_DMA0表示节点0的ZONE_DMA,其它类似): +NUMA系统中存在多个节点, 每个节点对应一个`struct pglist_data`结构, 每个结点中可以包含多个zone, 如: ZONE_DMA, ZONE_NORMAL, 这样就产生几种排列顺序, 以2个节点2个zone为例(zone从高到低排列, ZONE_DMA0表示节点0的ZONE_DMA,其它类似). -在build_all_zonelists开始, 首先内核通过set_zonelist_order函数设置了`zonelist_order`,如下所示, 参见[mm/page_alloc.c?v=4.7, line 5031](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5031) +* Legacy方式, 每个节点只排列自己的zone; + +![Legacy方式](../images/legacy-order.jpg) + +* Node方式, 按节点顺序依次排列,先排列本地节点的所有zone,再排列其它节点的所有zone。 -```cpp -void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone) -{ - set_zonelist_order(); - /* ....... */ -} -``` +![Node方式](../images/node-order.jpg) -该函数 + +* Zone方式, 按zone类型从高到低依次排列各节点的同相类型zone + + + +![Zone方式](../images/zone-order.jpg) + + + +可通过启动参数"numa_zonelist_order"来配置zonelist order,内核定义了3种配置, 这些顺序定义在[mm/page_alloc.c?v=4.7, line 4551](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4551) ```cpp // http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4551 @@ -247,15 +271,55 @@ void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone) * If not NUMA, ZONELIST_ORDER_ZONE and ZONELIST_ORDER_NODE will create * the same zonelist. So only NUMA can configure this param. */ -#define ZONELIST_ORDER_DEFAULT 0 -#define ZONELIST_ORDER_NODE 1 -#define ZONELIST_ORDER_ZONE 2 +#define ZONELIST_ORDER_DEFAULT 0 /* 智能选择Node或Zone方式 */ + +#define ZONELIST_ORDER_NODE 1 /* 对应Node方式 */ + +#define ZONELIST_ORDER_ZONE 2 /* 对应Zone方式 */ +``` + +>注意 +> +>在非NUMA系统中(比如UMA), 由于只有一个内存结点, 因此ZONELIST_ORDER_ZONE和ZONELIST_ORDER_NODE选项会配置相同的内存域排列方式, 因此, 只有NUMA可以配置这几个参数 + + + + + + +全局的current_zonelist_order变量标识了系统中的当前使用的内存域排列方式, 默认配置为ZONELIST_ORDER_DEFAULT, 参见[mm/page_alloc.c?v=4.7, line 4564](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4564) + + +```cpp +// http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4564 /* zonelist order in the kernel. * set_zonelist_order() will set this to NODE or ZONE. */ static int current_zonelist_order = ZONELIST_ORDER_DEFAULT; static char zonelist_order_name[3][8] = {"Default", "Node", "Zone"}; +``` + + + + +而zonelist_order_name方式分别对应了Legacy方式, Node方式和Zone方式. 其zonelist_order_name[current_zonelist_order]就标识了当前系统中所使用的内存域排列方式的名称"Default", "Node", "Zone". + + +| 宏 | zonelist_order_name[宏](排列名称) | 排列方式 | 描述 | +|:--:|:-------------------:|:------:|:----:| +| ZONELIST_ORDER_DEFAULT | Default | | 由系统智能选择Node或Zone方式 | +| ZONELIST_ORDER_NODE | Node | Node方式 | 按节点顺序依次排列,先排列本地节点的所有zone,再排列其它节点的所有zone | +| ZONELIST_ORDER_ZONE | Zone | Zone方式 | 按zone类型从高到低依次排列各节点的同相类型zone | + + + +##2.1.3 set_zonelist_order设置排列方式 +------- + +内核就通过通过set_zonelist_order函数设置当前系统的内存域排列方式current_zonelist_order, 其定义依据系统的NUMA结构还是UMA结构有很大的不同. + +```cpp // http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4571 #ifdef CONFIG_NUMA /* The value user specified ....changed by config */ @@ -285,8 +349,131 @@ static void set_zonelist_order(void) ``` +其设置的基本流程如下 -##system_state系统状态标识 +* 如果系统当前系统是非NUMA结构的, 则系统中只有一个结点, 配置ZONELIST_ORDER_NODE和ZONELIST_ORDER_ZONE结果相同. 那么set_zonelist_order函数被定义为直接配置当前系统的内存域排列方式`current_zonelist_order`为ZONE方式(与NODE效果相同) + +* 如果系统是NUMA结构, 则设置为系统指定的方式即可 + 1. 当前的排列方式为ZONELIST_ORDER_DEFAULT, 即系统默认方式, 则current_zonelist_order则由内核交给default_zonelist_order采用一定的算法选择一个最优的分配策略, 目前的系统中如果是32位则配置为ZONE方式, 而如果是64位系统则设置为NODE方式 + + 2. 当前的排列方式不是默认方式, 则设置为user_zonelist_order指定的内存域排列方式 + +##2.1.4 default_zonelist_order函数选择最优的配置 +------- + +在UMA结构下, 内存域使用NODE和ZONE两个排列方式会产生相同的效果, 因此系统不用特殊指定, 直接通过set_zonelist_order函数, 将当前系统的内存域排列方式`current_zonelist_order`配置为为ZONE方式(与NODE效果相同)即可 + + +但是NUMA结构下, 默认情况下(当配置了ZONELIST_ORDER_DEFAULT), 系统需要根据系统自身的环境信息选择一个最优的配置(NODE或者ZONE方式), 这个工作就由**default_zonelist_order函数**了来完成. 其定义在[mm/page_alloc.c?v=4.7, line 4789](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4789) + + +```cpp +#if defined(CONFIG_64BIT) +/* + * Devices that require DMA32/DMA are relatively rare and do not justify a + * penalty to every machine in case the specialised case applies. Default + * to Node-ordering on 64-bit NUMA machines + */ +static int default_zonelist_order(void) +{ + return ZONELIST_ORDER_NODE; +} +#else +/* + * On 32-bit, the Normal zone needs to be preserved for allocations accessible + * by the kernel. If processes running on node 0 deplete the low memory zone + * then reclaim will occur more frequency increasing stalls and potentially + * be easier to OOM if a large percentage of the zone is under writeback or + * dirty. The problem is significantly worse if CONFIG_HIGHPTE is not set. + * Hence, default to zone ordering on 32-bit. + */ +static int default_zonelist_order(void) +{ + return ZONELIST_ORDER_ZONE; +} +#endif /* CONFIG_64BIT */ +``` + + + +###2.1.5 user_zonelist_order用户指定排列方式 +------- + + +在NUMA结构下, 系统支持用户指定内存域的排列方式, 用户以字符串的形式操作numa_zonelist_order(default, node和zone), 最终被内核转换为user_zonelist_order, 这个变量被指定为字符串numa_zonelist_order指定的排列方式, 他们定义在[mm/page_alloc.c?v4.7, line 4573](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L4573), 注意只有在NUMA结构中才需要这个配置信息. + +```cpp +#ifdef CONFIG_NUMA +/* The value user specified ....changed by config */ +static int user_zonelist_order = ZONELIST_ORDER_DEFAULT; +/* string for sysctl */ +#define NUMA_ZONELIST_ORDER_LEN 16 +char numa_zonelist_order[16] = "default"; + +#else +/* ......*/ +#endif +``` + +而接受和处理用户配置的工作, 自然是交给我们强大的proc文件系统来完成的, 用户通过操作`/proc/sys/vm/numa_zonelist_order`来完成配置工作. + + +![/proc/sys/vm/numa_zonelist_order`](../images/proc-numa_zonelist_order.png) + + + +内核通过setup_numa_zonelist_order读取并处理用户写入的配置信息 + +* 接收到用户的信息后用__parse_numa_zonelist_order处理接收的参数 + +* 如果前面用__parse_numa_zonelist_order处理的信息串成功, 则将对用的设置信息写入到字符串numa_zonelist_order中 + + +参见[mm/page_alloc.c?v=4.7, line 4578](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4578) +```cpp +/* + * interface for configure zonelist ordering. + * command line option "numa_zonelist_order" + * = "[dD]efault - default, automatic configuration. + * = "[nN]ode - order by node locality, then by zone within node + * = "[zZ]one - order by zone, then by locality within zone + */ + +static int __parse_numa_zonelist_order(char *s) +{ + if (*s == 'd' || *s == 'D') { + user_zonelist_order = ZONELIST_ORDER_DEFAULT; + } else if (*s == 'n' || *s == 'N') { + user_zonelist_order = ZONELIST_ORDER_NODE; + } else if (*s == 'z' || *s == 'Z') { + user_zonelist_order = ZONELIST_ORDER_ZONE; + } else { + pr_warn("Ignoring invalid numa_zonelist_order value: %s\n", s); + return -EINVAL; + } + return 0; +} + +static __init int setup_numa_zonelist_order(char *s) +{ + int ret; + + if (!s) + return 0; + + ret = __parse_numa_zonelist_order(s); + if (ret == 0) + strlcpy(numa_zonelist_order, s, NUMA_ZONELIST_ORDER_LEN); + + return ret; +} +early_param("numa_zonelist_order", setup_numa_zonelist_order); +``` + +##2.2 + + +###2.2.1 system_state系统状态标识 其中`system_state`变量是一个系统全局定义的用来表示系统当前运行状态的枚举变量, 其定义在[include/linux/kernel.h?v=4.7, line 487](http://lxr.free-electrons.com/source/include/linux/kernel.h?v=4.7#L487) diff --git a/study/kernel/02-memory/03-initialize/01-init_struct/test.c b/study/kernel/02-memory/03-initialize/01-init_struct/test.c new file mode 100644 index 0000000..bf944de --- /dev/null +++ b/study/kernel/02-memory/03-initialize/01-init_struct/test.c @@ -0,0 +1,44 @@ +#ifdef CONFIG_NUMA +/* The value user specified ....changed by config */ +static int user_zonelist_order = ZONELIST_ORDER_DEFAULT; +/* string for sysctl */ +#define NUMA_ZONELIST_ORDER_LEN 16 +char numa_zonelist_order[16] = "default"; + +/* + * interface for configure zonelist ordering. + * command line option "numa_zonelist_order" + * = "[dD]efault - default, automatic configuration. + * = "[nN]ode - order by node locality, then by zone within node + * = "[zZ]one - order by zone, then by locality within zone + */ + +static int __parse_numa_zonelist_order(char *s) +{ + if (*s == 'd' || *s == 'D') { + user_zonelist_order = ZONELIST_ORDER_DEFAULT; + } else if (*s == 'n' || *s == 'N') { + user_zonelist_order = ZONELIST_ORDER_NODE; + } else if (*s == 'z' || *s == 'Z') { + user_zonelist_order = ZONELIST_ORDER_ZONE; + } else { + pr_warn("Ignoring invalid numa_zonelist_order value: %s\n", s); + return -EINVAL; + } + return 0; +} + +static __init int setup_numa_zonelist_order(char *s) +{ + int ret; + + if (!s) + return 0; + + ret = __parse_numa_zonelist_order(s); + if (ret == 0) + strlcpy(numa_zonelist_order, s, NUMA_ZONELIST_ORDER_LEN); + + return ret; +} +early_param("numa_zonelist_order", setup_numa_zonelist_order); \ No newline at end of file diff --git a/study/kernel/02-memory/03-initialize/images/legacy-order.jpg b/study/kernel/02-memory/03-initialize/images/legacy-order.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52769b11fcbe02dfef6414efd55e90a6dacd3bef GIT binary patch literal 11697 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 literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/03-initialize/images/proc-numa_zonelist_order.png b/study/kernel/02-memory/03-initialize/images/proc-numa_zonelist_order.png new file mode 100644 index 0000000000000000000000000000000000000000..6daa659be82d9aa1dfa902147f304056230cc8c2 GIT binary patch literal 26681 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 z¨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

l$L=#=sKK_E5-<{447HU!|kC}s1G`TBH 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 literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/03-initialize/images/zone-order.jpg b/study/kernel/02-memory/03-initialize/images/zone-order.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9afab047b889ba4ae5bc9715b7da3db48d40ef9 GIT binary patch literal 17806 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 Z;b+NZ;j(kv1Sm5TNX+|)z7Y82{{eb!(f|Me literal 0 HcmV?d00001