From bb6ae8eb1491d0eb4474cc8ff336cb24af5f2a2e Mon Sep 17 00:00:00 2001 From: gatieme Date: Fri, 12 Aug 2016 21:20:45 +0800 Subject: [PATCH] =?UTF-8?q?buddy=E7=AE=97=E6=B3=95...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../01-description/03-zone/README.md | 2019 ++++++----- .../03-initialize/04-init_buddy/README.md | 2991 +++++++++-------- .../03-initialize/images/build_zonelists.png | Bin 0 -> 17071 bytes .../images/build_zonelists_node.png | Bin 0 -> 63728 bytes .../images/i386-setup_memory.jpg | Bin 110567 -> 53330 bytes .../03-initialize/images/kernel_space.jpg | Bin 198253 -> 140107 bytes .../04-buddy/01-buddy_system/README.md | 207 +- .../04-buddy/images/buddy_and_node_zone.png | Bin 0 -> 40139 bytes .../04-buddy/images/buddy_node_connect.png | Bin 0 -> 44948 bytes 9 files changed, 2784 insertions(+), 2433 deletions(-) create mode 100644 study/kernel/02-memory/03-initialize/images/build_zonelists.png create mode 100644 study/kernel/02-memory/03-initialize/images/build_zonelists_node.png create mode 100644 study/kernel/02-memory/04-buddy/images/buddy_and_node_zone.png create mode 100644 study/kernel/02-memory/04-buddy/images/buddy_node_connect.png diff --git a/study/kernel/02-memory/01-description/03-zone/README.md b/study/kernel/02-memory/01-description/03-zone/README.md index b1a7750..96d14dc 100644 --- a/study/kernel/02-memory/01-description/03-zone/README.md +++ b/study/kernel/02-memory/01-description/03-zone/README.md @@ -1,915 +1,1104 @@ - 服务器体系与共享存储器架构 -======= - -| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | -| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| -| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | - - - -#1 前景回顾 -------- - - -前面我们讲到[服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)](http://blog.csdn.net/gatieme/article/details/52098615) - - -#1.1 UMA和NUMA两种模型 -------- - -共享存储型多处理机有两种模型 - -* 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 - - -* 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 - -**UMA模型** - -物理存储器被所有处理机均匀共享。所有处理机对所有存储字具有相同的存取时间,这就是为什么称它为均匀存储器存取的原因。每台处理机可以有私用高速缓存,外围设备也以一定形式共享。 - -**NUMA模型** - -NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 - - -#1.2 (N)UMA模型中linux内存的机构 -------- - - - -非一致存储器访问(NUMA)模式下 - -* 处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间. 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多 - - -* 内存被分割成多个区域(BANK,也叫"簇"),依据簇与处理器的"距离"不同, 访问不同簇的代码也会不同. 比如,可能把内存的一个簇指派给每个处理器,或则某个簇和设备卡很近,很适合DMA,那么就指派给该设备。因此当前的多数系统会把内存系统分割成2块区域,一块是专门给CPU去访问,一块是给外围设备板卡的DMA去访问 - ->在UMA系统中, 内存就相当于一个只使用一个NUMA节点来管理整个系统的内存. 而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. - - -##1.3 Linux如何描述物理内存 -------- - -Linux把物理内存划分为三个层次来管理 - -| 层次 | 描述 | -|:----:|:----:| -| 存储节点(Node) | CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 | -| 管理区(Zone) | 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存 | -| 页面(Page) | 内存被细分为多个页面帧, 页面是最基本的页面分配的单位 | - - -##1.4 用pd_data_t描述内存节点node -------- - - ->CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 -> ->系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 - -* 首先, 内存被划分为结点. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. - - -内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在[include/linux/mmzone.h, line 615](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L615) - - -在分配一个页面时, Linux采用节点局部分配的策略, 从最靠近运行中的CPU的节点分配内存, 由于进程往往是在同一个CPU上运行, 因此从当前节点得到的内存很可能被用到 - - -##1.5 今日内容(内存管理域zone) -------- - -为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 - -* 首先, 内存被划分为结点. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. - -* 接着各个节点又被划分为内存管理区域, 一个管理区域通过struct zone_struct描述, 其被定义为zone_t, 用以表示内存的某个范围, 低端范围的16MB被描述为ZONE_DMA, 某些工业标准体系结构中的(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核段的物理地址域ZONE_HIGHMEM, 被称为高端内存. 是系统中预留的可用内存空间, 不能被内核直接映射. - - -下面我们就来详解讲讲内存管理域的内容zone - - -#2 为什么要将内存node分成不同的区域zone -------- - - -NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度要快, 而Linux为了兼容NUMAJ结构, 把物理内存相依照CPU的不同node分成簇, 一个CPU-node对应一个本地内存pgdata_t. - - - -这样已经很好的表示物理内存了, 在一个理想的计算机系统中, 一个页框就是一个内存的分配单元, 可用于任何事情:存放内核数据, 用户数据和缓冲磁盘数据等等. 任何种类的数据页都可以存放在任页框中, 没有任何限制. - - -但是Linux内核又把各个物理内存节点分成个不同的管理区域zone, 这是为什么呢? - - -因为实际的计算机体系结构有硬件的诸多限制, 这限制了页框可以使用的方式. 尤其是, Linux内核必须处理80x86体系结构的两种硬件约束. - -* ISA总线的直接内存存储DMA处理器有一个严格的限制 : 他们只能对RAM的前16MB进行寻址 - -* 在具有大容量RAM的现代32位计算机中, CPU不能直接访问所有的物理地址, 因为线性地址空间太小, 内核不可能直接映射所有物理内存到线性地址空间, 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 - - -因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域 - - - -#3 内存管理区类型zone_type -------- - -前面我们说了由于硬件的一些约束, 低端的一些地址被用于DMA, 而在实际内存大小超过了内核所能使用的现行地址的时候, 一些高地址处的物理地址不能简单持久的直接映射到内核空间. 因此内核将内存的节点node分成了不同的内存区域方便管理和映射. - -Linux使用enum zone_type来标记内核所支持的所有内存区域 - - -##3.1 内存区域类型zone_type -------- - -zone_type结构定义在[include/linux/mmzone.h](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L267), 其基本信息如下所示 - -```c -enum zone_type -{ -#ifdef CONFIG_ZONE_DMA - ZONE_DMA, -#endif - -#ifdef CONFIG_ZONE_DMA32 - - ZONE_DMA32, -#endif - - ZONE_NORMAL, - -#ifdef CONFIG_HIGHMEM - ZONE_HIGHMEM, -#endif - ZONE_MOVABLE, -#ifdef CONFIG_ZONE_DEVICE - ZONE_DEVICE, -#endif - __MAX_NR_ZONES - -}; - -``` -不同的管理区的用途是不一样的,ZONE_DMA类型的内存区域在物理内存的低端,主要是ISA设备只能用低端的地址做DMA操作。ZONE_NORMAL类型的内存区域直接被内核映射到线性地址空间上面的区域(line address space),ZONE_HIGHMEM将保留给系统使用,是系统中预留的可用内存空间,不能被内核直接映射。 - - -##3.2 不同的内存区域的作用 -------- - -在内存中,每个簇所对应的node又被分成的称为管理区(zone)的块,它们各自描述在内存中的范围。一个管理区(zone)由[struct zone](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L326)结构体来描述,在linux-2.4.37之前的内核中是用[`typedef struct zone_struct zone_t `](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L47)数据结构来描述) - -管理区的类型用zone_type表示, 有如下几种 - -| 管理内存域 | 描述 | -|:---------:|:---:| -| ZONE_DMA | 标记了适合DMA的内存域. 该区域的长度依赖于处理器类型. 这是由于古老的ISA设备强加的边界. 但是为了兼容性, 现代的计算机也可能受此影响 | -| ZONE_DMA32 | 标记了使用32位地址字可寻址, 适合DMA的内存域. 显然, 只有在53位系统中ZONE_DMA32才和ZONE_DMA有区别, 在32位系统中, 本区域是空的, 即长度为0MB, 在Alpha和AMD64系统上, 该内存的长度可能是从0到4GB | -| ZONE_NORMAL | 标记了可直接映射到内存段的普通内存域. 这是在所有体系结构上保证会存在的唯一内存区域, 但无法保证该地址范围对应了实际的物理地址. 例如, 如果AMD64系统只有两2G内存, 那么所有的内存都属于ZONE_DMA32范围, 而ZONE_NORMAL则为空 | -| ZONE_HIGHMEM | 标记了超出内核虚拟地址空间的物理内存段, 因此这段地址不能被内核直接映射 | -| ZONE_MOVABLE | 内核定义了一个伪内存域ZONE_MOVABLE, 在防止物理内存碎片的机制memory migration中需要使用该内存域. 供防止物理内存碎片的极致使用 | -| ZONE_DEVICE | 为支持热插拔设备而分配的Non Volatile Memory非易失性内存 | -| MAX_NR_ZONES | 充当结束标记, 在内核中想要迭代系统中所有内存域, 会用到该常亮 | - -根据编译时候的配置, 可能无需考虑某些内存域. 例如在64位系统中, 并不需要高端内存, 因为AM64的linux采用4级页表,支持的最大物理内存为64TB, 对于虚拟地址空间的划分,将0x0000,0000,0000,0000 – 0x0000,7fff,ffff,f000这128T地址用于用户空间;而0xffff,8000,0000,0000以上的128T为系统空间地址, 这远大于当前我们系统中的内存空间, 因此所有的物理地址都可以直接映射到内核中, 不需要高端内存的特殊映射. 可以参见[Documentation/x86/x86_64/mm.txt](https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt) - ` - - -ZONE_MOVABLE和ZONE_DEVICE其实是和其他的ZONE的用途有异, - -* ZONE_MOVABLE在防止物理内存碎片的机制中需要使用该内存区域, - -* ZONE_DEVICE笔者也第一次知道了,理解有错的话欢迎大家批评指正, 这个应该是为支持热插拔设备而分配的Non Volatile Memory非易失性内存, - - ->关于ZONE_DEVICE, 具体的信息可以参见[ATCH v2 3/9] mm: ZONE_DEVICE for "device memory"](https://lkml.org/lkml/2015/8/25/844) -> ->While pmem is usable as a block device or via DAX mappings to userspace -there are several usage scenarios that can not target pmem due to its -lack of struct page coverage. In preparation for "hot plugging" pmem -into the vmemmap add ZONE_DEVICE as a new zone to tag these pages -separately from the ones that are subject to standard page allocations. -Importantly "device memory" can be removed at will by userspace -unbinding the driver of the device. - - -##3.3 典型架构(x86)上内存区域划分 -------- - - -对于x86机器,管理区(内存区域)类型如下分布 - -| 类型 | 区域 | -| :------- | ----: | -| ZONE_DMA | 0~15MB | -| ZONE_NORMAL | 16MB~895MB | -| ZONE_HIGHMEM | 896MB~物理内存结束 | - -而由于32位系统中, Linux内核虚拟地址空间只有1G, 而0~895M这个986MB被用于DMA和直接映射, 剩余的物理内存被成为高端内存. 那内核是如何借助剩余128MB高端内存地址空间是如何实现访问可以所有物理内存? - -当内核想访问高于896MB物理地址内存时,从0xF8000000 ~ 0xFFFFFFFF地址空间范围内找一段相应大小空闲的逻辑地址空间,借用一会。借用这段逻辑地址空间,建立映射到想访问的那段物理内存(即填充内核PTE页面表),临时用一会,用完后归还。这样别人也可以借用这段地址空间访问其他物理内存,实现了使用有限的地址空间,访问所有所有物理内存 - ->关于高端内存的内容, 我们后面会专门抽出一章进行讲解 - -因此, 传统和X86_32位系统中, 前16M划分给ZONE_DMA, 该区域包含的页框可以由老式的基于ISAS的设备通过DMA使用"直接内存访问(DMA)", ZONE_DMA和ZONE_NORMAL区域包含了内存的常规页框, 通过把他们线性的映射到现行地址的第4个GB, 内核就可以直接进行访问, 相反ZONE_HIGHME包含的内存页不能由内核直接访问, 尽管他们也线性地映射到了现行地址空间的第4个GB. 在64位体系结构中, 线性地址空间的大小远远好过了系统的实际物理地址, 内核可知直接将所有的物理内存映射到线性地址空间, 因此64位体系结构上ZONE_HIGHMEM区域总是空的. - - -#4 管理区结构zone_t -------- - ->一个管理区(zone)由[`struct zone`](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L326)结构体来描述(linux-3.8~目前linux4.5),而在linux-2.4.37之前的内核中是用[`struct zone_struct `](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L47)数据结构来描述), 他们都通过typedef被重定义为zone_t类型 - -zone对象用于跟踪诸如页面使用情况的统计数, 空闲区域信息和锁信息 - ->里面保存着内存使用状态信息,如page使用统计, 未使用的内存区域,互斥访问的锁(LOCKS)等. - - -##4.1 struct zone管理域数据结构 -------- - -`struct zone`在`linux/mmzone.h`中定义, 在linux-4.7的内核中可以使用[include/linux/mmzone.h](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L324)来查看其定义 - -```cpp -struct zone -{ - /* Read-mostly fields */ - - /* zone watermarks, access with *_wmark_pages(zone) macros */ - unsigned long watermark[NR_WMARK]; - - unsigned long nr_reserved_highatomic; - - /* - * We don't know if the memory that we're going to allocate will be - * freeable or/and it will be released eventually, so to avoid totally - * wasting several GB of ram we must reserve some of the lower zone - * memory (otherwise we risk to run OOM on the lower zones despite - * there being tons of freeable ram on the higher zones). This array is - * recalculated at runtime if the sysctl_lowmem_reserve_ratio sysctl - * changes. - * 分别为各种内存域指定了若干页 - * 用于一些无论如何都不能失败的关键性内存分配。 - */ - long lowmem_reserve[MAX_NR_ZONES]; - -#ifdef CONFIG_NUMA - int node; -#endif - - /* - * The target ratio of ACTIVE_ANON to INACTIVE_ANON pages on - * this zone's LRU. Maintained by the pageout code. - * 不活动页的比例, - * 接着是一些很少使用或者大部分情况下是只读的字段: - * wait_table wait_table_hash_nr_entries wait_table_bits - * 形成等待列队,可以等待某一页可供进程使用 */ - unsigned int inactive_ratio; - - /* 指向这个zone所在的pglist_data对象 */ - struct pglist_data *zone_pgdat; - /*/这个数组用于实现每个CPU的热/冷页帧列表。内核使用这些列表来保存可用于满足实现的“新鲜”页。但冷热页帧对应的高速缓存状态不同:有些页帧很可能在高速缓存中,因此可以快速访问,故称之为热的;未缓存的页帧与此相对,称之为冷的。*/ - struct per_cpu_pageset __percpu *pageset; - - /* - * This is a per-zone reserve of pages that are not available - * to userspace allocations. - * 每个区域保留的不能被用户空间分配的页面数目 - */ - unsigned long totalreserve_pages; - -#ifndef CONFIG_SPARSEMEM - /* - * Flags for a pageblock_nr_pages block. See pageblock-flags.h. - * In SPARSEMEM, this map is stored in struct mem_section - */ - unsigned long *pageblock_flags; -#endif /* CONFIG_SPARSEMEM */ - -#ifdef CONFIG_NUMA - /* - * zone reclaim becomes active if more unmapped pages exist. - */ - unsigned long min_unmapped_pages; - unsigned long min_slab_pages; -#endif /* CONFIG_NUMA */ - - /* zone_start_pfn == zone_start_paddr >> PAGE_SHIFT - * 只内存域的第一个页帧 */ - unsigned long zone_start_pfn; - - /* - * spanned_pages is the total pages spanned by the zone, including - * holes, which is calculated as: - * spanned_pages = zone_end_pfn - zone_start_pfn; - * - * present_pages is physical pages existing within the zone, which - * is calculated as: - * present_pages = spanned_pages - absent_pages(pages in holes); - * - * managed_pages is present pages managed by the buddy system, which - * is calculated as (reserved_pages includes pages allocated by the - * bootmem allocator): - * managed_pages = present_pages - reserved_pages; - * - * So present_pages may be used by memory hotplug or memory power - * management logic to figure out unmanaged pages by checking - * (present_pages - managed_pages). And managed_pages should be used - * by page allocator and vm scanner to calculate all kinds of watermarks - * and thresholds. - * - * Locking rules: - * - * zone_start_pfn and spanned_pages are protected by span_seqlock. - * It is a seqlock because it has to be read outside of zone->lock, - * and it is done in the main allocator path. But, it is written - * quite infrequently. - * - * The span_seq lock is declared along with zone->lock because it is - * frequently read in proximity to zone->lock. It's good to - * give them a chance of being in the same cacheline. - * - * Write access to present_pages at runtime should be protected by - * mem_hotplug_begin/end(). Any reader who can't tolerant drift of - * present_pages should get_online_mems() to get a stable value. - * - * Read access to managed_pages should be safe because it's unsigned - * long. Write access to zone->managed_pages and totalram_pages are - * protected by managed_page_count_lock at runtime. Idealy only - * adjust_managed_page_count() should be used instead of directly - * touching zone->managed_pages and totalram_pages. - */ - unsigned long managed_pages; - unsigned long spanned_pages; /* 总页数,包含空洞 */ - unsigned long present_pages; /* 可用页数,不包哈空洞 */ - - /* 指向管理区的传统名字, "DMA", "NROMAL"或"HIGHMEM" */ - const char *name; - -#ifdef CONFIG_MEMORY_ISOLATION - /* - * Number of isolated pageblock. It is used to solve incorrect - * freepage counting problem due to racy retrieving migratetype - * of pageblock. Protected by zone->lock. - */ - unsigned long nr_isolate_pageblock; -#endif - -#ifdef CONFIG_MEMORY_HOTPLUG - /* see spanned/present_pages for more description */ - seqlock_t span_seqlock; -#endif - - /* - * wait_table -- the array holding the hash table - * wait_table_hash_nr_entries -- the size of the hash table array - * wait_table_bits -- wait_table_size == (1 << wait_table_bits) - * - * The purpose of all these is to keep track of the people - * waiting for a page to become available and make them - * runnable again when possible. The trouble is that this - * consumes a lot of space, especially when so few things - * wait on pages at a given time. So instead of using - * per-page waitqueues, we use a waitqueue hash table. - * - * The bucket discipline is to sleep on the same queue when - * colliding and wake all in that wait queue when removing. - * When something wakes, it must check to be sure its page is - * truly available, a la thundering herd. The cost of a - * collision is great, but given the expected load of the - * table, they should be so rare as to be outweighed by the - * benefits from the saved space. - * - * __wait_on_page_locked() and unlock_page() in mm/filemap.c, are the - * primary users of these fields, and in mm/page_alloc.c - * free_area_init_core() performs the initialization of them. - */ - /* 进程等待队列的散列表, 这些进程正在等待管理区中的某页 */ - wait_queue_head_t *wait_table; - /* 等待队列散列表中的调度实体数目 */ - unsigned long wait_table_hash_nr_entries; - /* 等待队列散列表数组大小, 值为2^order */ - unsigned long wait_table_bits; - - ZONE_PADDING(_pad1_) - - /* free areas of different sizes - 页面使用状态的信息,以每个bit标识对应的page是否可以分配 - 是用于伙伴系统的,每个数组元素指向对应阶也表的数组开头 - 以下是供页帧回收扫描器(page reclaim scanner)访问的字段 - scanner会跟据页帧的活动情况对内存域中使用的页进行编目 - 如果页帧被频繁访问,则是活动的,相反则是不活动的, - 在需要换出页帧时,这样的信息是很重要的: */ - struct free_area free_area[MAX_ORDER]; - - /* zone flags, see below 描述当前内存的状态, 参见下面的enum zone_flags结构 */ - unsigned long flags; - - /* Write-intensive fields used from the page allocator, 保存该描述符的自旋锁 */ - spinlock_t lock; - - ZONE_PADDING(_pad2_) - - /* Write-intensive fields used by page reclaim */ - - /* Fields commonly accessed by the page reclaim scanner */ - spinlock_t lru_lock; /* LRU(最近最少使用算法)活动以及非活动链表使用的自旋锁 */ - struct lruvec lruvec; - - /* - * When free pages are below this point, additional steps are taken - * when reading the number of free pages to avoid per-cpu counter - * drift allowing watermarks to be breached - * 在空闲页的数目少于这个点percpu_drift_mark的时候 - * 当读取和空闲页数一样的内存页时,系统会采取额外的工作, - * 防止单CPU页数漂移,从而导致水印被破坏。 - */ - unsigned long percpu_drift_mark; - -#if defined CONFIG_COMPACTION || defined CONFIG_CMA - /* pfn where compaction free scanner should start */ - unsigned long compact_cached_free_pfn; - /* pfn where async and sync compaction migration scanner should start */ - unsigned long compact_cached_migrate_pfn[2]; -#endif - -#ifdef CONFIG_COMPACTION - /* - * On compaction failure, 1<lock,zone->lru_lock,zone->pageset这些成员使用不同的cache line. | - - - -##4.2 ZONE_PADDING将数据保存在高速缓冲行 -------- - -该结构比较特殊的地方是它由ZONE_PADDING分隔的几个部分. 这是因为堆zone结构的访问非常频繁. 在多处理器系统中, 通常会有不同的CPU试图同时访问结构成员. 因此使用锁可以防止他们彼此干扰, 避免错误和不一致的问题. 由于内核堆该结构的访问非常频繁, 因此会经常性地获取该结构的两个自旋锁zone->lock和zone->lru_lock - - - -那么数据保存在CPU高速缓存中, 那么会处理得更快速. 高速缓冲分为行, 每一行负责不同的内存区. 内核使用ZONE_PADDING宏生成"填充"字段添加到结构中, 以确保每个自旋锁处于自身的缓存行中 - -ZONE_PADDING宏定义在[nclude/linux/mmzone.h?v4.7, line 105](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L105) - -```cpp -/* - * zone->lock and zone->lru_lock are two of the hottest locks in the kernel. - * So add a wild amount of padding here to ensure that they fall into separate - * cachelines. There are very few zone structures in the machine, so space - * consumption is not a concern here. - */ -#if defined(CONFIG_SMP) - struct zone_padding - { - char x[0]; - } ____cacheline_internodealigned_in_smp; - #define ZONE_PADDING(name) struct zone_padding name; - -#else - #define ZONE_PADDING(name) - #endif -``` - - -内核还用了____cacheline_internodealigned_in_smp,来实现最优的高速缓存行对其方式. - -该宏定义在[include/linux/cache.h](http://lxr.free-electrons.com/source/include/linux/cache.h?v=4.7#L68) - -```cpp -#if !defined(____cacheline_internodealigned_in_smp) - #if defined(CONFIG_SMP) - #define ____cacheline_internodealigned_in_smp \ - __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) - #else - #define ____cacheline_internodealigned_in_smp - #endif -#endif -``` - -##4.3 水印watermark[NR_WMARK]与kswapd内核线程 -------- - -Zone的管理调度的一些参数watermarks水印, 水存量很小(MIN)进水量,水存量达到一个标准(LOW)减小进水量,当快要满(HIGH)的时候,可能就关闭了进水口 - -WMARK_LOW, WMARK_LOW, WMARK_HIGH就是这个标准 - - -```cpp -enum zone_watermarks -{ - WMARK_MIN, - WMARK_LOW, - WMARK_HIGH, - NR_WMARK -}; - - -#define min_wmark_pages(z) (z->watermark[WMARK_MIN]) -#define low_wmark_pages(z) (z->watermark[WMARK_LOW]) -#define high_wmark_pages(z) (z->watermark[WMARK_HIGH]) -``` - -在linux-2.4中, zone结构中使用如下方式表示水印, 参照[include/linux/mmzone.h?v=2.4.37, line 171](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L171) - -``` c -typedef struct zone_watermarks_s -{ - unsigned long min, low, high; -} zone_watermarks_t; - - -typedef struct zone_struct { - zone_watermarks_t watermarks[MAX_NR_ZONES]; -``` - - -在Linux-2.6.x中标准是直接通过成员pages_min, pages_low and pages_high定义在zone结构体中的, 参照[include/linux/mmzone.h?v=2.6.24, line 214](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.6.24#L214) - - -当系统中可用内存很少的时候,系统进程kswapd被唤醒, 开始回收释放page, 水印这些参数(WMARK_MIN, WMARK_LOW, WMARK_HIGH)影响着这个代码的行为 - -每个zone有三个水平标准:watermark[WMARK_MIN], watermark[WMARK_LOW], watermark[WMARK_HIGH],帮助确定zone中内存分配使用的压力状态 - -| 标准 | 描述 | -|:----:|:---:| -| watermark[WMARK_MIN] | 当空闲页面的数量达到page_min所标定的数量的时候, 说明页面数非常紧张, 分配页面的动作和kswapd线程同步运行.
WMARK_MIN所表示的page的数量值,是在内存初始化的过程中调用[free_area_init_core](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5932)中计算的。这个数值是根据zone中的page的数量除以一个>1的系数来确定的。通常是这样初始化的ZoneSizeInPages/12 | -| watermark[WMARK_LOW] | 当空闲页面的数量达到WMARK_LOW所标定的数量的时候,说明页面刚开始紧张, 则kswapd线程将被唤醒,并开始释放回收页面 | -| watermark[WMARK_HIGH] | 当空闲页面的数量达到page_high所标定的数量的时候, 说明内存页面数充足, 不需要回收, kswapd线程将重新休眠,通常这个数值是page_min的3倍 | - -* 如果空闲页多于pages_high = watermark[WMARK_HIGH], 则说明内存页面充足, 内存域的状态是理想的. - -* 如果空闲页的数目低于pages_low = watermark[WMARK_LOW], 则说明内存页面开始紧张, 内核开始将页患处到硬盘. - -* 如果空闲页的数目低于pages_min = watermark[WMARK_MIN], 则内存页面非常紧张, 页回收工作的压力就比较大 - - -##4.3 内存域标志 -------- - -[内存管理域zone_t结构中的flags字段](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L475)描述了内存域的当前状态 - - -```cpp -// http://lxr.free-electrons.com/source/include/linux/mmzone.h#L475 -struct zone -{ - /* zone flags, see below */ - unsigned long flags; -} -``` - -它允许使用的标识用[`enum zone_flags`](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L525)标识, 该枚举标识定义在[include/linux/mmzone.h?v4.7, line 525](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L525), 如下所示 - -```cpp -enum zone_flags -{ - ZONE_RECLAIM_LOCKED, /* prevents concurrent reclaim */ - ZONE_OOM_LOCKED, /* zone is in OOM killer zonelist 内存域可被回收*/ - ZONE_CONGESTED, /* zone has many dirty pages backed by - * a congested BDI - */ - ZONE_DIRTY, /* reclaim scanning has recently found - * many dirty file pages at the tail - * of the LRU. - */ - ZONE_WRITEBACK, /* reclaim scanning has recently found - * many pages under writeback - */ - ZONE_FAIR_DEPLETED, /* fair zone policy batch depleted */ -}; -``` - - -| flag标识 | 描述 | -|:-------:|:-------:| -| ZONE_RECLAIM_LOCKED | 防止并发回收, 在SMP上系统, 多个CPU可能试图并发的回收亿i个内存域. ZONE_RECLAIM_LCOKED标志可防止这种情况: 如果一个CPU在回收某个内存域, 则设置该标识. 这防止了其他CPU的尝试 | -| ZONE_OOM_LOCKED | 用于某种不走运的情况: 如果进程消耗了大量的内存, 致使必要的操作都无法完成, 那么内核会使徒杀死消耗内存最多的进程, 以获取更多的空闲页, 该标志可以放置多个CPU同时进行这种操作 | -| ZONE_CONGESTED | 标识当前区域中有很多脏页 | -| ZONE_DIRTY | 用于标识最近的一次页面扫描中, LRU算法发现了很多脏的页面 | -| ZONE_WRITEBACK | 最近的回收扫描发现有很多页在写回 | -| ZONE_FAIR_DEPLETED | 公平区策略耗尽(没懂) | - - -##4.4 内存域统计信息vm_stat -------- - - -内存域struct zone的vm_stat维护了大量有关该内存域的统计信息. 由于其中维护的大部分信息曲面没有多大意义 - -```cpp -// http://lxr.free-electrons.com/source/include/linux/mmzone.h#L522 -struct zone -{ - atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; -} -``` - -vm_stat的统计信息由`enum zone_stat_item`枚举变量标识, 定义在[include/linux/mmzone.h?v=4.7, line 110](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L110) - -```cpp -enum zone_stat_item -{ - /* First 128 byte cacheline (assuming 64 bit words) */ - NR_FREE_PAGES, - NR_ALLOC_BATCH, - NR_LRU_BASE, - NR_INACTIVE_ANON = NR_LRU_BASE, /* must match order of LRU_[IN]ACTIVE */ - NR_ACTIVE_ANON, /* " " " " " */ - NR_INACTIVE_FILE, /* " " " " " */ - NR_ACTIVE_FILE, /* " " " " " */ - NR_UNEVICTABLE, /* " " " " " */ - NR_MLOCK, /* mlock()ed pages found and moved off LRU */ - NR_ANON_PAGES, /* Mapped anonymous pages */ - NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. - only modified from process context */ - NR_FILE_PAGES, - NR_FILE_DIRTY, - NR_WRITEBACK, - NR_SLAB_RECLAIMABLE, - NR_SLAB_UNRECLAIMABLE, - NR_PAGETABLE, /* used for pagetables */ - NR_KERNEL_STACK, - /* Second 128 byte cacheline */ - NR_UNSTABLE_NFS, /* NFS unstable pages */ - NR_BOUNCE, - NR_VMSCAN_WRITE, - NR_VMSCAN_IMMEDIATE, /* Prioritise for reclaim when writeback ends */ - NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ - NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */ - NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */ - NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */ - NR_DIRTIED, /* page dirtyings since bootup */ - NR_WRITTEN, /* page writings since bootup */ - NR_PAGES_SCANNED, /* pages scanned since last reclaim */ -#ifdef CONFIG_NUMA - NUMA_HIT, /* allocated in intended node */ - NUMA_MISS, /* allocated in non intended node */ - NUMA_FOREIGN, /* was intended here, hit elsewhere */ - NUMA_INTERLEAVE_HIT, /* interleaver preferred this zone */ - NUMA_LOCAL, /* allocation from local node */ - NUMA_OTHER, /* allocation from other node */ -#endif - WORKINGSET_REFAULT, - WORKINGSET_ACTIVATE, - WORKINGSET_NODERECLAIM, - NR_ANON_TRANSPARENT_HUGEPAGES, - NR_FREE_CMA_PAGES, - NR_VM_ZONE_STAT_ITEMS -}; -``` - -内核提供了很多方式来获取当前内存域的状态信息, 这些函数大多定义在[include/linux/vmstat.h?v=4.7](http://lxr.free-electrons.com/source/include/linux/vmstat.h?v=4.7) - - - -##4.5 Zone等待队列表(zone wait queue table) -------- - - -struct zone中实现了一个等待队列, 可用于等待某一页的进程, 内核将进程排成一个列队, 等待某些条件. 在条件变成真时, 内核会通知进程恢复工作. - -```c -struct zone -{ - wait_queue_head_t *wait_table; - unsigned long wait_table_hash_nr_entries; - unsigned long wait_table_bits; -} -``` - -| 字段 | 描述 | -|:-----:|:-----:| -| wait_table | 待一个page释放的等待队列哈希表。它会被wait_on_page(),unlock_page()函数使用. 用哈希表,而不用一个等待队列的原因,防止进程长期等待资源 | -| wait_table_hash_nr_entries | 哈希表中的等待队列的数量 | -| wait_table_bits | 等待队列散列表数组大小, wait_table_size == (1 << wait_table_bits) | - - - - -当对一个page做I/O操作的时候,I/O操作需要被锁住,防止不正确的数据被访问。进程在访问page前,wait_on_page_locked函数,使进程加入一个等待队列 - -访问完成后,UnlockPage函数解锁其他进程对page的访问。其他正在等待队列中的进程被唤醒。每个page都可以有一个等待队列,但是太多的分离的等待队列使得花费太多的内存访问周期。替代的解决方法,就是将所有的队列放在struct zone数据结构中 - - -也可以有一种可能,就是struct zone中只有一个队列,但是这就意味着,当一个page unlock的时候,访问这个zone里内存page的所有休眠的进程将都被唤醒,这样就会出现拥堵(thundering herd)的问题。建立一个哈希表管理多个等待队列,能解决这个问题,zone->wait_table就是这个哈希表。哈希表的方法可能还是会造成一些进程不必要的唤醒。但是这种事情发生的机率不是很频繁的。下面这个图就是进程及等待队列的运行关系: - - -等待队列的哈希表的分配和建立在free_area_init_core()函数中进行。哈希表的表项的数量在wait_table_size() 函数中计算,并且保持在zone->wait_table_size成员中。最大4096个等待队列。最小是NoPages / PAGES_PER_WAITQUEUE的2次方,NoPages是zone管理的page的数量,PAGES_PER_WAITQUEUE被定义256。(原文:For smaller tables, the size of the table is the minimum power of 2 required to store NoPages / PAGES PER WAITQUEUE number of queues, where NoPages is the number of pages in the zone and PAGE PER WAITQUEUE is defined to be 256.) -下面这个公式可以用于计算这个值: - -zone->wait_table_bits用于计算:根据page 地址得到需要使用的等待队列在哈希表中的索引的算法因子。page_waitqueue()函数负责返回zone中page所对应等待队列。它用一个基于struct page虚拟地址的简单的乘法哈希算法来确定等待队列的。 -page_waitqueue()函数用GOLDEN_RATIO_PRIME的地址和“右移zone→wait_table_bits一个索引值”的一个乘积来确定等待队列在哈希表中的索引的。 -Zone的初始化 -在kernel page table通过paging_init()函数完全建立起z来以后,zone被初始化。下面章节将描述这个。当然不同的体系结构这个过程肯定也是不一样的,但它们的目的却是相同的:确定什么参数需要传递给free_area_init()函数(对于UMA体系结构)或者free_area_init_node()函数(对于NUMA体系结构)。这里省略掉NUMA体系结构的说明。 -free_area_init()函数的参数: -unsigned long *zones_sizes: 系统中每个zone所管理的page的数量的数组。这个时候,还没能确定zone中那些page是可以分配使用的(free)。这个信息知道boot memory allocator完成之前还无法知道。 -来源: http://www.uml.org.cn/embeded/201208071.asp - - -##4.6 冷热页与Per-CPU上的页面高速缓存 -------- - - -内核经常请求和释放单个页框. 为了提升性能, 每个内存管理区都定义了一个每CPU(Per-CPU)的页面高速缓存. 所有"每CPU高速缓存"包含一些预先分配的页框, 他们被定义满足本地CPU发出的单一内存请求. - -`struct zone`的pageset成员用于实现冷热分配器(hot-n-cold allocator) - -```cpp -struct zone -{ - struct per_cpu_pageset __percpu *pageset; -}; -``` -内核说页面是热的, 意味着页面已经加载到CPU的高速缓存, 与在内存中的页相比, 其数据访问速度更快. 相反, 冷页则不再高速缓存中. 在多处理器系统上每个CPU都有一个或者多个告诉缓存. 各个CPU的管理必须是独立的. - ->尽管内存域可能属于一个特定的NUMA结点, 因而关联到某个特定的CPU。 但其他CPU的告诉缓存仍然可以包含该内存域中的页面. 最终的效果是, 每个处理器都可以访问系统中的所有页, 尽管速度不同. 因而, 特定于内存域的数据结构不仅要考虑到所属NUMA结点相关的CPU, 还必须照顾到系统中其他的CPU. - - -pageset是一个指针, 其容量与系统能够容纳的CPU的数目的最大值相同. - - -数组元素类型为per_cpu_pageset, 定义在[include/linux/mmzone.h?v4.7, line 254](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L254), 如下所示 - -```cpp -struct per_cpu_pageset { - struct per_cpu_pages pcp; -#ifdef CONFIG_NUMA - s8 expire; -#endif -#ifdef CONFIG_SMP - s8 stat_threshold; - s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS]; -#endif -}; -``` - -该结构由一个per_cpu_pages pcp变量组成, 该数据结构定义如下, 位于[include/linux/mmzone.h?v4.7, line 245](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L245) - - - -```cpp -struct per_cpu_pages { - int count; /* number of pages in the list 列表中的页数 */ - int high; /* high watermark, emptying needed 页数上限水印, 在需要的情况清空列表 */ - int batch; /* chunk size for buddy add/remove, 添加/删除多页块的时候, 块的大小 */ - - /* Lists of pages, one per migrate type stored on the pcp-lists 页的链表*/ - struct list_head lists[MIGRATE_PCPTYPES]; -}; -``` - -| 字段 | 描述 | -|:---:|:----:| -| count | 记录了与该列表相关的页的数目 | -| high | 是一个水印. 如果count的值超过了high, 则表明列表中的页太多了 | -| batch | 如果可能, CPU的高速缓存不是用单个页来填充的, 而是欧诺个多个页组成的块, batch作为每次添加/删除页时多个页组成的块大小的一个参考值 | -| list | 一个双链表, 保存了当前CPU的冷页或热页, 可使用内核的标准方法处理 | - - -在内核中只有一个子系统会积极的尝试为任何对象维护per-cpu上的list链表, 这个子系统就是slab分配器. - -* struct per_cpu_pageset具有一个字段, 该字段 - -* struct per_cpu_pages则维护了链表中目前已有的一系列页面, 高极值和低极值决定了何时填充该集合或者释放一批页面, 变量决定了一个块中应该分配多少个页面, 并最后决定在页面前的实际链表中分配多少各页面 - - - - -#4.7 内存域的第一个页帧zone_start_pfn -------- - -struct zone中通过zone_start_pfn成员标记了内存管理区的页面地址. - - -然后内核也通过一些全局变量标记了物理内存所在页面的偏移, 这些变量定义在[mm/nobootmem.c?v4.7, line 31](http://lxr.free-electrons.com/source/mm/nobootmem.c?v4.7#L31) - -```cpp -unsigned long max_low_pfn; -unsigned long min_low_pfn; -unsigned long max_pfn; -unsigned long long max_possible_pfn; -``` - -PFN是物理内存以Page为单位的偏移量 - -| 变量 | 描述 | -|:----:|:---:| -| max_low_pfn | x86中,max_low_pfn变量是由find_max_low_pfn函数计算并且初始化的,它被初始化成ZONE_NORMAL的最后一个page的位置。这个位置是kernel直接访问的物理内存, 也是关系到kernel/userspace通过“PAGE_OFFSET宏”把线性地址内存空间分开的内存地址位置 | -| min_low_pfn | 系统可用的第一个pfn是[min_low_pfn变量](http://lxr.free-electrons.com/source/include/linux/bootmem.h?v4.7#L16), 开始与_end标号的后面, 也就是kernel结束的地方.在文件mm/bootmem.c中对这个变量作初始化 -| max_pfn | 系统可用的最后一个PFN是[max_pfn变量](http://lxr.free-electrons.com/source/include/linux/bootmem.h?v4.7#L21), 这个变量的初始化完全依赖与硬件的体系结构. | -| max_possible_pfn | - - - - - - -x86的系统中, find_max_pfn函数通过读取e820表获得最高的page frame的数值, 同样在文件mm/bootmem.c中对这个变量作初始化。e820表是由BIOS创建的 - ->This is the physical memory directly accessible by the kernel and is related to the kernel/userspace split in the linear address space marked by PAGE OFFSET. - -我理解为这段地址kernel可以直接访问,可以通过PAGE_OFFSET宏直接将kernel所用的虚拟地址转换成物理地址的区段。在文件mm/bootmem.c中对这个变量作初始化。在内存比较小的系统中max_pfn和max_low_pfn的值相同 -min_low_pfn, max_pfn和max_low_pfn这3个值,也要用于对高端内存(high memory)的起止位置的计算。在arch/i386/mm/init.c文件中会对类似的highstart_pfn和highend_pfn变量作初始化。这些变量用于对高端内存页面的分配。后面将描述。 - - - -#5 管理区表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 -/* - * - * The zone_table array is used to look up the address of the - * struct zone corresponding to a given zone number (ZONE_DMA, - * ZONE_NORMAL, or ZONE_HIGHMEM). - */ -zone_t *zone_table[MAX_NR_ZONES*MAX_NR_NODES]; -EXPORT_SYMBOL(zone_table); -``` - - -MAX_NR_ZONES是一个节点中所能包容纳的管理区的最大数, 如3个, 定义在[include/linux/mmzone.h?v=2.4.37, line 25](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L25), 与zone区域的类型(ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM)定义在一起. 当然这时候我们这些标识都是通过宏的方式来实现的, 而不是如今的枚举类型 - -MAX_NR_NODES是可以存在的节点的最大数. - -函数EXPORT_SYMBOL使得内核的变量或者函数可以被载入的模块(比如我们的驱动模块)所访问. - -该表处理起来就像一个多维数组, 在函数free_area_init_core中, 一个节点的所有页面都会被初始化. - - - -#总结 -------- - -在linux中,内核也不是对所有物理内存都一视同仁,内核而是把页分为不同的区, 使用区来对具有相似特性的页进行分组. - -Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题: - -1. 一些硬件只能用某些特定的内存地址来执行DMA - -2. 一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多。这样,就有一些内存不能永久地映射在内核空间上。 - -为了解决这些制约条件,Linux使用了三种区: - -1. ZONE_DMA : 这个区包含的页用来执行DMA操作。 - -2. ZONE_NOMAL : 这个区包含的都是能正常映射的页。 - -3. ZONE_HIGHEM : 这个区包"高端内存",其中的页能不永久地映射到内核地址空间 - -而为了兼容一些设备的热插拔支持以及内存碎片化的处理, 内核也引入一些逻辑上的内存区. - -1. ZONE_MOVABLE : 内核定义了一个伪内存域ZONE_MOVABLE, 在防止物理内存碎片的机制memory migration中需要使用该内存域. 供防止物理内存碎片的极致使用 - -2. ZONE_DEVICE : 为支持热插拔设备而分配的Non Volatile Memory非易失性内存 - -区的实际使用与体系结构是相关的。linux把系统的内存结点划分区, 一个区包含了若干个内存页面, 形成不同的内存池,这样就可以根据用途进行分配了 - -需要说明的是,区的划分没有任何物理意义, 只不过是内核为了管理页而采取的一种逻辑上的分组. 尽管某些分配可能需要从特定的区中获得页, 但这并不是说, 某种用途的内存一定要从对应的区来获取,如果这种可供分配的资源不够用了,内核就会占用其他可用去的内存. - - -下表给出每个区及其在X86上所占的列表 - - -![每个区及其在X86上所占的列表](./images/zone_x86_32.png) - - + 服务器体系与共享存储器架构 +======= + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + + + +#1 前景回顾 +------- + + +前面我们讲到[服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)](http://blog.csdn.net/gatieme/article/details/52098615) + + +#1.1 UMA和NUMA两种模型 +------- + +共享存储型多处理机有两种模型 + +* 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 + + +* 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 + +**UMA模型** + +物理存储器被所有处理机均匀共享。所有处理机对所有存储字具有相同的存取时间,这就是为什么称它为均匀存储器存取的原因。每台处理机可以有私用高速缓存,外围设备也以一定形式共享。 + +**NUMA模型** + +NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 + + +#1.2 (N)UMA模型中linux内存的机构 +------- + + + +非一致存储器访问(NUMA)模式下 + +* 处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间. 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多 + + +* 内存被分割成多个区域(BANK,也叫"簇"),依据簇与处理器的"距离"不同, 访问不同簇的代码也会不同. 比如,可能把内存的一个簇指派给每个处理器,或则某个簇和设备卡很近,很适合DMA,那么就指派给该设备。因此当前的多数系统会把内存系统分割成2块区域,一块是专门给CPU去访问,一块是给外围设备板卡的DMA去访问 + +>在UMA系统中, 内存就相当于一个只使用一个NUMA节点来管理整个系统的内存. 而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. + + +##1.3 Linux如何描述物理内存 +------- + +Linux把物理内存划分为三个层次来管理 + +| 层次 | 描述 | +|:----:|:----:| +| 存储节点(Node) | CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 | +| 管理区(Zone) | 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存 | +| 页面(Page) | 内存被细分为多个页面帧, 页面是最基本的页面分配的单位 | + + +##1.4 用pd_data_t描述内存节点node +------- + + +>CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 +> +>系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 + +* 首先, 内存被划分为结点. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. + + +内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在[include/linux/mmzone.h, line 615](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L615) + + +在分配一个页面时, Linux采用节点局部分配的策略, 从最靠近运行中的CPU的节点分配内存, 由于进程往往是在同一个CPU上运行, 因此从当前节点得到的内存很可能被用到 + + +##1.5 今日内容(内存管理域zone) +------- + +为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 + +* 首先, 内存被划分为结点. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. + +* 接着各个节点又被划分为内存管理区域, 一个管理区域通过struct zone_struct描述, 其被定义为zone_t, 用以表示内存的某个范围, 低端范围的16MB被描述为ZONE_DMA, 某些工业标准体系结构中的(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核段的物理地址域ZONE_HIGHMEM, 被称为高端内存. 是系统中预留的可用内存空间, 不能被内核直接映射. + + +下面我们就来详解讲讲内存管理域的内容zone + + +#2 为什么要将内存node分成不同的区域zone +------- + + +NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接, 因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度要快, 而Linux为了兼容NUMAJ结构, 把物理内存相依照CPU的不同node分成簇, 一个CPU-node对应一个本地内存pgdata_t. + + + +这样已经很好的表示物理内存了, 在一个理想的计算机系统中, 一个页框就是一个内存的分配单元, 可用于任何事情:存放内核数据, 用户数据和缓冲磁盘数据等等. 任何种类的数据页都可以存放在任页框中, 没有任何限制. + + +但是Linux内核又把各个物理内存节点分成个不同的管理区域zone, 这是为什么呢? + + +因为实际的计算机体系结构有硬件的诸多限制, 这限制了页框可以使用的方式. 尤其是, Linux内核必须处理80x86体系结构的两种硬件约束. + +* ISA总线的直接内存存储DMA处理器有一个严格的限制 : 他们只能对RAM的前16MB进行寻址 + +* 在具有大容量RAM的现代32位计算机中, CPU不能直接访问所有的物理地址, 因为线性地址空间太小, 内核不可能直接映射所有物理内存到线性地址空间, 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 + + +因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域 + + + +#3 内存管理区类型zone_type +------- + +前面我们说了由于硬件的一些约束, 低端的一些地址被用于DMA, 而在实际内存大小超过了内核所能使用的现行地址的时候, 一些高地址处的物理地址不能简单持久的直接映射到内核空间. 因此内核将内存的节点node分成了不同的内存区域方便管理和映射. + +Linux使用enum zone_type来标记内核所支持的所有内存区域 + + +##3.1 内存区域类型zone_type +------- + +zone_type结构定义在[include/linux/mmzone.h](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L267), 其基本信息如下所示 + +```c +enum zone_type +{ +#ifdef CONFIG_ZONE_DMA + ZONE_DMA, +#endif + +#ifdef CONFIG_ZONE_DMA32 + + ZONE_DMA32, +#endif + + ZONE_NORMAL, + +#ifdef CONFIG_HIGHMEM + ZONE_HIGHMEM, +#endif + ZONE_MOVABLE, +#ifdef CONFIG_ZONE_DEVICE + ZONE_DEVICE, +#endif + __MAX_NR_ZONES + +}; + +``` +不同的管理区的用途是不一样的,ZONE_DMA类型的内存区域在物理内存的低端,主要是ISA设备只能用低端的地址做DMA操作。ZONE_NORMAL类型的内存区域直接被内核映射到线性地址空间上面的区域(line address space),ZONE_HIGHMEM将保留给系统使用,是系统中预留的可用内存空间,不能被内核直接映射。 + + +##3.2 不同的内存区域的作用 +------- + +在内存中,每个簇所对应的node又被分成的称为管理区(zone)的块,它们各自描述在内存中的范围。一个管理区(zone)由[struct zone](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L326)结构体来描述,在linux-2.4.37之前的内核中是用[`typedef struct zone_struct zone_t `](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L47)数据结构来描述) + +管理区的类型用zone_type表示, 有如下几种 + +| 管理内存域 | 描述 | +|:---------:|:---:| +| ZONE_DMA | 标记了适合DMA的内存域. 该区域的长度依赖于处理器类型. 这是由于古老的ISA设备强加的边界. 但是为了兼容性, 现代的计算机也可能受此影响 | +| ZONE_DMA32 | 标记了使用32位地址字可寻址, 适合DMA的内存域. 显然, 只有在53位系统中ZONE_DMA32才和ZONE_DMA有区别, 在32位系统中, 本区域是空的, 即长度为0MB, 在Alpha和AMD64系统上, 该内存的长度可能是从0到4GB | +| ZONE_NORMAL | 标记了可直接映射到内存段的普通内存域. 这是在所有体系结构上保证会存在的唯一内存区域, 但无法保证该地址范围对应了实际的物理地址. 例如, 如果AMD64系统只有两2G内存, 那么所有的内存都属于ZONE_DMA32范围, 而ZONE_NORMAL则为空 | +| ZONE_HIGHMEM | 标记了超出内核虚拟地址空间的物理内存段, 因此这段地址不能被内核直接映射 | +| ZONE_MOVABLE | 内核定义了一个伪内存域ZONE_MOVABLE, 在防止物理内存碎片的机制memory migration中需要使用该内存域. 供防止物理内存碎片的极致使用 | +| ZONE_DEVICE | 为支持热插拔设备而分配的Non Volatile Memory非易失性内存 | +| MAX_NR_ZONES | 充当结束标记, 在内核中想要迭代系统中所有内存域, 会用到该常亮 | + +根据编译时候的配置, 可能无需考虑某些内存域. 例如在64位系统中, 并不需要高端内存, 因为AM64的linux采用4级页表,支持的最大物理内存为64TB, 对于虚拟地址空间的划分,将0x0000,0000,0000,0000 – 0x0000,7fff,ffff,f000这128T地址用于用户空间;而0xffff,8000,0000,0000以上的128T为系统空间地址, 这远大于当前我们系统中的内存空间, 因此所有的物理地址都可以直接映射到内核中, 不需要高端内存的特殊映射. 可以参见[Documentation/x86/x86_64/mm.txt](https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt) + ` + + +ZONE_MOVABLE和ZONE_DEVICE其实是和其他的ZONE的用途有异, + +* ZONE_MOVABLE在防止物理内存碎片的机制中需要使用该内存区域, + +* ZONE_DEVICE笔者也第一次知道了,理解有错的话欢迎大家批评指正, 这个应该是为支持热插拔设备而分配的Non Volatile Memory非易失性内存, + + +>关于ZONE_DEVICE, 具体的信息可以参见[ATCH v2 3/9] mm: ZONE_DEVICE for "device memory"](https://lkml.org/lkml/2015/8/25/844) +> +>While pmem is usable as a block device or via DAX mappings to userspace +there are several usage scenarios that can not target pmem due to its +lack of struct page coverage. In preparation for "hot plugging" pmem +into the vmemmap add ZONE_DEVICE as a new zone to tag these pages +separately from the ones that are subject to standard page allocations. +Importantly "device memory" can be removed at will by userspace +unbinding the driver of the device. + + +##3.3 典型架构(x86)上内存区域划分 +------- + + +对于x86机器,管理区(内存区域)类型如下分布 + +| 类型 | 区域 | +| :------- | ----: | +| ZONE_DMA | 0~15MB | +| ZONE_NORMAL | 16MB~895MB | +| ZONE_HIGHMEM | 896MB~物理内存结束 | + +而由于32位系统中, Linux内核虚拟地址空间只有1G, 而0~895M这个986MB被用于DMA和直接映射, 剩余的物理内存被成为高端内存. 那内核是如何借助剩余128MB高端内存地址空间是如何实现访问可以所有物理内存? + +当内核想访问高于896MB物理地址内存时,从0xF8000000 ~ 0xFFFFFFFF地址空间范围内找一段相应大小空闲的逻辑地址空间,借用一会。借用这段逻辑地址空间,建立映射到想访问的那段物理内存(即填充内核PTE页面表),临时用一会,用完后归还。这样别人也可以借用这段地址空间访问其他物理内存,实现了使用有限的地址空间,访问所有所有物理内存 + +>关于高端内存的内容, 我们后面会专门抽出一章进行讲解 + +因此, 传统和X86_32位系统中, 前16M划分给ZONE_DMA, 该区域包含的页框可以由老式的基于ISAS的设备通过DMA使用"直接内存访问(DMA)", ZONE_DMA和ZONE_NORMAL区域包含了内存的常规页框, 通过把他们线性的映射到现行地址的第4个GB, 内核就可以直接进行访问, 相反ZONE_HIGHME包含的内存页不能由内核直接访问, 尽管他们也线性地映射到了现行地址空间的第4个GB. 在64位体系结构中, 线性地址空间的大小远远好过了系统的实际物理地址, 内核可知直接将所有的物理内存映射到线性地址空间, 因此64位体系结构上ZONE_HIGHMEM区域总是空的. + + +#4 管理区结构zone_t +------- + +>一个管理区(zone)由[`struct zone`](http://lxr.free-electrons.com/source/include/linux/mmzone.h#L326)结构体来描述(linux-3.8~目前linux4.5),而在linux-2.4.37之前的内核中是用[`struct zone_struct `](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L47)数据结构来描述), 他们都通过typedef被重定义为zone_t类型 + +zone对象用于跟踪诸如页面使用情况的统计数, 空闲区域信息和锁信息 + +>里面保存着内存使用状态信息,如page使用统计, 未使用的内存区域,互斥访问的锁(LOCKS)等. + + +##4.1 struct zone管理域数据结构 +------- + +`struct zone`在`linux/mmzone.h`中定义, 在linux-4.7的内核中可以使用[include/linux/mmzone.h](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L324)来查看其定义 + +```cpp +struct zone +{ + /* Read-mostly fields */ + + /* zone watermarks, access with *_wmark_pages(zone) macros */ + unsigned long watermark[NR_WMARK]; + + unsigned long nr_reserved_highatomic; + + /* + * We don't know if the memory that we're going to allocate will be + * freeable or/and it will be released eventually, so to avoid totally + * wasting several GB of ram we must reserve some of the lower zone + * memory (otherwise we risk to run OOM on the lower zones despite + * there being tons of freeable ram on the higher zones). This array is + * recalculated at runtime if the sysctl_lowmem_reserve_ratio sysctl + * changes. + * 分别为各种内存域指定了若干页 + * 用于一些无论如何都不能失败的关键性内存分配。 + */ + long lowmem_reserve[MAX_NR_ZONES]; + +#ifdef CONFIG_NUMA + int node; +#endif + + /* + * The target ratio of ACTIVE_ANON to INACTIVE_ANON pages on + * this zone's LRU. Maintained by the pageout code. + * 不活动页的比例, + * 接着是一些很少使用或者大部分情况下是只读的字段: + * wait_table wait_table_hash_nr_entries wait_table_bits + * 形成等待列队,可以等待某一页可供进程使用 */ + unsigned int inactive_ratio; + + /* 指向这个zone所在的pglist_data对象 */ + struct pglist_data *zone_pgdat; + /*/这个数组用于实现每个CPU的热/冷页帧列表。内核使用这些列表来保存可用于满足实现的“新鲜”页。但冷热页帧对应的高速缓存状态不同:有些页帧很可能在高速缓存中,因此可以快速访问,故称之为热的;未缓存的页帧与此相对,称之为冷的。*/ + struct per_cpu_pageset __percpu *pageset; + + /* + * This is a per-zone reserve of pages that are not available + * to userspace allocations. + * 每个区域保留的不能被用户空间分配的页面数目 + */ + unsigned long totalreserve_pages; + +#ifndef CONFIG_SPARSEMEM + /* + * Flags for a pageblock_nr_pages block. See pageblock-flags.h. + * In SPARSEMEM, this map is stored in struct mem_section + */ + unsigned long *pageblock_flags; +#endif /* CONFIG_SPARSEMEM */ + +#ifdef CONFIG_NUMA + /* + * zone reclaim becomes active if more unmapped pages exist. + */ + unsigned long min_unmapped_pages; + unsigned long min_slab_pages; +#endif /* CONFIG_NUMA */ + + /* zone_start_pfn == zone_start_paddr >> PAGE_SHIFT + * 只内存域的第一个页帧 */ + unsigned long zone_start_pfn; + + /* + * spanned_pages is the total pages spanned by the zone, including + * holes, which is calculated as: + * spanned_pages = zone_end_pfn - zone_start_pfn; + * + * present_pages is physical pages existing within the zone, which + * is calculated as: + * present_pages = spanned_pages - absent_pages(pages in holes); + * + * managed_pages is present pages managed by the buddy system, which + * is calculated as (reserved_pages includes pages allocated by the + * bootmem allocator): + * managed_pages = present_pages - reserved_pages; + * + * So present_pages may be used by memory hotplug or memory power + * management logic to figure out unmanaged pages by checking + * (present_pages - managed_pages). And managed_pages should be used + * by page allocator and vm scanner to calculate all kinds of watermarks + * and thresholds. + * + * Locking rules: + * + * zone_start_pfn and spanned_pages are protected by span_seqlock. + * It is a seqlock because it has to be read outside of zone->lock, + * and it is done in the main allocator path. But, it is written + * quite infrequently. + * + * The span_seq lock is declared along with zone->lock because it is + * frequently read in proximity to zone->lock. It's good to + * give them a chance of being in the same cacheline. + * + * Write access to present_pages at runtime should be protected by + * mem_hotplug_begin/end(). Any reader who can't tolerant drift of + * present_pages should get_online_mems() to get a stable value. + * + * Read access to managed_pages should be safe because it's unsigned + * long. Write access to zone->managed_pages and totalram_pages are + * protected by managed_page_count_lock at runtime. Idealy only + * adjust_managed_page_count() should be used instead of directly + * touching zone->managed_pages and totalram_pages. + */ + unsigned long managed_pages; + unsigned long spanned_pages; /* 总页数,包含空洞 */ + unsigned long present_pages; /* 可用页数,不包哈空洞 */ + + /* 指向管理区的传统名字, "DMA", "NROMAL"或"HIGHMEM" */ + const char *name; + +#ifdef CONFIG_MEMORY_ISOLATION + /* + * Number of isolated pageblock. It is used to solve incorrect + * freepage counting problem due to racy retrieving migratetype + * of pageblock. Protected by zone->lock. + */ + unsigned long nr_isolate_pageblock; +#endif + +#ifdef CONFIG_MEMORY_HOTPLUG + /* see spanned/present_pages for more description */ + seqlock_t span_seqlock; +#endif + + /* + * wait_table -- the array holding the hash table + * wait_table_hash_nr_entries -- the size of the hash table array + * wait_table_bits -- wait_table_size == (1 << wait_table_bits) + * + * The purpose of all these is to keep track of the people + * waiting for a page to become available and make them + * runnable again when possible. The trouble is that this + * consumes a lot of space, especially when so few things + * wait on pages at a given time. So instead of using + * per-page waitqueues, we use a waitqueue hash table. + * + * The bucket discipline is to sleep on the same queue when + * colliding and wake all in that wait queue when removing. + * When something wakes, it must check to be sure its page is + * truly available, a la thundering herd. The cost of a + * collision is great, but given the expected load of the + * table, they should be so rare as to be outweighed by the + * benefits from the saved space. + * + * __wait_on_page_locked() and unlock_page() in mm/filemap.c, are the + * primary users of these fields, and in mm/page_alloc.c + * free_area_init_core() performs the initialization of them. + */ + /* 进程等待队列的散列表, 这些进程正在等待管理区中的某页 */ + wait_queue_head_t *wait_table; + /* 等待队列散列表中的调度实体数目 */ + unsigned long wait_table_hash_nr_entries; + /* 等待队列散列表数组大小, 值为2^order */ + unsigned long wait_table_bits; + + ZONE_PADDING(_pad1_) + + /* free areas of different sizes + 页面使用状态的信息,以每个bit标识对应的page是否可以分配 + 是用于伙伴系统的,每个数组元素指向对应阶也表的数组开头 + 以下是供页帧回收扫描器(page reclaim scanner)访问的字段 + scanner会跟据页帧的活动情况对内存域中使用的页进行编目 + 如果页帧被频繁访问,则是活动的,相反则是不活动的, + 在需要换出页帧时,这样的信息是很重要的: */ + struct free_area free_area[MAX_ORDER]; + + /* zone flags, see below 描述当前内存的状态, 参见下面的enum zone_flags结构 */ + unsigned long flags; + + /* Write-intensive fields used from the page allocator, 保存该描述符的自旋锁 */ + spinlock_t lock; + + ZONE_PADDING(_pad2_) + + /* Write-intensive fields used by page reclaim */ + + /* Fields commonly accessed by the page reclaim scanner */ + spinlock_t lru_lock; /* LRU(最近最少使用算法)活动以及非活动链表使用的自旋锁 */ + struct lruvec lruvec; + + /* + * When free pages are below this point, additional steps are taken + * when reading the number of free pages to avoid per-cpu counter + * drift allowing watermarks to be breached + * 在空闲页的数目少于这个点percpu_drift_mark的时候 + * 当读取和空闲页数一样的内存页时,系统会采取额外的工作, + * 防止单CPU页数漂移,从而导致水印被破坏。 + */ + unsigned long percpu_drift_mark; + +#if defined CONFIG_COMPACTION || defined CONFIG_CMA + /* pfn where compaction free scanner should start */ + unsigned long compact_cached_free_pfn; + /* pfn where async and sync compaction migration scanner should start */ + unsigned long compact_cached_migrate_pfn[2]; +#endif + +#ifdef CONFIG_COMPACTION + /* + * On compaction failure, 1<lock,zone->lru_lock,zone->pageset这些成员使用不同的cache line. | + + + +##4.2 ZONE_PADDING将数据保存在高速缓冲行 +------- + +该结构比较特殊的地方是它由ZONE_PADDING分隔的几个部分. 这是因为堆zone结构的访问非常频繁. 在多处理器系统中, 通常会有不同的CPU试图同时访问结构成员. 因此使用锁可以防止他们彼此干扰, 避免错误和不一致的问题. 由于内核堆该结构的访问非常频繁, 因此会经常性地获取该结构的两个自旋锁zone->lock和zone->lru_lock + + + +那么数据保存在CPU高速缓存中, 那么会处理得更快速. 高速缓冲分为行, 每一行负责不同的内存区. 内核使用ZONE_PADDING宏生成"填充"字段添加到结构中, 以确保每个自旋锁处于自身的缓存行中 + +ZONE_PADDING宏定义在[nclude/linux/mmzone.h?v4.7, line 105](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L105) + +```cpp +/* + * zone->lock and zone->lru_lock are two of the hottest locks in the kernel. + * So add a wild amount of padding here to ensure that they fall into separate + * cachelines. There are very few zone structures in the machine, so space + * consumption is not a concern here. + */ +#if defined(CONFIG_SMP) + struct zone_padding + { + char x[0]; + } ____cacheline_internodealigned_in_smp; + #define ZONE_PADDING(name) struct zone_padding name; + +#else + #define ZONE_PADDING(name) + #endif +``` + + +内核还用了____cacheline_internodealigned_in_smp,来实现最优的高速缓存行对其方式. + +该宏定义在[include/linux/cache.h](http://lxr.free-electrons.com/source/include/linux/cache.h?v=4.7#L68) + +```cpp +#if !defined(____cacheline_internodealigned_in_smp) + #if defined(CONFIG_SMP) + #define ____cacheline_internodealigned_in_smp \ + __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) + #else + #define ____cacheline_internodealigned_in_smp + #endif +#endif +``` + +##4.3 水印watermark[NR_WMARK]与kswapd内核线程 +------- + +Zone的管理调度的一些参数watermarks水印, 水存量很小(MIN)进水量,水存量达到一个标准(LOW)减小进水量,当快要满(HIGH)的时候,可能就关闭了进水口 + +WMARK_LOW, WMARK_LOW, WMARK_HIGH就是这个标准 + + +```cpp +enum zone_watermarks +{ + WMARK_MIN, + WMARK_LOW, + WMARK_HIGH, + NR_WMARK +}; + + +#define min_wmark_pages(z) (z->watermark[WMARK_MIN]) +#define low_wmark_pages(z) (z->watermark[WMARK_LOW]) +#define high_wmark_pages(z) (z->watermark[WMARK_HIGH]) +``` + +在linux-2.4中, zone结构中使用如下方式表示水印, 参照[include/linux/mmzone.h?v=2.4.37, line 171](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L171) + +``` c +typedef struct zone_watermarks_s +{ + unsigned long min, low, high; +} zone_watermarks_t; + + +typedef struct zone_struct { + zone_watermarks_t watermarks[MAX_NR_ZONES]; +``` + + +在Linux-2.6.x中标准是直接通过成员pages_min, pages_low and pages_high定义在zone结构体中的, 参照[include/linux/mmzone.h?v=2.6.24, line 214](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.6.24#L214) + + +当系统中可用内存很少的时候,系统进程kswapd被唤醒, 开始回收释放page, 水印这些参数(WMARK_MIN, WMARK_LOW, WMARK_HIGH)影响着这个代码的行为 + +每个zone有三个水平标准:watermark[WMARK_MIN], watermark[WMARK_LOW], watermark[WMARK_HIGH],帮助确定zone中内存分配使用的压力状态 + +| 标准 | 描述 | +|:----:|:---:| +| watermark[WMARK_MIN] | 当空闲页面的数量达到page_min所标定的数量的时候, 说明页面数非常紧张, 分配页面的动作和kswapd线程同步运行.
WMARK_MIN所表示的page的数量值,是在内存初始化的过程中调用[free_area_init_core](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5932)中计算的。这个数值是根据zone中的page的数量除以一个>1的系数来确定的。通常是这样初始化的ZoneSizeInPages/12 | +| watermark[WMARK_LOW] | 当空闲页面的数量达到WMARK_LOW所标定的数量的时候,说明页面刚开始紧张, 则kswapd线程将被唤醒,并开始释放回收页面 | +| watermark[WMARK_HIGH] | 当空闲页面的数量达到page_high所标定的数量的时候, 说明内存页面数充足, 不需要回收, kswapd线程将重新休眠,通常这个数值是page_min的3倍 | + +* 如果空闲页多于pages_high = watermark[WMARK_HIGH], 则说明内存页面充足, 内存域的状态是理想的. + +* 如果空闲页的数目低于pages_low = watermark[WMARK_LOW], 则说明内存页面开始紧张, 内核开始将页患处到硬盘. + +* 如果空闲页的数目低于pages_min = watermark[WMARK_MIN], 则内存页面非常紧张, 页回收工作的压力就比较大 + + +##4.3 内存域标志 +------- + +[内存管理域zone_t结构中的flags字段](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L475)描述了内存域的当前状态 + + +```cpp +// http://lxr.free-electrons.com/source/include/linux/mmzone.h#L475 +struct zone +{ + /* zone flags, see below */ + unsigned long flags; +} +``` + +它允许使用的标识用[`enum zone_flags`](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L525)标识, 该枚举标识定义在[include/linux/mmzone.h?v4.7, line 525](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L525), 如下所示 + +```cpp +enum zone_flags +{ + ZONE_RECLAIM_LOCKED, /* prevents concurrent reclaim */ + ZONE_OOM_LOCKED, /* zone is in OOM killer zonelist 内存域可被回收*/ + ZONE_CONGESTED, /* zone has many dirty pages backed by + * a congested BDI + */ + ZONE_DIRTY, /* reclaim scanning has recently found + * many dirty file pages at the tail + * of the LRU. + */ + ZONE_WRITEBACK, /* reclaim scanning has recently found + * many pages under writeback + */ + ZONE_FAIR_DEPLETED, /* fair zone policy batch depleted */ +}; +``` + + +| flag标识 | 描述 | +|:-------:|:-------:| +| ZONE_RECLAIM_LOCKED | 防止并发回收, 在SMP上系统, 多个CPU可能试图并发的回收亿i个内存域. ZONE_RECLAIM_LCOKED标志可防止这种情况: 如果一个CPU在回收某个内存域, 则设置该标识. 这防止了其他CPU的尝试 | +| ZONE_OOM_LOCKED | 用于某种不走运的情况: 如果进程消耗了大量的内存, 致使必要的操作都无法完成, 那么内核会使徒杀死消耗内存最多的进程, 以获取更多的空闲页, 该标志可以放置多个CPU同时进行这种操作 | +| ZONE_CONGESTED | 标识当前区域中有很多脏页 | +| ZONE_DIRTY | 用于标识最近的一次页面扫描中, LRU算法发现了很多脏的页面 | +| ZONE_WRITEBACK | 最近的回收扫描发现有很多页在写回 | +| ZONE_FAIR_DEPLETED | 公平区策略耗尽(没懂) | + + +##4.4 内存域统计信息vm_stat +------- + + +内存域struct zone的vm_stat维护了大量有关该内存域的统计信息. 由于其中维护的大部分信息曲面没有多大意义 + +```cpp +// http://lxr.free-electrons.com/source/include/linux/mmzone.h#L522 +struct zone +{ + atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; +} +``` + +vm_stat的统计信息由`enum zone_stat_item`枚举变量标识, 定义在[include/linux/mmzone.h?v=4.7, line 110](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L110) + +```cpp +enum zone_stat_item +{ + /* First 128 byte cacheline (assuming 64 bit words) */ + NR_FREE_PAGES, + NR_ALLOC_BATCH, + NR_LRU_BASE, + NR_INACTIVE_ANON = NR_LRU_BASE, /* must match order of LRU_[IN]ACTIVE */ + NR_ACTIVE_ANON, /* " " " " " */ + NR_INACTIVE_FILE, /* " " " " " */ + NR_ACTIVE_FILE, /* " " " " " */ + NR_UNEVICTABLE, /* " " " " " */ + NR_MLOCK, /* mlock()ed pages found and moved off LRU */ + NR_ANON_PAGES, /* Mapped anonymous pages */ + NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. + only modified from process context */ + NR_FILE_PAGES, + NR_FILE_DIRTY, + NR_WRITEBACK, + NR_SLAB_RECLAIMABLE, + NR_SLAB_UNRECLAIMABLE, + NR_PAGETABLE, /* used for pagetables */ + NR_KERNEL_STACK, + /* Second 128 byte cacheline */ + NR_UNSTABLE_NFS, /* NFS unstable pages */ + NR_BOUNCE, + NR_VMSCAN_WRITE, + NR_VMSCAN_IMMEDIATE, /* Prioritise for reclaim when writeback ends */ + NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ + NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */ + NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */ + NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */ + NR_DIRTIED, /* page dirtyings since bootup */ + NR_WRITTEN, /* page writings since bootup */ + NR_PAGES_SCANNED, /* pages scanned since last reclaim */ +#ifdef CONFIG_NUMA + NUMA_HIT, /* allocated in intended node */ + NUMA_MISS, /* allocated in non intended node */ + NUMA_FOREIGN, /* was intended here, hit elsewhere */ + NUMA_INTERLEAVE_HIT, /* interleaver preferred this zone */ + NUMA_LOCAL, /* allocation from local node */ + NUMA_OTHER, /* allocation from other node */ +#endif + WORKINGSET_REFAULT, + WORKINGSET_ACTIVATE, + WORKINGSET_NODERECLAIM, + NR_ANON_TRANSPARENT_HUGEPAGES, + NR_FREE_CMA_PAGES, + NR_VM_ZONE_STAT_ITEMS +}; +``` + +内核提供了很多方式来获取当前内存域的状态信息, 这些函数大多定义在[include/linux/vmstat.h?v=4.7](http://lxr.free-electrons.com/source/include/linux/vmstat.h?v=4.7) + + + +##4.5 Zone等待队列表(zone wait queue table) +------- + + +struct zone中实现了一个等待队列, 可用于等待某一页的进程, 内核将进程排成一个列队, 等待某些条件. 在条件变成真时, 内核会通知进程恢复工作. + +```c +struct zone +{ + wait_queue_head_t *wait_table; + unsigned long wait_table_hash_nr_entries; + unsigned long wait_table_bits; +} +``` + +| 字段 | 描述 | +|:-----:|:-----:| +| wait_table | 待一个page释放的等待队列哈希表。它会被wait_on_page(),unlock_page()函数使用. 用哈希表,而不用一个等待队列的原因,防止进程长期等待资源 | +| wait_table_hash_nr_entries | 哈希表中的等待队列的数量 | +| wait_table_bits | 等待队列散列表数组大小, wait_table_size == (1 << wait_table_bits) | + + + + +当对一个page做I/O操作的时候,I/O操作需要被锁住,防止不正确的数据被访问。进程在访问page前,wait_on_page_locked函数,使进程加入一个等待队列 + +访问完成后,UnlockPage函数解锁其他进程对page的访问。其他正在等待队列中的进程被唤醒。每个page都可以有一个等待队列,但是太多的分离的等待队列使得花费太多的内存访问周期。替代的解决方法,就是将所有的队列放在struct zone数据结构中 + + +也可以有一种可能,就是struct zone中只有一个队列,但是这就意味着,当一个page unlock的时候,访问这个zone里内存page的所有休眠的进程将都被唤醒,这样就会出现拥堵(thundering herd)的问题。建立一个哈希表管理多个等待队列,能解决这个问题,zone->wait_table就是这个哈希表。哈希表的方法可能还是会造成一些进程不必要的唤醒。但是这种事情发生的机率不是很频繁的。下面这个图就是进程及等待队列的运行关系: + + +等待队列的哈希表的分配和建立在free_area_init_core()函数中进行。哈希表的表项的数量在wait_table_size() 函数中计算,并且保持在zone->wait_table_size成员中。最大4096个等待队列。最小是NoPages / PAGES_PER_WAITQUEUE的2次方,NoPages是zone管理的page的数量,PAGES_PER_WAITQUEUE被定义256。(原文:For smaller tables, the size of the table is the minimum power of 2 required to store NoPages / PAGES PER WAITQUEUE number of queues, where NoPages is the number of pages in the zone and PAGE PER WAITQUEUE is defined to be 256.) +下面这个公式可以用于计算这个值: + +zone->wait_table_bits用于计算:根据page 地址得到需要使用的等待队列在哈希表中的索引的算法因子。page_waitqueue()函数负责返回zone中page所对应等待队列。它用一个基于struct page虚拟地址的简单的乘法哈希算法来确定等待队列的。 +page_waitqueue()函数用GOLDEN_RATIO_PRIME的地址和“右移zone→wait_table_bits一个索引值”的一个乘积来确定等待队列在哈希表中的索引的。 +Zone的初始化 +在kernel page table通过paging_init()函数完全建立起z来以后,zone被初始化。下面章节将描述这个。当然不同的体系结构这个过程肯定也是不一样的,但它们的目的却是相同的:确定什么参数需要传递给free_area_init()函数(对于UMA体系结构)或者free_area_init_node()函数(对于NUMA体系结构)。这里省略掉NUMA体系结构的说明。 +free_area_init()函数的参数: +unsigned long *zones_sizes: 系统中每个zone所管理的page的数量的数组。这个时候,还没能确定zone中那些page是可以分配使用的(free)。这个信息知道boot memory allocator完成之前还无法知道。 +来源: http://www.uml.org.cn/embeded/201208071.asp + + +##4.6 冷热页与Per-CPU上的页面高速缓存 +------- + + +内核经常请求和释放单个页框. 为了提升性能, 每个内存管理区都定义了一个每CPU(Per-CPU)的页面高速缓存. 所有"每CPU高速缓存"包含一些预先分配的页框, 他们被定义满足本地CPU发出的单一内存请求. + +`struct zone`的pageset成员用于实现冷热分配器(hot-n-cold allocator) + +```cpp +struct zone +{ + struct per_cpu_pageset __percpu *pageset; +}; +``` +内核说页面是热的, 意味着页面已经加载到CPU的高速缓存, 与在内存中的页相比, 其数据访问速度更快. 相反, 冷页则不再高速缓存中. 在多处理器系统上每个CPU都有一个或者多个告诉缓存. 各个CPU的管理必须是独立的. + +>尽管内存域可能属于一个特定的NUMA结点, 因而关联到某个特定的CPU。 但其他CPU的告诉缓存仍然可以包含该内存域中的页面. 最终的效果是, 每个处理器都可以访问系统中的所有页, 尽管速度不同. 因而, 特定于内存域的数据结构不仅要考虑到所属NUMA结点相关的CPU, 还必须照顾到系统中其他的CPU. + + +pageset是一个指针, 其容量与系统能够容纳的CPU的数目的最大值相同. + + +数组元素类型为per_cpu_pageset, 定义在[include/linux/mmzone.h?v4.7, line 254](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L254), 如下所示 + +```cpp +struct per_cpu_pageset { + struct per_cpu_pages pcp; +#ifdef CONFIG_NUMA + s8 expire; +#endif +#ifdef CONFIG_SMP + s8 stat_threshold; + s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS]; +#endif +}; +``` + +该结构由一个per_cpu_pages pcp变量组成, 该数据结构定义如下, 位于[include/linux/mmzone.h?v4.7, line 245](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v4.7#L245) + + + +```cpp +struct per_cpu_pages { + int count; /* number of pages in the list 列表中的页数 */ + int high; /* high watermark, emptying needed 页数上限水印, 在需要的情况清空列表 */ + int batch; /* chunk size for buddy add/remove, 添加/删除多页块的时候, 块的大小 */ + + /* Lists of pages, one per migrate type stored on the pcp-lists 页的链表*/ + struct list_head lists[MIGRATE_PCPTYPES]; +}; +``` + +| 字段 | 描述 | +|:---:|:----:| +| count | 记录了与该列表相关的页的数目 | +| high | 是一个水印. 如果count的值超过了high, 则表明列表中的页太多了 | +| batch | 如果可能, CPU的高速缓存不是用单个页来填充的, 而是欧诺个多个页组成的块, batch作为每次添加/删除页时多个页组成的块大小的一个参考值 | +| list | 一个双链表, 保存了当前CPU的冷页或热页, 可使用内核的标准方法处理 | + + +在内核中只有一个子系统会积极的尝试为任何对象维护per-cpu上的list链表, 这个子系统就是slab分配器. + +* struct per_cpu_pageset具有一个字段, 该字段 + +* struct per_cpu_pages则维护了链表中目前已有的一系列页面, 高极值和低极值决定了何时填充该集合或者释放一批页面, 变量决定了一个块中应该分配多少个页面, 并最后决定在页面前的实际链表中分配多少各页面 + + + + +#4.7 内存域的第一个页帧zone_start_pfn +------- + +struct zone中通过zone_start_pfn成员标记了内存管理区的页面地址. + + +然后内核也通过一些全局变量标记了物理内存所在页面的偏移, 这些变量定义在[mm/nobootmem.c?v4.7, line 31](http://lxr.free-electrons.com/source/mm/nobootmem.c?v4.7#L31) + +```cpp +unsigned long max_low_pfn; +unsigned long min_low_pfn; +unsigned long max_pfn; +unsigned long long max_possible_pfn; +``` + +PFN是物理内存以Page为单位的偏移量 + +| 变量 | 描述 | +|:----:|:---:| +| max_low_pfn | x86中,max_low_pfn变量是由find_max_low_pfn函数计算并且初始化的,它被初始化成ZONE_NORMAL的最后一个page的位置。这个位置是kernel直接访问的物理内存, 也是关系到kernel/userspace通过“PAGE_OFFSET宏”把线性地址内存空间分开的内存地址位置 | +| min_low_pfn | 系统可用的第一个pfn是[min_low_pfn变量](http://lxr.free-electrons.com/source/include/linux/bootmem.h?v4.7#L16), 开始与_end标号的后面, 也就是kernel结束的地方.在文件mm/bootmem.c中对这个变量作初始化 +| max_pfn | 系统可用的最后一个PFN是[max_pfn变量](http://lxr.free-electrons.com/source/include/linux/bootmem.h?v4.7#L21), 这个变量的初始化完全依赖与硬件的体系结构. | +| max_possible_pfn | + + + + + + +x86的系统中, find_max_pfn函数通过读取e820表获得最高的page frame的数值, 同样在文件mm/bootmem.c中对这个变量作初始化。e820表是由BIOS创建的 + +>This is the physical memory directly accessible by the kernel and is related to the kernel/userspace split in the linear address space marked by PAGE OFFSET. + +我理解为这段地址kernel可以直接访问,可以通过PAGE_OFFSET宏直接将kernel所用的虚拟地址转换成物理地址的区段。在文件mm/bootmem.c中对这个变量作初始化。在内存比较小的系统中max_pfn和max_low_pfn的值相同 +min_low_pfn, max_pfn和max_low_pfn这3个值,也要用于对高端内存(high memory)的起止位置的计算。在arch/i386/mm/init.c文件中会对类似的highstart_pfn和highend_pfn变量作初始化。这些变量用于对高端内存页面的分配。后面将描述。 + + + +#5 管理区表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 +/* + * + * The zone_table array is used to look up the address of the + * struct zone corresponding to a given zone number (ZONE_DMA, + * ZONE_NORMAL, or ZONE_HIGHMEM). + */ +zone_t *zone_table[MAX_NR_ZONES*MAX_NR_NODES]; +EXPORT_SYMBOL(zone_table); +``` + + +MAX_NR_ZONES是一个节点中所能包容纳的管理区的最大数, 如3个, 定义在[include/linux/mmzone.h?v=2.4.37, line 25](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=2.4.37#L25), 与zone区域的类型(ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM)定义在一起. 当然这时候我们这些标识都是通过宏的方式来实现的, 而不是如今的枚举类型 + +MAX_NR_NODES是可以存在的节点的最大数. + +函数EXPORT_SYMBOL使得内核的变量或者函数可以被载入的模块(比如我们的驱动模块)所访问. + +该表处理起来就像一个多维数组, 在函数free_area_init_core中, 一个节点的所有页面都会被初始化. + + + + +#6 zonelist内存域存储层次 +------- + + + +##6.1 内存域之间的层级结构 +------- + + +当前结点与系统中其他结点的内存域之前存在一种等级次序 + + +我们考虑一个例子, 其中内核想要分配高端内存. + +1. 它首先企图在当前结点的高端内存域找到一个大小适当的空闲段. 如果失败, 则查看该结点的普通内存域. 如果还失败, 则试图在该结点的DMA内存域执行分配. + +2. 如果在3个本地内存域都无法找到空闲内存, 则查看其他结点. 在这种情况下, 备 +选结点应该尽可能靠近主结点, 以最小化由于访问非本地内存引起的性能损失. + +内核定义了内存的一个层次结构, 首先试图分配"廉价的"内存. 如果失败, 则根据访问速度和容量, 逐渐尝试分配"更昂贵的"内存. + + +**高端内存是最廉价的**, 因为内核没有任何部份依赖于从该内存域分配的内存. 如果高端内存域用尽, 对内核没有任何副作用, 这也是优先分配高端内存的原因. + +**其次是普通内存域**, 这种情况有所不同. 许多内核数据结构必须保存在该内存域, 而不能放置到高端内存域. + +因此如果普通内存完全用尽, 那么内核会面临紧急情况. 所以只要高端内存域的内存没有用尽, 都不会从普通内存域分配内存. + +**最昂贵的是DMA内存域**, 因为它用于外设和系统之间的数据传输. 因此从该内存域分配内存是最后一招. + + + +##6.2 zonelist结构 +------- + + +内核还针对当前内存结点的备选结点, 定义了一个等级次序. 这有助于在当前结点所有内存域的内存都用尽时, 确定一个备选结点 + +内核使用[pg_data_t](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L627)中的[zonelist数组](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L629), 来表示所描述的层次结构. + +```cpp +typedef struct pglist_data { + struct zonelist node_zonelists[MAX_ZONELISTS]; + /* ...... */ +}pg_data_t; +``` + +>关于该结构zonelist的所有相关信息定义[include/linux/mmzone.h?v=4.7, line 568](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L568), 我们下面慢慢来讲. + +node_zonelists数组对每种可能的内存域类型, 都配置了一个独立的数组项. + +该数组项的大小MAX_ZONELISTS用一个匿名的枚举常量定义, 定义在[include/linux/mmzone.h?v=4.7, line 571](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L571) + +```cpp +enum +{ + ZONELIST_FALLBACK, /* zonelist with fallback */ +#ifdef CONFIG_NUMA + /* + * The NUMA zonelists are doubled because we need zonelists that + * restrict the allocations to a single node for __GFP_THISNODE. + */ + ZONELIST_NOFALLBACK, /* zonelist without fallback (__GFP_THISNODE) */ +#endif + MAX_ZONELISTS +}; +``` + + +我们会发现在UMA结构下, 数组大小MAX_ZONELISTS = 1, 因为只有一个内存结点, zonelist中只会存储一个`ZONELIST_FALLBACK`类型的结构, 但是NUMA下需要多余的`ZONELIST_NOFALLBACK`用以表示当前结点的信息 + +pg_data_t->node_zonelists数组项用struct zonelis结构体定义, 该结构包含了类型为`struct zoneref`的一个备用列表由于该备用列表必须包括所有结点的所有内存域,因此由MAX_NUMNODES * MAX_NZ_ZONES项组成,外加一个用于标记列表结束的空指针 + +struct zonelist结构的定义在[include/linux/mmzone.h?v=4.7, line 606](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L606) + + +```cpp +/* + * One allocation request operates on a zonelist. A zonelist + * is a list of zones, the first one is the 'goal' of the + * allocation, the other zones are fallback zones, in decreasing + * priority. + * + * To speed the reading of the zonelist, the zonerefs contain the zone index + * of the entry being read. Helper functions to access information given + * a struct zoneref are + * + * zonelist_zone() - Return the struct zone * for an entry in _zonerefs + * zonelist_zone_idx() - Return the index of the zone for an entry + * zonelist_node_idx() - Return the index of the node for an entry + */ +struct zonelist { + struct zoneref _zonerefs[MAX_ZONES_PER_ZONELIST + 1]; +}; +``` + +而struct zoneref结构的定义如下[include/linux/mmzone.h?v=4.7, line 583](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L583) + +/* + * This struct contains information about a zone in a zonelist. It is stored + * here to avoid dereferences into large structures and lookups of tables + */ +struct zoneref { + struct zone *zone; /* Pointer to actual zone */ + int zone_idx; /* zone_idx(zoneref->zone) */ +}; + + +##6.3 内存域的排列方式 +------- + + +那么我们内核是如何组织在zonelist中组织内存域的呢? + +NUMA系统中存在多个节点, 每个节点对应一个`struct pglist_data`结构, 每个结点中可以包含多个zone, 如: ZONE_DMA, ZONE_NORMAL, 这样就产生几种排列顺序, 以2个节点2个zone为例(zone从高到低排列, ZONE_DMA0表示节点0的ZONE_DMA,其它类似). + +* Legacy方式, 每个节点只排列自己的zone; + +![Legacy方式](../images/legacy-order.jpg) + +* Node方式, 按节点顺序依次排列,先排列本地节点的所有zone,再排列其它节点的所有zone。 + + +![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 +#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 | + + +内核就通过通过set_zonelist_order函数设置当前系统的内存域排列方式current_zonelist_order, 其定义依据系统的NUMA结构还是UMA结构有很大的不同. 该函数定义在[mm/page_alloc.c?v=4.7, line 4571](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4571) + + +##6.4 build_all_zonelists初始化内存节点 +------- + +内核通过build_all_zonelists初始化了内存结点的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) + +* 建立备用层次结构的任务委托给build_zonelists, 该函数为每个NUMA结点都创建了相应的数据结构. 它需要指向相关的pg_data_t实例的指针作为参数 + + + + + +#7 总结 +------- + + +在linux中,内核也不是对所有物理内存都一视同仁,内核而是把页分为不同的区, 使用区来对具有相似特性的页进行分组. + +Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题: + +1. 一些硬件只能用某些特定的内存地址来执行DMA + +2. 一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多。这样,就有一些内存不能永久地映射在内核空间上。 + +为了解决这些制约条件,Linux使用了三种区: + +1. ZONE_DMA : 这个区包含的页用来执行DMA操作。 + +2. ZONE_NOMAL : 这个区包含的都是能正常映射的页。 + +3. ZONE_HIGHEM : 这个区包"高端内存",其中的页能不永久地映射到内核地址空间 + +而为了兼容一些设备的热插拔支持以及内存碎片化的处理, 内核也引入一些逻辑上的内存区. + +1. ZONE_MOVABLE : 内核定义了一个伪内存域ZONE_MOVABLE, 在防止物理内存碎片的机制memory migration中需要使用该内存域. 供防止物理内存碎片的极致使用 + +2. ZONE_DEVICE : 为支持热插拔设备而分配的Non Volatile Memory非易失性内存 + +区的实际使用与体系结构是相关的。linux把系统的内存结点划分区, 一个区包含了若干个内存页面, 形成不同的内存池,这样就可以根据用途进行分配了 + +需要说明的是,区的划分没有任何物理意义, 只不过是内核为了管理页而采取的一种逻辑上的分组. 尽管某些分配可能需要从特定的区中获得页, 但这并不是说, 某种用途的内存一定要从对应的区来获取,如果这种可供分配的资源不够用了,内核就会占用其他可用去的内存. + + +下表给出每个区及其在X86上所占的列表 + + +![每个区及其在X86上所占的列表](./images/zone_x86_32.png) + diff --git a/study/kernel/02-memory/03-initialize/04-init_buddy/README.md b/study/kernel/02-memory/03-initialize/04-init_buddy/README.md index 0b83267..71ba230 100644 --- a/study/kernel/02-memory/03-initialize/04-init_buddy/README.md +++ b/study/kernel/02-memory/03-initialize/04-init_buddy/README.md @@ -1,1437 +1,1556 @@ -初始化内存管理 -======= - - - -| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | -| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| -| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | - - -在内存管理的上下文中, 初始化(initialization)可以有多种含义. 在许多CPU上, 必须显式设置适用于Linux内核的内存模型. 例如在x86_32上需要切换到保护模式, 然后奇偶内核才能检测到可用内存和寄存器. - - - -#1 前景回顾 -------- - - -##1.1 Linux内存管理的层次结构 -------- - - -Linux把物理内存划分为三个层次来管理 - -| 层次 | 描述 | -|:----:|:----:| -| 存储节点(Node) | CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 | -| 管理区(Zone) | 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存 | -| 页面(Page) | 内存被细分为多个页面帧, 页面是最基本的页面分配的单位 | - -为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 - - -* 首先, 内存被划分为**结点**. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. - -* 接着各个节点又被划分为内存管理区域, 一个**管理区域**通过struct zone_struct描述, 其被定义为zone_t, 用以表示内存的某个范围, 低端范围的16MB被描述为ZONE_DMA, 某些工业标准体系结构中的(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核段的物理地址域ZONE_HIGHMEM, 被称为高端内存. 是系统中预留的可用内存空间, 不能被内核直接映射. - - -* 最后**页帧(page frame)**代表了系统内存的最小单位, 堆内存中的每个页都会创建一个struct page的一个实例. 传统上,把内存视为连续的字节,即内存为字节数组,内存单元的编号(地址)可作为字节数组的索引. 分页管理时,将若干字节视为一页,比如4K byte. 此时,内存变成了连续的页,即内存为页数组,每一页物理内存叫页帧,以页为单位对内存进行编号,该编号可作为页数组的索引,又称为页帧号. - - -##1.2 今日内容(启动过程中的内存初始化) -------- - - -在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务. 因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化悉尼股市的内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. - - -因此我们可以把linux内核的内存管理分三个阶段。 - -| 阶段 | 起点 | 终点 | 描述 | -|:-----:|:-----:|:-----:| -| 第一阶段 | 系统启动 | bootmem或者memblock初始化完成 | 此阶段只能使用memblock_reserve函数分配内存, 早期内核中使用init_bootmem_done = 1标识此阶段结束 | -| 第二阶段 | bootmem或者memblock初始化完 | buddy完成前 | 引导内存分配器bootmem或者memblock接受内存的管理工作, 早期内核中使用mem_init_done = 1标记此阶段的结束 | -| 第三阶段 | buddy初始化完成 | 系统停止运行 | 可以用cache和buddy分配内存 | - - - -##1.3 start_kernel系统启动阶段的内存初始化过程 -------- - -首先我们来看看start_kernel是如何初始化系统的, start_kerne定义在[init/main.c?v=4.7, line 479](http://lxr.free-electrons.com/source/init/main.c?v=4.7#L479) - -其代码很复杂, 我们只截取出其中与内存管理初始化相关的部分, 如下所示 - - -```cpp -asmlinkage __visible void __init start_kernel(void) -{ - - setup_arch(&command_line); - mm_init_cpumask(&init_mm); - - setup_per_cpu_areas(); - - - build_all_zonelists(NULL, NULL); - page_alloc_init(); - - - /* - * These use large bootmem allocations and must precede - * mem_init(); - * kmem_cache_init(); - */ - mm_init(); - - kmem_cache_init_late(); - - kmemleak_init(); - setup_per_cpu_pageset(); - - rest_init(); -} -``` - - -| 函数 | 功能 | -|:----:|:----:| -| [setup_arch](http://lxr.free-electrons.com/ident?v=4.7;i=setup_arch) | 是一个特定于体系结构的设置函数, 其中一项任务是负责初始化自举分配器 | -| [mm_init_cpumask](http://lxr.free-electrons.com/source/include/linux/mm_types.h?v=4.7#L522) | 初始化CPU屏蔽字 | -| [setup_per_cpu_areas](http://lxr.free-electrons.com/ident?v=4.7;i=setup_per_cpu_areas) | 函数[(查看定义)](http://lxr.free-electrons.com/source/mm/percpu.c?v4.7#L2205])给每个CPU分配内存,并拷贝.data.percpu段的数据. 为系统中的每个CPU的per_cpu变量申请空间.
在SMP系统中, setup_per_cpu_areas初始化源代码中(使用[per_cpu宏](http://lxr.free-electrons.com/source/include/linux/percpu-defs.h#L256))定义的静态per-cpu变量, 这种变量对系统中每个CPU都有一个独立的副本.
此类变量保存在内核二进制影像的一个独立的段中, setup_per_cpu_areas的目的就是为系统中各个CPU分别创建一份这些数据的副本
在非SMP系统中这是一个空操作 | -| [build_all_zonelists](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029) | 建立并初始化结点和内存域的数据结构 | -| [mm_init](http://lxr.free-electrons.com/source/init/main.c?v4.7#L464) | 建立了内核的内存分配器,
其中通过[mem_init](http://lxr.free-electrons.com/ident?v=4.7&i=mem_init)停用bootmem分配器并迁移到实际的内存管理器(比如伙伴系统)
然后调用kmem_cache_init函数初始化内核内部用于小块内存区的分配器 | -| [kmem_cache_init_late](http://lxr.free-electrons.com/source/mm/slab.c?v4.7#L1378) | 在kmem_cache_init之后, 完善分配器的缓存机制, 当前3个可用的内核内存分配器[slab](http://lxr.free-electrons.com/source/mm/slab.c?v4.7#L1378), [slob](http://lxr.free-electrons.com/source/mm/slob.c?v4.7#L655), [slub](http://lxr.free-electrons.com/source/mm/slub.c?v=4.7#L3960)都会定义此函数 | -| [kmemleak_init](http://lxr.free-electrons.com/source/mm/kmemleak.c?v=4.7#L1857) | Kmemleak工作于内核态,Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。当独立的对象没有被释放时,其报告记录在 [/sys/kernel/debug/kmemleak](http://lxr.free-electrons.com/source/mm/kmemleak.c?v=4.7#L1467)中, Kmemcheck能够帮助定位大多数内存错误的上下文 | -| [setup_per_cpu_pageset](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5392) | 初始化CPU高速缓存行, 为pagesets的第一个数组元素分配内存, 换句话说, 其实就是第一个系统处理器分配
由于在分页情况下,每次存储器访问都要存取多级页表,这就大大降低了访问速度。所以,为了提高速度,在CPU中设置一个最近存取页面的高速缓存硬件机制,当进行存储器访问时,先检查要访问的页面是否在高速缓存中. | - - - - -##1.4 setup_arch函数初始化内存流程 -------- - - -前面我们的内核从start_kernel开始, 进入setup_arch(), 并完成了早期内存分配器的初始化和设置工作. - -```cpp -void __init setup_arch(char **cmdline_p) -{ - /* 初始化memblock */ - arm64_memblock_init( ); - - /* 分页机制初始化 */ - paging_init(); - - bootmem_init(); -} -``` - -| 流程 | 描述 | -|:---:|:----:| -| [arm64_memblock_init](http://lxr.free-electrons.com/source/arch/arm64/kernel/setup.c?v=4.7#L229) | 初始化memblock内存分配器 | -| [paging_init](http://lxr.free-electrons.com/source/arch/arm64/mm/mmu.c?v=4.7#L538) | 初始化分页机制 | -| [bootmem_init](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L306) | 初始化内存管理 | - - -该函数主要执行了如下操作 - - -1. 使用arm64_memblock_init来完成memblock机制的初始化工作, 至此memblock分配器接受系统中系统中内存的分配工作 - -2. 调用paging_init来完成系统分页机制的初始化工作, 建立页表, 从而内核可以完成虚拟内存的映射和转换工作 - -3. 最后调用bootmem_init来完成实现buddy内存管理所需要的工作 - - - -##1.5 (第一阶段)启动过程中的内存分配器 -------- - - -在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务. 因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化悉尼股市的内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. - -这个阶段的内存分配其实很简单, 因此我们往往称之为内存分配器(而不是内存管理器), 早期的内核中内存分配器使用的**bootmem引导分配器**, 它基于一个内存位图bitmap, 使用最优适配算法来查找内存, 但是这个分配器有很大的缺陷, 最严重的就是内存碎片的问题, 因此在后来的内核中将其舍弃《而使用了**新的memblock机制**. memblock机制的初始化在arm64上是通过[arm64_memblock_init](http://lxr.free-electrons.com/source/arch/arm64/kernel/setup.c?v=4.7#L229)函数来实现的 - - - - -##1.6 今日内容(第二阶段--初始化buddy内存管理) -------- - - -**初始化内存分页机制** - - -在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制, 这样我们的虚拟运行空间就初步建立, 并可以完成物理地址到虚拟地址空间的映射工作. - - -在arm64架构下, 内核在start_kernel()->setup_arch()中通过arm64_memblock_init( )完成了memblock的初始化之后, 接着通过setup_arch()->paging_init()开始初始化分页机制 - - -paging_init负责建立只能用于内核的页表, 用户空间是无法访问的. 这对管理普通应用程序和内核访问内存的方式,有深远的影响 - - - -**特定于体系结构的设置** - - -在完成了基础的内存结点和内存域的初始化工作以后, 我们必须克服一些硬件的特殊设置 - - -**建立内存管理的数据结构** - - -对相关数据结构的初始化是从全局启动函数start_kernel中开始的, 该函数在加载内核并激活各个子系统之后执行. 由于内存管理是内核一个非常重要的部分, 因此在特定体系结构的设置步骤中检测并确定系统中内存的分配情况后, 会立即执行内存管理的初始化. - - - -**移交早期的分配器到内存管理器** - - - -最后我们的内存管理器已经初始化并设置完成, 可以投入运行了, 因此内核将内存管理的工作从早期的内存分配器(bootmem或者memblock)移交到我们的buddy伙伴系统. - - - - -#2 初始化前的准备工作 -------- - - -##2.1 回到setup_arch函数(当前已经完成的工作) -------- - - -现在我们回到start_kernel()->setup_arch()函数 - - -```cpp -void __init setup_arch(char **cmdline_p) -{ - /* 初始化memblock */ - arm64_memblock_init( ); - - /* 分页机制初始化 */ - paging_init(); - - bootmem_init(); -} -``` - - -到目前位置我们已经完成了如下工作 - -* memblock已经通过arm64_memblock_init完成了初始化, 至此系统中的内存可以通过memblock分配了 - -* paging_init完成了分页机制的初始化, 至此内核已经布局了一套完整的虚拟内存空间 - - -至此我们所有的内存都可以通过memblock机制来分配和释放, 尽管它实现的笨拙而简易, 但是已经足够我们初始化阶段使用了, 反正内核页不可能指着它过一辈子, 而我们也通过pagging_init创建了页表, 为内核提供了一套可供内核和进程运行的虚拟运行空间, 我们可以安全的进行内存的分配了 - -因此该是时候初始化我们强大的buddy系统了. - -内核接着setup_arch()->bootmem_init()函数开始执行 - - -##2.2 bootmem_init函数初始化内存结点和管理域 -------- - - -arm64架构下, 在setup_arch中通过paging_init函数初始化内核分页机制之后, 内核通过`bootmem_init()`开始完成内存结点和内存区域的初始化工作, 该函数定义在[arch/arm64/mm/init.c, line 306](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L306) - -```cpp -void __init bootmem_init(void) -{ - unsigned long min, max; - - min = PFN_UP(memblock_start_of_DRAM()); - max = PFN_DOWN(memblock_end_of_DRAM()); - - early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT); - - max_pfn = max_low_pfn = max; - - arm64_numa_init(); - /* - * Sparsemem tries to allocate bootmem in memory_present(), so must be - * done after the fixed reservations. - */ - arm64_memory_present(); - - sparse_init(); - zone_sizes_init(min, max); - - high_memory = __va((max << PAGE_SHIFT) - 1) + 1; - memblock_dump_all(); -} -``` - - -##2.3 zone_sizes_init函数 -------- - - -在初始化内存结点和内存域之前, 内核首先通过setup_arch()-->bootmem_init()-->zone_sizes_init()来初始化节点和管理区的一些数据项 - - - -[zone_sizes_init](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L92)函数定义在[arch/arm64/mm/init.c?v=4.7, line 92](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L92), 由于arm64支持NUMA和UMA两种存储器架构, 因此该函数依照NUMA和UMA, 有两种不同的实现. - -```cpp -#ifdef CONFIG_NUMA - -static void __init zone_sizes_init(unsigned long min, unsigned long max) -{ - unsigned long max_zone_pfns[MAX_NR_ZONES] = {0}; - - if (IS_ENABLED(CONFIG_ZONE_DMA)) - max_zone_pfns[ZONE_DMA] = PFN_DOWN(max_zone_dma_phys()); - max_zone_pfns[ZONE_NORMAL] = max; - - free_area_init_nodes(max_zone_pfns); -} - -#else - -static void __init zone_sizes_init(unsigned long min, unsigned long max) -{ - struct memblock_region *reg; - unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES]; - unsigned long max_dma = min; - - memset(zone_size, 0, sizeof(zone_size)); - - /* 4GB maximum for 32-bit only capable devices */ -#ifdef CONFIG_ZONE_DMA - max_dma = PFN_DOWN(arm64_dma_phys_limit); - zone_size[ZONE_DMA] = max_dma - min; -#endif - zone_size[ZONE_NORMAL] = max - max_dma; - - memcpy(zhole_size, zone_size, sizeof(zhole_size)); - - for_each_memblock(memory, reg) { - unsigned long start = memblock_region_memory_base_pfn(reg); - unsigned long end = memblock_region_memory_end_pfn(reg); - - if (start >= max) - continue; - -#ifdef CONFIG_ZONE_DMA - if (start < max_dma) { - unsigned long dma_end = min(end, max_dma); - zhole_size[ZONE_DMA] -= dma_end - start; - } -#endif - if (end > max_dma) { - unsigned long normal_end = min(end, max); - unsigned long normal_start = max(start, max_dma); - zhole_size[ZONE_NORMAL] -= normal_end - normal_start; - } - } - - free_area_init_node(0, zone_size, min, zhole_size); -} - -#endif /* CONFIG_NUMA */ -``` - -在获取了三个管理区的页面数后, NUMA架构下通过free_area_init_nodes()来完成后续工作, 其中核心函数为free_area_init_node(),用来针对特定的节点进行初始化, 由于UMA架构下只有一个内存结点, 因此直接通过free_area_init_node来完成内存结点的初始化 - - -##2.4 free_area_init_node(s)初始化NUMA内存结点 -------- - ->注意 -> ->此部分内容参照 -> ->[Linux内存管理伙伴算法](http://www.linuxidc.com/Linux/2012-09/70711p3.htm) -> ->[linux 内存管理 - paging_init 函数](http://blog.csdn.net/decload/article/details/8080126) - - -[free_area_init_nodes](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6460)初始化了NUMA系统中所有结点的pg_data_t和zone、page的数据, 并打印了管理区信息, 该函数定义在[mm/page_alloc.c?v=4.7, line 6460](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6460) - - -```cpp -// 初始化各个节点的所有pg_data_t和zone、page的数据 -void __init free_area_init_nodes(unsigned long *max_zone_pfn) -{ - unsigned long start_pfn, end_pfn; - int i, nid; - - /* Record where the zone boundaries are - * 全局数组arch_zone_lowest_possible_pfn - * 用来存储各个内存域可使用的最低内存页帧编号 */ - memset(arch_zone_lowest_possible_pfn, 0, - sizeof(arch_zone_lowest_possible_pfn)); - - /* 全局数组arch_zone_highest_possible_pfn - * 用来存储各个内存域可使用的最高内存页帧编号 */ - memset(arch_zone_highest_possible_pfn, 0, - sizeof(arch_zone_highest_possible_pfn)); - - /* 辅助函数find_min_pfn_with_active_regions - * 用于找到注册的最低内存域中可用的编号最小的页帧 */ - arch_zone_lowest_possible_pfn[0] = find_min_pfn_with_active_regions(); - - /* max_zone_pfn记录了各个内存域包含的最大页帧号 */ - arch_zone_highest_possible_pfn[0] = max_zone_pfn[0]; - - /* 依次遍历,确定各个内存域的边界 */ - for (i = 1; i < MAX_NR_ZONES; i++) { - /* 由于ZONE_MOVABLE是一个虚拟内存域 - * 不与真正的硬件内存域关联 - * 该内存域的边界总是设置为0 */ - if (i == ZONE_MOVABLE) - continue; - /* 第n个内存域的最小页帧 - * 即前一个(第n-1个)内存域的最大页帧 */ - arch_zone_lowest_possible_pfn[i] = - arch_zone_highest_possible_pfn[i-1]; - /* 不出意外,当前内存域的最大页帧 - * 由max_zone_pfn给出 */ - arch_zone_highest_possible_pfn[i] = - max(max_zone_pfn[i], arch_zone_lowest_possible_pfn[i]); - } - arch_zone_lowest_possible_pfn[ZONE_MOVABLE] = 0; - arch_zone_highest_possible_pfn[ZONE_MOVABLE] = 0; - - /* Find the PFNs that ZONE_MOVABLE begins at in each node */ - memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn)); - /* 用于计算进入ZONE_MOVABLE的内存数量 */ - find_zone_movable_pfns_for_nodes(); - - /* Print out the zone ranges - * 将各个内存域的最大、最小页帧号显示出来 */ - pr_info("Zone ranges:\n"); - for (i = 0; i < MAX_NR_ZONES; i++) { - if (i == ZONE_MOVABLE) - continue; - pr_info(" %-8s ", zone_names[i]); - if (arch_zone_lowest_possible_pfn[i] == - arch_zone_highest_possible_pfn[i]) - pr_cont("empty\n"); - else - pr_cont("[mem %#018Lx-%#018Lx]\n", - (u64)arch_zone_lowest_possible_pfn[i] - << PAGE_SHIFT, - ((u64)arch_zone_highest_possible_pfn[i] - << PAGE_SHIFT) - 1); - } - - /* Print out the PFNs ZONE_MOVABLE begins at in each node */ - pr_info("Movable zone start for each node\n"); - for (i = 0; i < MAX_NUMNODES; i++) { - /* 对每个结点来说,zone_movable_pfn[node_id] - * 表示ZONE_MOVABLE在movable_zone内存域中所取得内存的起始地址 - * 内核确保这些页将用于满足符合ZONE_MOVABLE职责的内存分配 */ - if (zone_movable_pfn[i]) - { - /* 显示各个内存域的分配情况 */ - pr_info(" Node %d: %#018Lx\n", i, - (u64)zone_movable_pfn[i] << PAGE_SHIFT); - } - } - - /* Print out the early node map */ - pr_info("Early memory node ranges\n"); - for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) - pr_info(" node %3d: [mem %#018Lx-%#018Lx]\n", nid, - (u64)start_pfn << PAGE_SHIFT, - ((u64)end_pfn << PAGE_SHIFT) - 1); - - /* Initialise every node */ - mminit_verify_pageflags_layout(); - setup_nr_node_ids(); - - /* 代码遍历所有的活动结点, - * 并分别对各个结点调用free_area_init_node建立数据结构, - * 该函数需要结点第一个可用的页帧作为一个参数, - * 而find_min_pfn_for_node则从early_node_map数组提取该信息 */ - for_each_online_node(nid) { - pg_data_t *pgdat = NODE_DATA(nid); - free_area_init_node(nid, NULL, - find_min_pfn_for_node(nid), NULL); - - /* Any memory on that node - * 根据node_present_pages字段判断结点具有内存 - * 则在结点位图中设置N_HIGH_MEMORY标志 - * 该标志只表示结点上存在普通或高端内存 - * 因此check_for_regular_memory - * 进一步检查低于ZONE_HIGHMEM的内存域中是否有内存 - * 并据此在结点位图中相应地设置N_NORMAL_MEMORY */ - if (pgdat->node_present_pages) - node_set_state(nid, N_MEMORY); - check_for_memory(pgdat, nid); - } -} -``` - -free_area_init_nodes函数中通过循环遍历各个节点,循环中调用了free_area_init_node函数初始化该节点对应的pg_data_t和zone、page的数据. - - -##2.5 free_area_init_node初始化UMA内存结点 -------- - -[free_area_init_nodes](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6076)函数初始化所有结点的pg_data_t和zone、page的数据,并打印了管理区信息. - -该函数定义在[mm/page_alloc.c?v=4.7, line 6076](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6076) - -```cpp -void __paginginit free_area_init_node(int nid, unsigned long *zones_size, - unsigned long node_start_pfn, unsigned long *zholes_size) -{ - pg_data_t *pgdat = NODE_DATA(nid); - unsigned long start_pfn = 0; - unsigned long end_pfn = 0; - - /* pg_data_t should be reset to zero when it's allocated */ - WARN_ON(pgdat->nr_zones || pgdat->classzone_idx); - - reset_deferred_meminit(pgdat); - pgdat->node_id = nid; - pgdat->node_start_pfn = node_start_pfn; -#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP - get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); - pr_info("Initmem setup node %d [mem %#018Lx-%#018Lx]\n", nid, - (u64)start_pfn << PAGE_SHIFT, - end_pfn ? ((u64)end_pfn << PAGE_SHIFT) - 1 : 0); -#else - start_pfn = node_start_pfn; -#endif - /* 首先累计各个内存域的页数 - * 计算结点中页的总数 - * 对连续内存模型而言 - * 这可以通过zone_sizes_init完成 - * 但calculate_node_totalpages还考虑了内存空洞 */ - calculate_node_totalpages(pgdat, start_pfn, end_pfn, - zones_size, zholes_size); - /* 分配了该节点的页面描述符数组 - * [pgdat->node_mem_map数组的内存分配 */ - alloc_node_mem_map(pgdat); -#ifdef CONFIG_FLAT_NODE_MEM_MAP - printk(KERN_DEBUG "free_area_init_node: node %d, pgdat %08lx, node_mem_map %08lx\n", - nid, (unsigned long)pgdat, - (unsigned long)pgdat->node_mem_map); -#endif - - /* 对该节点的每个区[DMA,NORMAL,HIGH]的的结构进行初始化 */ - free_area_init_core(pgdat); -} -``` - -* [calculate_node_totalpages](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5789)函数累计各个内存域的页数,计算结点中页的总数。对连续内存模型而言,这可以通过zone_sizes_init完成,但calculate_node_totalpages还考虑了内存空洞,该函数定义在[mm/page_alloc.c, line 5789](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5789) - - -* [alloc_node_mem_map(pgdat)](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6030)函数分配了该节点的页面描述符数组[pgdat->node_mem_map数组的内存分配. - - -* 继续调用[free_area_init_core](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5932)函数,继续初始化该节点的pg_data_t结构,初始化zone以及page结构 ,##2.6 free_area_init_core函数是初始化zone的核心 - - - -##2.6 free_area_init_core初始化zone -------- - -```cpp -/* - * Set up the zone data structures: - * - mark all pages reserved - * - mark all memory queues empty - * - clear the memory bitmaps - * - * NOTE: pgdat should get zeroed by caller. - */ -static void __paginginit free_area_init_core(struct pglist_data *pgdat) -{ - enum zone_type j; - int nid = pgdat->node_id; - int ret; - - /* 初始化pgdat->node_size_lock自旋锁 */ - pgdat_resize_init(pgdat); -#ifdef CONFIG_NUMA_BALANCING - spin_lock_init(&pgdat->numabalancing_migrate_lock); - pgdat->numabalancing_migrate_nr_pages = 0; - pgdat->numabalancing_migrate_next_window = jiffies; -#endif -#ifdef CONFIG_TRANSPARENT_HUGEPAGE - spin_lock_init(&pgdat->split_queue_lock); - INIT_LIST_HEAD(&pgdat->split_queue); - pgdat->split_queue_len = 0; -#endif - - /* 初始化pgdat->kswapd_wait等待队列 */ - init_waitqueue_head(&pgdat->kswapd_wait); - /* 初始化页换出守护进程创建空闲块的大小 - * 为2^kswapd_max_order */ - init_waitqueue_head(&pgdat->pfmemalloc_wait); -#ifdef CONFIG_COMPACTION - init_waitqueue_head(&pgdat->kcompactd_wait); -#endif - pgdat_page_ext_init(pgdat); - - /* 遍历每个管理区 */ - for (j = 0; j < MAX_NR_ZONES; j++) { - struct zone *zone = pgdat->node_zones + j; - unsigned long size, realsize, freesize, memmap_pages; - unsigned long zone_start_pfn = zone->zone_start_pfn; - - /* size为该管理区中的页框数,包括洞 */ - size = zone->spanned_pages; - /* realsize为管理区中的页框数,不包括洞 / - realsize = freesize = zone->present_pages; - - /* - * Adjust freesize so that it accounts for how much memory - * is used by this zone for memmap. This affects the watermark - * and per-cpu initialisations - * 调整realsize的大小,即减去page结构体占用的内存大小 */ - /* memmap_pags为包括洞的所有页框的page结构体所占的大小 */ - memmap_pages = calc_memmap_size(size, realsize); - if (!is_highmem_idx(j)) { - if (freesize >= memmap_pages) { - freesize -= memmap_pages; - if (memmap_pages) - printk(KERN_DEBUG - " %s zone: %lu pages used for memmap\n", - zone_names[j], memmap_pages); - } else /* 内存不够存放page结构体 */ - pr_warn(" %s zone: %lu pages exceeds freesize %lu\n", - zone_names[j], memmap_pages, freesize); - } - - /* Account for reserved pages - * 调整realsize的大小,即减去DMA保留页的大小 */ - if (j == 0 && freesize > dma_reserve) { - freesize -= dma_reserve; - printk(KERN_DEBUG " %s zone: %lu pages reserved\n", - zone_names[0], dma_reserve); - } - - if (!is_highmem_idx(j)) - nr_kernel_pages += freesize; - /* Charge for highmem memmap if there are enough kernel pages */ - else if (nr_kernel_pages > memmap_pages * 2) - nr_kernel_pages -= memmap_pages; - nr_all_pages += freesize; - - /* - * Set an approximate value for lowmem here, it will be adjusted - * when the bootmem allocator frees pages into the buddy system. - * And all highmem pages will be managed by the buddy system. - */ - /* 设置zone->spanned_pages为包括洞的页框数 */ - zone->managed_pages = is_highmem_idx(j) ? realsize : freesize; -#ifdef CONFIG_NUMA - /* 设置zone中的节点标识符 */ - zone->node = nid; - /* 设置可回收页面比率 */ - zone->min_unmapped_pages = (freesize*sysctl_min_unmapped_ratio) - / 100; - /* 设置slab回收缓存页的比率 */ - zone->min_slab_pages = (freesize * sysctl_min_slab_ratio) / 100; -#endif - /* 设置zone的名称 */ - zone->name = zone_names[j]; - - /* 初始化各种锁 */ - spin_lock_init(&zone->lock); - spin_lock_init(&zone->lru_lock); - zone_seqlock_init(zone); - /* 设置管理区属于的节点对应的pg_data_t结构 */ - zone->zone_pgdat = pgdat; - /* 初始化cpu的页面缓存 */ - zone_pcp_init(zone); - - /* For bootup, initialized properly in watermark setup */ - mod_zone_page_state(zone, NR_ALLOC_BATCH, zone->managed_pages); - - /* 初始化lru相关成员 */ - lruvec_init(&zone->lruvec); - if (!size) - continue; - - set_pageblock_order(); - /* 定义了CONFIG_SPARSEMEM该函数为空 */ - setup_usemap(pgdat, zone, zone_start_pfn, size); - /* 设置pgdat->nr_zones和zone->zone_start_pfn成员 - * 初始化zone->free_area成员 - * 初始化zone->wait_table相关成员 - */ - ret = init_currently_empty_zone(zone, zone_start_pfn, size); - BUG_ON(ret); - /* 初始化该zone对应的page结构 */ - memmap_init(size, nid, j, zone_start_pfn); - } -} -``` - - - - -##2.7 memmap_init初始化page页面 -------- - -在free_area_init_core初始化内存管理区zone的过程中, 通过memmap_init函数对每个内存管理区zone的page内存进行了初始化 - - -memmap_init函数定义在[mm/page_alloc.c?v=4.7, line ](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5241) - -```cpp -#ifndef __HAVE_ARCH_MEMMAP_INIT -#define memmap_init(size, nid, zone, start_pfn) \ - memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY) -#endif -``` -memmap_init_zone函数完成了page的初始化工作, 该函数定义在[mm/page_alloc.c?v=4.7, line 5139](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5139) - - -至此,节点和管理区的关键数据已完成初始化,内核在后面为内存管理做得一个准备工作就是将所有节点的管理区都链入到zonelist中,便于后面内存分配工作的进行 - -内核在start_kernel()-->build_all_zonelist()中完成zonelist的初始化 - - -#3 初始化zonelists -------- - - -内核setup_arch的最后通过bootmem_init中完成了内存数据结构的初始化(包括内存结点pg_data_t, 内存管理域zone和页面信息page), 数据结构已经基本准备好了, 在后面为内存管理做得一个准备工作就是将所有节点的管理区都链入到zonelist中,便于后面内存分配工作的进行. - - -内存节点pg_data_t中将内存节点中的内存区域zone按照某种组织层次存储在一个zonelist中, 即pglist_data->node_zonelists成员信息 - -```cpp -// http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L626 -typedef struct pglist_data -{ - struct zone node_zones[MAX_NR_ZONES]; - struct zonelist node_zonelists[MAX_ZONELISTS]; -} -``` - - -内核定义了内存的一个层次结构关系, 首先试图分配廉价的内存,如果失败,则根据访问速度和容量,逐渐尝试分配更昂贵的内存. - -高端内存最廉价, 因为内核没有任何部分依赖于从该内存域分配的内存, 如果高端内存用尽, 对内核没有副作用, 所以优先分配高端内存 - -普通内存域的情况有所不同, 许多内核数据结构必须保存在该内存域, 而不能放置到高端内存域, 因此如果普通内存域用尽, 那么内核会面临内存紧张的情况 - -DMA内存域最昂贵,因为它用于外设和系统之间的数据传输。 -举例来讲,如果内核指定想要分配高端内存域。它首先在当前结点的高端内存域寻找适当的空闲内存段,如果失败,则查看该结点的普通内存域,如果还失败,则试图在该结点的DMA内存域分配。如果在3个本地内存域都无法找到空闲内存,则查看其他结点。这种情况下,备选结点应该尽可能靠近主结点,以最小化访问非本地内存引起的性能损失。 - - -##3.1 回到start_kernel函数(已经完成的工作) -------- - - -前面我们分析了start_kernel()->setup_arch()函数, 已经完成了memblock内存分配器的创建和初始化工作, 然后paging_init也完成分页机制的初始化, 然后bootmem_init也完成了内存结点和内存管理域的初始化工作. setup_arch函数已经执行完了, 现在我们回到start_kernel - - -```cpp -asmlinkage __visible void __init start_kernel(void) -{ - - setup_arch(&command_line); - - - build_all_zonelists(NULL, NULL); - page_alloc_init(); - - - /* - * These use large bootmem allocations and must precede - * mem_init(); - * kmem_cache_init(); - */ - mm_init(); - - kmem_cache_init_late(); - - kmemleak_init(); - setup_per_cpu_pageset(); - - rest_init(); -} -``` - -下面内核开始通过start_kernel()->build_all_zonelists来设计内存的组织形式 - -##3.2 build_all_zonelists -------- - - - -内核在start_kernel中通过build_all_zonelists完成了内存结点及其管理内存域的初始化工作, 调用如下 - - -```cpp - build_all_zonelists(NULL, NULL); -``` - -[build_all_zonelists](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029)建立内存管理结点及其内存域的组织形式, 将描述内存的数据结构(结点, 管理域, 页帧)通过一定的算法组织在一起, 方便以后内存管理工作的进行. 该函数定义在[mm/page_alloc.c?v4.7, line 5029](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029) - - - -```cpp -/* - * Called with zonelists_mutex held always - * unless system_state == SYSTEM_BOOTING. - * - * __ref due to (1) call of __meminit annotated setup_zone_pageset - * [we're only called with non-NULL zone through __meminit paths] and - * (2) call of __init annotated helper build_all_zonelists_init - * [protected by SYSTEM_BOOTING]. - */ -void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone) -{ - /* 设置zonelist中节点和内存域的组织形式 - * current_zonelist_order变量标识了当前系统的内存组织形式 - * zonelist_order_name以字符串存储了系统中内存组织形式的名称 */ - set_zonelist_order(); - - if (system_state == SYSTEM_BOOTING) { - build_all_zonelists_init(); - } else { -#ifdef CONFIG_MEMORY_HOTPLUG - if (zone) - setup_zone_pageset(zone); -#endif - /* we have to stop all cpus to guarantee there is no user - of zonelist */ - stop_machine(__build_all_zonelists, pgdat, NULL); - /* cpuset refresh routine should be here */ - } - vm_total_pages = nr_free_pagecache_pages(); - /* - * Disable grouping by mobility if the number of pages in the - * system is too low to allow the mechanism to work. It would be - * more accurate, but expensive to check per-zone. This check is - * made on memory-hotadd so a system can start with mobility - * disabled and enable it later - */ - if (vm_total_pages < (pageblock_nr_pages * MIGRATE_TYPES)) - page_group_by_mobility_disabled = 1; - else - page_group_by_mobility_disabled = 0; - - pr_info("Built %i zonelists in %s order, mobility grouping %s. Total pages: %ld\n", - nr_online_nodes, - zonelist_order_name[current_zonelist_order], - page_group_by_mobility_disabled ? "off" : "on", - vm_total_pages); -#ifdef CONFIG_NUMA - pr_info("Policy zone: %s\n", zone_names[policy_zone]); -#endif -} -``` - - -##3.3 设置结点初始化顺序 -------- - - -在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(); - /* ....... */ -} -``` - - -##3.3.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 -/* - * - * The zone_table array is used to look up the address of the - * struct zone corresponding to a given zone number (ZONE_DMA, - * ZONE_NORMAL, or ZONE_HIGHMEM). - */ -zone_t *zone_table[MAX_NR_ZONES*MAX_NR_NODES]; -EXPORT_SYMBOL(zone_table); -``` - -* MAX_NR_NODES为系统中内存结点的数目 - -* MAX_NR_ZONES为系统中单个内存结点所拥有的最大内存区域数目 - - - -##3.3.2 内存域初始化顺序zonelist_order -------- - - -NUMA系统中存在多个节点, 每个节点对应一个`struct pglist_data`结构, 每个结点中可以包含多个zone, 如: ZONE_DMA, ZONE_NORMAL, 这样就产生几种排列顺序, 以2个节点2个zone为例(zone从高到低排列, ZONE_DMA0表示节点0的ZONE_DMA,其它类似). - -* Legacy方式, 每个节点只排列自己的zone; - -![Legacy方式](../images/legacy-order.jpg) - -* Node方式, 按节点顺序依次排列,先排列本地节点的所有zone,再排列其它节点的所有zone。 - - -![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 -/* - * zonelist_order: - * 0 = automatic detection of better ordering. - * 1 = order by ([node] distance, -zonetype) - * 2 = order by (-zonetype, [node] distance) - * - * 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 /* 智能选择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 | - - - -##3.3.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 */ -static int user_zonelist_order = ZONELIST_ORDER_DEFAULT; -/* string for sysctl */ -#define NUMA_ZONELIST_ORDER_LEN 16 -char numa_zonelist_order[16] = "default"; - - -// http://lxr.free-electrons.com/source/mm/page_alloc.c#L4571 -static void set_zonelist_order(void) -{ - if (user_zonelist_order == ZONELIST_ORDER_DEFAULT) - current_zonelist_order = default_zonelist_order(); - else - current_zonelist_order = user_zonelist_order; -} - - -#else /* CONFIG_NUMA */ - -// http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4892 -static void set_zonelist_order(void) -{ - current_zonelist_order = ZONELIST_ORDER_ZONE; -} -``` - - -其设置的基本流程如下 - -* 如果系统当前系统是非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指定的内存域排列方式 - - - -##3.3.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 */ -``` - - - -###3.3.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动态改变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); -``` - -##3.4 build_all_zonelists_init -------- - -build_all_zonelists函数在通过set_zonelist_order设置了zonelists中结点的组织顺序后, 首先检查了ssytem_state标识. 如果当前系统处于boot阶段(SYSTEM_BOOTING), 就开始通过build_all_zonelists_init函数初始化zonelist - - -```cpp -build_all_zonelists(pg_data_t *pgdat, struct zone *zone) -{ - /* 设置zonelist中节点和内存域的组织形式 - * current_zonelist_order变量标识了当前系统的内存组织形式 - * zonelist_order_name以字符串存储了系统中内存组织形式的名称 */ - set_zonelist_order(); - - if (system_state == SYSTEM_BOOTING) { - build_all_zonelists_init(); -``` - - -###3.4.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) - - -```cpp -/* Values used for system_state */ -extern enum system_states -{ - SYSTEM_BOOTING, - SYSTEM_RUNNING, - SYSTEM_HALT, - SYSTEM_POWER_OFF, - SYSTEM_RESTART, -} system_state; -``` - -* 如果系统system_state是SYSTEM_BOOTING, 则调用`build_all_zonelists_init`初始化所有的内存结点 - -* 否则的话如果定义了冷热页`CONFIG_MEMORY_HOTPLUG`且参数zone(待初始化的内存管理域zone)不为NULL, 则调用setup_zone_pageset设置冷热页 - - - -```cpp -if (system_state == SYSTEM_BOOTING) -{ - build_all_zonelists_init(); -} -else -{ -#ifdef CONFIG_MEMORY_HOTPLUG - if (zone) - setup_zone_pageset(zone); -#endif -``` - -##3.4.2 build_all_zonelists_init函数 - -build_all_zonelists函数在如果当前系统处于boot阶段(system_state == SYSTEM_BOOTING), 就开始通过build_all_zonelists_init函数初始化zonelist - - -build_all_zonelists_init函数定义在[mm/page_alloc.c?v=4.7, line 5013](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5013) - -```cpp -static noinline void __init -build_all_zonelists_init(void) -{ - __build_all_zonelists(NULL); - mminit_verify_zonelist(); - cpuset_init_current_mems_allowed(); -} -``` - - -其中__build_all_zonelists完成了zonelists的初始化工作 - -```cpp -/* return values int ....just for stop_machine() */ -static int __build_all_zonelists(void *data) -{ - int nid; - int cpu; - pg_data_t *self = data; - -#ifdef CONFIG_NUMA - memset(node_load, 0, sizeof(node_load)); -#endif - - if (self && !node_online(self->node_id)) { - build_zonelists(self); - } - - for_each_online_node(nid) { - pg_data_t *pgdat = NODE_DATA(nid); - - build_zonelists(pgdat); - } - - /* - * Initialize the boot_pagesets that are going to be used - * for bootstrapping processors. The real pagesets for - * each zone will be allocated later when the per cpu - * allocator is available. - * - * boot_pagesets are used also for bootstrapping offline - * cpus if the system is already booted because the pagesets - * are needed to initialize allocators on a specific cpu too. - * F.e. the percpu allocator needs the page allocator which - * needs the percpu allocator in order to allocate its pagesets - * (a chicken-egg dilemma). - */ - for_each_possible_cpu(cpu) { - setup_pageset(&per_cpu(boot_pageset, cpu), 0); - -#ifdef CONFIG_HAVE_MEMORYLESS_NODES - /* - * We now know the "local memory node" for each node-- - * i.e., the node of the first zone in the generic zonelist. - * Set up numa_mem percpu variable for on-line cpus. During - * boot, only the boot cpu should be on-line; we'll init the - * secondary cpus' numa_mem as they come on-line. During - * node/memory hotplug, we'll fixup all on-line cpus. - */ - if (cpu_online(cpu)) - set_cpu_numa_mem(cpu, local_memory_node(cpu_to_node(cpu))); -#endif - } - - return 0; -} -``` - -##3.4.3 build_zonelists初始化每个内存结点的zonelists -------- - -build_zonelists(pg_data_t *pgdat)完成了节点pgdat上zonelists的初始化工作 - - -* 如果设置了设置了ZONELIST_ORDER_NODE内存区域顺序排列, 就调用build_zonelists_in_node_order(pgdat, node)完 -成节点内区域顺序的排列 - - -该函数的任务是在当前处理的结点和系统中其他结点的内存域之间建立一种等级次序。接下来,依据这种次序分配内存,如果在期望的结点内存域中,没有空闲内存,就去查找相邻结点的内存域 - -内核定义了内存的一个层次结构关系, 首先试图分配廉价的内存,如果失败,则根据访问速度和容量,逐渐尝试分配更昂贵的内存. - -高端内存最廉价, 因为内核没有任何部分依赖于从该内存域分配的内存, 如果高端内存用尽, 对内核没有副作用, 所以优先分配高端内存 - -普通内存域的情况有所不同, 许多内核数据结构必须保存在该内存域, 而不能放置到高端内存域, 因此如果普通内存域用尽, 那么内核会面临内存紧张的情况 - -DMA内存域最昂贵,因为它用于外设和系统之间的数据传输。 -举例来讲,如果内核指定想要分配高端内存域。它首先在当前结点的高端内存域寻找适当的空闲内存段,如果失败,则查看该结点的普通内存域,如果还失败,则试图在该结点的DMA内存域分配。如果在3个本地内存域都无法找到空闲内存,则查看其他结点。这种情况下,备选结点应该尽可能靠近主结点,以最小化访问非本地内存引起的性能损失。 - -##3.4.4 setup_pageset初始化per_cpu缓存 -------- - -前面讲解内存管理域zone的时候, 提到了per-CPU缓存, 即冷热页. 在组织每个节点的zonelist的过程中, setup_pageset初始化了per-CPU缓存(冷热页面) - -```cpp -static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch) -{ - pageset_init(p); - pageset_set_batch(p, batch); -} -``` - - - -在此之前free_area_init_node初始化内存结点的时候, 内核就输出了冷热页的一些信息, 该工作由zone_pcp_init完成, 该函数定义在[mm/page_alloc.c?v=4.7, line 5029](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5029) - -```cpp -static __meminit void zone_pcp_init(struct zone *zone) -{ - /* - * per cpu subsystem is not up at this point. The following code - * relies on the ability of the linker to provide the - * offset of a (static) per cpu variable into the per cpu area. - */ - zone->pageset = &boot_pageset; - - if (populated_zone(zone)) - printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%u\n", - zone->name, zone->present_pages, - zone_batchsize(zone)); -} -``` - - - - -#总结 -------- - - - -## start_kernel启动流程 -------- - - -```cpp -start_kernel() - |---->page_address_init() - | 考虑支持高端内存 - | 业务:初始化page_address_pool链表; - | 将page_address_maps数组元素按索引降序插入 - | page_address_pool链表; - | 初始化page_address_htable数组. - | - |---->setup_arch(&command_line); - | - |---->setup_per_cpu_areas(); - | 为per-CPU变量分配空间 - | - |---->build_all_zonelist() - | 为系统中的zone建立后备zone的列表. - | 所有zone的后备列表都在 - | pglist_data->node_zonelists[0]中; - | - | 期间也对per-CPU变量boot_pageset做了初始化. - | - |---->page_alloc_init() - |---->hotcpu_notifier(page_alloc_cpu_notifier, 0); - | 不考虑热插拔CPU - | - |---->pidhash_init() - | 详见下文. - | 根据低端内存页数和散列度,分配hash空间,并赋予pid_hash - | - |---->vfs_caches_init_early() - |---->dcache_init_early() - | dentry_hashtable空间,d_hash_shift, h_hash_mask赋值; - | 同pidhash_init(); - | 区别: - | 散列度变化了(13 - PAGE_SHIFT); - | 传入alloc_large_system_hash的最后参数值为0; - | - |---->inode_init_early() - | inode_hashtable空间,i_hash_shift, i_hash_mask赋值; - | 同pidhash_init(); - | 区别: - | 散列度变化了(14 - PAGE_SHIFT); - | 传入alloc_large_system_hash的最后参数值为0; - | -``` - -##pidhash_init配置高端内存 -------- - - -```cpp -void pidhash_init(void) - |---->pid_hash = alloc_large_system_hash("PID", sizeof(*pid_hash), - | 0, 18, HASH_EARLY|HASH_SMALL, &pidhash_shift, NULL, 4096); - | 根据nr_kernel_pages(低端内存的页数),分配哈希数组,以及各个哈希 - | 数组元素下的哈希链表的空间,原理如下: - | number = nr_kernel_pages; - | number >= (18 - PAGE_SHIFT) 根据散列度获得数组元素个数 - | number = roundup_pow_of_two(number); - | pidhash_shift = max{x | 2**x <= number} - | size = number * sizeof(*pid_hash); - | 使用位图分配器分配size空间,将返回值付给pid_hash; - | - |---->pidhash_size = 1 << pidhash_shift; - | - |---->for(i = 0; i < pidhash_size; i++) - | INIT_HLIST_HEAD(&pid_hash[i]); -``` - -## build_all_zonelists初始化每个内存节点的zonelists -------- - - - -```cpp -void build_all_zonelists(void) - |---->set_zonelist_order() - |---->current_zonelist_order = ZONELIST_ORDER_ZONE; - | - |---->__build_all_zonelists(NULL); - | Memory不支持热插拔, 为每个zone建立后备的zone, - | 每个zone及自己后备的zone,形成zonelist - | - |---->pg_data_t *pgdat = NULL; - | pgdat = &contig_page_data;(单node) - | - |---->build_zonelists(pgdat); - | 为每个zone建立后备zone的列表 - | - |---->struct zonelist *zonelist = NULL; - | enum zone_type j; - | zonelist = &pgdat->node_zonelists[0]; - | - |---->j = build_zonelists_node(pddat, zonelist, 0, MAX_NR_ZONES - 1); - | 为pgdat->node_zones[0]建立后备的zone,node_zones[0]后备的zone - | 存储在node_zonelist[0]内,对于node_zone[0]的后备zone,其后备的zone - | 链表如下(只考虑UMA体系,而且不考虑ZONE_DMA): - | node_zonelist[0]._zonerefs[0].zone = &node_zones[2]; - | node_zonelist[0]._zonerefs[0].zone_idx = 2; - | node_zonelist[0]._zonerefs[1].zone = &node_zones[1]; - | node_zonelist[0]._zonerefs[1].zone_idx = 1; - | node_zonelist[0]._zonerefs[2].zone = &node_zones[0]; - | node_zonelist[0]._zonerefs[2].zone_idx = 0; - | - | zonelist->_zonerefs[3].zone = NULL; - | zonelist->_zonerefs[3].zone_idx = 0; - | - |---->build_zonelist_cache(pgdat); - |---->pdat->node_zonelists[0].zlcache_ptr = NULL; - | UMA体系结构 - | - |---->for_each_possible_cpu(cpu) - | setup_pageset(&per_cpu(boot_pageset, cpu), 0); - |详见下文 - |---->vm_total_pages = nr_free_pagecache_pages(); - | 业务:获得所有zone中的present_pages总和. - | - |---->page_group_by_mobility_disabled = 0; - | 对于代码中的判断条件一般不会成立,因为页数会最够多(内存较大) +初始化内存管理 +======= + + + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + + +在内存管理的上下文中, 初始化(initialization)可以有多种含义. 在许多CPU上, 必须显式设置适用于Linux内核的内存模型. 例如在x86_32上需要切换到保护模式, 然后奇偶内核才能检测到可用内存和寄存器. + + + +#1 前景回顾 +------- + + +##1.1 Linux内存管理的层次结构 +------- + + +Linux把物理内存划分为三个层次来管理 + +| 层次 | 描述 | +|:----:|:----:| +| 存储节点(Node) | CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点 | +| 管理区(Zone) | 每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存 | +| 页面(Page) | 内存被细分为多个页面帧, 页面是最基本的页面分配的单位 | + +为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点 + + +* 首先, 内存被划分为**结点**. 每个节点关联到系统中的一个处理器, 内核中表示为`pg_data_t`的实例. 系统中每个节点被链接到一个以NULL结尾的`pgdat_list`链表中<而其中的每个节点利用`pg_data_tnode_next`字段链接到下一节.而对于PC这种UMA结构的机器来说, 只使用了一个成为contig_page_data的静态pg_data_t结构. + +* 接着各个节点又被划分为内存管理区域, 一个**管理区域**通过struct zone_struct描述, 其被定义为zone_t, 用以表示内存的某个范围, 低端范围的16MB被描述为ZONE_DMA, 某些工业标准体系结构中的(ISA)设备需要用到它, 然后是可直接映射到内核的普通内存域ZONE_NORMAL,最后是超出了内核段的物理地址域ZONE_HIGHMEM, 被称为高端内存. 是系统中预留的可用内存空间, 不能被内核直接映射. + + +* 最后**页帧(page frame)**代表了系统内存的最小单位, 堆内存中的每个页都会创建一个struct page的一个实例. 传统上,把内存视为连续的字节,即内存为字节数组,内存单元的编号(地址)可作为字节数组的索引. 分页管理时,将若干字节视为一页,比如4K byte. 此时,内存变成了连续的页,即内存为页数组,每一页物理内存叫页帧,以页为单位对内存进行编号,该编号可作为页数组的索引,又称为页帧号. + + +##1.2 今日内容(启动过程中的内存初始化) +------- + + +在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务. 因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化悉尼股市的内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. + + +因此我们可以把linux内核的内存管理分三个阶段。 + +| 阶段 | 起点 | 终点 | 描述 | +|:-----:|:-----:|:-----:| +| 第一阶段 | 系统启动 | bootmem或者memblock初始化完成 | 此阶段只能使用memblock_reserve函数分配内存, 早期内核中使用init_bootmem_done = 1标识此阶段结束 | +| 第二阶段 | bootmem或者memblock初始化完 | buddy完成前 | 引导内存分配器bootmem或者memblock接受内存的管理工作, 早期内核中使用mem_init_done = 1标记此阶段的结束 | +| 第三阶段 | buddy初始化完成 | 系统停止运行 | 可以用cache和buddy分配内存 | + + + +##1.3 start_kernel系统启动阶段的内存初始化过程 +------- + +首先我们来看看start_kernel是如何初始化系统的, start_kerne定义在[init/main.c?v=4.7, line 479](http://lxr.free-electrons.com/source/init/main.c?v=4.7#L479) + +其代码很复杂, 我们只截取出其中与内存管理初始化相关的部分, 如下所示 + + +```cpp +asmlinkage __visible void __init start_kernel(void) +{ + + setup_arch(&command_line); + mm_init_cpumask(&init_mm); + + setup_per_cpu_areas(); + + + build_all_zonelists(NULL, NULL); + page_alloc_init(); + + + /* + * These use large bootmem allocations and must precede + * mem_init(); + * kmem_cache_init(); + */ + mm_init(); + + kmem_cache_init_late(); + + kmemleak_init(); + setup_per_cpu_pageset(); + + rest_init(); +} +``` + + +| 函数 | 功能 | +|:----:|:----:| +| [setup_arch](http://lxr.free-electrons.com/ident?v=4.7;i=setup_arch) | 是一个特定于体系结构的设置函数, 其中一项任务是负责初始化自举分配器 | +| [mm_init_cpumask](http://lxr.free-electrons.com/source/include/linux/mm_types.h?v=4.7#L522) | 初始化CPU屏蔽字 | +| [setup_per_cpu_areas](http://lxr.free-electrons.com/ident?v=4.7;i=setup_per_cpu_areas) | 函数[(查看定义)](http://lxr.free-electrons.com/source/mm/percpu.c?v4.7#L2205])给每个CPU分配内存,并拷贝.data.percpu段的数据. 为系统中的每个CPU的per_cpu变量申请空间.
在SMP系统中, setup_per_cpu_areas初始化源代码中(使用[per_cpu宏](http://lxr.free-electrons.com/source/include/linux/percpu-defs.h#L256))定义的静态per-cpu变量, 这种变量对系统中每个CPU都有一个独立的副本.
此类变量保存在内核二进制影像的一个独立的段中, setup_per_cpu_areas的目的就是为系统中各个CPU分别创建一份这些数据的副本
在非SMP系统中这是一个空操作 | +| [build_all_zonelists](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029) | 建立并初始化结点和内存域的数据结构 | +| [mm_init](http://lxr.free-electrons.com/source/init/main.c?v4.7#L464) | 建立了内核的内存分配器,
其中通过[mem_init](http://lxr.free-electrons.com/ident?v=4.7&i=mem_init)停用bootmem分配器并迁移到实际的内存管理器(比如伙伴系统)
然后调用kmem_cache_init函数初始化内核内部用于小块内存区的分配器 | +| [kmem_cache_init_late](http://lxr.free-electrons.com/source/mm/slab.c?v4.7#L1378) | 在kmem_cache_init之后, 完善分配器的缓存机制, 当前3个可用的内核内存分配器[slab](http://lxr.free-electrons.com/source/mm/slab.c?v4.7#L1378), [slob](http://lxr.free-electrons.com/source/mm/slob.c?v4.7#L655), [slub](http://lxr.free-electrons.com/source/mm/slub.c?v=4.7#L3960)都会定义此函数 | +| [kmemleak_init](http://lxr.free-electrons.com/source/mm/kmemleak.c?v=4.7#L1857) | Kmemleak工作于内核态,Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。当独立的对象没有被释放时,其报告记录在 [/sys/kernel/debug/kmemleak](http://lxr.free-electrons.com/source/mm/kmemleak.c?v=4.7#L1467)中, Kmemcheck能够帮助定位大多数内存错误的上下文 | +| [setup_per_cpu_pageset](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5392) | 初始化CPU高速缓存行, 为pagesets的第一个数组元素分配内存, 换句话说, 其实就是第一个系统处理器分配
由于在分页情况下,每次存储器访问都要存取多级页表,这就大大降低了访问速度。所以,为了提高速度,在CPU中设置一个最近存取页面的高速缓存硬件机制,当进行存储器访问时,先检查要访问的页面是否在高速缓存中. | + + + + +##1.4 setup_arch函数初始化内存流程 +------- + + +前面我们的内核从start_kernel开始, 进入setup_arch(), 并完成了早期内存分配器的初始化和设置工作. + +```cpp +void __init setup_arch(char **cmdline_p) +{ + /* 初始化memblock */ + arm64_memblock_init( ); + + /* 分页机制初始化 */ + paging_init(); + + bootmem_init(); +} +``` + +| 流程 | 描述 | +|:---:|:----:| +| [arm64_memblock_init](http://lxr.free-electrons.com/source/arch/arm64/kernel/setup.c?v=4.7#L229) | 初始化memblock内存分配器 | +| [paging_init](http://lxr.free-electrons.com/source/arch/arm64/mm/mmu.c?v=4.7#L538) | 初始化分页机制 | +| [bootmem_init](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L306) | 初始化内存管理 | + + +该函数主要执行了如下操作 + + +1. 使用arm64_memblock_init来完成memblock机制的初始化工作, 至此memblock分配器接受系统中系统中内存的分配工作 + +2. 调用paging_init来完成系统分页机制的初始化工作, 建立页表, 从而内核可以完成虚拟内存的映射和转换工作 + +3. 最后调用bootmem_init来完成实现buddy内存管理所需要的工作 + + + +##1.5 (第一阶段)启动过程中的内存分配器 +------- + + +在初始化过程中, 还必须建立内存管理的数据结构, 以及很多事务. 因为内核在内存管理完全初始化之前就需要使用内存. 在系统启动过程期间, 使用了额外的简化悉尼股市的内存管理模块, 然后在初始化完成后, 将旧的模块丢弃掉. + +这个阶段的内存分配其实很简单, 因此我们往往称之为内存分配器(而不是内存管理器), 早期的内核中内存分配器使用的**bootmem引导分配器**, 它基于一个内存位图bitmap, 使用最优适配算法来查找内存, 但是这个分配器有很大的缺陷, 最严重的就是内存碎片的问题, 因此在后来的内核中将其舍弃《而使用了**新的memblock机制**. memblock机制的初始化在arm64上是通过[arm64_memblock_init](http://lxr.free-electrons.com/source/arch/arm64/kernel/setup.c?v=4.7#L229)函数来实现的 + + + + +##1.6 今日内容(第二阶段--初始化buddy内存管理) +------- + + +**初始化内存分页机制** + + +在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制, 这样我们的虚拟运行空间就初步建立, 并可以完成物理地址到虚拟地址空间的映射工作. + + +在arm64架构下, 内核在start_kernel()->setup_arch()中通过arm64_memblock_init( )完成了memblock的初始化之后, 接着通过setup_arch()->paging_init()开始初始化分页机制 + + +paging_init负责建立只能用于内核的页表, 用户空间是无法访问的. 这对管理普通应用程序和内核访问内存的方式,有深远的影响 + + + +**特定于体系结构的设置** + + +在完成了基础的内存结点和内存域的初始化工作以后, 我们必须克服一些硬件的特殊设置 + + +**建立内存管理的数据结构** + + +对相关数据结构的初始化是从全局启动函数start_kernel中开始的, 该函数在加载内核并激活各个子系统之后执行. 由于内存管理是内核一个非常重要的部分, 因此在特定体系结构的设置步骤中检测并确定系统中内存的分配情况后, 会立即执行内存管理的初始化. + + + +**移交早期的分配器到内存管理器** + + + +最后我们的内存管理器已经初始化并设置完成, 可以投入运行了, 因此内核将内存管理的工作从早期的内存分配器(bootmem或者memblock)移交到我们的buddy伙伴系统. + + + + +#2 初始化前的准备工作 +------- + + +##2.1 回到setup_arch函数(当前已经完成的工作) +------- + + +现在我们回到start_kernel()->setup_arch()函数 + + +```cpp +void __init setup_arch(char **cmdline_p) +{ + /* 初始化memblock */ + arm64_memblock_init( ); + + /* 分页机制初始化 */ + paging_init(); + + bootmem_init(); +} +``` + + +到目前位置我们已经完成了如下工作 + +* memblock已经通过arm64_memblock_init完成了初始化, 至此系统中的内存可以通过memblock分配了 + +* paging_init完成了分页机制的初始化, 至此内核已经布局了一套完整的虚拟内存空间 + + +至此我们所有的内存都可以通过memblock机制来分配和释放, 尽管它实现的笨拙而简易, 但是已经足够我们初始化阶段使用了, 反正内核页不可能指着它过一辈子, 而我们也通过pagging_init创建了页表, 为内核提供了一套可供内核和进程运行的虚拟运行空间, 我们可以安全的进行内存的分配了 + +因此该是时候初始化我们强大的buddy系统了. + +内核接着setup_arch()->bootmem_init()函数开始执行 + + +##2.2 bootmem_init函数初始化内存结点和管理域 +------- + + +arm64架构下, 在setup_arch中通过paging_init函数初始化内核分页机制之后, 内核通过`bootmem_init()`开始完成内存结点和内存区域的初始化工作, 该函数定义在[arch/arm64/mm/init.c, line 306](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L306) + +```cpp +void __init bootmem_init(void) +{ + unsigned long min, max; + + min = PFN_UP(memblock_start_of_DRAM()); + max = PFN_DOWN(memblock_end_of_DRAM()); + + early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT); + + max_pfn = max_low_pfn = max; + + arm64_numa_init(); + /* + * Sparsemem tries to allocate bootmem in memory_present(), so must be + * done after the fixed reservations. + */ + arm64_memory_present(); + + sparse_init(); + zone_sizes_init(min, max); + + high_memory = __va((max << PAGE_SHIFT) - 1) + 1; + memblock_dump_all(); +} +``` + + +##2.3 zone_sizes_init函数 +------- + + +在初始化内存结点和内存域之前, 内核首先通过setup_arch()-->bootmem_init()-->zone_sizes_init()来初始化节点和管理区的一些数据项 + + + +[zone_sizes_init](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L92)函数定义在[arch/arm64/mm/init.c?v=4.7, line 92](http://lxr.free-electrons.com/source/arch/arm64/mm/init.c?v=4.7#L92), 由于arm64支持NUMA和UMA两种存储器架构, 因此该函数依照NUMA和UMA, 有两种不同的实现. + +```cpp +#ifdef CONFIG_NUMA + +static void __init zone_sizes_init(unsigned long min, unsigned long max) +{ + unsigned long max_zone_pfns[MAX_NR_ZONES] = {0}; + + if (IS_ENABLED(CONFIG_ZONE_DMA)) + max_zone_pfns[ZONE_DMA] = PFN_DOWN(max_zone_dma_phys()); + max_zone_pfns[ZONE_NORMAL] = max; + + free_area_init_nodes(max_zone_pfns); +} + +#else + +static void __init zone_sizes_init(unsigned long min, unsigned long max) +{ + struct memblock_region *reg; + unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES]; + unsigned long max_dma = min; + + memset(zone_size, 0, sizeof(zone_size)); + + /* 4GB maximum for 32-bit only capable devices */ +#ifdef CONFIG_ZONE_DMA + max_dma = PFN_DOWN(arm64_dma_phys_limit); + zone_size[ZONE_DMA] = max_dma - min; +#endif + zone_size[ZONE_NORMAL] = max - max_dma; + + memcpy(zhole_size, zone_size, sizeof(zhole_size)); + + for_each_memblock(memory, reg) { + unsigned long start = memblock_region_memory_base_pfn(reg); + unsigned long end = memblock_region_memory_end_pfn(reg); + + if (start >= max) + continue; + +#ifdef CONFIG_ZONE_DMA + if (start < max_dma) { + unsigned long dma_end = min(end, max_dma); + zhole_size[ZONE_DMA] -= dma_end - start; + } +#endif + if (end > max_dma) { + unsigned long normal_end = min(end, max); + unsigned long normal_start = max(start, max_dma); + zhole_size[ZONE_NORMAL] -= normal_end - normal_start; + } + } + + free_area_init_node(0, zone_size, min, zhole_size); +} + +#endif /* CONFIG_NUMA */ +``` + +在获取了三个管理区的页面数后, NUMA架构下通过free_area_init_nodes()来完成后续工作, 其中核心函数为free_area_init_node(),用来针对特定的节点进行初始化, 由于UMA架构下只有一个内存结点, 因此直接通过free_area_init_node来完成内存结点的初始化 + + +##2.4 free_area_init_node(s)初始化NUMA内存结点 +------- + +>注意 +> +>此部分内容参照 +> +>[Linux内存管理伙伴算法](http://www.linuxidc.com/Linux/2012-09/70711p3.htm) +> +>[linux 内存管理 - paging_init 函数](http://blog.csdn.net/decload/article/details/8080126) + + +[free_area_init_nodes](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6460)初始化了NUMA系统中所有结点的pg_data_t和zone、page的数据, 并打印了管理区信息, 该函数定义在[mm/page_alloc.c?v=4.7, line 6460](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6460) + + +```cpp +// 初始化各个节点的所有pg_data_t和zone、page的数据 +void __init free_area_init_nodes(unsigned long *max_zone_pfn) +{ + unsigned long start_pfn, end_pfn; + int i, nid; + + /* Record where the zone boundaries are + * 全局数组arch_zone_lowest_possible_pfn + * 用来存储各个内存域可使用的最低内存页帧编号 */ + memset(arch_zone_lowest_possible_pfn, 0, + sizeof(arch_zone_lowest_possible_pfn)); + + /* 全局数组arch_zone_highest_possible_pfn + * 用来存储各个内存域可使用的最高内存页帧编号 */ + memset(arch_zone_highest_possible_pfn, 0, + sizeof(arch_zone_highest_possible_pfn)); + + /* 辅助函数find_min_pfn_with_active_regions + * 用于找到注册的最低内存域中可用的编号最小的页帧 */ + arch_zone_lowest_possible_pfn[0] = find_min_pfn_with_active_regions(); + + /* max_zone_pfn记录了各个内存域包含的最大页帧号 */ + arch_zone_highest_possible_pfn[0] = max_zone_pfn[0]; + + /* 依次遍历,确定各个内存域的边界 */ + for (i = 1; i < MAX_NR_ZONES; i++) { + /* 由于ZONE_MOVABLE是一个虚拟内存域 + * 不与真正的硬件内存域关联 + * 该内存域的边界总是设置为0 */ + if (i == ZONE_MOVABLE) + continue; + /* 第n个内存域的最小页帧 + * 即前一个(第n-1个)内存域的最大页帧 */ + arch_zone_lowest_possible_pfn[i] = + arch_zone_highest_possible_pfn[i-1]; + /* 不出意外,当前内存域的最大页帧 + * 由max_zone_pfn给出 */ + arch_zone_highest_possible_pfn[i] = + max(max_zone_pfn[i], arch_zone_lowest_possible_pfn[i]); + } + arch_zone_lowest_possible_pfn[ZONE_MOVABLE] = 0; + arch_zone_highest_possible_pfn[ZONE_MOVABLE] = 0; + + /* Find the PFNs that ZONE_MOVABLE begins at in each node */ + memset(zone_movable_pfn, 0, sizeof(zone_movable_pfn)); + /* 用于计算进入ZONE_MOVABLE的内存数量 */ + find_zone_movable_pfns_for_nodes(); + + /* Print out the zone ranges + * 将各个内存域的最大、最小页帧号显示出来 */ + pr_info("Zone ranges:\n"); + for (i = 0; i < MAX_NR_ZONES; i++) { + if (i == ZONE_MOVABLE) + continue; + pr_info(" %-8s ", zone_names[i]); + if (arch_zone_lowest_possible_pfn[i] == + arch_zone_highest_possible_pfn[i]) + pr_cont("empty\n"); + else + pr_cont("[mem %#018Lx-%#018Lx]\n", + (u64)arch_zone_lowest_possible_pfn[i] + << PAGE_SHIFT, + ((u64)arch_zone_highest_possible_pfn[i] + << PAGE_SHIFT) - 1); + } + + /* Print out the PFNs ZONE_MOVABLE begins at in each node */ + pr_info("Movable zone start for each node\n"); + for (i = 0; i < MAX_NUMNODES; i++) { + /* 对每个结点来说,zone_movable_pfn[node_id] + * 表示ZONE_MOVABLE在movable_zone内存域中所取得内存的起始地址 + * 内核确保这些页将用于满足符合ZONE_MOVABLE职责的内存分配 */ + if (zone_movable_pfn[i]) + { + /* 显示各个内存域的分配情况 */ + pr_info(" Node %d: %#018Lx\n", i, + (u64)zone_movable_pfn[i] << PAGE_SHIFT); + } + } + + /* Print out the early node map */ + pr_info("Early memory node ranges\n"); + for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, &nid) + pr_info(" node %3d: [mem %#018Lx-%#018Lx]\n", nid, + (u64)start_pfn << PAGE_SHIFT, + ((u64)end_pfn << PAGE_SHIFT) - 1); + + /* Initialise every node */ + mminit_verify_pageflags_layout(); + setup_nr_node_ids(); + + /* 代码遍历所有的活动结点, + * 并分别对各个结点调用free_area_init_node建立数据结构, + * 该函数需要结点第一个可用的页帧作为一个参数, + * 而find_min_pfn_for_node则从early_node_map数组提取该信息 */ + for_each_online_node(nid) { + pg_data_t *pgdat = NODE_DATA(nid); + free_area_init_node(nid, NULL, + find_min_pfn_for_node(nid), NULL); + + /* Any memory on that node + * 根据node_present_pages字段判断结点具有内存 + * 则在结点位图中设置N_HIGH_MEMORY标志 + * 该标志只表示结点上存在普通或高端内存 + * 因此check_for_regular_memory + * 进一步检查低于ZONE_HIGHMEM的内存域中是否有内存 + * 并据此在结点位图中相应地设置N_NORMAL_MEMORY */ + if (pgdat->node_present_pages) + node_set_state(nid, N_MEMORY); + check_for_memory(pgdat, nid); + } +} +``` + +free_area_init_nodes函数中通过循环遍历各个节点,循环中调用了free_area_init_node函数初始化该节点对应的pg_data_t和zone、page的数据. + + +##2.5 free_area_init_node初始化UMA内存结点 +------- + +[free_area_init_nodes](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6076)函数初始化所有结点的pg_data_t和zone、page的数据,并打印了管理区信息. + +该函数定义在[mm/page_alloc.c?v=4.7, line 6076](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6076) + +```cpp +void __paginginit free_area_init_node(int nid, unsigned long *zones_size, + unsigned long node_start_pfn, unsigned long *zholes_size) +{ + pg_data_t *pgdat = NODE_DATA(nid); + unsigned long start_pfn = 0; + unsigned long end_pfn = 0; + + /* pg_data_t should be reset to zero when it's allocated */ + WARN_ON(pgdat->nr_zones || pgdat->classzone_idx); + + reset_deferred_meminit(pgdat); + pgdat->node_id = nid; + pgdat->node_start_pfn = node_start_pfn; +#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP + get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); + pr_info("Initmem setup node %d [mem %#018Lx-%#018Lx]\n", nid, + (u64)start_pfn << PAGE_SHIFT, + end_pfn ? ((u64)end_pfn << PAGE_SHIFT) - 1 : 0); +#else + start_pfn = node_start_pfn; +#endif + /* 首先累计各个内存域的页数 + * 计算结点中页的总数 + * 对连续内存模型而言 + * 这可以通过zone_sizes_init完成 + * 但calculate_node_totalpages还考虑了内存空洞 */ + calculate_node_totalpages(pgdat, start_pfn, end_pfn, + zones_size, zholes_size); + /* 分配了该节点的页面描述符数组 + * [pgdat->node_mem_map数组的内存分配 */ + alloc_node_mem_map(pgdat); +#ifdef CONFIG_FLAT_NODE_MEM_MAP + printk(KERN_DEBUG "free_area_init_node: node %d, pgdat %08lx, node_mem_map %08lx\n", + nid, (unsigned long)pgdat, + (unsigned long)pgdat->node_mem_map); +#endif + + /* 对该节点的每个区[DMA,NORMAL,HIGH]的的结构进行初始化 */ + free_area_init_core(pgdat); +} +``` + +* [calculate_node_totalpages](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5789)函数累计各个内存域的页数,计算结点中页的总数。对连续内存模型而言,这可以通过zone_sizes_init完成,但calculate_node_totalpages还考虑了内存空洞,该函数定义在[mm/page_alloc.c, line 5789](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5789) + + +* [alloc_node_mem_map(pgdat)](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L6030)函数分配了该节点的页面描述符数组[pgdat->node_mem_map数组的内存分配. + + +* 继续调用[free_area_init_core](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5932)函数,继续初始化该节点的pg_data_t结构,初始化zone以及page结构 ,##2.6 free_area_init_core函数是初始化zone的核心 + + + +##2.6 free_area_init_core初始化zone +------- + +```cpp +/* + * Set up the zone data structures: + * - mark all pages reserved + * - mark all memory queues empty + * - clear the memory bitmaps + * + * NOTE: pgdat should get zeroed by caller. + */ +static void __paginginit free_area_init_core(struct pglist_data *pgdat) +{ + enum zone_type j; + int nid = pgdat->node_id; + int ret; + + /* 初始化pgdat->node_size_lock自旋锁 */ + pgdat_resize_init(pgdat); +#ifdef CONFIG_NUMA_BALANCING + spin_lock_init(&pgdat->numabalancing_migrate_lock); + pgdat->numabalancing_migrate_nr_pages = 0; + pgdat->numabalancing_migrate_next_window = jiffies; +#endif +#ifdef CONFIG_TRANSPARENT_HUGEPAGE + spin_lock_init(&pgdat->split_queue_lock); + INIT_LIST_HEAD(&pgdat->split_queue); + pgdat->split_queue_len = 0; +#endif + + /* 初始化pgdat->kswapd_wait等待队列 */ + init_waitqueue_head(&pgdat->kswapd_wait); + /* 初始化页换出守护进程创建空闲块的大小 + * 为2^kswapd_max_order */ + init_waitqueue_head(&pgdat->pfmemalloc_wait); +#ifdef CONFIG_COMPACTION + init_waitqueue_head(&pgdat->kcompactd_wait); +#endif + pgdat_page_ext_init(pgdat); + + /* 遍历每个管理区 */ + for (j = 0; j < MAX_NR_ZONES; j++) { + struct zone *zone = pgdat->node_zones + j; + unsigned long size, realsize, freesize, memmap_pages; + unsigned long zone_start_pfn = zone->zone_start_pfn; + + /* size为该管理区中的页框数,包括洞 */ + size = zone->spanned_pages; + /* realsize为管理区中的页框数,不包括洞 / + realsize = freesize = zone->present_pages; + + /* + * Adjust freesize so that it accounts for how much memory + * is used by this zone for memmap. This affects the watermark + * and per-cpu initialisations + * 调整realsize的大小,即减去page结构体占用的内存大小 */ + /* memmap_pags为包括洞的所有页框的page结构体所占的大小 */ + memmap_pages = calc_memmap_size(size, realsize); + if (!is_highmem_idx(j)) { + if (freesize >= memmap_pages) { + freesize -= memmap_pages; + if (memmap_pages) + printk(KERN_DEBUG + " %s zone: %lu pages used for memmap\n", + zone_names[j], memmap_pages); + } else /* 内存不够存放page结构体 */ + pr_warn(" %s zone: %lu pages exceeds freesize %lu\n", + zone_names[j], memmap_pages, freesize); + } + + /* Account for reserved pages + * 调整realsize的大小,即减去DMA保留页的大小 */ + if (j == 0 && freesize > dma_reserve) { + freesize -= dma_reserve; + printk(KERN_DEBUG " %s zone: %lu pages reserved\n", + zone_names[0], dma_reserve); + } + + if (!is_highmem_idx(j)) + nr_kernel_pages += freesize; + /* Charge for highmem memmap if there are enough kernel pages */ + else if (nr_kernel_pages > memmap_pages * 2) + nr_kernel_pages -= memmap_pages; + nr_all_pages += freesize; + + /* + * Set an approximate value for lowmem here, it will be adjusted + * when the bootmem allocator frees pages into the buddy system. + * And all highmem pages will be managed by the buddy system. + */ + /* 设置zone->spanned_pages为包括洞的页框数 */ + zone->managed_pages = is_highmem_idx(j) ? realsize : freesize; +#ifdef CONFIG_NUMA + /* 设置zone中的节点标识符 */ + zone->node = nid; + /* 设置可回收页面比率 */ + zone->min_unmapped_pages = (freesize*sysctl_min_unmapped_ratio) + / 100; + /* 设置slab回收缓存页的比率 */ + zone->min_slab_pages = (freesize * sysctl_min_slab_ratio) / 100; +#endif + /* 设置zone的名称 */ + zone->name = zone_names[j]; + + /* 初始化各种锁 */ + spin_lock_init(&zone->lock); + spin_lock_init(&zone->lru_lock); + zone_seqlock_init(zone); + /* 设置管理区属于的节点对应的pg_data_t结构 */ + zone->zone_pgdat = pgdat; + /* 初始化cpu的页面缓存 */ + zone_pcp_init(zone); + + /* For bootup, initialized properly in watermark setup */ + mod_zone_page_state(zone, NR_ALLOC_BATCH, zone->managed_pages); + + /* 初始化lru相关成员 */ + lruvec_init(&zone->lruvec); + if (!size) + continue; + + set_pageblock_order(); + /* 定义了CONFIG_SPARSEMEM该函数为空 */ + setup_usemap(pgdat, zone, zone_start_pfn, size); + /* 设置pgdat->nr_zones和zone->zone_start_pfn成员 + * 初始化zone->free_area成员 + * 初始化zone->wait_table相关成员 + */ + ret = init_currently_empty_zone(zone, zone_start_pfn, size); + BUG_ON(ret); + /* 初始化该zone对应的page结构 */ + memmap_init(size, nid, j, zone_start_pfn); + } +} +``` + + + + +##2.7 memmap_init初始化page页面 +------- + +在free_area_init_core初始化内存管理区zone的过程中, 通过memmap_init函数对每个内存管理区zone的page内存进行了初始化 + + +memmap_init函数定义在[mm/page_alloc.c?v=4.7, line ](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5241) + +```cpp +#ifndef __HAVE_ARCH_MEMMAP_INIT +#define memmap_init(size, nid, zone, start_pfn) \ + memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY) +#endif +``` +memmap_init_zone函数完成了page的初始化工作, 该函数定义在[mm/page_alloc.c?v=4.7, line 5139](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5139) + + +至此,节点和管理区的关键数据已完成初始化,内核在后面为内存管理做得一个准备工作就是将所有节点的管理区都链入到zonelist中,便于后面内存分配工作的进行 + +内核在start_kernel()-->build_all_zonelist()中完成zonelist的初始化 + + +#3 初始化zonelists +------- + + +内核setup_arch的最后通过bootmem_init中完成了内存数据结构的初始化(包括内存结点pg_data_t, 内存管理域zone和页面信息page), 数据结构已经基本准备好了, 在后面为内存管理做得一个准备工作就是将所有节点的管理区都链入到zonelist中,便于后面内存分配工作的进行. + + +内存节点pg_data_t中将内存节点中的内存区域zone按照某种组织层次存储在一个zonelist中, 即pglist_data->node_zonelists成员信息 + +```cpp +// http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L626 +typedef struct pglist_data +{ + struct zone node_zones[MAX_NR_ZONES]; + struct zonelist node_zonelists[MAX_ZONELISTS]; +} +``` + + +内核定义了内存的一个层次结构关系, 首先试图分配廉价的内存,如果失败,则根据访问速度和容量,逐渐尝试分配更昂贵的内存. + +高端内存最廉价, 因为内核没有任何部分依赖于从该内存域分配的内存, 如果高端内存用尽, 对内核没有副作用, 所以优先分配高端内存 + +普通内存域的情况有所不同, 许多内核数据结构必须保存在该内存域, 而不能放置到高端内存域, 因此如果普通内存域用尽, 那么内核会面临内存紧张的情况 + +DMA内存域最昂贵,因为它用于外设和系统之间的数据传输。 +举例来讲,如果内核指定想要分配高端内存域。它首先在当前结点的高端内存域寻找适当的空闲内存段,如果失败,则查看该结点的普通内存域,如果还失败,则试图在该结点的DMA内存域分配。如果在3个本地内存域都无法找到空闲内存,则查看其他结点。这种情况下,备选结点应该尽可能靠近主结点,以最小化访问非本地内存引起的性能损失。 + + +##3.1 回到start_kernel函数(已经完成的工作) +------- + + +前面我们分析了start_kernel()->setup_arch()函数, 已经完成了memblock内存分配器的创建和初始化工作, 然后paging_init也完成分页机制的初始化, 然后bootmem_init也完成了内存结点和内存管理域的初始化工作. setup_arch函数已经执行完了, 现在我们回到start_kernel + + +```cpp +asmlinkage __visible void __init start_kernel(void) +{ + + setup_arch(&command_line); + + + build_all_zonelists(NULL, NULL); + page_alloc_init(); + + + /* + * These use large bootmem allocations and must precede + * mem_init(); + * kmem_cache_init(); + */ + mm_init(); + + kmem_cache_init_late(); + + kmemleak_init(); + setup_per_cpu_pageset(); + + rest_init(); +} +``` + +下面内核开始通过start_kernel()->build_all_zonelists来设计内存的组织形式 + +##3.2 build_all_zonelists初始化zonelists +------- + + + +内核在start_kernel中通过build_all_zonelists完成了内存结点及其管理内存域的初始化工作, 调用如下 + + +```cpp + build_all_zonelists(NULL, NULL); +``` + +[build_all_zonelists](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029)建立内存管理结点及其内存域的组织形式, 将描述内存的数据结构(结点, 管理域, 页帧)通过一定的算法组织在一起, 方便以后内存管理工作的进行. 该函数定义在[mm/page_alloc.c?v4.7, line 5029](http://lxr.free-electrons.com/source/mm/page_alloc.c?v4.7#L5029) + + + +```cpp +/* + * Called with zonelists_mutex held always + * unless system_state == SYSTEM_BOOTING. + * + * __ref due to (1) call of __meminit annotated setup_zone_pageset + * [we're only called with non-NULL zone through __meminit paths] and + * (2) call of __init annotated helper build_all_zonelists_init + * [protected by SYSTEM_BOOTING]. + */ +void __ref build_all_zonelists(pg_data_t *pgdat, struct zone *zone) +{ + /* 设置zonelist中节点和内存域的组织形式 + * current_zonelist_order变量标识了当前系统的内存组织形式 + * zonelist_order_name以字符串存储了系统中内存组织形式的名称 */ + set_zonelist_order(); + + if (system_state == SYSTEM_BOOTING) { + build_all_zonelists_init(); + } else { +#ifdef CONFIG_MEMORY_HOTPLUG + if (zone) + setup_zone_pageset(zone); +#endif + /* we have to stop all cpus to guarantee there is no user + of zonelist */ + stop_machine(__build_all_zonelists, pgdat, NULL); + /* cpuset refresh routine should be here */ + } + vm_total_pages = nr_free_pagecache_pages(); + /* + * Disable grouping by mobility if the number of pages in the + * system is too low to allow the mechanism to work. It would be + * more accurate, but expensive to check per-zone. This check is + * made on memory-hotadd so a system can start with mobility + * disabled and enable it later + */ + if (vm_total_pages < (pageblock_nr_pages * MIGRATE_TYPES)) + page_group_by_mobility_disabled = 1; + else + page_group_by_mobility_disabled = 0; + + pr_info("Built %i zonelists in %s order, mobility grouping %s. Total pages: %ld\n", + nr_online_nodes, + zonelist_order_name[current_zonelist_order], + page_group_by_mobility_disabled ? "off" : "on", + vm_total_pages); +#ifdef CONFIG_NUMA + pr_info("Policy zone: %s\n", zone_names[policy_zone]); +#endif +} +``` + + +##3.3 设置结点初始化顺序 +------- + + +在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(); + /* ....... */ +} +``` + + +##3.3.1 zonelist +------- + + +前面我们讲解内存管理域时候讲解到, 系统中的所有管理域都存储在一个多维的数组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 +/* + * + * The zone_table array is used to look up the address of the + * struct zone corresponding to a given zone number (ZONE_DMA, + * ZONE_NORMAL, or ZONE_HIGHMEM). + */ +zone_t *zone_table[MAX_NR_ZONES*MAX_NR_NODES]; +EXPORT_SYMBOL(zone_table); +``` + +* MAX_NR_NODES为系统中内存结点的数目 + +* MAX_NR_ZONES为系统中单个内存结点所拥有的最大内存区域数目 + + + +##3.3.2 内存域初始化顺序zonelist_order +------- + + +NUMA系统中存在多个节点, 每个节点对应一个`struct pglist_data`结构, 每个结点中可以包含多个zone, 如: ZONE_DMA, ZONE_NORMAL, 这样就产生几种排列顺序, 以2个节点2个zone为例(zone从高到低排列, ZONE_DMA0表示节点0的ZONE_DMA,其它类似). + +* Legacy方式, 每个节点只排列自己的zone; + +![Legacy方式](../images/legacy-order.jpg) + +* Node方式, 按节点顺序依次排列,先排列本地节点的所有zone,再排列其它节点的所有zone。 + + +![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 +/* + * zonelist_order: + * 0 = automatic detection of better ordering. + * 1 = order by ([node] distance, -zonetype) + * 2 = order by (-zonetype, [node] distance) + * + * 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 /* 智能选择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 | + + + +##3.3.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 */ +static int user_zonelist_order = ZONELIST_ORDER_DEFAULT; +/* string for sysctl */ +#define NUMA_ZONELIST_ORDER_LEN 16 +char numa_zonelist_order[16] = "default"; + + +// http://lxr.free-electrons.com/source/mm/page_alloc.c#L4571 +static void set_zonelist_order(void) +{ + if (user_zonelist_order == ZONELIST_ORDER_DEFAULT) + current_zonelist_order = default_zonelist_order(); + else + current_zonelist_order = user_zonelist_order; +} + + +#else /* CONFIG_NUMA */ + +// http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4892 +static void set_zonelist_order(void) +{ + current_zonelist_order = ZONELIST_ORDER_ZONE; +} +``` + + +其设置的基本流程如下 + +* 如果系统当前系统是非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指定的内存域排列方式 + + + +##3.3.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 */ +``` + + + +###3.3.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动态改变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); +``` + +##3.4 build_all_zonelists_init完成内存域zonelists的初始化 +------- + +build_all_zonelists函数在通过set_zonelist_order设置了zonelists中结点的组织顺序后, 首先检查了ssytem_state标识. 如果当前系统处于boot阶段(SYSTEM_BOOTING), 就开始通过build_all_zonelists_init函数初始化zonelist + + +```cpp +build_all_zonelists(pg_data_t *pgdat, struct zone *zone) +{ + /* 设置zonelist中节点和内存域的组织形式 + * current_zonelist_order变量标识了当前系统的内存组织形式 + * zonelist_order_name以字符串存储了系统中内存组织形式的名称 */ + set_zonelist_order(); + + if (system_state == SYSTEM_BOOTING) { + build_all_zonelists_init(); +``` + + +###3.4.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) + + +```cpp +/* Values used for system_state */ +extern enum system_states +{ + SYSTEM_BOOTING, + SYSTEM_RUNNING, + SYSTEM_HALT, + SYSTEM_POWER_OFF, + SYSTEM_RESTART, +} system_state; +``` + +* 如果系统system_state是SYSTEM_BOOTING, 则调用`build_all_zonelists_init`初始化所有的内存结点 + +* 否则的话如果定义了冷热页`CONFIG_MEMORY_HOTPLUG`且参数zone(待初始化的内存管理域zone)不为NULL, 则调用setup_zone_pageset设置冷热页 + + + +```cpp +if (system_state == SYSTEM_BOOTING) +{ + build_all_zonelists_init(); +} +else +{ +#ifdef CONFIG_MEMORY_HOTPLUG + if (zone) + setup_zone_pageset(zone); +#endif +``` + +##3.4.2 build_all_zonelists_init函数 + +build_all_zonelists函数在如果当前系统处于boot阶段(system_state == SYSTEM_BOOTING), 就开始通过build_all_zonelists_init函数初始化zonelist + + +build_all_zonelists_init函数定义在[mm/page_alloc.c?v=4.7, line 5013](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5013) + +```cpp +static noinline void __init +build_all_zonelists_init(void) +{ + __build_all_zonelists(NULL); + mminit_verify_zonelist(); + cpuset_init_current_mems_allowed(); +} +``` + + +build_all_zonelists_init将将所有工作都委托给__build_all_zonelists完成了zonelists的初始化工作, 后者又对系统中的各个NUMA结点分别调用build_zonelists. + + +函数__build_all_zonelists定义在[mm/page_alloc.c?v=4.7, line 4959](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4959) + + +```cpp +/* return values int ....just for stop_machine() */ +static int __build_all_zonelists(void *data) +{ + int nid; + int cpu; + pg_data_t *self = data; + + /* ...... */ + + for_each_online_node(nid) { + pg_data_t *pgdat = NODE_DATA(nid); + + build_zonelists(pgdat); + } + /* ...... */ +} +``` + +`for_each_online_node`遍历了系统中所有的活动结点. + +由于UMA系统只有一个结点,build_zonelists只调用了一次, 就对所有的内存创建了内存域列表. + +NUMA系统调用该函数的次数等同于结点的数目. 每次调用对一个不同结点生成内存域数据 + + +##3.4.3 build_zonelists初始化每个内存结点的zonelists +------- + +build_zonelists(pg_data_t *pgdat)完成了节点pgdat上zonelists的初始化工作, 它建立了备用层次结构zonelists. 由于UMA和NUMA架构下结点的层次结构有很大的区别, 因此内核分别提供了两套不同的接口. + +如下所示 + +```cpp +// http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7 +4571 #ifdef CONFIG_NUMA + +4586 static int __parse_numa_zonelist_order(char *s) + +4601 static __init int setup_numa_zonelist_order(char *s) + +4619 int numa_zonelist_order_handler(struct ctl_table *table, int write, +4620 void __user *buffer, size_t *length, + +4678 static int find_next_best_node(int node, nodemask_t *used_node_mask) + +4730 static void build_zonelists_in_node_order(pg_data_t *pgdat, int node) + +4746 static void build_thisnode_zonelists(pg_data_t *pgdat) + +4765 static void build_zonelists_in_zone_order(pg_data_t *pgdat, int nr_nodes) + +4789 #if defined(CONFIG_64BIT) + +4795 static int default_zonelist_order(void) +4799 #else +4808 static int default_zonelist_order(void) +4812 #endif /* CONFIG_64BIT */ + +4822 static void build_zonelists(pg_data_t *pgdat) + +4872 #ifdef CONFIG_HAVE_MEMORYLESS_NODES +4879 int local_memory_node(int node) +4888 #endif + +4890 #else /* CONFIG_NUMA */ + +4897 static void build_zonelists(pg_data_t *pgdat) + +4892 static void set_zonelist_order(void) + +4931 #endif /* CONFIG_NUMA */ +``` + +| 函数 | NUMA | UMA | +|:------:|:--------:| +| build_zonelists | [build_zonelists -=> mm/page_alloc.c?v=4.7, line 4822](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4822) | [build_zonelists -=> mm/page_alloc.c?v=4.7, line 4897](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4897)

[build_zonelists_node -=> mm/page_alloc.c?v=4.7, line 4531](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4531) | + +我们以UMA结构下的build_zonelists为例, 来讲讲内核是怎么初始化备用内存域层次结构的, UMA结构下的build_zonelists函数定义在[mm/page_alloc.c?v=4.7, line 4897](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4897), 如下所示 + + +node_zonelists的数组元素通过指针操作寻址, 这在C语言中是完全合法的惯例。实际工作则委托给build_zonelist_node。在调用时,它首先生成本地结点内分配内存时的备用次 + + +内核在build_zonelists中按分配代价从昂贵到低廉的次序, 迭代了结点中所有的内存域. 而在build_zonelists_node中, 则按照分配代价从低廉到昂贵的次序, 迭代了分配代价不低于当前内存域的内存域. + + +首先我们来看看build_zonelists_node函数, 该函数定义在[mm/page_alloc.c?v=4.7, line 4531](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4531) + +```cpp +/* + * Builds allocation fallback zone lists. + * + * Add all populated zones of a node to the zonelist. + */ +static int build_zonelists_node(pg_data_t *pgdat, struct zonelist *zonelist, int nr_zones) +{ + struct zone *zone; + enum zone_type zone_type = MAX_NR_ZONES; + + do { + zone_type--; + zone = pgdat->node_zones + zone_type; + if (populated_zone(zone)) { + zoneref_set_zone(zone, + &zonelist->_zonerefs[nr_zones++]); + check_highest_zone(zone_type); + } + } while (zone_type); + + return nr_zones; +} +``` + +备用列表zonelists的各项是借助于zone_type参数排序的, 该参数指定了最优先选择哪个内存域, 该参数的初始值是外层循环的控制变量i. + +我们知道其值可能是ZONE_HIGHMEM、ZONE_NORMAL、ZONE_DMA或ZONE_DMA32之一. + +nr_zones表示从备用列表中的哪个位置开始填充新项. 由于列表中尚没有项, 因此调用者传递了0. + +内核在build_zonelists中按分配代价从昂贵到低廉的次序, 迭代了结点中所有的内存域. 而在build_zonelists_node中, 则按照分配代价从低廉到昂贵的次序, 迭代了分配代价不低于当前内存域的内存域. + +在build_zonelists_node的每一步中, 都对所选的内存域调用populated_zone, 确认zone->present_pages大于0, 即确认内存域中确实有页存在. 倘若如此, 则将指向zone实例的指针添加到zonelist->zones中的当前位置. 后备列表的当前位置保存在nr_zones. + +在每一步结束时, 都将内存域类型zone_type减1.换句话说, 设置为一个更昂贵的内存域类型. 例如, 如果开始的内存域是ZONE_HIGHMEM, 减1后下一个内存域类型是ZONE_NORMAL. + +考虑一个系统, 有内存域ZONE_HIGHMEM、ZONE_NORMAL、ZONE_DMA。在第一次运行build_zonelists_node时, 实际上会执行下列赋值 + +```cpp +zonelist->zones[0] = ZONE_HIGHMEM; +zonelist->zones[1] = ZONE_NORMAL; +zonelist->zones[2] = ZONE_DMA; +``` + +我们以某个系统为例, 图中示范了一个备用列表在多次循环中不断填充的过程. 系统中共有四个结点 + +![连续填充备用列表](../images/build_zonelists_node.png) + +```cpp +其中 +A=(NUMA)结点0 0=DMA内存域 +B=(NUMA)结点1 1=普通内存域 +C=(NUMA)结点2 2=高端内存域 +D=(NUMA)结点3 +``` + + +第一步之后, 列表中的分配目标是高端内存, 接下来是第二个结点的普通和DMA内存域. + +内核接下来必须确立次序, 以便将系统中其他结点的内存域按照次序加入到备用列表. + +现在我们回到build_zonelists函数, UMA架构下该函数定义在[mm/page_alloc.c?v=4.7, line 4897](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L4897), 如下所示 + + + +```cpp +static void build_zonelists(pg_data_t *pgdat) +{ + int node, local_node; + enum zone_type j; + struct zonelist *zonelist; + + /* ...... */ + + for (node = local_node + 1; node < MAX_NUMNODES; node++) { + if (!node_online(node)) + continue; + j = build_zonelists_node(NODE_DATA(node), zonelist, j); + } + for (node = 0; node < local_node; node++) { + if (!node_online(node)) + continue; + j = build_zonelists_node(NODE_DATA(node), zonelist, j); + } + + zonelist->_zonerefs[j].zone = NULL; + zonelist->_zonerefs[j].zone_idx = 0; +} +``` + +第一个循环依次迭代大于当前结点编号的所有结点. 在我们的例子中,有4个结点编号副本为0、1、2、3,此时只剩下结点3。新的项通过build_zonelists_node被加到备用列表。此时j的作用就体现出来了。在本地结点的备用目标找到之后,该变量的值是3。该值用作新项的起始位置。如果结点3也由3个内存域组成,备用列表在第二个循环之后的情况如图3-9的第二步所示 + +第二个for循环接下来对所有编号小于当前结点的结点生成备用列表项。在我们的例子中,这些结点的编号为0和1。 如果这些结点也有3个内存域,则循环完毕之后备用列表的情况如下图下半部分所示 + +![完成的备用列表](../images/build_zonelists.png) + +备用列表中项的数目一般无法准确知道,因为系统中不同结点的内存域配置可能并不相同。因此 +列表的最后一项赋值为空指针,显式标记列表结束。 +对总数N个结点中的结点m来说,内核生成备用列表时,选择备用结点的顺序总是:m、m+1、 +m+2、…、N1、0、1、…、m1。这确保了不过度使用任何结点。例如,对照情况是:使用一个独立 +于m、不变的备用列表。 + + + +##3.4.4 setup_pageset初始化per_cpu缓存 +------- + +前面讲解内存管理域zone的时候, 提到了per-CPU缓存, 即冷热页. 在组织每个节点的zonelist的过程中, setup_pageset初始化了per-CPU缓存(冷热页面) + +```cpp +static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch) +{ + pageset_init(p); + pageset_set_batch(p, batch); +} +``` + + + +在此之前free_area_init_node初始化内存结点的时候, 内核就输出了冷热页的一些信息, 该工作由zone_pcp_init完成, 该函数定义在[mm/page_alloc.c?v=4.7, line 5029](http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L5029) + +```cpp +static __meminit void zone_pcp_init(struct zone *zone) +{ + /* + * per cpu subsystem is not up at this point. The following code + * relies on the ability of the linker to provide the + * offset of a (static) per cpu variable into the per cpu area. + */ + zone->pageset = &boot_pageset; + + if (populated_zone(zone)) + printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%u\n", + zone->name, zone->present_pages, + zone_batchsize(zone)); +} +``` + + +#4 总结 +------- + + + +##4.1 start_kernel启动流程 +------- + + +```cpp +start_kernel() + |---->page_address_init() + | 考虑支持高端内存 + | 业务:初始化page_address_pool链表; + | 将page_address_maps数组元素按索引降序插入 + | page_address_pool链表; + | 初始化page_address_htable数组. + | + |---->setup_arch(&command_line); + | + |---->setup_per_cpu_areas(); + | 为per-CPU变量分配空间 + | + |---->build_all_zonelist() + | 为系统中的zone建立后备zone的列表. + | 所有zone的后备列表都在 + | pglist_data->node_zonelists[0]中; + | + | 期间也对per-CPU变量boot_pageset做了初始化. + | + |---->page_alloc_init() + |---->hotcpu_notifier(page_alloc_cpu_notifier, 0); + | 不考虑热插拔CPU + | + |---->pidhash_init() + | 详见下文. + | 根据低端内存页数和散列度,分配hash空间,并赋予pid_hash + | + |---->vfs_caches_init_early() + |---->dcache_init_early() + | dentry_hashtable空间,d_hash_shift, h_hash_mask赋值; + | 同pidhash_init(); + | 区别: + | 散列度变化了(13 - PAGE_SHIFT); + | 传入alloc_large_system_hash的最后参数值为0; + | + |---->inode_init_early() + | inode_hashtable空间,i_hash_shift, i_hash_mask赋值; + | 同pidhash_init(); + | 区别: + | 散列度变化了(14 - PAGE_SHIFT); + | 传入alloc_large_system_hash的最后参数值为0; + | +``` + +##4.2 pidhash_init配置高端内存 +------- + + +```cpp +void pidhash_init(void) + |---->pid_hash = alloc_large_system_hash("PID", sizeof(*pid_hash), + | 0, 18, HASH_EARLY|HASH_SMALL, &pidhash_shift, NULL, 4096); + | 根据nr_kernel_pages(低端内存的页数),分配哈希数组,以及各个哈希 + | 数组元素下的哈希链表的空间,原理如下: + | number = nr_kernel_pages; + | number >= (18 - PAGE_SHIFT) 根据散列度获得数组元素个数 + | number = roundup_pow_of_two(number); + | pidhash_shift = max{x | 2**x <= number} + | size = number * sizeof(*pid_hash); + | 使用位图分配器分配size空间,将返回值付给pid_hash; + | + |---->pidhash_size = 1 << pidhash_shift; + | + |---->for(i = 0; i < pidhash_size; i++) + | INIT_HLIST_HEAD(&pid_hash[i]); +``` + +##4.3 build_all_zonelists初始化每个内存节点的zonelists +------- + + + +```cpp +void build_all_zonelists(void) + |---->set_zonelist_order() + |---->current_zonelist_order = ZONELIST_ORDER_ZONE; + | + |---->__build_all_zonelists(NULL); + | Memory不支持热插拔, 为每个zone建立后备的zone, + | 每个zone及自己后备的zone,形成zonelist + | + |---->pg_data_t *pgdat = NULL; + | pgdat = &contig_page_data;(单node) + | + |---->build_zonelists(pgdat); + | 为每个zone建立后备zone的列表 + | + |---->struct zonelist *zonelist = NULL; + | enum zone_type j; + | zonelist = &pgdat->node_zonelists[0]; + | + |---->j = build_zonelists_node(pddat, zonelist, 0, MAX_NR_ZONES - 1); + | 为pgdat->node_zones[0]建立后备的zone,node_zones[0]后备的zone + | 存储在node_zonelist[0]内,对于node_zone[0]的后备zone,其后备的zone + | 链表如下(只考虑UMA体系,而且不考虑ZONE_DMA): + | node_zonelist[0]._zonerefs[0].zone = &node_zones[2]; + | node_zonelist[0]._zonerefs[0].zone_idx = 2; + | node_zonelist[0]._zonerefs[1].zone = &node_zones[1]; + | node_zonelist[0]._zonerefs[1].zone_idx = 1; + | node_zonelist[0]._zonerefs[2].zone = &node_zones[0]; + | node_zonelist[0]._zonerefs[2].zone_idx = 0; + | + | zonelist->_zonerefs[3].zone = NULL; + | zonelist->_zonerefs[3].zone_idx = 0; + | + |---->build_zonelist_cache(pgdat); + |---->pdat->node_zonelists[0].zlcache_ptr = NULL; + | UMA体系结构 + | + |---->for_each_possible_cpu(cpu) + | setup_pageset(&per_cpu(boot_pageset, cpu), 0); + |详见下文 + |---->vm_total_pages = nr_free_pagecache_pages(); + | 业务:获得所有zone中的present_pages总和. + | + |---->page_group_by_mobility_disabled = 0; + | 对于代码中的判断条件一般不会成立,因为页数会最够多(内存较大) ``` \ No newline at end of file diff --git a/study/kernel/02-memory/03-initialize/images/build_zonelists.png b/study/kernel/02-memory/03-initialize/images/build_zonelists.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb6938cddac3cd137e9e2622ac2798ac5224907 GIT binary patch literal 17071 zcmb`vbzD?$`|nFiN=t{*2+|=#hjc03($WG$cL)pbl1?Jba$8ZP$J!M7Ji>+ z|DL_~+52_QKIac$4YSsod);|m@6YF+a5WX#rjQ`As`?@fnzW9C&2GJ zEch$n52DLESxJPlVagrg1&Wn~vIGJ`B?Rl%1QmFV@lj6K1pxu4n7oqgWGcyRmOUoDzVVF|jpry`dhL!FMS9Fb z0Dm2|IrBNVIe-Lj;^k*dg-A?h^3l&v)X0P1c4ts3%P99sD^GsXCFN>npNUa{z)hs{8=N+AZae6d&O%p~bA#Z!%Mk<^(`ZMK>gBmxQl#C|>m zuUZfJxTmgp*Qqo4=#@YpZ%LHeGoA7I?M*2QOnouZKn-@1t9i z0Wm;>e$|d^F(uw2J5ghN@dro2R5rV3|E}I=gc`F=%Fm7{>dH8$YF8+MQY9Y2a^3KW zQhF8g_h+t%77YDL@vD3w{O`5rt8$w4@lB)$H=UW6XbY}IFIk;djtzJ3bxHGO*FEM$ z6oayzzdfbnVs#Z0O(XnNGp=u1{J$uVxA$Gx1ZOiZeqYjI_VKYF8_t6q(g)2e!Tsgy zN>rI*%`-#(Em!iVW;;}i4flNgt)kJLa}#)`!coo01An$se|%OH`!ul0Px^r=X!yAY z*)1v`!VziXXTV9Z=!6@+J1V_vkr{`_s0YU)>A4}viVqM7%3JLw{cz3ys2r&}Pptpvq+pW3QWJDnnWBDJetB@>EnckWr zL*1RG(!x%(`_;5$S|d!?U)SLF{nTt=^I^dy>uHr9La=7&FZVZNF%B)qGUKYBxRGmP z7T4C5-E?%&nvBxZ%R13-8k?o!y!7gr5%<5qDS3JFjQh!t`cFf=v0FbZ2tDaa zfo(d5pP}W99P_5}r<&9?;(6xjbZ#)`q`5n_oT`7rBH*fq;{G(9p%uR3W!GOlrLB?- zrK8`Y?JqO>@yuJtJ~IUig!KtRC03Ta-8+N`MWK_0P)SLcWLf$dIByPkYmc-Cb_vduT6Zt465pbF>Zu<#G z^GQzTz~s2MO_#K2R8Cv5&xKOiMYAAb#UHUARQb(8cconVZ0QWspl<}P-9ozePbK=u z-IEIxuqcNtE5_FK`}#4q_F?SxKZwV~Zqeu!9zuBuyPV7wJ479&m%%!F_cI7d5l zGz%j5b~CR1oXJ?X+p*Y#Z*4Y{V*kbuV4e_MOyF9Uz1q%ql9b%WBdx-GKRgt|qG<3- z)r!_>LE_ub?(kWMbvKpQNQ8==##0`As9*vj1}6KS@z_tjv#BpRvU|F^6#5=?+P6^J zjxOKOAxd$8$I-Rtms@nIJ|NaPUa7Iu2wqq6Wvuz^d`}u{a(5KoIm<;z_>g+GS4|BU z{^pmN$Rg@WRy1?QHRf@9)Pvt<(xPl6wa*5�n_p;17xoCuGc&g(QvE+6r8?aJ`r0 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 Og8Um5=`zXpLH`$C_$+|{ literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/03-initialize/images/build_zonelists_node.png b/study/kernel/02-memory/03-initialize/images/build_zonelists_node.png new file mode 100644 index 0000000000000000000000000000000000000000..4ccc99da49ed2cf711833fd9e1c3077e9c7f2b0b GIT binary patch literal 63728 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 literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/03-initialize/images/i386-setup_memory.jpg b/study/kernel/02-memory/03-initialize/images/i386-setup_memory.jpg index 935c025e15fe60b45a97ecee5ccaac661dcb2425..7f528c481a59efd4b36658b58d92b4abedb9a4d9 100644 GIT binary patch literal 53330 zcmcG$2UJsCv@VJjQGs7kk**+3nl!1Qh)VAY(p74N5b2N*5K%!udM^Q`NtYU0Kt<^g zdJ7~Xoe&}=2_cjh@PFr?JI1?j-1p8sjKN@MmzA~WTC;ugo4hwN&}2N%ex8nwj!|3d zz6l-OnJaX3CtsgCOFNSj^jMzu=Y*Gu<~_Rde$ExzhttmL`s#Fal`$9go}Hn6W_YP( z;YCNs^yBFFM3M*-2OS-1N&CL~BY)eq8HP-K;$g=I>Q4H{HA&wtvoTSA2S$sk4AK01 z{DYfR7T_}%{_}4WWgYdkZaVatJxVqv#e*J=eZR68tcr#9`z-Y%rJb)urHyZG$oEZq zp(q%F!V)y5AKJ1M82UOi)c&+uvG?rvGeySvRi!gElj)~uQ=+4L2?{v*fKi+-kDD#@ z_55?aiy^$n=d~WcmO4$}@#Zvr&nxv%enZS1hIp?rE4uQ0p1Yug!CXxip_4~9zIybN zMaX?WD0lw0@gwmp0i)9rftD*e69TI^!?$vhKMj_8>S*J7E(rYybesY@m`4qcwP7lW6$T$zp^{+jfF`N55( z$mj#}7IYJuu)Wp4Uj-wmxN09?ekBs4cB!6eI`w8dAyGjlbiO+(JTAY5r2>9ICT?3p7+PzkpA~wv@C$)Mk6;WVPOWB zlPh9RXYID7U-*0P4SwrNwZV1%Mle`z|qP?CkLgkW3yIu zGKno)4R@=K(=jC}(Pu7UXyNbJdHllcLQ}K-->{@E*6hAGiEI6G3Hz9#tJrkmn<3qm zOZ1-zXB?Rmj9g2eS1oOn&M8rJmSI+bJ^roEt%Q9Dx*REGzxpVx^`&;Hqe(j1d20Bb z>^iKX6}?UVG4j*aphv3Xrz|CTrOy@v9YPHgiGCRXEYvp8TLBMS1#*;Ut4linwz0!* z$pus|tw;`SBC!bU7W{WYs^i}omJ6!0y$-d%_d0Z;B)=ywu;{lZuVOny#6w1A@ar1I zIXj6E^0DP-}B@bWI)qTAj)Lbh9;A@ z@;Dp>rA!X4f)H;j9E^KV2;a{Lo0aChnf^yf8sM?{W~AIk^Wg{o4%2t#)cY}o^GzQ( z_?@FOFYgohS9YJU2CNPCSE^`g6fnhjCoL~;UA}zzHaLb8NJ<-0bNkh^&##-jwkREW zMO@UhKrfzA)jg?_50f+lC3k+qGDGSL?K`43cT52ZwJ6w%Z&bGO=$i8kQ<*)XMWS=Z z!`^`san&hpm$=$h-^HU9J>ce)u@t0Y-kl^SlB;r^^^3S=dH>sv=ok0>r@L&=$|ix4N1R0^Yq3c4N2Elj6}UyrRW8_hY!DK7XTh|(6!WQ^ zSYpx;;hcT8xPw3?H;~ZM<#m-kwGyZ&gnIOoLEZ-r2h9y0W23}(7rDfTo$GPA+t=k@ zJhJ0G+w5kGQ{)S47S~M<6l?M$#PxpsI8=zeusMAJ)s?J|UPu#c%J8Xj?E9^7!1IBP zU+$`q(->mK8EAD~((SXw!<5mxg?KCi!0*t%ZI~C_+Tyv@C#O4F{J6BiW1$n?R|~2x zHUGQ4&CMdVjYj@)97**U`fO`M+33j5^B5M83L3hSc4y_(R`uhOF@fs}-pgOSailM` zX4aO`?_Sf)NBpp}K^M*T^zD*rUT!=Gj^U;PS5= ztrbF3si)sYX(1`((omzmE6X&a|IK@iek;6@tm5(IHcA=0zUzO~zW!slga8g1y<_AN zczfY$GP7#>F9iWG6Wi@v&6t!$P@8_vT9a5)u&T@I##fE3h4EbazD;(47XX>B!*@LP zcZp8f%bx7hXNom{{2I@5nt?8Sc5NLmu^J9+nQ7Naxh>Y@d+0Rv>>kxLR2|T+N|<;C zsachD@dbm%eWUK83l|<&*xJ}~UAZ~@Fjz=Is-Z^-N=hu6BXw$RDXNeT#lT@v z71cZ6PpfY^q2ildXIM%&#WYTR5}cArl1LU!;G!~}zL>HHYhg$+3%p5|1M zx<*}^g3I=ja{PUNSZO2$!@JkYYMc1wOLNupeF4|}ZTzrdIYMAF%%f1Nx*o;F?k6xRjwkVVDo3q>kPu8LWeRCFm zYcT)ozS#Mj!alv@Z_QS=hw%8qzU0cdPMaL;&XqD4H5VRKAVrgI&pa!;nvwhwNs-Z8 z+kGl%m^!Zn^e0n3<$G#qg*PifqH0Nwje5OBLJAey@W``SEshfj5?O_~_Pwoa*$!2k z^=Zn)v!Xt64V(Ix>Jh9W!WU9tj^FQ7z3|$hN{oMMSgl$QabgWy4wAV1(@jh|;DEYQ zVp-TC5QnrK*(%z~1M8vTvX^2szaetuocutK|PnZfm#zw+xzw zxYlt!q-H$ois$dex3@H>49CituUiZJsn*azGPXWws)N^+cpqN5z1s4@O0bN4xQl%1 z9u@@pD&oWz>`kqe1C6`SC{wwQ_wkJ~E#I8a&)$dR)P+B7*zV;_FbT|9}N~i#c*JX2xqcCAs3}LR_2irge79nDwD| zwl8drVK{UYh#tU1VQ%Kj1y|IDEtVP~DfdN5TDJ6FT06ENzJ6+FZ7%f?>I>y*AS z`bEx8IwYPX66S z3lKyT4n0BQxJn3wt;`Mhbkp}ea7GylTMP*=GnvBcHiF>@Z!8SqIR+K2X z$8)&v)2X&)mjQGgm|Qvs9zuuXv94J3pY-jMJ)97VLg>MpH*eCpUmm#c6AKXkxDu3L z0@x4FC}j;rVVLO5n?ku!8S)lp?wD&h`5gn2M;hW~%MS;XeNwDc4Qt_;Jr<4}%lujg zn&GDf$+r-w8}h>1=uFIFFcwBmvyGU76P0p0tn6Hs3jO|-Qi+L!(KT4I^_&3N%4<3# zl8}c;UZuM^SZLTaUNY8x{-%hTnDfKwEcsb`iw(RbYHvqCv+8G%Kn{zuczv)_*Yd#% z>SJ42DfZ;B)mzQLKek`LnR!!*Y;UWbdhZ}Gt12&>ZOlW)7Fy`J^z%Ap|0_>Ok32CfEzq$qPM?-|ENoR=OB=`Fa0K>$ z46;>bM01hni3;H@+0Qrtkme}Poph{`aodl6F77*gX1MTO%gIV9nXN9!xma;K#4PHuvyHfh*0nTMf>)X>tWL&d z>`_FLsL)4NiBxjSj$8CLY=fUoen*x9gywm#5A;{J9Ee&7WpnQA=ZM<1Sogz~Bnl4{ zz^hKd2h}ss?v3Dno!;O>?b&ICd94u!g@EnwY3ncH!Wt>m`C(xEO^w)Ti`rs6-~EH7 z3i|nIDSrO7#U8Y$UE4d)&RXP5lV1uq(k_;zaE4DzaQrCK*c}ydY?}f*Qc3uD3DJs7 z#e9AUuC0nX zU~C%mfn&T!LiLdM!PdMKbv1c<^44}chvQOowoS*&k5|MW4U8D#Jk}~$q#TFt3ug)< zted^H54>dK+!Q?1QJ*22XDt4V-lMp5cX(E0n@ zrL$*e#7S#tK@RiMSi2yA5IrxV^E_1{; zqj$f4U55qDn(L;d!5_b8)R2)G!MJjafn!&;uBFBa-ogObQ1fvfe*e{IZ5WO74LKpdDaxpq4}_KjxKb|70>@J%He;!!lZ5Qqb05YJU5YXn!#;Hf9PIxhR7OWe ze|4j2G-%U`Ic4f`iEearzzp#Tvb~y_*pT5%QTOcc6)~G-5`MI8=Bh7O*6~gj+x`2h zh+|iL1;EE;@>9}Ck!_zBXW*G)Lrz=jt(%st_@qf%%F$5f4cxlem8cB&DhTG?rxKGg zz%3TVW@XR&K8R?N+@xUbqPVNaO8+$}X-&VaSLQ1eX{?OC2OtKoawZB95Y#15&fyaZv->_5lYmBv>n zE9W8eqtvD;I*NURsYCKD7QLIqVfz9E5hqy_rTXZS~yKER;+o>N<~R`6pKK+RHfy!cAqGm}7;a=U}* z!q&eb(2X*_e{mwZU)TQypXlg1{wEOVuVecE0KQ!4{)dy3XMe?kyCjBFowcS-En~$?C3cw*Qf?CJP#I-f{Ud-^C%Ievbw~omF+45};*z zG-&I19z{B_t`Q!G=WodV2f(Fm^x<|A%f%~x`@Uay8NZGuOPh-e2f0e(9$WvrI=^0= zkMO7rV*ae1&^`v%`f$&^Uj5VIzPaz-US#I}5|4C6AjLCY%+*Yq2gvcS6zbDCKWy%y z_>t1=MM+%j2bZq$2Om%hIaLFOng#U!PDV|~>x$6t-ME|bsi8;6Bn^-gdAIggvUL9$ zj`ETb(w%|$EDSNGm6>am-7T{f9%L0yO|1XU<=6e8p{fb1mYy_=jl3K$78wW#hRgnS zg1@>wuL$|VwvD@z_%n#-iw0FwJ~?(L#_%ids>VgB54C`-gkwc2h~h)H0qYi3(?V_7 zfR6tgT69!6etB$_+9LYo z18bi1S8p#fT#*A$3;8`NcSHU~De3Yqo^{mDHQ3iRxcK)i6aW8Ua{moG?SFg7%AD)0 zI6vzp+WQG^#~uo#S8ESLCpEs@0^iSwzs&NWnuk=Jbl^ zRC1>1F$`PpdG1PF(0!(OPl2ZlG7X_Ao$7f0?|B-&H(2~`r@Yy|9XRIuUZ|wCq1z`l zeBy*ogkhx$mdPkV>CE}r?doowov$y)gHNRb&|HwWVY>Bcv(s+ljg5?PO4AiAo(dDS z0$6)VXxN$%hw!C^J+~MJiO^EkkOtK`cKU#>iNc4ku_<|a!fboTkaGFelMlXXLjBTH z{mmw>_}_LulVp&rFJIH>?(&OO#pvu=Jr z8IDP|GUKg7Z#5U-FRgR?misuhr$p!HRGmU}lxaRMurN!dK_pD0@k5#{%`E*2m zaib4ZZ@tXU&Z$4mxv$|NuU|OkCWp$)9P@wj)%#CL_1GC#%eLn)Ilp)%qPR= z-@Zc6kRKFs#D$)|#)Wg2?HpsBj}Ff+T?q0&+7~q=vQdhFRxEtE00O3u5Y{F7qUlU8op!9y2TJ};&dmvM${dQng{{r z1>UtHKYeBUQSr=0x*2tc$?%XM$n^rJkh;-zVK(vV-_6eYE!6K|lp56{DAEUAo5z;%SuCRP}R$WK-VIXKCb6K z&wt|W(el4gtMp|@!1cLoScaDy1NN+|;rL@h{bcAgDoO7bTcpRC^{muK3^TUw z(IstG&{GaM8`Y3LoyjVb_FgSsXm+xXs<{;Z>7cv$)P@`eCd}n8#*J;JjA{BiKvlD^ z;Yv?pNe+(=+~*7ok@t?a+Am9*Y09m_#x~LmJ!x`BGT64H%Na_Az3cAu!^SP*rvko* zM6tcj4{Y#UytV>^`dYc>UxZ#+>O5Bw`-4b>ZQT&xzfJ&tta1BPLZK98Kf?K_aGV?u z!*-^|c;cE>J`8F%m5?;@gDl!|>#c&4Q%}yMl3qB+XVy=4PIiL6UlOZK3Zig)W#$JK zAIr$?Pf$W5Rxeqkf7dmgD^U(ZK5=IDB)`@l*}4HsRa^~o{nG%;(c)cQga5`>yeDid z6DW!AuNubak0)Zd|5kX4PJ}#XAEnHO+KlBYAOl<)LmRSGygapfE<9uBgd)yljh;tN(gM1Bf<%^G&<$;50}!jfo#(UR1X ziN8_u=_H1fkm~81fxW`_f-3+SKDc6Z`z! zmEjwJ&oqqrChqQG>~0~EV}5(3b>=GhH<$P-wb6Q9Fgtz-ks=9TP2d#mhr@hcGv9ix zH1BgcZxX4?ul#*0^K0VV`cI*_I5<2?$+{J{S5;0qXj3Smw+%$x6TA~1lfM7zYUkUq zj7>elj_ayn~zQ zFAv@jYnfSO+Nq(pRU${x?GXz`=C0EWrIMCcj9FjvUtcetX;bTE7Bl zMs21A95&l>W=0#;I=T4@;1X*;bzyvePotVSe&pwI*)P`il2CzqiuEuq^lWz&YO!Ed zJ3D)4WevqIDq7L>`&!xI+Y79{iDGDdC%TmPJW+9Y^xcdTHoHiv0pwHO1}GvaDLlM{ z1)ezS4tn{y^y2h76Oib;p!V^3JxQ-7S+}&xv3t2*a6`m&Y+GQuQe#eme6BqOy7#l? zs;!_OVD4Q3TsXwY0x`<;q|F(GI9o6XdloaY#&mGfZ+e7WHZb@YMc3f`)RC{$E?&6d zRM)YuE*Ci+0UUw#rR!4b%1nqOHIBMn?3}kc4i();EpILUe$e1O`;NdGZwVClAVGa5Yao z=ch@Oq|9XidkyRO#!LFQ8$wp?oK&p@WlMluPoj39(b6k&&@gvWr4qx7&n_r0`s4#r z<&qf?cCbJSNkM~Nhn}{;HAFXH$t>sY+3O1B>#LW~`7ySz9lrq0r~yZcg6&JOCK6l@ z`HoG#n_%ynLe1wbCn@$sng%^@;M0rTM+IQ~_1EXV_U z7N76-<_FC86P38|&G$FqK@mcssR3NUJR*t=eQ4;v`~WKZ@J&q&m>`mA4GQ&9T_v29kbXX?5-c_S} zxypq*zpfv`W8)-{4#+>x$h+rdzJw>aj6yu(ragPaoYG~0CZ&#-dx0$K^s3r}c=E+3 zzl$B_-6*1%`-84euT|SkpQ_4}nR)2Pp|wK-v9KqP!r=$WVj`!UDGV$uoIcaHd*0** zVf+Hs%9i3^(7E<$-)5N*{3EJGQ1?6*@irL{}tNOUrlntQ4#F)0=A=n#u+E$f1z zTV%h+Wj|aI-`XU1QmG3Vxpj2QOiz7G0`>Zj19wUZjZZ;yI^DcRKOPe?6Xbvb2gSQp=O{8ByJx2qR{Uw>bH!vEoFZ{BuUSvg)-R-8i| ze_3d!&P>9eG&)gfU)I3Tz}Xq_x?sn>&p<#aaAfYYp2SxR$6KF}&_lbRhq+e`CK1pS zVLqj`SCfVk3IwZ|iu@<2gyx6azMvUH->=00Apm}u`{UHlt;~UWfy%{zShG7|;wPW5 zJz?U^alCiy+R=(Uf^m4w-xzF?JGJyMPO6h7+Tujm(xk^OTox6Ti35Co7fD>xP}0+N zF}ju&pV20y^knNWs;TFM%j6&5u5-7`24gGUOfo;Ae$&P~H4*O0O`k|1d1v5@tu1B_ z7tW@sb+3D@!XnF}J8jyPm5nE7Cl*#L-@NyIxddoH8(J_J3hnD_JT{*^lpx zF&(*XZ+g8!tuUP1SM+4opQ!T8J*%0Xc6T>!ZMH802J*l#?-MF*e^dl8&vIaBSToY` z)R{;oQsjOE9RA6SBVvoolfISY#<+4E6`RwC@II}FB7jfkdZ=umN^nBUo^?~zDd%?S zm+y3QP8j}9yUg=~au$9KpR^)aGAk&>-Vh#K@V~&!++1#ssyWU7rHtFM z09ldX&CxI#IcO?Dc4ZWo;CWq-%J)X_grPLH%X7!)_a-A#D9nO0C*0J^QRHU){#yTi zyaZwC#)~+nsqm#Ilh3^Os6A`L_)8{Z+ZX>voQ&$_7w!l1$^KHz3(evL1m1rx+SigiMe4hT6*nKRe^nHi@f}<;<9RrXi;SqK+5EZ zaWQ#MqqKoGU$yS=Xoh$(D?}&%I3YvMJ&}f!`O@GAHAT&w)OUFZHDd&M;A7jE$gv&i zynf|Y#$C`6%JcQ!-|HSkIo*ZMuHa*C!`GzY7LW)|jyCS!tN*fq%y~kq{tAcg|Ct)} z-z}$qzx=<5q5U75rMjf}7@@xZDh*wX=2qdAWRvdRl;z0lpLtyBH&k#Jgzj9=YPx0R z5>CUMUX>8GDK1?ZautEqfeptXlopy6w8m~<6Ivy4D|$~r&d`0WO;C_|M5}N(BaiIo z(A|?iWo{wQMEt7*QlNG>;7D=VkIaZF%n6!9=!q4p=EQDgB$hvVaPPHr&!ksjnIG-J zS2Z7w@Rf>?-#gl-d5*&mJ$cg$F4EOQJl~z}sxoAUzN2UU6UFO) zEur{t`>LjgT`6`FaXfP6k$%V1JozxdK;!yC+VNMc8N)e7OGMIMhvpm1D2^$GATLR( z-F{s1?D&<+4Y&WRps4w1tU0}QfnHkPQF=vwj4iFkoS60vLYS!p9C87N^FF4*1LxHl zA{6YA7xFkku1DCo9cuUfSrSgHZ@o;6%StxICJw7jBeA&_?VPzi_X|wrOgT1|;~cb@ z=kdNRn@|OEBiSt`Dv|Z9LbT9u-&yRcs+j#oL{d=C z4vpDU`)K#R(owWUTj~eaKKpQjn8-Ldo_&;%e1QgHzO1xu6YvD@?@D=0J52hm<<&au z=CaOC4HvZoYKIoiP~I_2qC8MtHIYmkum|Mk18Hi+Ya;zjHjC)dq5`kb z62heYcO$S%<}@U)%6A3=9Ljs|aM5#A);?C$uJT?ZVDiBWb8!(_*GDPZbM4(NfTl9p zp%`p5XTnSq`ANkP4Ws9CaHnR~t;jkErE@65vTEZ^k>$=qhiUycp=dJk|}Bf_pPV>286;X`KQg^i6n zN*j13StYt3lvpfw!fm<}8*I3t^Uqd>kYQ=g!&dpVeslls{l(`h{Ql(68{)%o!nW7R zBo-cvxX98c6LpLYw>@9AVow!21yK-SBB z4CA{idv-hrm5a<8EaQ8=@H<;I2c+Z@6olo3i32{164tyiJ^}YJoKlatp*3Fdh;PZ4 zsck$>)ANZ%j&A5$bN2r?HKL^x;aoyz9eb~fB*$8Q zW7Mnn=Rf%XDZlr-T7lQ%^@D!f*r{4qZCVAY4+W-m#cS;Nm;y(6DNh<$X-YysCTO-NcGAs+&4N&+}gRU05( z&lP8X`iREEUdf5w1ZZpHa^=86=7>hha1P&cDfCs!^Q-HzoB0tL*ev(3eGAtX%6Crl zLdRu@`efUD3%g&snlU(z@dtv_W_+Ah{7ScdT1x=A*y5xb!6f{oYs-b(A3;?;viKQ( z0o^hGaiV!lzDSF#YRTAVV9=_R?@ZoyGuQQZT3`z0Xlj!_9;55hS?yFTT6LQ-g`#3 zia?mG4i`9q81d=T5izRh4njb07ioexc-Ket_U&(XUut}N0U}K-ko_;%71zFGmP8Rz_oQZ%Kf5zd$ze8}f zVqPw0!jI}>WoR76AWWr(S%V6hb^Jl&j8%V1axQDDp$fH>ljbAROBUYfopjSE6{ z%1X-Rf;JyX*M}-z_R;H36bA*7ukC|tXm#QzDyf@AvK`3v*pF?FyHUV+X-$K1sT4gJ zanc>bI>_D+nyecY%{>@j0s;qX@+meF;n@LIO~Q8cN#__ClGwZoyV9hCb*W?c1+@_# zcwIiV)w^hDvlVX0ui)+Ry}bHtgc6DC4&T!H#3kXSemm}*2e=_(rC^>HLa=x9VD-~h zl1l5#-R+e{zx<9o|Bc^AM53Wa4P6Q@rg}`tW71K1a88)wKKBq+S=;09W%OpmWo!V< z*620m|IMXMNky#1P$P^X61K5JaRTDcNUT)bR+2;o2q+M;fHlh-Otly zmK78`(OBK`svcTE1ZIQ+o~Aky3Yj%q<}8;)CXrNU99LXCzphs9RBax5E=GIyIRdgO z`Jz`oP5wZ`lo`ZvNuuQjA-csn#)h6LV_};TD`H-LH~92t8UwW%;F-tpX>XLTL2tr` z6cv?rN82Dm!+I)<&OOs*%I~G zY@kThfmlHFT$=z=w&#Qk01(8Mlw)^yZq`%}j9J-XkuroDGxGZ-vcIr4S-r@atSVYj zh@aZ#Ob~PRrMUD8H592yy1HAl>jlYprULz_|KSdZy+Ksig?fD zJ)09)G_!{){y~e=*iN1eWlxMPT7weiMPlu4S$(cubhK<2B(&PUKFvjZ49)o|?%cY~ zBd?{BtuP}hO{3I1ab?*4sKf8Xx=lg{PCKw)T=~UBQe!67tfOV6yxu`iJ7ko*GK+5< z(GLHR_p5>lwm2I(n}??u#OySL8K29_f5D2-s_Ui)yP&4Lz_;f&hhtQ=-VR-*!JX+< z&u{_?^;A|=o!d-x+nOLgjJ>cp9Oi~0H0^M7LXeA!e*Rx;hCfROL%P49i&V0G)|b5ap(MAl z^c3KoEIC*AE*gVwm>W-IhReVBK8wI`J!^^FMQ)ab*0JD;pO<2pt$S7#O2?&9KNVtD zDu?b!8>N0;cyYtOI*4Mkz327AM-Sh)?AOw@&)C<{;hx)416o}w#a;uxzQ4cjvQxSg z9?oi)7zbvSB%l|fcb{hNHNqlSERLEczOvDxEmJ}ahaiom7a5KGsQw94P==7BvEH&a zgAK`vDZAu^0}Jhb0@*Wj{MZ+*h3Gf7Z7#gAnA=BA~m-=t?<_ z+3M@>5WHq&5i?l4z@ZoO1LEVFPWrqCszhj_8@c^JI7Q0}awVf889|wBv|#bNfbaus zUth*ISkh;i7p>Yj9c+ZQrezCjtD0;4xrU#DtS%wB8e^tv!QjP14^bcH_)o-{FF~R6 zw~dUZXdK#fj;0R_-5gF+*+HykqE=3e0mBO_weB_ubYm+4RQPACAnRfFLC5qpynf1{ zZ5jq~2&u4|?PvEiucg`1;LX;0Y(nBEgaeKTyuJ5ni7goY5uj>S>ki`Hs07-q-DU5r z0*|L-`jOO@r{7HpQnjpQb<`i*PDiQCkP>Zer4{41K0S!k^Ur5AKJ{J&wU-?z=~vEn z!ZJG{H6Cy&K}SOV@$h0_pY*ptu-{mu1&k?+G!4O*-CX=Vl9KGPH(^{96l}G!F_KWV zgUeqWbHQGC#?t=e}^mNAGc z>JFpecJdDq{^dP|E$QF+DSAdr72;ETe}WB(cTS}Gfn^x=lErNu+{Z`Y!3VEZvQkR! z8xJSwfYXSK10&AT&guBTMn8hQ&j8lPHcqKnw}UB5&+s!XYxzkdwryb$yNUzzy5m&p zCn}j2kwQ+){T8u0u=4TAGvLa-pVKH~#t&TAiz*2pq|j2o+uj!dc7x#ikk0TyfnP)L z@VmplrI2YF8%>@#V4DaLt+|+02skG@kvK2`xN92kx9^jUPPlEZ{0CoC^mgnqlykKq z*B)mkP;+6Vy=H%<(yIPx2r-&Q`o^1qRmTZyzn)ce2y3jkf&|(14j|h(7VYMNRA~gx zIb`olFJWWQ_akbcX2n%(+;3A;)fJC$rFFze56!JO_qt*o@#CS`h&!sRy@%6a`Qn72 zy8Yfqu;~yI1pGu|y=;xNNn2C8OgW>LgNpGm0Go`)99D_u{(Xg-&TRBz5&qr zKOz{u!4%t?7Zu!$iQ5V=_U=j6AyOVZpty;xawJ=#mGV$0x!DHpzsRsPE z#D-PiZi_&hv9c+llJQbWK-%wIoOy|H+vynl4#O{tjXeVcem!Gi1+X8Qp^*h;mT6Kn z3R;1z+`)Lp1@Pp)- zODu&AJfQ=>;OQH6XFxcg41^TuE0%|+Mi17WgDJ4B2s-5jZ9W)TifNI9lm;ZehI5qX zbq!CS2+G>^qrXV;4x+X5m=wC(q{)$WDIncEqQTRtIb-l!LHQ#{)a2|DntQW?DZboL zg-hRUv}VdxUE)qQjvBSSGSi`~^u?X#@p-3U>NY)ZuCk}DocngL zysKywrqcAqU^LwX35VLyc;46=eKhX*>2<83z@FQE{FwsuCazMoOu_tNAV4CC=|;Q) z)WG$|S%kEpVFo%&H!(tqEQ?q zv~t0GTV<}}biK#eP?6QhV6M|0W{@hwTbn5+B8h76d{DJmzj8x_{rk$fHHPHbUC#Zs z@Yaxg@0Z!hWI5^F-fX|C_RKC-Ae>nMcwT9fIBq8>|H{nMg+}ySywC$a*|y_S@#9M% zMGyQCc?PZYl&A?+-c`XKmE_chE(!fEzHK+ll(zHjy7ZUs?{6>U_alq!^K@ap$xLoi zV3Mfx>&oc+#WFbq7pC0-&@Ou$?zr%86}S9n+1XL(^~mjihBGQ1x^^^*X~oCb`A+YJ z*P%bo%M{-GfX(u1=7U)IP6G_bzC)tl+|m5NbEGVP`o= z*>Cj?ExVaW=Zlxsyz3>h0=H2rQwUiBA!&s`@n-?{^eN9Qs#B$yxWj{=UIH=ua_J_C zI|dcpg+y)pj(W^>>~N`1Lx)I3sy;H9k!y>qTFr*OI9|CoZ#rqc3_68y!_+wfV5O|h zFUgNNCt(UG(R3(o{YME>EddH+v&I{1+LO#~1*;DSWhKt)ri^<{=}I77xK%eOLjjA* z*J=C?$AsTMBkVTN6SaPy4lW6Pyp$r#IfBVb)2L2Y4RYZ+0-3A=^y+-lJ z;CRilvzMWl$`Ztfi|w5mg1-W~SBr@pWwjCwKi4PS@> z{CP`IJEepBlrXf^K^gi}Xf%7T>iL3>Lcm(8>^KsRSuaFoK$ky8k6BCd5vLXch6i#? z!(Mt_$RkimuE?v+w6?a*->*WPYHSD~J@NgEWma0($U-Qh>x}(k!1#mUaZtMAtcLL8 zyjPDz?Y_PFMmlI|GC31KB+B(Zy$FGpwxYRw;249MhPG2qtt(IYNxrF4*4ZVFQQQDa z42R0JD4~LBH}IaA29(IiE~Sitef$ksc3N3Ep7aMuptJamH<9Zis5u)Yf zz@?&rSR>TN=uDBDgn6C5-yRU^7D>XVD3{-&l`Y6cUH zd;umV#M^$_ADkHNiHg;#8fd32-`PdKCffrQyQKg_-~CYc-g%1-_{k01hk{K}qH;5C zEo~SAWe8S|&wu_l!s*eAnWd1a)H+pAm;`dWO7M^Au2<&-b1#p~HuO2d2aBriq0m|x zH|P17+h5qX|Gd7X_dW9&zkTf)8^h4t|@$lm^hEhHpEa}Ofpfo*^_ne-IMN4u@jHC$PT(qepDjB4;EXcMGtmW z4n=`YzFEqL))HwlL>3BpPXRbyRGXG_j0Ie=MRiPtr=e3v1kKA;&kkYMiPeH)Ux}wSfCsgI8B&t3l^Tm+AbXwF1A; zV*DN}U%Z&6fh+iyP5*!qWxQ6*w7?(^pAj5?*|7&YRrn4#)1-2nK87=n36JhU#l?B* z&ffD}-ClWupRRMps!Y~Df4jElgTU=)74*R*gW-unPdeSO|LZ%F((5LVnJZ4zuhNR5vnQYH3R$Uc}rTh~6-+ zh9~EPd=2OCQv9d9DN8@H3$o_>GlnxWwli7Q6+0GvMhngQ(yP3d+=Xo#Yd9x@2ZrmK zfdP%#ticTfqhqYy`CF`c##>Opl4My}UB$Okw($&e0y+@20)24Cq|A`?iZx31y6{L!$Fl-AzP}3CIbvQuQhl=c@LJ%HI1b8 zV6G^5LDQsYP3T8pnnu_(;-3^zi+e9-d{UIR=S|@u%FRFp#qL#Hs9lnjqkHwDt+)pC zT#~S<862|faRdg-u?u<0CD|X)ibcaYxzT@pzzT> z{1>bjK;LKyX^8jS_NO5u>E5v4+C|2N>CKc)*8=m@3c0Y0NgdgEKDjX4bq7qPy=DM- zsL=B{`EJomXIWGD5IzI>vYc(!oLn(x2rbgjmh7t$gjyxei~&HUR;S~z9P`5qMYsi{T04b?ZJv&BYX|b=z2_ikQI>pRq43Hd6Jejst44h zl=U@biQvn|OI(?0jgt&BONy!Q$s40miiq_a7g#0g7Jq=hFO&C4i=+5K+j0rb<`>;V zjW59Fu;hjH8PyEXi1R()b<&%q>$^h~_H)OW;h&!;y*TlN2o)AH&B}37KA$o@yQ~dV zT%1;oxmV?w5?@Y;K*H3y~npf%LN3N=`LTEKH)w zw3e8ivdHoZ0Fuu(aBy$-yGqRDk{S%KTq}19PR4sZxCd#RBL5;|_02MB$WT6WtMP9> zt0QIhNR|nXOQ-ToYDYHqp3-*bjiPf`JZ5y>s~Jn2C6eY452Io|SOha(8A=rU)I6o$ zYc|fM=K0n(qK!DK)_h-PX9nR+E5|xi zmK>Dm{TV9_5ZQu{DSe###JZ1Co}5|JeOw+G(18-w>gVC{8~Q2dyX2<4FV zwSG6WAR|g?Erh0zPu<=29aj!$Q(h1f(?tXvj%81GbT3W`CKW%Dn$3slR`nmX_ZX@n zX*I;l-eWLbSIn0?!Z36FttNd{jcj8Cjeo(m*34X64U+o<0S3OnHVFHdKW_k9KV^ zam=%5s@teDg|^gXp_~m;#L#t(t5zK~U}|Rm0)&*}3f-#}%dml;-S7ph5hB6V%?^YL z4K$X-CTS|wrlgZcqU4&%HHSOV+UIMv%LGGsY5QY{kA}w}Op3!kZMJldVfVH5C?VZO z20hyDfW0yv7Y^hSlsf0ra|!mwStAv@)+y6>f$&)i0JHP+21&Vp?S#6Ya!=iYgD!+XRH z!2#!8Ps^~KW#{96YjOiXBT@N?@Sl26FA?Q4@Vc-`+2!QVEUVyHYyJqxS!6i)aEf(w zo%>aa9;*1q5VxM9&KA9?O6}r}vH{Y^&r?n|2AkdlOyK{;+6a=IMP^32nkq#plK*5svLjBHSubBVu-voj#hg9I z%Re3#o$~3NzdrSTy3qV5?4tfZ;8_0qT0I#2Ez%71Cs?WdchQ4C|NY2e%gyk~A2KaN z_L73`6sfmXHHj&vH-?nKLnsL15RAdY;)#-Gu?C+%1D!yClKF}B^4Q754}%}=prs97 z3_8|x>J={7EEAv`9y~Ku0{jSdi+9gdL1{d@pc#-60~_W6J7=9IWSrm@P`VGC0Y3=s zf1kLYbqbgL88y$ha1t^Js9OOq?WJNf%uzr#K?Cm!2?`g1`in5J)+70x0_m)iC%U_9 zOnHZm<)7l)KHz3>?MJjl9el&F&`XOjf?`GM2PVQc&XTumn2!#D4P&BaO4GLX`V3Gs z{_Ot$n9JJLT4#aY;rh+K@8Y7?Cdp@IPR+;R#oxe=o1MMcWxVyRGPZ^RdilQ>Ap2iCUA9IX`fexw+qZPJtKy`KoIU&U)hqEM#*CqI zuTTfDzcGYAgUQh!`+R9iABYMf_K(+ne*ZY-?nxM^b~UxEz88D=oQ3-0^9khSb{#4C z&5xGAK6)BhBC03BC!Ul8ANj~n0>=3oVs`M_2}xWmd&xK}fOAc! zu-_s3dzFjvt7E?_0i+3`da|aS@8FrBFN<5CCmZdDFaCvdz{a<43X9o-GqFEDD6Y8# zzDAh{r_;7aey^`sa^!IWN|Wa6qlr*pcJdp@oB76pvYY|pA_mHgJ#v4(rIx?zQ-LvNC>XMssJlVQGWCP^P6jNZj}2G)N6wK@+AH&9NpNM? zl28pBuaqF0%Kg~~zdv~m*|_*Amj!U}9ro3-s&$i+qmU#4yGF+J>v1nz-Yf49;qM|K zpNKhhUY{J~UtIAnvdaHpz^`x%RO~&vHTA3-epv(b(kuGx?8`l!5~G5_Ixm{#ExsA2 zole!zC=KlA97P--3UU8qbrJ-}O8vtiZH;6yo^-mO-ck6^q(PCWjmiN5VMUo;x~+SU z9H{Azzy-@ThW}G-HMIO!e2eD<}rdCIEr?^P%%3 z)0(tByyf}ndk@Eh%4~u^xeUU?q{l3{;jrgGG0_-C2nacQgZ@|jsjp1xY`+r0)GGdz zL(H?qa0~FpIxVYYTd+?GcfLG4Btbxa%Ti?{OGei-_wZtpCB=AZ-Q6ecxmK1I<~oX2 zhn7OIjL`6djZMke?fAfFa>L4a0@|M{uF4EESW%f|r1W+< zZ!*iu_-E zvm+lY^@l51yn8xR`nn?PAKp0MupusK_woJB_qQwwfx#98q=yr!O3s6D^Qe^785m&m zyxb-&R&1UTr4@2cLhp?JN4d6%Ie@16$&E9;5MxLg>a0hX&`TyT$r7Hkm0+&3*j8~C zs$u*50wMWjLb?fy^kOJ&L!?Gfz7#v`>(Wi_(NmMv`9-RXFTGR{d(qC#*N<2Q5(xjn|Uz2(_8p1>XP!r*pQ!^yNllck|NuJ%Wi-77bq=JKUmB zQ6cR4lnRqdKk*=DILgra2D1zEQ-d7$Qh^lHC~5XG5HY<1`ElgSti=%B8RCW54F7Jn zacA8VfIdZ4}BMBx092t@Yc44^I{|xXFZjdw*O%>aTM&q(WVA_V4qb`D9Wi=!Gk{ZR&q@?vFVjoI3Hn z0=M|E++_mP2}A<3&J8JVxLPbPt-zdbjxop~hOZAxiGrfG1hg1k9OsHZf=TW$R=Y2M z${tkf4c?FE?M@jQ!`nxv`Al`C%-_o#5LIF}UHTAIe)FuY8TWdVA!IPAe{Nj}Li{=w zpTCGcR9Pi9TM!G;o1qWULDHZUyyj`0cgd6VrKFH$8a@Q(?5X5A62aM$%+4*Z8G(Y_ z>t)#Cz%vp?eEgzeo11l@P1@1hBZ4-?fJ^yvvy)4r#xN0kfpD2oyN{V zC_8^SGc(Q<--nJ*Sd=( z+o0_myg$R1lwwX@zWl?!r3sl23_KI&O8V^9NO|ezAZ|3M$aq{ zMe!veF5lW*K2p#b!cr~D?fEH@{Z-byGb?C2lgq~2s@~X^E8^5*H`q)) zb}-#>@{Ma4g<{KtvJJu%P)*Q7uqb3-nenK^gkgDmDLi23iJPK|EX*D*W&n-kz?szd zLw_x-U?t0aG$;3xTkpwR(U(V~#DY~sme3X_g~Bdeo&x#Nx$KGj)=t$Ri(diH! z05D!onoXB=w2W6jH8EDJLJb5$)J!p`#;azE@RgDh3v@?U6=gv^9_|D%VwH5(+c;q_ zyQ;GDLZs>%$XuutFgHCMmWcp1id1=r+L^v-mZH)0RKEteW&dD;^g72(LMX-;glC*q z+xvz_1|;1-DyzdmY_0M^%Qp+uVQJep7q?}u+`Rw&V~$Ec^_2w@h6Kc=$uLy~Fa`DE zf41Hnj<|^`G@(3V#)EW|_=kP)1SRPX*Karc2a&3y zGg7z>Mq%(`>~6#BwN7|d_o(!!u96(@VlA%m7A)^KYpu3h-A=457${|8hcdobmk@28 zYP=KWJmZ$EAJZ*V7Ik_f6uJ-1Fsk zPJ*W&cvO6m!oGA^_|YxR} zKy}`q4Njd(9WTvkaU4$Ls`UPOwWHH#(1Gq%|Bw4ip3gnw8uRp4hcF z&(FTbmE3oN@gTl1?QcCXYIo6+-|Z}Q7H;U{gF}GZgDuIWNU)10UKQ^TExUcysoI@v zcRoXrx*D*Y*L%Ic049RX3}l>uu^5QS!u~0H<`VrwO`P~;ix=FlUj}9iWL7J<08W=9 zb0lbpkenI0r^&-*V~x0Fs-HRX`1G&ozTAisoBICs5K1W$xaRvmfSERkW0jj7m)Gw( zq3HPQ>z>IZ=S(1_=yXd2cD!e_wKvqb=aZLE`H-bs&IIkdc>)>s^mWvpy$>-p)S-i| zhQW@*SG~&ySs3o?;SKL)#9ouDI4oPU%p5c>B6oiNZNJn-@Z)rD)K#r$NcyD8T4De0uP}igwFo$nqT`q3{GUho^o*Uls+FD zUudNJBKwU=*?r3yLQVR8a;;_aX!VV(`C*Ou_cp^;{P^OS>|?lG?vBF8F3V`}&Qh+Cf10PmY;zw`A=@EsrT z*qug3ge>YV9pWf^e#(ny%g+Xd2fNdolWQnL`pNUKzYgKDX|?y|gv}^b?Df9B2=Hj} z3@!?ABYsPhJVEF`3jE@{jkm_N{hnD784Bci>x)dg5%Gpx9hY|*ZC%F4Vl5Z$svqHR%)Z!}& zSI4{4&A}4&+?bfLobXz3d0~9i&MkhFY)<7t%*Ouw9j`8x*kayXD4ApU^#@Nh&T#T6 zPwud+4Ne@f#lX@&8ae4FC*$qIx9*ixWxv-oS+qRNo8yY7hjjXxrWiQ8RKaO^y3aY! zDV#E!=U4rk@hwW$X*D<3IO6$4q9(??6BuHdqlHS@k@L8x=z4A6p`hTdtEHQgI2pgJ za!}MdF=gS>Bj7w_)*uxPBUm;BP((#A<_TJIG`ZaH-3^I0+9&XADylocGWF?*@MTtU zL~RgRrpA^?0TcL>)P1k}2L9rRnLn4IW^YyPDYdqDJo)KvX&#^0qyK5{2mg}ywfDAW zOR7uOoM)CXug_Cu_NxsA!v6a?sG--qfe{9fyiBN}w7)+Q*tkX7`pQmfq~&g>?LWpuQgnEKe$Zxd1pcXlYgitSn)d=ez8juU(YYX~%6 zY+lMo6mOekRt z;`1Bkob5LzJ>BtBwzv%KvxJssl}a+zwWu3HZ{qg`4#lKv$UY=2Wt)>P!2}QCjH;W#s#rhv zoo0TVJ6d~_RZcguS!-GB_}US_h3Kfe1*9pkg3JU?laiZ7Hm!R%4hsIIvE!7jT{!2v zI}-wl63XXg17NQ&TWPyao0j^>rEX4`_g6n~!0q^5aXwlHdEPh;K}34QL)yHP{VyJ7f0U*0Lo{t&_XH_#ww)lXU_bhWwvXEpOmJX3gL{TQnFV9K=K*> z2Iez13^AYPF0@>~M%Kb|BQc$jJ zH`kHsS9_8`1puUoXJ780CTcg^TryS#PuZcrh{(kAQi&3+f^ybmX^ZUaq6p6B+UyjZ zNpnJ@Cv-njgNAG7Fzj%=7Ti>Ef~~kvI_0QHRuZcb-1zP^Bh}FMZe*LeK~jn6?@Gnd zqlMKfWS=?g?=oyTdOrCZW7NfSN5EA)3{>??>`+=@z12Rv&xEz{B2M^{^%K_T$?`W4 ze`@WOxJI{q-L)qWgldXw-_o*-f2G)8YG;bi9N>(9#7AIB<$&XYGv)#{(t=3Rzg`Qj;cCcl&9)csdinX!q6 zgtbX@pk8uLnHf=EivC-h0w~siT^)J~5@TMgA9$6I?K|E(C9zS{rpcT>i<@G+WKvX zvc2`nOzuyXJyw#j0j|<*) zvPLm%rTVah%{5N6()WJ|Tz@u$#9a<`li&NdUVzvCUmU{!a(Dg(J#y=0_^;23e}Bt! zXTP;F1%OEWAD@R{l7}lmgsol)m{+?ENmk+_Adhs(W4IqouymyVc}(sC#nb7hf+Uoq zJej|9_ijuNBJiIo@XR(a+0HYa5x;()P+fG+s#<67(Q_x)zARb;8Ccy1;2Je$cJ0Qj zcv$a&uE~EprT!tkU|!wZnAyQ`QW2#1bYtJOj-&VSZrx%2{?}reXDrLom#jc4w13~0 z2+yG&7s~23S$i=S(TGN^!6&zBSI>?n?n|cPbdOQz5DsHqsm?MEDrk( z!YddMO>CsVIq>LaF_^47evZqJlXc;S?4koDH%529VXe&7CaLT7UHFxp*_daYES7JL zwUcrAwp=WDJr95V8q#vdNHG04xW-%07+ZwN!j?uhb>~$qOY+OSW)|w~#KGJx4k!>Z zR1y2;?O7}D%7?)a{cr;Zi6hSqfnBp{2%w6J8E3}%Qxrfv2N5S>Mmu9;@D$2<>6-(Y zQ%}w4TAR+#6P6R7BZOiZZBa4MQ*i$kzS6+*@Pa8xl$~kUQz}6Z-!~g`32tZI?cyh7WET5&GI0D z6tYCl56b?Y*pRvHeXU{6=}0^*T4m*)i|b&{(`xr%gwD6>3Z7+)w5)Rcd%U~Vz!#8? zs(lx~K>`__jtp4gPByQH6c|(Q32w~KDpzL8T%Z2ZZ&M*Xx6 z^6kj1F8_E9iI!HId9KFaULzBe!q_Z*@Q_Q(egKjN`Je=K5QGPP4`kik2(}1HPVQxG z?3}HcsLomlEug`hokST`s8;hNb{5))$^fegIU= zres}%(2V}Ya5CEX1IbjI5D|f49ct^e56>{{U-`aXS{&D?=CP0%FX^QUSp=Xg1z#^R zT1EEZd*GX91u>f$Dzu3m-8^S55`9D{u_nvD^wigSo5y0lW4Wu<))U9PhM%co12Yr8 zD?IMpUo9n3L0_JzChegL(->otvWmoa2d(VMfenU_@9{B5@YDNv^P(uqf&kD1E=jfI zCwccPPRp!3eK2%lt7ry^Bb=|Lz|iTJk)`X;bC&Tk?<z7>O1kTP@{kY|2<%RN5gkQN^=_r?z-ybO%%KbyA?HyD+haww`=rHN_(L{+=wgKyj zClnPg-nHb&s`YSgRuw9>ddqLpd~@L;WfryZWf3mD#oiG!71Pg#wlavI7@oSa;J5~IO3q=mCBqYaM%4TV z5A|I~tKVMo9J$7%Qw3bot2Y1&yeCd1av8pG1hnvQ&WdPJN^Jl$vq` zbYj&NRl*J^HOP`TH9|ayez-CJ{*FnhPt8L$Ym5m&6m3~)0rD6mx z?<}@$_}+GB_8E`Uw`$`&$SYwzWduZHmM?wn4K0cfYN{|btz7l9t#pySm@gALZ$31# znddgB3?m<>(fu2rLeoAX{UcEwWCZe9ve9tDr;Hgy`_~1b&aNU;gVBQoq_`$hT>SC7 zvO;p=U@^WuWly|{hdx>|Q!wo2>`he5$ZM~CAT8ZIMrxDRlFG#?P(vJIdCPbp=s+LpDlXGkQ6zBJAy%PMv#o-EJ~4k0G|%{~WBf6!ac&j!yO ztv`M|!cuDci>PC_$zqIU`>Ppz(=Qz-9kHiq@w2bEwLhU zRTEy~?UUo4?@Pri2dtl7+xM(vfUoM{e*S|R(XRx~t~|`EQc?cxUu2H@pjbd+-6HA$ z6?y!rI3mqIM2&oYs^)Wf=hQyl^Z=`-hYyyrxJeZ*+IdYf7p^J=!oSd%o#)3UUYa}o z{Po@G+9tfC`grKvr>M}~;J(*TR*P+GP`PVI@!|cYh&{J@zjlPmoWBS2v!#}PAeQ(w z>VwV>81s?~fRW|ngy{ryf-ar!!6Sanf@DjC0X<=?oAgagD5y8VA>95x@NxNvnqx7^ zk&~@^-6WG52D{9esi#imWCfJbdmS$Le!CPj9(&$dXeK1FpL$xg!Q&OzVd|IzLamw< zK&-@`T2UQZ^b6u@SzZUIUP{xnm$knD7o5J9D(|6T9Uv0wEhuHW+jDl{=VH+J^SDMaxR?lXiA98b`3Y5 zqt|o++Y;tW(30c#-*=n^$V(OdzI`KnOQ;Roy3uE8o#*w@`ajFU@tj;d)<8@Fb^f~ZHeofB1)ie~FwuCmtY2Y2 zkEqPF527$Z|)r?vt$abWx z!gBhTCcthmDe!ak{ahA;?*IS@$nQ4!3uk|_=v4g5Bx^Q(aPss3>ond@?Hr|hk{)+N zGXL(N&m;(46Fu?9GfJRIghI~a_|SYx6hg&}$)LE;t^$SrkM8Z+@J4{+9#72z!sxZ{ z6;J%BBBTn18Q|Rq{ByWsV>|;{3QdF(CCxFwWcBOW$pBb_EpI;WWN_oW25JM_bZez@ zfr`lM^^yBpY{{@YyKV`X!h*hBivDDlprlmpgLsxxTa@kMV83QqH0r!8$l?b1 zUw<|%PmVFGaqaJYroV5pE9u=445&^J4d%NP*K2PiW>^CleSrO2u$qPR9kkbdUbCJ6>|9i*dX8Av+O$lrSJM3)$#yV7^Ul^rRA%GV?|Ra$ml4|;!c^E^RG#!En!t9?*uKiw?7bup^gTElKc88(O$*V z;>*4@p(>=JQpL#+l&6`F?aK2p-EjDFqtCiU!i-2Mii=%i3Wq1s;0+sI)~5~I?TfBz zrh@h%^d6^R)mxJIQg3SR1@zQdo8a8(ea+tG$NeX<7GyD7t!NC}&?+_iK?lKWdscZ( z$u`u6SmJ!q@nY@LW*0;>m6nDMC}Vj*ocN1tl#z}{;n@$aV*Z?;z_4&KbKhPjmMKNI zs<~4&-W97MYLsz1*mU;r!8lE~TlM-{C^fC2QrqJf3=CX@7YgD9Uf-L}<*nv-Tzm1V z(~d-h)3_BjIl@(bYAg}RO2M&(+n(Fm%z7lO$OLa=bg*bCB*~|Cp}3|M)X4!S`rVsw z1YzAaLn70~xS>n!hIUC{oEBxw5Yugb0lf#6wPEjt<}F{DDhAz(vM%%nzQ$S$Yo!aC zuXn(a6O|K!B*73uUKdD=wTVXCbo{8fK!V!%8V@M$LX%=ZmR1*MD9BCPPJb1^_FksGU(E zdVNeS+&dn~;NIV`u&8d@khO9SjyG4SWV-exBwJtcxidP*5|WIm2`sOA=Gno1gaRB zPh1YQHDYA046KK-Z()_l;mE$~SWxUVh`n&b70k*mQ<~XUSZRLI*$^_dZ|nmyKfL)~ zQHa~-mCgu;l9d-t7aJM853b|wymV}z7qgl4+N-Cn9ObI2t%glcDs`G(Gfr*XzMc_H z=2Pmgp5ZeUWwM*aGYe^&O$#sHgnA{Aotj+PO*4zZ`#mLXJLhD{4cj?lj%_Wt4F9c0 zk?L~V?d9c#rxzQIIW-t7am}Gb8?>nm5gg#l?NN@OdH;)S{Ji~GYzljHc8u| z#HhOOuuc8exaD8AQ$;hrQ>oTN{0%Gm+1P=#QhvD$$jA2LOg{dD_p;xi?rL#OyMH-O zruN!d5uWzU$nqW1z~DKkKWMCpdezWw)g^Wa+(e|)Ean?SK28LalseVcs_iAU?)~eU zYhM}F4E=jZP>s1RM-@0Sea!uA4)*H6mDh6|2BDXntBc_AtmA3DBC5=DI;c>hs%I_m zMY?`@3qpJ%7Fzh-#14QPc4T)ZR&?r!yI{YO7!9LSrPVfwLf(6u-;b7C%33czqivDic}XT=1B8sp^(zsfOdyd+b z6m|95_qp2LD~S?t^C$l0Hj@EW8x`-r=lm?oY_!?zPPjdtw>Pn2R3(`@eS?uLSkxUS zVy}O5;G*w3HRf#Zz?>bUbTVg~=V%kjl>`2@M*8)L$=7Ftdmvm>P%~K8K6!D&pE4v* z?cz4`2c5_4(>{AF2PN~LCPZloT>QD3n78BGzuFNW)u6(n!oYueJE#QY!h>r06H{n!_p-E4Ql zna=;rQm6-!HhuD_?4%K-BDCvc8Bu0xsLS|$bkL5Z?p@A1>n}(eMHK}a2o%|kjw)Y@ zIqubH`W#B;B=GzTx!SD}- zm+p^zRgqAKx6Qx-_xmDJ*IxIrR%*cAuOD*?cpqXtZ5^qdUR}N(s6w;!p){A+S)u6l zKH{R8UIsA)KF0ZO>LNSvrxry%Bz;3UFV~XdD@YGnhhk}#nF(3Z^m=r#k>}9Ijw7l< zJ2?84w)|mcEYb^rW|yRx5n`YO;2i=bb;^;rLVa-F4prz+KChtW|LA3Z;NbGJBmrxr z4DY9AwLQb4jSH*EZrz4=HCIlOM7AuF`I|uYh%Z`NeNc1j#yz( zTgxc-*y2MG7;@ zDL!P^VjEo9+vlFKNvO)B_<#@9rBml`cCD9TC{jHu*-B5z;h>R4DSbK1Pi=@ym<*JLmO@$lvQi)z}wR2FY@MlHSyme zF;FiD@dQ~NjW$U(4=O6Fn0I2OYGd6{dO6h23IzB$zv;YBeizEhHnnP2Wf<)?n8s~7 z;c|N!OQD67$E3=V+#9?1zV*-YjI0%=7L5yhzbAbWwaaohxz|PSn>M1*yr9dYLQC@& zkLn0%)?2ecbl3qTrO^Ls*R+H-hb?Q3d z>9CDB)8MLXui17F{piwKf0_%{?W3ETz3Eep@HTt=+hgl#6xNT;+Sy<({*(*e?Z?a0 zTuw3PB|}SDuwSjb-5Ucx2Ghd|!Zxct3y|Zq`73Yy!b0Mu*(YE^fwcbCD%6H3mo`0P zq{bRq-0OaVBPI!wqJPAY2u+je(p`C|8%CLzT_?k9f4f_;+fBO%K@AWgdsmPR?>LjttTW&;CIAcmzW=I^b>Ejs zcEQ`@dg-F`;^Cjan4EP{m3>{vssA{IYWX{;#H0U!Wg_P;CZTD{N(HF2@(L_jZ8?{z4(FZykB7`u2K4sTb+EI7R`QTHXKNGdYhDgZ z2Mp_l+c)}DtcU#$tdfSHY*pwv#+>dH9bQ&Ajxql0M%$P{_T^UY!N+EOXE~eu$pdD{@Tn*d(Ujh?0@nMRvD+tu{0XKVq{4vP zAAeL0%RKn9Q#?aB($yZ&E{uaS{Ol8(^Plmthgd1owBX~7B$>6I_5&sr4^N?;*6aEQ zwRWS<06hcLxb34Ar1ar<0@e>IUsZ9DCZ<)(rzCQ9`tD}gB{m@Z?K3V1eM!hg6Way~ zSnV70K`c);XH^sX>=W)xWz0)tM7zH9vI6xcF&Z84VdCC#9Q)npH$%AU-S`K17q=`` z-_8UIk+Zt=yGPsD-8YI+1%liN+EhYOJeG0GD{)Xa9680B=gn`^f!oj4=Y*BQy8;N9 zVb)bj@ly3$u4BKS%=piZswPA^mk2+i$nHkWFJ`ZewSpdY^yT-VKf|%9YA2`Ru&l6e zU5zGw*ORiBrn)KyX-G!>O)=OIb6uU?JWa)rh>I)jv6E|Q!Gc2`Llg8mcWWe8ks!E2 z8&_^d#kikV3^(sh#g&;ekNW{1CbX)MJ+&>cPL}kHG7Om!6e&#G&-@FQ-2H}d6zYG zRbb~8c*KlHUU2c`Qy#U`RHf=SzL8}`xM=H%MmnWiCzm;Q6@@a@eo=NS_eIF!=VPg> zGnXvqKOntg3MsSG`ASMvhoF^pk*~|wy>F}Egl*!jMX?zoi4r$2VGVItc>EkK(mAgN zeejGYV=C*P=0X#dUw1a}>TkSi_=rewT3aC*5t*QCK9h$5g+8o9#Ff6*_&Amew% zjNy3s{!uJgZpxjCAeoe3QlAD2&mP#JcTQ!%_ZFP!Q_cO;a1?dfV`ciM(#t19-JU!R z#{P~|$%sva$^d1vB;NtYUVzYKgdgUHpMH!s_cU^U&Ju`S?ELiC%m{T)RSA0RZt{Z9 z*Wya=2XivZsrMTL8@>EV6|_gGyf2e-VN!A@25ZZNw-I;P-%B41A~-J(^+hxWT)LCU zsSNck}E>!_%Vpe$t)vq4K0XriH07U*!R0(%9=#X$x2ZcPeXWr-AkJ z$J4X`H+&27t!p+-`B=n|y%)utzrppdGQUl*7B>c9MS)_eHP(hm1X^j$0pBJxD#U+| zE2JJhj3tqec-Si$GoneSkH07Je=w`7N~@o+KyUI(5HJ1ZPLdzl&vD3qnsJyI;MKsz z|FSGFbJI^*?jF2BJMhpY3gguIz|!NJAN(SK3N+e7hZj#d3J54G zF3Zw+wh=gI>o!pP_FPB-Eo1(p@*Z>X%b(KW9I4*40GlDM;M6U#$p}Z4*1O^gK?)nb zG8fx8-=IG`R3tSeZRK_5>f~+Icb2hyIPym2RGp>IRFCkk#R%P>Uo_7Ime~}zyfR{D z^>_{E~0v#4vYePllo})s}Yvl{GC2x~07dBv1L-p5f)*7yn*uBca`cC^Gx~qOl^O zr4)ZCS~p@hL3fzw6=@pPJVciy+3Ih=;8sRiDyMdbDNjoXcbdN7yh8obl5g55-=C)| zY|IB5#IPdnSM&hKEY9+fh=Iqx+(gu1)8U+LQXswKCOs^e@n!n)Av zNPVNOyZB9@Fo;(=cAP`6SK{Vy!SvbANH1<#YCBnVFlfz7>Z}4e!M0X&{^ekERHGUYU7tTK zwfJMlPoLl45tAvDg?={v-3^%d&FYup#)Su;@6-MHOJt%w=jj8&%)(fkA#0kHTUdP$ zck4q!<7i2h6E5&zMh88#dNvlcw@av}2DpwA*!S@?d5^g1>Bs^>01i$H5K!uv2ltFN zgqX_IOHqbGG{YvwA|SH~jcm1HnNtECdTb_@OP0KeU9}6Wut6Gi9+7tT^k5VqU%02%q#-LN z>+-*DR4}SWH6BoUqzZN;ZEIJQ_A9}^oiK0A{Gd+ErBUDn(P|H|fup~O(w*c=C1Zp_ zarDdIc#XbvR5ODi-%N`%L|a?RxV-Xj_UrG7*Q4lyPQ(AG{+zyUVA~|EZg$nb8u2p` z*uj@@$(-s;gNxMRDfSywf-|1jxc=2MQmrU|zu0np_zf0!gETY#%ig`qmiPB8AkmqN zBq6*{xLxU3TuiYU&!OxrSbX)$o#*PW_B@I|4F=Q>A1DyMM6ciku@djyow`2>LMuYY z{61z!Sj#0I0ZSt5tWb!;N{stkY|4Ra{P<9rNZ`#6CnzhwS67JztFx2k8_iB<0*JqI zoj`a@ovHc9(DaM0FZ~M&HRo!hrJwKRjnjHNAFpRdTeQh@=She97Xm%M6A)%ZSI=pm z$)qi<$LSF#0X2&y@O>vpx8Uo# z4I3WV;qs*MmFolE^T||V*UO&^3koj>6353wN_Oz06wjVEWIu-1gZ&Cn?XD0IPmiKL zE@{U6by8|EuzAT}3L8E%5n=#+qBSQ4SUT#WW?Dbcc5=AJqL(shep30hOkgb#`A6qK z@N&x_23bG;H3~Jf<^LNW&p#%cPyui83q?a@@@4`ZZ~=8boYsugU4FjLq;LoZwZG|p zOGW5kF{!mUz{mQ08Tg4$N`Xk`pXA}c`@Dc72aqH0h7AFr`Xj%sfhk%(d{*B5y8Y3x zsxOcM+vF<53*9dTjaT?Ty+ZE}+4rm&XhjPF{}%8QJ%&b96hsO+K23D(qVPgHson%O zhF<*7`}^ib7Vr$+O_=&#V4NoE;9^h%f<%uJynoVgpigO>%!5V8f8T-E>KAK|kjoOw z3%aZSY_>k_KrHmxB>HnYYUVj?Z0VY1wLdvzTp$4Ll zf(Mmjw_!R{6{mkx%3d4->MMf%c;wr6@yfx2ak>Rz>lGtb@ABk$|8biF#=ETyoc{3~)NKCz{8#6_Smi`T*tV_9 zaciU9@}cbK>va!oKg~q6+YZI46TW4ia|1fAZ$p?K7O9qOp0VL>ZNqq&| zS6oMLoF^XiLACaMR2})h(oG?zXMF#jMFWl)i!E^ThBhz)P+PCVMQ=#uX zepo>XQOMCXyb6@>9(n|Azc&@SFPM}ZKFEph znSNfc7TmYd<+~{c3icv&_dx|TPCk2C{XKo(-}`7sN*EAy;q`}t0T=~F^8b~z5DldXLp4`@nv0d-&e zP+R!fzP_o6-ewd;kF}uLZThkPQutNKasiH*?&tOBP&w*YN2M!{anMKO<$WT(YK~Bk z37%qVvvib3y?_HPk)i!I#-S~$W4Ou%@};jcDL33-QG`5%>7B9SI>7vwPS()4+Kr{W zsx7s*nd%4Wu+En}s(Gc`@EqV;JUJM=nY#c{G8b3ix%rmGw@j+E{8KM^o`dnme#m$k z6$=uY7?9&jN=!%Ug5LAvcMaaq=jn#hy}+{$`0M>U&V&iS;7SB`{FId+?jUql2?)BC zfD2z`V0GZI@3(3$4`G`wv8>ue0z-Z|Ls|8hVt*GlZh}b>pVTKleKAL%_)G=5y9yQc zc5L2-9Ee@Csa$M20)L3TF=9&*bj4Ly7-U?yVkD@nrM#m|W=pnRSpx*PmwgiR=hAm~tDabd5 zPA3dO_DI0SZV7&#_Yo^_!==Z{xBrD&lxD~LD17{TD!N2bN22&A~H|PlN&i$zPIk?lt%o?U#umdGd%FM7YbD5mwU177f*Q7?z zOjfN%ch0`kKM1b3mqtfnbnXXjbn28PoW~YPR!He4W&}Uy2Y=n0|vgBKNM0B+)$O;%!ivx0?|4`qXwKPR;Bh>awPpiKMTPZp zaz&_T%i%u$7oJ1TpUF8zkpZ*k)8W#(ZA0DTGbB{E41i~!)xTAK5&K2SZ~9{qX5S{< z2t=+=O!?NRun}YiN#H!$W8_|vIlsYSX*(Oikk#0oJN8PAy%IETwE}P-0cF@(F(W|* zVl$BNCWlUj6U&_LuRbVlQXZEYu6K7S@%eDG?6k2z!mC}V(X;s4o^-oIOQDv z9z>F?tS))DhT*9c68(naD(i}3;6_t|r1dS*iNmJ`XY4r+CJzT%Is9oKZ@z%tAbj~;W)KIFBnOT zSZV-bp4GRv$Hjo2?I5tEK54Ld4NAAH11OZuN6$f1CM~9Dz~;Ep92Ko{iWMc8Fa~mR zwCO;#;skM1y`$1h8B)VNJ~WLi7Oh5qGxxm$gHuhM$G+2i-5z32Trz(_+93UmEi0o@ z#D~$F=7%I^6){4v4HDT2rrl$`UZZ#(3@yl{h3GMP-dupG$kug&40wIW<$yOCD&ba2 z)$?bdmKzXE?m@g-OiFgits+mWXkf>af&HwuoesJJ|2kZqNx4XeCA-1qR!Zr;OAqmF z4ef`pDyMK-;b+HeSmeeM^@+SQrSaUPC6GoQ?>?o`&0sAUd5nQ(@8`QqLk~}{PIjgn z7ogP)wBDwVE2%b)g_zG5TbsXVl2swC@6VTgmZ88$uTCjEn#sVYt53AZK%2R<8C zVA4h(lULe?1qJ-BA#SXV70?_(n{Wuze=yVv6M$RPOP25;+@5K4OAE3JX9rSJ#TwI@ zGeHKMqp24I(_F)accTtd$PXuMqj0|3Cih1DE=}?>n*hXbUXJy(z`r-N#N#HzJm<^v z@nWxA*0hEhCL4h7LQo)qI+jDVXZWL=QDdcz?6n>C!Gp}e)i`qap@jJ=(=z6$WyO>I z{4yhH@YJMy#1XP0DuAj~wq$CI4TAm6N|F0uZvLgE1-2<@yXS~)o8q4t2&U%keE3+% zf1ZIrlVNe-q56}xT`mxM8KsNpY??9c zZp~K37JA~2#!Y-X-t9ZMTvZ4#He3|j=HA}QOAmuqbD}0|HjICx-tz0mWW?9FHz&{F zRONX01)nO#+Aoz>vDJDrl~rz^cboemEgH#sVlDlVeq}=9I-j1le}=L{^B%URHyc}_ zx>;^A*k}N&Hh&exQM4IfPMoHN_fr7_tHCHk<<9Io-j?7y8$aLkOe7}TE#D{Bqu=Gx zFgv<}tpljCyaxla>stIT=KQREanLFXt$tBIX|9aTt`hSe+;@})dNnzXf5JP0{v?xk z^Bf|Ke5~sivpj;{xtkxlCxR6Cs!jQD>c{tsLhWKWm-ZzTLXMT^I`*xXKkvtde=O$^)m~o$V z3a2HoN4W-!{KK0Rg7cbSe$O0x60PUY+Uh|`zQRlj#|37@V^5v{nege~_@0{m9)*M` zpNSrkBN+4F)y9o)N{L~yg0M!6tg(Nzsg~Z(*8mwi-*90QONaHG0gHCo$0Ufm&9RX9 z_&}xi=k3Gc%kNb-=c=5;cPd5u-ya+)aoGL$O3+PY%SPFB{Y|WXz_Ithb&Kp@xtQ%G zG|Xn5N>vRFo~!K1irs?4gH*wlB1Ko;VSP$GbQLgfDmO#Pm9pVRzBbYaoS1wzs0- zE9v2s8V|W5d-G0G5OV+V#iSx*C^3MhD1HP@7DSf^f=G{>hcvK{yNS=?+kXy~kt0ba z=WZ$EeP4&|MuwsLLZKJ+am=xP+Xa zw6Lt?6F{OMb)uTL&t)Gv3AmyX0JBAQsd_)kd*JVKqtOPLIn*5hU6^~!Up>|PtO#dd ztPp-DE2$5q&$|}#^RDly^||b17{V2YJ+|r-?)!6Nu-_@{X&RqtVcPYU4MZ56b>Au) zsom^#zLHHm~@{DcwCwu2}nACtV1nL)D7TNz6BSh-m03!~r>XKd!FL0gZnjPJ9% z;320X?NZF^OrO?lc2(f5zl30VBTc#N<>oSEoJ=xg{H&Mj+@yR3MSl8Am%OsZ+24rq*$wnz#tDpxf6@DF9gY2(>N=V$+?z4wZ0dVTvov4L(kAU2e` zw`^$wkuEj56;P@u9RUSth9aF1AlQ|vBB2wNDlJk2p+rSMKnNs4fRIFKA+!L2g!GC3 z=Xuu5$sEl)YYyi9<={Ta%F4Ry^}Fux_jAopgnDq+z~%2=nb*+f94ZQLlN3WQqc9Wo z+&;P&E@AQ#dR)vZ*k=?=dgDeS33T( z@ZJ&p`$~J~R_OK|_%P4>@(*$XO7QzG)Ce(2F)WnWdcWu0(~IP!4(n7G4ba2AJQABR z^P_RQ=zZ5{bT=?TB8>Ph`_P5=57DH&Z&Jt<{zdo)=sdR71T-eBsy2mNB+piaPWMq?RYu>=OJp^2y2@RVmmy{5oG)oN zgc4DQj~`YU?WD(7BynO}9mD`;u?@1p%%Q#Z!7HO5=}E zr)%QAjyf)q70nP?yZ7G<^`#y#Ln7WkOw%`^D^n1CL&(99$KK;4v z7aU6dFC2&EZ^BTgORiR5UP++L8JGKB$Av_WLs2zNb-}m_wUesT+feVFe_P#qL>F5a ze{4u|)x0L+N}m2P{Rs5AXsSW$U>Eg3zIXIW-TNUIMCuOkn@2zwTiiChTgXM(?K(KR zvjbh-fw|KNmqMoxmxpB}D1XBp)`sr<04F@yxL;EtWMdDy-N`WY8j-jbez1MuRvyUh zhoB|bZ`>~TCJA0jUp+Enc(H-1BcqqM=da`$xk_dpX}aQF3Zt!Q-%+T)Dg<38yt(bP zzeXbXK6^5V)S52*(k-$h5faTW1fT=- zcK3jZ;(avS7vs=k?^mYG+*hyvOL#DXPoXfZolW}(`L-OF+q4wtTt)qWqE2JgFUN|+ zP(Q~FMn8><{fCn&1poHmV#&5$B z*>hxP*FXsBk;^bXT2s6nIMG(wy@C|j?kbQe!K0_EidVWPNEY2)L!Irwp_sA6%U3@w zY|Gtv7j1E@NTnIw89XIZkRUdWs*men@V$dn?=olT(l3R|UBUXW$ttU-1(<{%Px&hG zVU}a~Z|?Y~is;Qo9l;RdyW%0PX0DS*cgf`#lQo4XwpH%Mm_z5>F4%h_dlZNgP^1!J z)n6Lnb{YifS~=pwaYEI$3KVbcY{%8qc881M4-vo6hQeH9uZQ9<4Q4CPbH%h|y{y0*hz`*aiJE>`%hFnl#x6O#13D|H9j0NC^0l53f1qk@c;Z zP!_gkxi~2y!}tDV<*Z7y60(;VvZ`z>(45Me41OB~r*D(v$aD2HkmOz7WxKaP391f5 zv1xVGWHfNuoY)xLp;zT)^*&P}Jq~`aond5lR^WpX8XAvyzO`2nNr^tAteky_e1jA1 zIi;g)%U$OPF~!=YhopA)UKg@WwC9@Ie*^8@+wQ+}=if^O*gAC!db;QxEfrS7gdQtv zVNDOnBFCPc3tiK%A{egj;J-(btWRi$gpK14-{&cYlXrF=me#HO>kfFm-FlmxP|J_} z(4GXE`8u%pez1gQrna_cONhcfx;BlU_8coweE#%Bg7&hkvU=SknmHDaF=IV$zl|fv z@x~4xSZn!Fb?K3tnQTrNM`&=c%>r~Kx$e8Z5a)S|Ms3=TMknbcJ3S=4misLs;cgSX z%gt=6$E)rn+|lI3*6HKTpuE9xWjVZOr_k#b-EKmw4p7+hF?QG*wC*oE5q=)3u_3h4 zHz$qPI=kwK9vJwIuWwhQ%>euTcFK(C81f=V76yPHf`m|fxr%A+@L_{rwNGU|GHDSl zDoM(vq8bUDM(@YVrr`-I)yO8OAUOG?#`V#gl3i^s@AhaNPx5c+Q#vH9PQ#HF+dlnn z8bp8REs#E6JGR!@!6q(p+JlK67=vZzMfeNXmgVA!*AJ+5OTw`m_~iqj9p<&4+cMEb zj}X^A-S&;emcmOh1~^RDjc7O_)CtL1wV>C`i$_7Ta!3>TM~DXEJBE#lxCial zyQ#XfdvQ>!ZMpitZ@s0ZjbNk-hPRgl$?Z*~s%zzDuKS+6u%<`@TyC_65@lB8YWBP< zIVOWoBh*Y4)*~p=W)8bp&%hn~l#XTMv5!{ousZ9t-j|Z^7w010(8tD-SKeaIw-TDM zq2qLDVskNg`suj2UR$(!w-9U)5j3@?CQMV0pI~+0?f7L$51-#|r`sYtpn}D7b#U`i z7f5lXUexy?n9dz2&ZW+G?JzG~gs^78TDvFz%<*it1_k^n_<(--S2c zn=E13Nmjm*9_x|Fp8HRK@80eI7Y@z|{FA!O)mrJ~giF%@rxlP&0@2-iJ44l`=`zP?O8X-q7aF+{a!@+B4si{tHrU=OExd0D$V5j#g8VZ8=m47c+2}HhDAd5h>l--2a zLP0SmL8=ZTWZ>y`$CT)TAGUv6qu-eE%-@Onjh+9ku;HBR4jtq12;m&!iu@mm4Mn$P zutbk90^Nl-ttZS3rjOZ&k74ns;e@f~SbE$dD>UKrspnbGo!lYc!UbQ=+tb*hXcf7$_ZXR=+x6E-MarssZuqqlp>TQ1T)yhBzftKW=K?WB;lmLeZnk?sGQq0DJ!&sx;}>I* zuJ_TQsvG~1NYei{>Pcz|EG9|RXB`tNxIyi|%b9|c*~RHuqC>@OTYu6_G9Pwmpl zKPlj!Jn^{ahYpFxp45Ju^4DLg&s9|#JFXtND|Ns&MfI<55{-}N{!t6~dF99*{!UUy zb!CU}6A&2do=5q0GsGcgoDlBZ<*Z9XlJCc@pKj=x0E}o}^n_CSAFFM)+thS~pYo0> zo{4OW(rKIe|Rk;#MHKt~UyB>!g(%fM${0-wK zzw+LHa=CdXb#NnopI(HiHtbe&AD0{9qk+$SK49X@z=xeE5Ar|i_49q?EsERw!``jS zSCOm%myCrehoVx*dOI?{CDPAAO&#%W#3()Afb${S(rKjTbbhWOx`UPl4*3zZbAvK% z`6SjI6|N=$iNZfhMrR8Rtt2ttkFByEh;fFXf5_^0-%p>DWvdcS9kJ@o(lAtQXZf4n7_}l}Hb)4BXBeh|#&y zdzVnxdQDhxVxj5}8>fq{;5(&|c*8L-1Jt9Kp}3W!6dits-&9aGi4y(3@1FRH_l0W( zpnAv7dy>;%D_*u&2DiIk$|wye~2~@VDdx@f5azZM`dx-9k9!1;<7Mi zO*4Mf7v$lw+4CM#{WP+%X63n<5^94JX2%%Q>Cc-HOC_IOK#P35WlZ-BtjGhd^3lY? zOtZ~0JrJdMC{Ce66c~A%Z|Gt9^{$wx zek{!#%C2$Z^zPr^aO?iqlVA*y@txDc{siq-v4iaXnt4ch=ITAo$S1;vk|Q^7$S#>) zLD5Hwat)^AiG5{K7Rfb#*dPZ^sgJFN(G1Z>aloup7j#qt|3C(G&W*IY2=%(xfArEv zNi;2K!J*V*B|lH~Ou!8@#`7L}gr)a;+34o2JSdw=bwGDOe(2YHWw$ZL)O9_koCwar zR}8sx=2009SQefPl=i^#tvHd7@lL^UeJbK3XtiD0%G&Gp0=5rg=6a zmGe#v+G*qx1Zc2JA3M!)0;fSGx!b?MNyU1LiQC6mbP}sul3~^z)II~aI9~Io)`zQr zlEY&OYRb>r7%-D9-H*l&<45_4OuKf^FyLnIU_`$>A!c>hB?5D$W<7o+{cK-#`dfRA z%}#}^%ZrI;9K3&=12phQm9hpgsd*7?#uJy#w_b72-k8C^!h8D);=8|UbZ&N5F|u|z zs~r9A=+RPZnw7lU8i+>b2UEDC6^f~ht|)ca2C zB+uHE@FZl+W-M!#Z*_IVuUpxC88B6R#VFcmE+igVp&TcCn)=a;?jMBvw-0j3l`1J| z`r6)fb8^PFfxJ`r{HkGJ*)3>K27R;dZYYw+o^Zqv^9GEzyk0QRd{f->B}iWmtgsUP zcDdbrLf5R`-xN0s9%p~w2h$Sn@28&aUN(m9&c)2BWPMjYeS*H+b&smd|CaH21KvJ$ zlKQPQYw*&$FaomT7~#r7JuaNawliMdz$}JAiRxLe`cDy--$A)bbsg6@ySHCu`FVijIh9muFCZA+c@{eviZP@_Y?()mCWF0@db6EL{Iq@w z?2PmIio*BF1uBm1yjF6Yoyvs8LSw<`KVQLB${Ox#FF-BDxh~E|hoC%k-&f_jl`rd% z^{KoQ?H3eZ^?QS#F9_CA`aXnjHe9*jy4Kjarf05jlD?vL3Y5ZjPD8&mp^w=Wt>oQO zPIoS;Hm%=!+y^H=OP-CQel3;6EWF!^n%#kR3cXax41QKzWIGbuB)uJ&9HiRG`6%%rY;oWDtFopmNjJ90DWF1byy5Wf*< zne&Itb6aiJ4a8?;qyxRvDwz*{7E0&IF=G&bW7RPcz~KTfQx%VT&$7(|dGDe}I#!9T zQvc9$`}k3!bb2+RC47fNCKC03%2B^!6KG#Cb-Ma-9RXw2##q^w?n%IeMRK*aHZ*=g zzjV+s4fldy@Pz znSryxVbY@L%`qhfd_Iyx80k-~see6Dr5)=jM{og58x$J}3aPDvF8!|iizlf`oTLj$ zi2_MRSD1rOT%D8CGpswMBzI9756KyKvHtK)5Fi`=BUS_0zTLR}i%HAwPFRLkqJbO8 zW{ziUsKU?{FSnw8*^@jSFaDfjxu;MCjw^wz=Z_e3R-?zAT`N^;&CSe`aDj^;!4n60 zn0ex-ewiF}SH-7k2>wGBMm_voIu$+?tyXoB%$PmSroO)3@S{yovhtw3m7_%DjZXZ~(KC zknBe|k=htDG8I_CBHwx$n@FtPP9HY3tug0jaY>3{Xnh{R8&YZXOs=5bUGEKvQ9+EF zCU>3paPThH>fkm8fZZZ`gM*1Jcxxtq0YfdjX@AYZt0RIu6Gc|UPCF3JYhKuS)4Vl! zu2Kb|ZN^(bq6e4`^TB;lC52Dx+l`Bb5ij*2edO9oZNp+!qrx7Tk|aE~rmd3X|s zKpjUU`pbAHl}8W6q2Ymb8IkRqma-KP{&s(W`8s#FnA#j(R5IZOC2oHs3rg?^_cu5I zbYXt`@pwsI1)|$SSF!7BAY!Lkr4j*ML*tA=bvfQVwri}WgX7=bv#)Ki;sS`3M?4=) zr51*~Hkb}7jb8rX;~*@`meq_^%9`hBWf~5S1p?{RnVd~wC==SDwF%Zm&X{^__b8U# zM6-q7!ZVoQ-e-hC@ctj@81`xEqHOq8mBe3FrhTA58Bd^~ojOA+g4=Va@wj6Z;+4O0 zN?sa}gSrA_wA*{~$);vRFg_edk>qSw>8U%o)2~ro4M}-g-Mh1TPPYVxv~C;S47b_C z&&^2eiRkZ+R^`JJJ}S9QZgIkSQx5lLXK$|%!faN|LW`q0UU8Hy*4Gvn2VncIRr`!- zQgI75Jefn-b^sxSw0gWel|U)Vo$v`P-o|qT1@E7QHm7#b>Vf45ID<@Oc!qta`19;! z{dL!Ova^8NJbX8&0z&ID6mx+(n_fo7FIG?)Cdt_blWh@pN?CEo!55N9+-4le$1@}< z%D7JTSz(xw68Z9Y#1$jp)RVpa&$8V3OmAjd&6ZhIaD;a(F%%yivpJI&x0oM1e8Sa!#mqm!gO-o6$9pk{qBq?G zDHL`gc?;G|*D^ttcdW~R<^$RI?g$Um{FlSnn-lH;IJ(U~Le80GEYxFcg)I57ww4CI z&UP2@-?T(cb=Il|;_wOg@OtJ+OYeHkz~08c+5pjJt&?HdEtQq@lin{!)HCPQK(#ro z(B8BHOy)$V9Aw*(N*2r&gV9{MuC1-@t~9_k&~awMO42D#Qk`lOlSrq$p9%TV32Wdt z32|OSlbUg);tAqi+#>B2xHl@gN8iP!P~6l|OiFQg*o)c$?9`L*6kMW~9dob+#D8`P zUYjL#?bMs#0%U8+j1G0ISN!L=G|Id<>lQp_(VYe6*HX-Zxewxjur?nCn9>pT2~f|> zM1&`*>ABD9zE6ZMyg^i+OT{2csCE8&ur{PU8@mZk{Gy5h6poWhm4tES#xrs_*INrF z8-~*K0{1RZU#9`?nP;tV<>@p5dxBfum&{Ro$=~Scz|C5?>fvg!8EBu8j-L;=ziYN$ z6@=prVGx7CUV3U2iDBy#zShjBb~v?TE1;fmtw5A;$D>F2iuM5LSXv?Gn|%bPmmFXv z-OmdbFc{5q5`-9Hm`>6C?+w&n&lIf%+YSyGpP*>^=>1K|9d>rA4t>e?|JcXd>jm<2oD%8$T_KXD=$#7xU0m(NB1wawi8Nmd-tZ2Y&`0Q`$yQpiZAb>L3!Bh1JA-CdV; zTK)2$Ulr%hT7p^v&74%#zdx3*JJ@#=%>E*ceq*j3cOJS9Pqns-u9R6p z^(K#1Z;B@cFVw_i{PGP$l`fizOL7 zF9zO9msE(p-fbSCF*bZ|OKL$0)oleD4?8n_F!eiY@)C>d!V#Jm0=i=G4v*k$rxIS9 z&uJ6hkDEBYqR9nhclDra+X9S$ZS8I0eA*+%uv5BXES9)&nYuz>tjtN9yBE6WD7ChQ zvE96I(z8O6i-#^op48l5>g-b4CRkL6uw^e`07FeQ%Y4Z(Gfou%KH~y=Z*wd9Nm^nr zr5~;R`OAPxQoF`VP3(N>n6>7Fg*1OjK~eXufy&R|%}t|6)Fd(aB2UVi4kT+)KTRj$ zYJ{Dy!Q{O&Wd|iRE(mJ1ht|SOy41M*7E|CFxX7xsM=xIxisYyQugyT(+xM=}L?6m5Z94?rtvV-&MUuwbe(h&Hnq|^1Iyfu)nvSX} zMc8(9CiHJNJOY;NyXx%z+_dkmON6a3X8j`Mi%n65+;m$LT7xTlo=+R{@+Z)8Jqwtl z{ySO*zKh=MF)+pxNFL+4nMtVJt zZV!i_6l^U=?*QrtFm&=vOdP>Xdcm|rX|r?pMntW14SL`x>vR~<_5iXfGG#+=2*xXuY<%Y6Bme~SI;`Jo6xv)z zGqjbDqR!v6SHpjr%S}1+>G;{VZFhY&YV*p^*O3BG_HzWUN?O-ZW{)g#c9kw%DW{|k zY1xo>+4#sO0QG}X$K5HxD~p33EnYdaT_bf-?btC&<^|)f$9nrcZ-2t}6`wWGHmlPi+Jv2|%AIrmr;>QszD}(ZD!J#sgN*mBCAfK-3b%XhVwP zd!Y^%8{eB2c~J$WX^HFzQj23u1uj_cN_YZ+uJQdSEhL!@q+;Q>3ha$Sy;00=$QFAT z-tI2(DI><~a>&gbgzloIyUe@6AxfsXffslIlcs-8niBJ5CT1;^c8Us<4Ys)c(+bFr zfaEW!?i-GBc8kMhM1Jgy@j`Mc2SFit_X#A4?X&e*MEh|3^R@TRKkLw)6(Dopj#KJC zt)z1w)WNtJIa&5n-zNiU%rfxdlkx)#Rwml2OmbFcCfi&aJ=D=(@;zGSN)EqFNae@lk-}^zYgP8 zywNricU>0#UVl&&@HgsHc$e2)TlHMlUp6N;6uK$vi5joGOKU6j=th`0Y=Bm>AtGr$1!Ns+>nG(E}jDQa_qhCKv+)FC1?o4DYDOu&fcF}_KC3;`tv8T^rh$B|W7~=Mz)zVC$DXVG%KWtTVsw1K>clBk*MBhK^#BJ-i zT2lrtlswpItF&!hsheR;XbHPnM{BLud8JpA;@g~%ei}O0WlY^UmhE^Y4Vj#Mt!0_p z>CFmrRsnP|#ACAj-&5Y-Ff49pT}ea}*v7%FVK@-kjVyD$cCRN9dpO2CuCrRNrkS0T zT&}BF*H>6MaG@fZb?BH`Nwt1Lb3i8G&wh62izC+`$L>uPx%npLjGjkGCv^=%aZwo4 z@$Gzn)}ndRh*yi7Rz7cH`D%x z4{IJjH`kT8uPP;ucOcpm zmf;UZA5#6-WRFFPn)OAgln>SRANy&kA8c4}W%pPFNoQvXeJ8f3rT&xw-C16CQ81QH z`5>GRzkMZDcK?gp(CPc{62(6qkNltL&m;WN4o*I9#=Sl%u|OZ>;?Z{h&NNN7(iVTmbwKtCY>Ri=0WwEHy{FU=T&fU(+=KF1s-YLE~sIt z-;?Ku(;uo65hUcu)&An>8~^#Wtdui1U$~d-d3&D>9Q6K?4AF@albVX=23;u|L1LMaLx6LPo#s;(3kO~QGuFa>ycjAR^Z&QokH`NUF3t}akynTAb!!zm7hw#y>-(DLRg;P-t3R zy<+mN5Ykve%jlK%6wweKDk2}9{wy;}Tdb_2ONhrdyU3lgO?&zbx8XJv>FyU${bHi^ zA?D7dX(h2#QS5DSxZ!aoyYus`AOb;~a@$cY)K-eb)knyi?6dd3-E8%?>4VE((E&=6 zu6~^Q&DH~lWx)AnD#NFXc_Eh??DEVYtV9DX8f#z5z&~#feu@O4d6HNA<>C_ALq6+j zc+-jR_H=3SiU$uq>mgjl+ncXkDolPbz-q#+vb-j8)7;Ls{5fm~F(|zvEJY~;+D{f0 zrDRCNi+{gH7md2wu#3o=q7!JniAt6!jS2FFPBehJd1d_5<}h-j#vmLYw!~gZ6G)al zIGq7kJbZH1QB6ivp~ zoxOt&j3@e!okBxIZeKg3y7%Ku!cPp;_E{2pbo;|2V8IBGQWUx7_x)2*bI@4POv0h~ z5SfCGz|tKrI6%xd@6q$kHI}NuLT9q7dB@n=g=W###Syn3XMZ}iHn08}4YR3y@Hs5_ zhY#w&r4^Y16Xc(KyGz=w^WWQfkH+2iTec{R-kv&gegEzDnAI05<)PlYU$)!*GHnn9 z|J?1Od|jLgX;YC34eS0eGuu#`R8*U9MY+vG!p8rti6`1Lop7z2TXlWsqf^@7D$CKegmVhA0nzPYUd)<$*OGsf z()V}xojw$AICyoAGBWUwv8Q#$y34fTee-&q*61zmqqgZ69aq|3nEm;EK(KvSz154x z{k(Q8UvJ2doQ>-pJ+0P1GnnEUBpzlLl=nzy_(d#SJ`Wf4>%w}co{AsUtb6w8X_WcG zsnt&x3$6n;)uHe2V3Z{MhsmrE_#y;V)(qJ+Y@DMCm zm;(_z(bL7``=D00;1ykD9z1wam~(9<-CKzs9(ScM6-<1wFxZ4zd*cOcYK6-a6QrBk zBgtYL$GKI*O#Ea+YE|31V|Q3CE>yI@BL=a$_|raDGX1R$Gc^La4RI~A(%YIr4Xj7W zWc!!B^ESy$A2NX0L(V1+&>dZsHk=RCT5faF`^-x*Nppz|iME_ety=gxL2`^miKp_y zH<<^GiE>64F0gfH<>C%^W+2lu@;Vcn#g46reXc$k%Iee_0vxXoPbW`?{`+$5(#kzG zj73(&9=Z`#X0mumr+dpFE-b{%WEg(ksX1+{sQk39@{yEt>vcuwKHajmF_c_5x}4Ph z?epZ;ZfR$0>Pq1d^0rW8aKkZp&+R|h!gRMJ;v?3&r=||IybnO6ChWs??QiTh=!8K1hE;M*id&JA;DS_l^Sq%v_Wm?YdqI_uT zUDn(g-L)-lOgGtt$5_!NMK=XZQ6m7%(F8lIN|UWy%V1tA$ZL)4*2iRtWUs*r!$SCW zBmZ^mT3pl?n@uh6@@-565FfrM9!kYk=p*4q=U?W=cbOhI4sr4#?9_hK;-&Z^2cw+Z zY0`2bVYt^wZdAq}G&gFT4W!o8P_OlLPDs|z@z=jQfbQu9XPD~YPrwO7Zk!#{%U+D3 zd!olX6o=gK0rR{;H;VbTx>$B@RvTKTpI{1@^R^s>jD!zu>TQwZ(K|7lcfjOHJxb+F zV6Ex4vGX`26t4ZWFK`Dn;a5{{hi)W(AP2fo_0uEdA*KLGIoTA^losfpABKmN;iKBX z;oFmlnpd~)&~&_&-ns=XwlB6Ea4Xnvm^4HTcO1LPtW2 zO!DrpL|aMe80wM&FaNSA?hc%LcRD`XZctMJQ11ZN!Iua1rN6J9d8hp-CCI3+F70oU)pij&4a3GYG2%@(xA%Ho-wD+cFP6edA2;svFAOqYUM?ojc0JhY zT1f*H`=r~pX`hEM`_i=frV)6ROj39vTi)i>3UBZ=tYL6|Ug@cln_jTrPD`wFsH?r+ zjpHNSuvf_4Z%ZS_sKcvE*DOwoXBK~+$uWT=R!ZY&^HueBv}B6S+obf7b-b~%eXwmZ z7S#3_Rp9k_u5%=xY>T|w2Fl$XOQpEuwOG9L=za|TBPhQr{GY5>(%BzHKCTLnD_h5= zSdvk3a-Vxv{(?y$yx2Tu@(vY@N%EGEYpve^)X39uWfD? zUo#(kVOp>dew(QWSv_^k>9G!N}X!&}6OoCTZPqZL2fr ze*FF9_WIR+ml%p{ixX#ib;}gH6YgshX!z+>bVp2!EcHy=y!@(hR{PE*OoPVPIk z6>iNKU}Dk+E{r5E&m+Ml1uR*r=u}HbVDJ{>-1zF&49~3(WuQcJg>h#b!psw@2kqe8 zg=W;78f${ts9#5sCF^uXluoSS{9-%E-LlarGJVb+m6N|5g(`kH!s#Gj^8?UxHCWkl zl!PY7nZU3?4_?;j(z>$({!WNCeO5@LfLu%P@xEdeBzD=F9s0o{^Sfv$?W(Fs+46^gyk=I@0J|^39(DYsa2IJK&CJg453rIDdkmiHo zK}BiHr+=uG^p8UhGfokg0Ur7iBguLJHx;Nl#Tcl!^lbbfEOo)4%hPr5r+KO0fzip& zUyHr@ueWm{>jQIV!jNlekw+qa%M5K0o$6~l^~^V(T9xn5d93HUI*EwMTzY*d?nGyD zl~jnD`grl42a7j;JSXhSS+hY5Mg#W^fBSK}z~pmx%y3xA<;%k&-|tqC?drLbnpXog z@;obmCc{*n>m=-mRe4|vV)YMMj}E`Aq9z3|L<*SR{!`7&S;c0#d5Spsur==#;iF6eWjpBbXzey;`YbQ-b+aT=$DZLUpF&V z>L$BiA+$#v{}vM$^FSR(p1vBj75F$=N{x{J;b-p})4=Wc0h&6ekSl{|W07}g4IAK&^g)mSbA z3LU%Xam4ZcECno|^YfG>=%2igR_(312ZFQY-lh-i@2fuP&?xsQ#L0s|pJ{Iv(?EsY zl)nsm(&fUoQTWsS&AC+ze@IrI?K{_xZ$G}FJHD7CmJqR8`$kJW92XMx`@pg-4jS6m zuDFvD*6=&=32V}#i)EJDAh@32wZ8fq|3gEQH*)tGXH48tnp=;_ox9-Iy1h#F{Ycl@ zeuKW{_HuC|L&0Jcl&t_r*yi}c@w(}i{c`F|B0M;u&&+rSnGo`{i`fGZuKDcO%D1%l&tQ<*cD%s zYGHt1AMJejomJfzHx~~`a|Lx`Z`DeL|4UHxldd>+jHmRDUPpQ1&pb-F+G44Wl80V~ zeI=AFwY0Q4A~P6PZ8l`@haT(Kok))OP(7dy%h}9rC|7eRak9KV*95s+;}nKWSJwD| zx{WWkFiC>|B;L0vCSasVAJ}J93 zj+0V)>r9jVBFZ+75qnblTdV?az@(Ipok)-R#C6PWO#ibR*jWF}mpo+#td*IBuD(#X zJ-A$Sw{-2POun4oHdbJc(2cm}J&0M+pZey;j9A5SPLJ9lwmmXi{Ep_cG>_$_$9>px zQOVGb$uBF%UPY6d>X|Ln7U)o!#zH|!^_Eiz!3W*gvfrk-bC2!IYwi`wn#cFt{^0R) z5mpxxS<}m{&V8qcY{{{oI#V^pt};q?XEq2D28sHf*iea8pi)NVonyA*&NUsDHM8eU zJfx8NQnLB06}WG1vDu|Eu8~3a1DKrnYo6yQo5%a@!-LjK7U;gQ1>~_UO?a+(-8D#B z7;a&xHbhM}xJ5&I)4I?R(-`@I{S#B7`z~y7SliSjx{&Ly(e4idDb#HJsQD@K$uC`~ zWz}%DINMnjl0|gZi9U4WdkL`7XVX}H(oam;e6nEHv>iMUs z+ueb)-5H-;kPzf)+ZDHE;!S_#x`K_TOdTf0(Nc_cPd4wB<+D~%?9Wcdw&>#b72QkM z)FkhW^4w4Wo88r5`PR2L$8$O^&l!))NjCIHXbfD@AwJ5^AdB&GdX7a8^dHqk0r!1; zV|y-n>`GL;Nc_zIB-GfW&zKI+pp1`^nzm05s!kN;z4y1ZtEdlZH;B4#Nrt6Mm3faU zT@)1=DipM{Dw-FXWPQp^w?{9te1tg#AtlAlm*-i~qWSQ}anZ$evk$gfHy^$b`4nmU zzc@Si{~+6#qUKjjt;t0QlV1ZLsR4z#h&<~GacQAiYNJgLG*R1p|JRr1Ur%MrDiKKU z_LCwac~ua_`16`FGJ}XGc@+}EJedNsI%QTE!i@m{@c#gG3Ug8b literal 110567 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%0AhQ+T~V9w}Dr z^qF;&qK2_iR#n1hBhCJR0TJ5yvMxap**GpW6|X?hmzoQ<4%+eZMi!526MqtXlcAqa@SK-bpUkc+6DP<9*B^_emQH)gb2{nRT#gaOD^{ zAw(pD~yeM>X}nLKTJ%oHuqS8Uj8XJphK{I35#(vV`0zTb1R@?KvBV%)CxGnm)tj zRIWBGKBb1b2w~9G_dtxHuk7Hea`a)!a@|YFV8%GkS($X3VhLu|r@?h*jeWzb z0E-HqnJA@|XP$F4C+zNKvr>Oc|G8r~4w*dn}@pFM=RG}h_AGnLISV9Erw9?h#t16$p_S!_A3 zM5`UMvr6tf7w9{%w#GaGCJ}8x2CvqNsXOGm#=_!~H+L#WlP?j20 zF4!j-MrcIAN@?rM`IHZj>h$Kg^_BQ-;)_6g@MYcgTzV}hN|-s%pwf8@#TFTN84k

dC3IUnN1L~6 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 KSoFt@yZ;Z>$aTE{ diff --git a/study/kernel/02-memory/03-initialize/images/kernel_space.jpg b/study/kernel/02-memory/03-initialize/images/kernel_space.jpg index 9b9395554378fc8feaa3b9382157c2c5f14ed502..912c6ad3e71183b2d2bac2a11796704cfe068637 100644 GIT binary patch literal 140107 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

+$#P?j(leT`sqv>6=`b&iht`t%o@b3Um>Xany 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%0DAdC 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 literal 198253 zcma&NcQl;sw+5`&VDvs(^iC4p=!EFeMG1n49$|Dsh&H457KAWrh?3EJ?<6Anj3CUps%+Auz`|D1~CEiAD{Q#3U#NZ}#=Ki+xUMkeLaMe2O z{`SK4WL!%B{v_;f^3mHrQ*Re6oYhyNDk~B9w?o^u_h+_T2cVl?P@n%@uG_&qP5NqExJ+1`yBedQ(F2|JFr?ekr_T)q1h7VlPYTYi69 z$f*z^k9wEptOY*(b$_>dFL%U|k4{2=S&bsSB4!)GcHTve+TKYtd|sWCvQ91c;w?aJ z=EAk~e?5NZLV7&!y!BLeourB{9^kEpzF(YIdG z1#r|#FPE?+U(Y4qEr!t0r->qr^hdbDI=VBYIWJ5I&dRM(pKkjmad-Ymc5qy{vY8)S zkzmc2m0J@tM=|b08?el0d3)k6qfl+n7binK{vFPL1@V6@>H+~`-JOA6@A%0WBFLnc z#f0|Qf{(f{l@wKjRfbeiaqu!?>)Q77CGH0LPtO;ogH@N13tP)vY!;cLGghUZesu=) zLNJqWyFKm8RJIRAoID$+HCz{8`0I9F|2~}Q`$#=&sL4vZ)j;Hff=Xe{d|X2)F5Hdh zJSN3y6^SHzwTu5TFGy%;ujCql4v>P*x9x_1Qqq&nwAwSaT~cFNDuqAQymrYQfpTKq zs>sp^Uw-~=1UCpQTUR_Lo=c{1{Eh=Ix=a>)1U1dLUf#}WI~q<`;nTsBJ9c4qqU;2p zAPw;@7~K%sIHfOa0-N3+vIOmhM-rK_Op+7XuO9@uejR@j zk3uy920%AQs(ri)ebS{O?ho}_J8IqiRiBp#DTnZ@#^G}g*4tz@$(@yuzvjJos{ew$ z-FGHG=yla@)@H9l(-*kskYFw8?btCXUV%7}kC|mof4N-#z%VK4^_1^S(IvLBh$q>p zWapRWG=b6^WjO=_+X5h>48`=xe<$n4LTT(1OomL^2bhj@Ut3FBwsg< zcmMwjSCKu3U1X>IS&ZA)9LjLM@!>bIwz0aDXMkpC1K^YOUc%daLW*@AsNg$`f)i`H z4M3-vwYPd3CJZVOSSoZne{=F?HCR|Fl^7df+XZkerMozmm?D$l-Tsi!RFB)UMM#@U zW$L@%ev4!;EzZKRJ|_Y?IV;_Mu|l`aW2{ z+YCjQl-s+FfOtMEWp+?ds(Smzmzp^p_hJ@sT9HRuas7ALXJVb&sdYlf7jXrUlf7IPqd{;{oHI2p)e?j6>+2fW3*oZ?~xy_{C=lI+k4 zce}jc&|diR>?S3s1 zNxVkLwQNWDyP;ny?&uZQ#Q#|V{?7>gr%>$DMLZ^PTdZswpJ`=`7&5M!5MOe$lTEnLmTHP1ih2ph~=7Dk6{BMI*xiscQBulzV1^HOfgU9a*MGn2LytJoPfw;)Dbx#<4m{z<1I1ci zJ7t*!JdK4Ej@MS6?df+n+n{pS+0SL05Rf8@OX;$t6l+~?=p+pDwVBeVsWUK(ubd$C zX4_tk4yJV4d|E9F$6gn~CquPhPB-JPuf|`#nO01b4m{hXy-Fp#0HObsbp7q606k-s zeM>aep>N)L^~X)^|Po=@!a=+7x@1?UR~OV zoB-!Hl|Nd3|5xGv&-E&DZ0egTa;xoSA^^0?f5v2$Svof=By``;9gRzwEXFv(LAjuArc2*Fyo#EW-7os^-fKGf{5MO)S)AGu5w zvB&buf#^eAy%JeuBodjWL{L9GzVCC6Brr;H{;sp{-QY62Huq8G=|qhPD)R{%P|(n^ zzx#56OCb+fxaQ+C01ds-+UHRHP+F`SlR@M?w2~KVlYMZrTUBc`S)fqzhRCC)^Y;9g zK`7QNTj(W+0w(p6AO8p!#*@O6-vZ&aPLvM{*evWruZ_#~bTQx|aIW2NZ(*Ioe)^Mo zG9d|Wu1A||;88c>EKlwmsw?Bn{C7+I8&iux`%Px2yxKrgIw7KG27yZJ*q;j9)|;?V z?Y5nvJDBt)`;>Qi+Dt<@?i2*lV!`XD{>|{x6hKG(#!YZM&oJ_nh&+kG&#$PCNQrvahz*Rr9e} zq7Hx#KrvtoFklW>-SBK#|6o5%W*El<0mbzLtx=^l9Z32J(M#O7Y$lOX5K1~vJn+Q({oP+*A@Eeo%A?h3S(7nbHi-?S*nTo0S0+$2 zhcy75gzmg2q#);x%d`!Zp&_W-3d2Cf_l?_(?tLSypYoO1-cy*XOuVN@81R^0++JVk z_r_4@%N?{h>@K(Zmd4N!TA?G*RP5VNDW)O*_;tPSu`*6Ucb5*QlaiD2)P51ts}2x_ z8PCv@TmvSK>Yf3Mx$RRqQ5#p_x4ZTmp_K@cV4Pb47&NvjDX5YcN00m)p zR|Zfl!GZLFB}^7j`xSLI|9 z<(6L6_UUc&Y)JVz=JU9(+`(V;EmA7) z#+1#QU5v~k{n*J7h=47y5#f5p^< zD;W)$1196j%o*1)f&AT)#!^91RfkMZg~?IjL*BCTFdvqvbhO^R+)Nd)X`iiJ3P+>p z4p89{GILV`7B7@*d;*ARRXvGa(5+StcIz+#^MSTcOgo-rOgfj&ANyS~C1++%8s?m! zS`FPw7LdW!4~5TWETOg7%iG3^liE8#`L1HPO`374!)eC13-^v`WX>V;z743L3Le*qfc z;Yg34-oNhtew`!$3tim7pU1%w_%s*W&`PROrN0hkNhXRo6eF{Yr*Ob_)b7@BYVYoK z3Oz`1#=!_{QS^6C4ZS>g_#M2J}a5Td{OAFe3xmi$#_21qDnP!p!)cRhCXY}@(F z{)f@ZuFCtY%Jx=ZW7?CC!P>i@cA5}+$mcUfkfxjVp~d`slRNyJ6HBE_nR!y~5N=(1*B}S2pbee5PRD3(>9O6D} z+GT%svgzD-QM}R^A^xG~v)3$8e=`A&3guLo{Nqsbn1?~%4)2}O)U3G1T9vqpRWzgP z56K2ic9G43$0_L7VW0g9kDn=+Pd-lKw+hK@HVheP-c_^QExT+~c8o!%Nz9vBpX9Zf zE{2`S1+~1zBxUgImq@s3Ye0#IZ9y%F+E6GveSrwAhV;XIG_vZadQ!!8u=HN6+^v8|7=?$1HvDj&i;htcd#=zJHnfU=;;+fCpfz3K z{5OmUmOW<}NB>%KpZ>{d^@7WY(e=afsg}8{v@!L=nRt59q_gLjQ~GPkhrdUz8`|!w z4mz6}CYx-nexB+%|GT7_5@1^$)joKwXDm*1B=IFvsphOF&dSevXV1xOOHs56{`@85 z#HgD`D?7Hr+7S-kV;E`&+)0YAlcMSq-*T`JYq|6|B>@}4a%A%dYp6zD~_8)bp zNV&mAJg&r?&jUVwSYCB+{;jRz5{r)*46#|;o-DNGyl@&e%$?8(XXlU<{R6n>yy< z0e85PKK!QTO60ejbSA5Uje?fp|0w!_)hcQ)BcniP+-{2G5Z4XDZMs* zVSvULCe*omxwT9dHjUFI1FJ#KjbwOR52IEarNkHlK*+37ib$pn6*YphV%^T$eNWY=xMlcW<<(om=2*N- z&sZ_Vmng;|Nrp#@5Jj1cb4Rr{SGww#hhsj)LtONS5EjgW!FDcfL}C9SrYr zs`wmjFq$iej=rXXKk|$ZW@qy%YB#cb&bZavR@{zz_2q6Zf3>eV{uVdxOJ zfKl{K50wPbEY)|sA6FO9NP`h)n@T!E7( z_KL57bAe^xghyk>TfOq1Ww%Nt{9XYOtwLwnQi$jz^b}8eZOHo(Jc@SJ%9t|qmd2~* zU>dDf!3!F87GH!izm74`-Fd><-Po!tArvabw&9z`lBM-gY%p7*RLLecnV)du@{-x1WpI79$>rG|55erBDxg(f$ z-rw@V?S0}b(|^N148<2Q@FAS|ZeYQo#xtL@i?kf?E8I)_=;IWSwBi zj@=z>0YdfsD$~gXlpaawv)9=C@e}1W8mUH@5(G4*H#piqRcvUWAueiA`&Pk9H0%dy z$kyaVSROHjO7^+GznP|?$w4$Xk z)2mRPE#!3ikFWI+H6V%@G|y-+doi3@LS#Tx#M;o1CaA2%`+IxkF!bX4+fm`>G@>v( z5V(NTzl%&65YeHyQ<^%%TNs>j06&>93QopvypJFR#&Y2uMJfebIK^5IRbRQytfuLQ zDLo%ffgZ=2;imEa*Pg+&(@)n#QmjwDBVQsZkz}E6)qvMVdQ|IUAq&r|g*iQ)iiHIg z5W<|9Z^xp?emAU`GFsj{S`0|J!Dt>lyvZnI+R5_ghL%roPG%pPnCb@E^u^;L(sV+N zI#M#}miWq)Yq)9X>p7pPZKWhVnWcdFH4LbAM?zB>IFzH{1tST|ram^VgAS>w%n_~5j2h@i>Dd}}4LOBe4$ z-TabHwo$>FxNmu*D+lP^8^(#aiZo|7Yr}8_^(qzONU?EzN z%$rYBn;R_m`j@_*CtgC=u4Yl&+0#S8xr8Pqx`oOwNvM~=kwqMSXg!awb(WUTcyI96 zB$094Sa`e3%Ji{c4(P;BWiNjP*93%`vYrU$@dTw+T^UD#uHtWyHZ{_GK6wqpl7-Cb zBUNN}T`bRlfrYg-nihm#Ah8}bWlDSqoCW@sm{KJk{Ku?>MANlrq|eG62ZJhTwh)F& zA!&l*7#?M}V3yFxhRdVlo3WnA?9`oV*7P@@GC(z$6KxXO+Ee%d_=gLf389%y?wm3^ zEnE3=rh6kVDptO_^$lbOsIJ-n-&CytF{bxTpUd?a)#hSf^yXwLUDy9`MG6z5dT2gB zDtmmYQU%}Y&}aJFH(Y&rC2Wtg80bnXljx_2ha(C@5wI&`ovDUTVfrE?Ak_jO#<{gi z15d@{EaUrO8EeCz%+Vih?3X4Vb~z_;dT8t;y*4cl=9RLhLX(GBxWlpVaacydt!snT zigZ^2rav%P&bZm*cTXjd9&HyJ83i+SDU2fK4D2F}$7)izKw=eh=*Xc`ie3*SFisaX z98JF1GRh$0gzXWx+~1@3YD+o|hM@7z76-FZc34-D@gZkit5i2$x(eJs1pV=2ReJ4X zSn2Q-=}tL|TzEBQ*811yjP=RhJOcV==8Wi@md@W6GsLizD}~qwANR-VW%Ip?ovRX| z0R02#B`EFm9BN*6q#xzE;f=t2$DCkfmipP-0U9g|1Qrh^MUU+hQ|MW%%Q&BAYx-pf zo}{Fanj1G}h)X>!ny?m3G4^d6vPOnc*0e_Av_C}AVZ)bUzP6E0$RK|1=ZjUGUo7PK zB%4)us~0qm`23{=@v+jAt(s?F)un$2^Ya-Hw7h10HOWq@ff`j92``+uFM9x{VYfY3 zUaHlSE)3GE&{=HZe7oiTQSr0>*1kr_Q9r#c9!=v5k|ZXsE#>)OYwuc?9O^;4Y4qj-ueV~bretBRR6=W2UF_XTrbDMdc6ZY5{mD~D!5TRACboDVH zbEY8;ekwB3md*xIl}GxtZ@LxM!3%gH*2D2_$9JDE_>RgRRGXldQnrUfBSOOAG+S!l zyEu9K$^N@FGGHTu8NMl~+AXom zbj4%B!I8zy%v85|2xjc(R;1hD(nuf@RKTl+|Iz+2GRoy#<6xg?Aj4}ttSQ<;)u;Wd zfIbA({?i(nR*Sk9xMndsEvP9(R*559+~*`pxVK_hypzvdcTE zakd*J71`f}`C0c-+b%3~+RPDR2t?hM;q5m;8_3A*rPEXxCE$ba=Ue{rJgWU|b)Yq1 z%5GT9XKP3rWD`dV1+1xmufeoDDP;-=2n>zKyrt-FEVpH3Zpykg{1}HoXc!{9Tk-aC zJ%;dL4xbczNha|057iZy|HGji}~y|?5I*b-V+hAO&CQ-9H#0o9Bm@w+?frBK}oZ!@$_ zB#ylw1O^F>7bwWVX`uS8k>O~|8gk$G%(6sWn2G1`C}XnyECq?8x)3r>JRR+90}&BWg9bOc5gHsjwkXZJE11La_GA zvZ_TwS597Gx=yRnlP+e`EeT)gl@}Gf2;=)!-|YePi{CecOUI~DQOyD zLYvZTUTx^zs#%+$ecC;MbU3xP2g^xsGZ7&r;*|QL-k_`lAp2K6ws}(V`X=VJeu2Eq z0Ocer`gKBrQg%wPyK z<`V(1IK4ZD(-kLtnw$VmlSyk2r^#23JR#Sf`Y!C2zQEspua_q+jto682C+(Z1y5Rk zG-}ogZpTFeM~3cCCPDfbrZ#lvk{$&$l329s3-a^xb-cUN__c~*;>`suX2DXge|>ZR zhxzUaVs1g$*i_V}iBwR#eMDZC7X%7~V7SknZ0CZHe#Bs`!5Qxd%!k1+ZcOnBbB~l? z9M-|v>u+?OeVNZW^d4|r3gGo5F=}wQweRd>dQWvVmMvN0aZ0%fsqahnGD0p=%7me3 z3pw?d23m|P>;|&3AGsPO2oHQ*$+qxy62pFX>N%Pr?4ZC?a~_!ReOasI2}AX>C8u_? z+GjTZo7;SyfQ8oy8Yudb6tNLq9}rU;caK#Zz+Wq1Gf_$M>2atajp(6CKdJkUzw&{G z{Kj5~*z?j2L}#4-v5%z*QK(_*7XhMO?mN#oD|lAMZdZFGv_`-tu8O2vO^pK*S&?`X zN59)L=vVA$U_xY6`GK4j^Q)kYijo-{jHqGwj)RYHzVIFW2zJ?O^ig>wAn7@!Sp@2} zoJbnI6D>}ffY<0Tzs=tg5BzBx{DEK+Wu;(W+hbQ|1{#%!3f{>REV{Y$Csnmw&lv!j zZYTl}N`!`_k_20ocvOYR)&$C9g0IZ_L*NF)T~WCq9o14Mi_tpTO`_S0E7^@d{S6KV zKv2Y|3TL7;4=PDe981O5yP5-(#q3)p9;Jo`tS9HM;k&sFJEDn+7>e>+CHo6)X7`qrCa6A^HSL|ChF4JA;k_JtIAP* zTubMuW>U;xW&)rpYk?)FHQRMZ#!lWmCraJ~b0mnQt6oKODw!x-YsyzA=h!|587)TU zC7!|1_gvqsaUOV&f_!*<%&nqub!MrwQAQ>GGrq2$jg%?Shr3dh4#kxrBA9 zf3cmx*@WDo+6~+`4V!^}Br3UfK+@GUez(uYC`8|iE$~kHiZVq*N@*T8D?e6>ElH_#XRg!F{WZ62TA8gNJ) zXlpMlM06Qj{#e&F%ZwD~@yhQ<&a}XpN)o5=nYP@{Z5nOUGC#9Je7Ju7H?b9SGjQ#^ ze5DMush#~o=fp+P;y9_|;#7rS0J$CvbW(JzeyG2ofZVE z(;$j==G}ZB@ICc8QxpVr*HUTlr|PA?N{9PW<42iHf3bxk75k#bgUHNtj#3k#HT{T{ zNi@}qvE#qC-+sJ|uiS8Huk6XSh5e4kv6_FpXl-l~U|%JWhN${&`}~5fT;%Heqr-bx z%oWoxS|xYR`DSAEs^uR|Oe6P?+k(NF;3P?OQ>Drm_#9c<1x71KM+r?<8F)eJht0#g`iMe1J}n-@D8xdm7DdRk154(5gZTknmSj|hKpO7BTZu1g=`b5ZFs zMIQ#Q3!L~pgE;U4*HD=HHUz5X=0PH1Kes-a*H}4W^9g&-3?V8fI(w=1zfLNWlAdhz z%fL7sSw*Vc8}~_PWQ1C#3d&h_RYF^@O<*HhT%(=^4&oe(-x^Jvf0uAf`tEYXe_To+ z_u~9xy>z36o6i;ht!($9wD%q(mwb1Qnj zWLYUP9nDNiU=dWgx`lk=Z_H0Yw&mM}O{m6d6S!06rC;H#^rFtLm_IBbiI5+QgwL=2_FrZ7V-T}bGIyeh zV;8UK*4j27^$|PVUUol6p$kg@U5UpJN0(Rc?=HTuZ_Q}3g*?wK-fYB3gO7ah>T;Y{ zf-uFqHSjpkE;A zst$m}FhHVXk53qVnKRvkloCWp;Ef|Wlzq(KU zZV+@Q9{P2Fw$#_0{3Yweu`)g-s|`-wshK61X=w68?Kt4`O2EasOMwa_XVOx41Lc?t zeSt&Wx4z2!5OU4Ax`mCOT0u$gDHNr5^H~%pmmFaK;R-t%|Elto9eyK5 zM}mlBuv+SLu{8%gtsj`3yn*m#)~kfkIvVU^Txe;^1*hT+`&_S31gqX6llP*D9!@ z>c0M7mOa7SZXksyK_50XnpHm(cH38+pwcad%5avIC*`2GTUDK!4ruBh+WEI-La9XA z>><{F-C8`|lL@?!qMB7MZ zJKzuAIsTPF!(V`O1HpK=03N=*eX= z6o5pa8F6zQF7@egeq`YiN4u@e!28iX@bpQ4h$7l$jJp+)i6jteuCwcvZD%J$eR)zt z`iXOfu2jvuXw;2(($S(|vK^+3@5<_0Vb&RX+w(dJY_s=qL2y3b)8bOR*52ZSNzqc3 zbHkqnmV7Jg%8g2DH!eTuWB33}p1R_$ZxNkbiytkfI5W!pAPYJ9RNv~Spq>37y!y=4 zZ(YVT7RC(DHTj0FU|*;r!4K!tFK~aJv81}Zd*?4;wikZRvZWj-KW(QF>r^67yM?iy z^x~x4=A290J+nS=z>k$8#7Avg6h8u(R#yswE8Vx=mviHvStQ9^OKymJ{D9c`)z+&h zHYAKK$|l+hQ4ZS%b-*dK;s*(iM73JE;i}0U>?xm?msN2bNdLCh-dZV6{8S}oUdj$~ zuc!&Tfrlb>H&-5cE#{SY?(baHx^+z7r-LKClda0lr1Y}rNg^97r3*?PExO%31dYtf zt7Qiy*w;W88Ty?jwr&%f-ZxPS`bMru@x`1)`CG3bP~c3TAzsm#a|uma?cHOKNJ5zv zGjjQ(t{Hf4?X>ka@Fz;9cKKJq0>CLPNVTLOEq4+EKb(HGl(i}vb~uAp{rQ?=AB%cs z^F=r`XnA6doxmLa-}*+S?`&01gaBz7+o${& z_2ykvsw;GLoZX*r;&FxKiPxT8nF|~7!hl;5;b89IPR58aG zP?3P`zZ=_65Te`}!C@NL^TBfj-?)QO%KRhEo<<+GAdKdC$bc_B3g3QRuQkoahFBZd zlUsC%O>lq^7{Cs5rm0)*Vsgf~Z{o!T+{||erBmrigkl4D1leb1dC(EQ^sN5~P;jCn z+iei!F@vd<`FHz>GD#aS4@5vVH~n7GO~CoXC`o*4b_=Q~vj2s0-(Xv$Ni$NRz~RMs zc5PnCgnW6E#>w}oQWh9__8@5r`^0Ej!C30nu)OFY&YbF%U6bZ_l#H8&g4(YwvRG*p zDy7h`6TaefI}KEKejo{oq&=IKkDF)9cxO&bLOL?gP=FDa0EO^6`9V&qJS|aA5KQy0 zU>C8V^3t>HQu=di>N?;u#>}#LV?AQZc9P(Oz%PHomHF+fNW&pNQ5h9^qw1cZ_a6!| zj-%WVx=Sy}9kju;%mLW=Qb!jwa`YL5bnKTbi08Vah3i=ECJ!UD2hk< zXJ0Ze#~J0>tJ>}Wc2Tg_hNWptX?G5-C;4B(x>sdkmj<8(E1a{jb`D`u=QC#altG|< z*|Bx5qK_qpg);?WSA$W(J6jr>c`Nl#QP@X1|ogp#ukcPCyTnE$2lQ8AwFR` zi9})}16P_za6riCIA;!IeWb*$mq7UduK;Fyky)03z#h4-&$%8sBxTzHwX=BxH<>{{ zI6&i*@YR$Lvi83rnzXQnz1N2n8iAgr3Ujvm^RgB%4qZE*%P-J)mF&Z7rw=0glKkJG zwSfM7G13ilgEK67P|5HZG=+SCCYRzhVC4)<@S&7fzk`^AXHO2k2CO@H@ku!2?GFr_exx^OzNx^H_fHP} zw@p1kDOI&dmdqC9$&`Vo+f+E6Cu)<{i>?W970#zmFu`63%Tq8X(ok9bAnA7^87^Z* zG43nGT=%jU4N(ftmyG4c^+x&H$an%0{YTaq=_t$vGThD_uDTRpi&K%?FtdsLezcBr z-^<@-&n!*y@-?9va&&unxMPe7vdu~88K4mP)HhyFizvz%H1xwwokR(16Dxf*z~$pf zwBHJF;R7CwESi5CMAxTco@MxL0@4>rA&8BBicKmjMrej6tLlv$gPhz+TUofu$Yq_s z^o~_eIGEK4=_235fziBu$L`EV=doWRy`%)9>I7)u-^spD+0F}kcKeox-C4~CDejEB z84+JKWGDi}uXEQcC_9cLO9e7NFsE!>Be9D3h05`77xP3<|SSVB3 zE(A7o4F(#zQ91v4sbF((ra?Q?+B$DhWa!bF4o6MhG|Q8Q_V)+YEdSCW&fE9|cuhzb zwY*Wd+K@LJG9qld}5j-dnSIHnkPKI`LO!d zOsiS95P{gUENasJqnQq?Jt<#?$p8@7np47K-ohACiI!8Kwlz|qdJoML>V2bIx|w@X zxe=RtIUYm@43)OBF}=9TX_lb75y(V~y4_kAL6Jf2Rl{ zJ=*;J{Fa0O)n&%_K*Q?T2Uib%DBx0CCr_c(_rm7B&IWlKp~<_lZqm7X$5yoq{*v7B zKQ`Y#JF$uqW6+S2Nhg<**2L0@j5H?~_7z&ItK1&5fK}F?4}2ZR?j4I0FsXWA%^ht!Z$s|2T~Fv|*3piw&R)#G{+BVG?|r+rZgo zj3?MHZ!y6PU+m?xWQwevzYb^|($I+-AsRv)DWMQYlake4L5nYICNGg=*@jOtGVstW z@uVG25r(;nuf|g7Gd`Gq@*?Lfpl0|whbu@nB53`1APYapqC;dHhc37-X+2wr$ITe@ z4FxE|hsI_{e3ov64XTcI@@`N3t zxWzFVIw3G%94REjuUbIxdg&V~0F~40{|_asZv^18H>teMkykaKUzk@p7GKa5Gq`@L z+EuB4wkfr#?EVT?XF6I!c1`S+QT8&aet@hX|4-PtA>IUVK!+lvtA*#t`c^M&)RKBs z9aXLeg9N*fZbnGoeAb0s1#}t~rt)q=12-&`Gj8VXpM}*uNrlW90Kq>aJ7rIAmWg1N zcv-w#+#k-OTO(zX?)eUB%v-*8&<>9GwP`@jnA)#}Yd>ra!Yx`lDImf(uRI(S=k9H< z-z>RZo`^yjZ0&zqbG?9Stx-3_O_c)7O_*R4&8}8F zk23BuGeSJ3!y|P)iiM+dQ5X(DoyGNF&-(f%Pjv&~OpDBTZ$0{2_bT0L%^p#VMr0&d zJNU&)VOg-H5M~@)wZ2Cd_TLIh7=tQAC)QRYcWa2Ps@W|}8d9sZmAGXFP4uM?X=K$ z9H0C-Xs$oPnJQ7!f!;m(mU_tANPuWb=Dk9=*>)sV*_3`c2+OR^1Y28tq1!T@Bd(Q+ zZm|3^hB_-~;2yb&6!{3Ys(L~AGF%7z`^zr z766vxXLL1rxz9pTPm10RGh=A0vXOxPHrl-UKW1GxDdIX-$7}C-Nvk7*jrHZR*U2=4 zu$FL5M;q3*8R=T_iHHYCU$l`USdU4d`M@(0>c-iu*{tr~}!@c1=lwUyN$s$au^ z3W0B3Ybw6P(A*AYA7&Sl7nXHb2oLLy40d5FIB~(f_+xg?KO%Rr zrG&m=ZCL)Q?7mHeniO6e6~6pQ4KSB9_pK1UelYN=gJApmfxU(tsng{Q10T)ir~T+; zRaZ8n)Z1AUT5~gA5s9mqrd(*yxwP@MVJDLTdT0N?Y>d=6-_|^hc3C{$$l%O0WPWai z<@xLpxyI-ODK^KYKF$}au3O^N&-dlislWOABK^zBnWM1b&33OWt}u9{XCv|iQGcNE z9w>;_c=c3YUg)s?Zu^;{#p$e~5d5u&Xs1(gME{eW;rOB_FYUtz+F?Cl4d(jGZI-R2 z;ELRdm(Q6UDV0JTe<}xc0jq<=5X&lFL&B`xM%y=rX0Ctsp1nNcG9X_JuB%+jy)^Fv z&kob;pu#Ifzpm!3q&Zyma zDGEk$OgA&o!z#%VAG!9-EIO#^b*?bNy*O=8avjOsEMGpolP z(vvw2S7P5>ctZ?`?y2a$nqN5__bM!vd{s07o>d777UVQ`dt>l^MG#)rMOILjZx;1& zO(ZwSbPBIJx6l4=6K02u#yB27JN~SY$%e=3%OhzPK4ARN(FlgUhbQ=^(G4rStjE5B ze{OPQ2&&X48v0T3Hx+~@GAl1hn!m1p)I6z^FPI{4s*>${6eAA#dQe|ON>NQbI;y&d z<(j2x5%$Q_O_-BycffO^pe!^8G;fn11Pj5=+6fNaNCjo&&t(QyR?7-nTyvcm3Vy8Z}Z!u1A6@Nh2PZO890MYiVl_pX-FPW z7P1S0dG<_>piK&A&Sbqy08xU*eDB<#)NWjAx~#l(SUV6b`T5wgw@u@FH?t7pEL_@7 z4ZIa!Ui1&)EU&p<7JiSv0yuim$2k7CJ+375)5;Q;p+5W>%?P$mfU7yM;}qmH#j`J2 zfqRb;n*ecpUHbz2m6DaM;tND@doQ!4 zccXDPw_0(Dm-8aS71ZFZEqg- zWjdRe%SMKb;FxWs0QdaI_uzw-ihYKi6``_=Hiv0}AQ+j*W8HX7S@`C9Sq#Nuf3jBD zSz_CtTd6SH)J2A+GQSU}uvFfHfR`}a$3O3%o9UxIgDmd3{W-`So@7Qm&xHJA_WZ9= z(tiw*+Dct`Vce&me$~wo9dTxnzC>8+9rO<~bQ6d+P}yXMX+oE&3Am}seyB{2W2g@>k`%91AF$Bmu-CZ~?IZAOeB|(tlut;AHoHH z!yAsXMW)FI=mOPJGh~OG|FrRz#W-jIQ#}zCu^2cMbKq@Vst&HHMSMn`td5+@42s>FU=0Sx6B5fe=XiZ z$icRox*wm8_p@V{)j_r}7EtCpwWr|Fv541SJDevASVzL}_?f+gxdoQ+lcCKoN+U+* znAGm#c)8W8?PVgK>+wC6E@b0XyVWWQek~amzgGSNs>JuF z5TO}=!?f92ctc6#u24@w;Omh2(AbtV<)E^uVTIQHu(b%n9&X7^^_B>1uumz)7RZeW zu|3Fp3@Y;QnHEKmq*)jkDc9pikN-37mP8>i@j5Al+MQj5ZC^?n9aGd440bRG`SDpd z*NExt=geL1e4_Jz+;bk3b{jyQtE+Ekb;ZLZH6;&={`g{4icIT<+KN5zYG%OE zn67Qut>2jYQn@5W5rbI(4>314GQnCr$=?>K%CBo|wmZo3pc^uSHJFv0(V$f&kq#Mh zok1y@2GD-=r(JOXf4+p5)E`J_{xcluhw}*RJH{MDUY-3|;V#}!d5`f#LfVz0=!#w_ zy%1?S;}SX!v9kkae)=@z$-j6K%2O6$Et7O%-@b|}7-mXg!#Ch%7v`c~>W=Xtp38PS zFr=7QC)rzab_qrdQYW8RR@KD$Bqim9ihx!HW{d@kA4ds=GRjWP$F$wdi5hmjq;*ky@D`n7 zr6^%AyR=eld=ViPp4;H<#VY9kA?(Y;p?<@6ErY=qW68eEkdQ4&cE&EUhaqc7rR-B= zXKdL<)?^J)c9A7}c0#hWi0q+c&CYp0)%SP$o^!72T>Vp1SLXA1-}iZ+=YH-!CQ+b z$!s9(en^W7-Z#g7VM*=1r49@4q{WUg6WJ}NUbQnMTjsZAy>mvvEiXd(cw-Hzl%B{S zMafL5vD{m$jCuduxQOnjmS8A_+0C&98UbF){h0gOH#Au$LR?jpNJxk~1+>IqI8{Bx zBTuhvL{FBFMt4u+$B{v3F1Jt-c7g0xQ+QRoOx6!DEYo~NOrTSV8U6lRk5HfN8{RZQ z-orC`8(?7l^*b<6+O|wPoKgkb=qGnAVd>ZQ)g0W1Rjl_4mcd%hYp?62^Ywr1-PiT{ zR?*dVH5%3}cr9ljo!?0z;*{oc+xLK&!SH+`fg%H@(lS7lyI|82h)lSt(c~;ZJ;nV@ zz*;NvL0{tp8?|bUs{_Zw(0jV>P9;yNd&3oaliua^r<9dcv-nl%SvgBBrW{eLGIQSg zDw`;}W`*nE8~g6DI1n>~NkB1um8{mzgAW!u>Izjj-)y)^qwMQ?t>g^4Q=IYQ2m1tO z!DwS4gDjuby7vV+%xK?EeNKLBt56E2qj)Y(BINcu8vXd`<1pHfz^}zB z)Gg&|_^sQEb3K*k7EY8taFeLLzu`Ob)Fpikg!_-EKyJy&YtTe;YBNR3&bsw@dMG#T z=4H1n4Tg5BtVVGUO&x~zh=Lu##4wC@l--@=@?*ygd+JX&3o?`+J(lJhyt>$D)U;r? zF?WQQj^2hlcr55GTxMYO8u)Q2uls`(v6C3i&6$bW9a5hp!}#3f!Lmv^TYPU3HZ-D< z+xl`T8f(f)+g*DG_G0o~1dVjeJrcQPa>_|DUKPCQ1p&Ur9|8AW`cH9n_1wk?Y7pUO?oz+)^?QPkpZ(Jc0h~qb3dfX;jYfRqmAKUP`4qAAeM-XN&P*eb{Uya7*1mCO>-RK&!!~)*f{^WhS-wr24p*r14`xt`5== zQ9lJZ;Y!gF-B0!E1|kVQwx(;H1ht~V+3EbyS=szb-Q>#?uVcq9o$C{xQ`PK|f6*{L zvK4^JC!jU3QAUV~^b63_5y~N(%JT|-m>EH%zFM5cL34c3%r305TZGIZkrSNS&xB0v z@r#_xX!B8;nmt$|=Q=yV-Dnm~gq%=C>|00v@VUJuI6?V{Kb4D`yI;)4?CPr@ob7B5 zrxwjpBG`Ke^%O=NpR}2PVU8xjBAr^f}a2hf}ZnEDsdjN^u$MJ%-YQ41*y2>6Z@#06yM|PO>Ht9 z%9g!@i6~xT0bL`>F?J4Yrp`}OYk?w6F&3X{vjs5Wuq41V&imA0`)RnoVM zGJgX!mFeo(pSj->1v8&90WuGJetDP2a++Yr5{KJBx-=j)IogQ0*yYj2`i8izvV?jk zT)dQ{nB`+o`1FXq?}>YB()rY`YDXJq#-*~{NL~5uk>PA*+Q;$)59n}*%v^6)Yy?6@ zy3xy9(F1qd9_;+8y|;m z*C9;=LOKXRDw&D-0TC9J29WQSG&>~ixdzK)sJRn?}V* zXeJ%0nw*r{5Y}BpIkpH=H7i69e~Rt8$c%?~%sV$x?)J#2?2Hpd+yY>H27g;nj5|-4 z>9i)J?1x|#4?wOx6^^1ncJ~4dt#i>1ZW07*kAmQlKUl@Ckg3`3i8xOgk zTn%>iuW^}D5ZX5m(FF^*SEJWLAPzAT$9sbTvFqo7%0zj4I6e&`u!?I6 zad@BJ*`F&}4?O=Mac{&iJ^oER?G{Ky+Enl8`){swkh6Pn{po4{n^t>KRnJo7Z?r}iJfBetk&iJqK!;-Y3`3V`J4s;v87Fg z!--1EtZKV@+$zeOK}|Rjk;=7>ZQ30!elTFDK6F3t;>vDg`nNZqr;3~n zcV}wKxntz!x?i*5Dq|;kToUOpMSxTj)neqsEpXkyWn18ghVXNv&(1?KRCUNp-{ZYS zTGKn-aRfuGfrcRr-*36AYGVULH}W|?I+4@N3qQ#^;NC~=d|;|rye8yvfv)#Xar`$4 z&%=KXWW0?GW%m~NrMvxNby}`cJ)o;A;7B~n?6XI!v=tfK)-y#e5Vya=f>ja=lfQZ= z7XF-C5=xo>R;i+*1v5HS6{Z$^P(g<#K_Zn^@?dRD#do9~>6NK%5kzb-N6gmN@~Geh z8nmGV-QNm38Nw9dYo3#KBrS7in1k*s5lln3MI9Su z^(_HO=X*n!F=(FDjv}&P&*E2zpLRV3=QYFejHvTmxR!nFCEa{UBP4>3R!Qoz6#XbGSZdioyolW z@um`IJg2Yw&X!^N%s&HEOpZ$TT$R0(-_%PJY&rII4&@?#UpK?) znr&fSx}3WqN56hm;2J8n7#Yg4&Z1bA)kHwKmZI&~G;hYY)26}_EotVkkja9v_Pk8J z#NuKIZ)Kz2owj@e#4^NmnI*x1wqpbZ6B}GPW9p{5Esro*!iW8k51s1&*=(tf`Z@=s`Gny?inp z!)|b9bWmbT}7~?GmEPmS~*Z3Sxz~`Oy!x2S$$mMb@c{OKbvky|aYt zdBsm>CvPx)FYsNkT+Llmd-bDkF|#FPFRc#a!;~mnNbH?+I?|ow&Ykg6%e(^Lne4Bv ztRV#o)yBO^X`iss|4hjQKYcoDW46wpRiX5_(8GT&ZcH?W<6OQdGyS(Dczf3YaWCGG zV2IY+a08jyeZP}-+p$^wqd~5EQbWHcOTunmzECIXh?wz z)52%M>d;)?-wknAN+4mxrma_(2_2Xq^{_x#v~OQMi4wJ{LYqSI&-qUJoPh@K&EdBi zTpY>KbVw9?f(=<~8cbKB0&&OQwXR;>rkWdBvpv7)y_tn`4ZQv3Bw~#LRWC$SF%dFR zETXw4GF@g-`|{4GivaboRXRg&<+nYGION_M?3-q}i6G^{G2VoFjKO^Gxv+vVhf4~GGtTI0tu{fWpDycWgC5wUUJ&> zCJU7YbgfN}hE)~$6P!O8+q?z`?Z*TrD`s5D#MfY|IRmUx*Fd){p#xqtkF1v!BNxjl zU+=k4CG?$z-Y_sby)}eP<4C`ofYSRZf>2cvp{E)Wk$!k+Pix5iriZM*knMzcOsG5_ z%d=BAFj(t&=w?AMC#NAhm&bV|oHBS=1Fs|<-CdYuaZIOOt*^L|)bV_|q(Zmhu;0!< z#H{q3ZE$n_+r>q7n^B&?hxi3Tt=CuofxV3N4-x{y_hl&-?w4xM4aODrB)vANdf6Yc zx8GGCX7~wIH|%D%@`LggZ&G|nd&ap+X8AiR7_|g~;iDjqED+(hd9Yk;p z+?m9?!FF{dt-Il$C1E`gLub2~r$QUoXi(!DhSWTbV*(%Z?e2H$dEXFyl6!sbrM34B zs$Bo#4>Fvnoz4V7-7g=$f_@SIclyGRnOl}B>p|Nr+V_4M!N&BLmHp!6HoDg=U)RNy`5H?akra_u)hTfP;G?<(NfqQ~5j&#~BNJKU&vZGNRm?=!|mBn>!sne9SI0=jh_gB^O$WL}SH+bXj zmy3^Ggm`!@5-A;rwGj4_(J_ufwNI&N2x0y3?`mk|(1POj&rdF7gw%ut&$8yKJU3gWxN5kI2;}oHxD~_=5wbxES z(){Ey?i2jUqZFhR;f*i%MSud5=C+wFmkj<{9ZpJwF zr_z?jEh*NWNmi5HbIaPOD9s&gVc7_(APhqgRS~xlt>|UCsRmB)_SK7-KE#Yk#Um9I z*)pA$4~MlyNjmw3&=D?`J!dMeUgCq@}Yd;Rhdqo#t~ zJN+|mwS%ec9RZIof_j@jG%uTrB_-OaR3JQ87{2V1=d%Do2|QhYW8NmyZ4v#D!(PyX`hakObyOhGgER)*B1)nkE zpA^MY#jodbw~0yqSuVbZXn466?ML=qV?EG2wTVn{H8)RPe$5y6Ff}oG$?2TEuA}gi zOn$D1$x~nW=C6P36jLwm!yJg0BCDO~F{YqvUD=ZK)5vuH@!g@tEwb8;^!w$_GprWK zrM(zQikb2nq=Mf&FiiN>X?Q4h!aPZ2dfSGHjqgook_o+EjlKbV(N2rU`i1E2PFzIM|O8N71dkk%B&y`zI z3uVd}OJh9EdWkzlaIL2$JXL!{l}FB45=C`nO`}jeEeLQpM9`3^L)?a zDet{dyqrIM0ix9OR4-G!o|2cwQERPh02}5M?2>T~(%85*F^*h{CY&IdZUw!u`yK2=3T8bgk(*V%7AS=riJRn_T_RyV*_V#4T3e zZ5qFhmsuwod7UaetC{eXuagohfIBh{4GkD6K^9)iK=L>CI>zMaLI7iXu6#6=!m@ai zKtXwX@mY8p?{XP7;`nX7sv;xq{uWBf&kP}IOmfq@H|6-W{A@mQD4D+u**tSEhu_c` zaSA+xR=cDZgGiS4Iv8ErSDiY`(5_*uRH%BK__`LUSi0osI?XD#WnevbWMO%-TQ{x} z7nH0p-xznQH3k%T}dVa>vAedK3rQJZYrG zlF@7j?d$vSmqgi^@n33ZcGT(JQOZO4y9r%2&N)Z>{^p=Q|3FeF$<0#~9i3l2O6+=7 zu+vRr3cZ{FMKsRwG}J2d)4_hXHXcm*X}vA~cQ1>Or~ElBCWOkl!u#&O1TFmncz6E! zI^Y~C@P`zx(a)9zEpy)N?4I zw8#(%rsOyMr{n}{g4^8VHoQ7d0JB!BohaUu0%K`s5aGaX;*9Z|4khSQDn3qiDTlYq zaP~!_%!Go;mRcjFb?&qcfcJ35kW)%X>kuwPsKDdzH~L;3s{FG|q1*{Mul*%_e0kso!kmhj zK8kA+3)qdB*I;I#vn|+MBSfF8E zNL>VA#T#ZC{0Z2UZI<+IBOkJ5RryB&)y_kb8$@UY%%PFq2GT|;mXEZ7%1u{(i6XSA z+Fgh`;ubs)=K9ycQxjsNf&2HUdK(cWd zvctQK{%d@)iSHfun18w5wuAtvn zT`?UD;UC#jKmap?Uw7Ym)2?)mcqxcr3FuG8#tj&p;RtSMdm=tSqsDAzN>pk*e8ce; zjFp@S&Q06C5g=HctvnQix5$%gmt1w27fHU3iWnGVw6-#$txV415Y2gsd)F?&cRu2^ zMXSbK*}^}|XPCa9Wotd(W|QG9I4y?d&Cs-`t@7>Ts2G?DJvTb>Wb1x%P5k+8CZ+Sc zk$7Ic@{teKbmvoQbi57uh99tJN2lLdtbu#lX3{SMl-dX-h`_11@+3McBn=ZWpLL<# z-4FYUM#m0iD8y5G`6uYY;=50imtl3wEf$QdJE{FT#RVjVTzuztle!WNN!+@bY?E5x zGmf)Hce3T;H=oZ|o+G|m@@$UpiROB~T!8|2Q!x3l`gws@X{SO6oG4)XkkaR-=!r%X zN?6(u7FzGCoATKAP3tJ30Y~d#fRzW68>OBU@BI0NvtyKFTnvSUMtk>D1o26OK@a*Q z=k*D}`R4!7dkWS%bG z3RxBS(GV+5dOvgU!2M0x=A5@WN4H9^LsjJYXD>ds$WSb_C#@XiZ;L+g+#+AUA?dd1 zZApRrCjNZoWVusMS9S4D(uTyHVVNFz0rYS{m7bPwZ-MWjW<36WU}J1`&w=US`?z>6 zFspjnH~-u-KYJ^^ZJzBBH^etTNY&Xiy!E-4b8vuh_Ojf6hRL2o052B42MLRSS{`h? z({LqZn7+noYDZ&65owijUM1Ang@SZ-J|Q1hVO-{ayfF#a*y;GBu_npaf&X!|-WzwP_&kwo{)h%ti# zWBrSUu$)Ukr1EP0LYh;suSQF33un&pMlgd^Y60!H+{C~xfq_1vRE&}x@C)Z* zs%Lubq7ySx$2~8~%yD~ImI9PZnlD{^*vu!t7-z_A(jU%w{|2kHd)`h#%x$>~RmziZ}@D)HKx-QQ6eAenpgd!NG_Iz&}9$NV< zHi29AXR%lB^w)nFa@+-7iJf6441{u7@<0%UJmt9I$GKzoL5&S$d9iOk=8Y`^oN4skB$D)d%nKgcUCqde69_lsg)6=lbqfWDfkYk zC|9VeUQ_G%5DQ6vr;`ZR^kWQqwsS2cucD2kV%>&GNJQLF+=%@d z4&o;{a;~IjMM9;;8MTim8XL%uNfp^md`MX6>-sDPWIG?=rR&dllv!wsJMVp2wpu*> zE;Vhg;v?I4BJfRa(80fUpJILdYS?sEVy7oxdJ1#pMcA?h*38iEjpFtGR4HxCCAnsa zNZYDj)@R$MrEA#4Ah|5#d!+I{Dr2`8NH%hV3tjh)U6Lf85Q$%GwGPTyKJ(XeXVW5q z?m4aJ!=f9|<|tH!*|%oBdZ_yKv}8OckXwiajK0)^LgDo_3SNSauC^@kwoUOA+O&t9 zYJ`;ff^H+VI?Biz5utlMy(h4p!$V0`U1$o(t)0Z=pq5%)AnXK*Q!qJzbP$%lZEb8e z#?;gDYY-?4DoUn_6-Zxo6c?qDShzt;9_^6v_7K1cU9}zDZ-0rl1I3(j|665`%F5=u zzH~q2>Zk*M-JEx$i}iuz!vtL!U;}Ut*|2njCaSt>r(pYSQIgTqL>UJ+>&f$-KQ@Bp zbTyR-;`I5k53?rUoFyw69j602%`{Fa_J5;*YbQK5!Be?^RN|LO2x0kj%5KMYbvCNb zUC$=A$E~?c4lt3u?kt2i!C>?-5XyN75qubX;ZLRdSPYFAkG6-Um~O#L#E1^9nSbDE zWVlkf>$-NkKA%E|vga`scC-rf<#&b1~?^i%Ia5b+X^ospE?PfQjZ&v$?6t;bScXy?$|Af@jMDxM;L*I9D z+GcnCf#SCMKsrGqC0A>BZ(SoC)w&ys8dQ}F>Qo<^{p@-N!TN6c>-n_4F6%B{D%7U^0XI|8u5zdfXCNTS(T{Wz-< z`NH6z1Y?s++sy+Tq1lcKo%>B^2%Sti1#z%B*q&w`%z-ejEG_%16cq6(V5tGB!4DNz z1W~3>?ey*gNumOv!yvUF=Kba-q~Wp*!$0-kX=OHu4P3boW?~LC%>F^D198LDV zl;fJ+i+XzhnHlvOuZXHDt`tm$+qYVO-tS``iFf?Qws&r!M}zZh8eJxK)P(*J z8=AK%_IG~?Lkkg<;O4PFY8JxQv0;H0S`Se~SB})tZ7vGjLMYCPkJgSE*e8c#cAa@( za$d3&s{p3_O~M*R_8wwQ%pC1utjt92#1>X1fOPbf&AAq(lXgJ>PEmI%Y;N&H%xmq- z2n51ET9kfPW+&!8oOS3CY&|Z4?U-z_@xU&_3E{%sXFLDNBiej9p}$!yqkZg~sUb#? zGRl3nTio>cdG1+RwqLEU7=+D<0PpEBl?5pU{6U=jPfYE+Mtou&rNeOZ@pc(x1w!Rw z$j(Ay)|=j$-aTnDc}cbVqgp^reQSJj5W#E|l9!=0zrBZ3XZDU6!Gfx%bDf?qm)pyY z*8{MVUc1G_|McAi;{b0YscS&s&wav4yZa@CrmbTa$o+@hP=-eZ7J+1aX(mcE)}w>h zK0l2+E8;boX%W0_D}Me#n!RAr{cjdb9J9u!`Fe%%RQtk&#c=QVqVzo9r@? zGKyNUYhE*kS2P1cSG!Bx9h!5$5AluXaG{t8JL`xU)4G(aAez(qv*cLQ-7BEZ}a`W*UOBNKgxHn0IV zqPRDgKyT8AF>re+m1Ftp?$YtW4?Rd^U+_63e?Nc@9qF1^9H(%{ItMquln1mMkacjU z`l9A5=x}q6>?%UtZEN!>*19TT|6Kafbl{AquZ(pD!tyf5yR+}&H8>y1-2KKpYS*Bm z`#!i_#HY{u_pODtQ$nkzGssob*y|+SV~xe#`dp8_ums|%&TMClww~O&s(IB7gW`%j zwRmdx0N{;atMi64v9U1eD{G&ot9%UlGZfiY%RP1fvs@C;qra(ezx?L~qTxtQvvM0H z{9(<6yLPR5$FNoo5WadAaB{p9Oeq3SIjX#?zLv&CgZ9O}qM%zfM}G>Gc|~r*%fxW& z8$}pbz@b?uTlH9O zs7Tq|c@NH}R8-Ol@q=^tlgf!2BJDdq|4Kb%i*e(*f?k_ zMTldmeZd2qK~3oX@_kXJx)huHL_gC`(Y&eab~JO{02I}kiTqtG#2VQD!-~vy2F^Ct zl2S5Ezn2R020jpYfol84dL)HB%0D;pcyc+QC7E*W?MG} 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≧S`MeT<=*l! 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 h%e7*WUDk8%K|yxhtlqvK4o0z3Rwj*mD4k958mR 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 bgMo6-?vHXE`dSN|rcoCAZT6M@ diff --git a/study/kernel/02-memory/04-buddy/01-buddy_system/README.md b/study/kernel/02-memory/04-buddy/01-buddy_system/README.md index 38c6b1d..06ed87e 100644 --- a/study/kernel/02-memory/04-buddy/01-buddy_system/README.md +++ b/study/kernel/02-memory/04-buddy/01-buddy_system/README.md @@ -1,82 +1,125 @@ -服务器体系与共享存储器架构 -======= - -| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | -| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| -| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | - - - - -在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. - - - -#2 伙伴系统的结构 -------- - - -系统内存中的每个物理内存页(页帧),都对应于一个struct page实例, 每个内存域都关联了一个struct zone的实例,其中保存了用于管理伙伴数据的主要数数组 - - -```cpp -// http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L324 -struct zone -{ - /* free areas of different sizes */ - struct free_area free_area[MAX_ORDER]; -}; -``` - -struct free_area是一个辅助数据结构, 它定义在[include/linux/mmzone.h?v=4.7, line 88](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L88) - -```cpp -struct free_area { - struct list_head free_list[MIGRATE_TYPES]; -unsigned long nr_free; -}; -``` - -| 字段 | 描述 | -|:-----:|:-----:| -| free_list | 是用于连接空闲页的链表. 页链表包含大小相同的连续内存区 | -| nr_free | 指定了当前内存区中空闲页块的数目(对0阶内存区逐页计算,对1阶内存区计算页对的数目,对2阶内存区计算4页集合的数目,依次类推 | - - -阶是伙伴系统中一个非常重要的术语. 它描述了内存分配的数量单位. 内存块的长度是2order,其中order的范围从0到MAX_ORDER, 参见[include/linux/mmzone.h?v=4.7, line 22](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L22) - -```cpp -/* Free memory management - zoned buddy allocator. */ -#ifndef CONFIG_FORCE_MAX_ZONEORDER -#define MAX_ORDER 11 -#else -#define MAX_ORDER CONFIG_FORCE_MAX_ZONEORDER -#endif -#define MAX_ORDER_NR_PAGES (1 << (MAX_ORDER - 1)) -``` - - -该常数通常设置为11,这意味着一次分配可以请求的页数最大是2^11=2048 - -但如果特定于体系结构的代码设置了FORCE_MAX_ZONEORDER配置选项, 该值也可以手工改变 - -例如,IA-64系统上巨大的地址空间可以处理`MAX_ORDER = 18`的情形,而ARM或v850系统则使用更小的值(如8或9). 但这不一定是由计算机支持的内存数量比较小引起的,也可能是内存对齐方式的要求所导致 - -或者可以参考arm体系结构的Kconfig配置文件的描述 - -```cpp -config FORCE_MAX_ZONEORDER -int -default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) -default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) -default "11"` -``` - -free_area[]数组中各个元素的索引也解释为阶,用于指定对应链表中的连续内存区包含多少个 -页帧。第0个链表包含的内存区为单页(20=1),第1个链表管理的内存区为两页(21=2),第3个管理 -的内存区为4页,依次类推。 -内存区是如何连接的?内存区中第1页内的链表元素,可用于将内存区维持在链表中。因此,也 -不必引入新的数据结构来管理物理上连续的页,否则这些页不可能在同一内存区中. - -图3-22对此给出 -了图示。 \ No newline at end of file +服务器体系与共享存储器架构 +======= + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + + + + +在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. + + + +#2 伙伴系统的结构 +------- + + +系统内存中的每个物理内存页(页帧),都对应于一个struct page实例, 每个内存域都关联了一个struct zone的实例,其中保存了用于管理伙伴数据的主要数数组 + + +```cpp +// http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L324 +struct zone +{ + /* free areas of different sizes */ + struct free_area free_area[MAX_ORDER]; +}; +``` + +struct free_area是一个辅助数据结构, 它定义在[include/linux/mmzone.h?v=4.7, line 88](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L88) + +```cpp +struct free_area { + struct list_head free_list[MIGRATE_TYPES]; +unsigned long nr_free; +}; +``` + +| 字段 | 描述 | +|:-----:|:-----:| +| free_list | 是用于连接空闲页的链表. 页链表包含大小相同的连续内存区 | +| nr_free | 指定了当前内存区中空闲页块的数目(对0阶内存区逐页计算,对1阶内存区计算页对的数目,对2阶内存区计算4页集合的数目,依次类推 | + + +阶是伙伴系统中一个非常重要的术语. 它描述了内存分配的数量单位. 内存块的长度是2order,其中order的范围从0到MAX_ORDER, 参见[include/linux/mmzone.h?v=4.7, line 22](http://lxr.free-electrons.com/source/include/linux/mmzone.h?v=4.7#L22) + +```cpp +/* Free memory management - zoned buddy allocator. */ +#ifndef CONFIG_FORCE_MAX_ZONEORDER +#define MAX_ORDER 11 +#else +#define MAX_ORDER CONFIG_FORCE_MAX_ZONEORDER +#endif +#define MAX_ORDER_NR_PAGES (1 << (MAX_ORDER - 1)) +``` + +该常数通常设置为11,这意味着一次分配可以请求的页数最大是2^11=2048 + +但如果特定于体系结构的代码设置了`FORCE_MAX_ZONEORDER`配置选项, 该值也可以手工改变 + +例如,IA-64系统上巨大的地址空间可以处理`MAX_ORDER = 18`的情形,而ARM或v850系统则使用更小的值(如8或9). 但这不一定是由计算机支持的内存数量比较小引起的,也可能是内存对齐方式的要求所导致 + + +可以参考一些架构的Kconfig文件如下 + +| arm | arm64 | +|:----:|:-----:|:-------:| +| [arch/arm/Kconfig?v=4.7, line 1696](http://lxr.free-electrons.com/source/arch/arm/Kconfig?v=4.7#L1696) | [arch/arm64/Kconfig?v=4.7, line 679](http://lxr.free-electrons.com/source/arch/arm64/Kconfig?v=4.7#L679) + + +比如[arm64体系结构的Kconfig配置文件的描述](http://lxr.free-electrons.com/source/arch/arm64/Kconfig?v=4.7#L679) | + +```cpp +config FORCE_MAX_ZONEORDER +int +default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) +default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) +default "11"` +``` + + + + +free_area[]数组中各个元素的索引也解释为阶, 用于指定对应链表中的连续内存区包含多少个页帧. + +* 第0个链表包含的内存区为单页($2^0=1$) + +* 第1个链表管理的内存区为两页($2^1=2$) + +* 第3个管理的内存区为4页, 依次类推. + + +内存区是如何连接的? + +内存区中第1页内的链表元素, 可用于将内存区维持在链表中。因此,也不必引入新的数据结构来管理物理上连续的页,否则这些页不可能在同一内存区中. 如下图所示 + + +![伙伴系统中相互连接的内存区](../images/buddy_node_connect.png) + + +伙伴不必是彼此连接的. 如果一个内存区在分配其间分解为两半, 内核会自动将未用的一半加入到对应的链表中. + +如果在未来的某个时刻, 由于内存释放的缘故, 两个内存区都处于空闲状态, 可通过其地址判断其是否为伙伴. 管理工作较少, 是伙伴系统的一个主要优点. + +基于伙伴系统的内存管理专注于某个结点的某个内存域, 例如, DMA或高端内存域. 但所有内存域和结点的伙伴系统都通过备用分配列表连接起来. + +下图说明了这种关系. + +![伙伴系统和内存域/结点之间的关系](../images/buddy_and_node_zone.png) + + +最后要注意, 有关伙伴系统和当前状态的信息可以在/proc/buddyinfo中获取 + +![伙伴系统和当前状态的信息](../imaes) + +上述输出给出了各个内存域中每个分配阶中空闲项的数目, 从左至右, 阶依次升高. 上面给出的信息取自4 GiB物理内存的AMD64系统. + + +#3 避免碎片 +------- + + + + diff --git a/study/kernel/02-memory/04-buddy/images/buddy_and_node_zone.png b/study/kernel/02-memory/04-buddy/images/buddy_and_node_zone.png new file mode 100644 index 0000000000000000000000000000000000000000..26f44646fc813e83eba2b908aa870dfc99d5fcd3 GIT binary patch literal 40139 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 literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/04-buddy/images/buddy_node_connect.png b/study/kernel/02-memory/04-buddy/images/buddy_node_connect.png new file mode 100644 index 0000000000000000000000000000000000000000..490a4b7d99d53afa82a9a09dacd11942438fb831 GIT binary patch literal 44948 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�c-YDIIbf`FDPA9{DK#i1}%inI_Q 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 literal 0 HcmV?d00001