Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )相关的知识,希望对你有一定的参考价值。
文章目录
上一篇博客 【Linux 内核 内存管理】分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 ) 中讲解了 区域水线概念 , 本篇博客中开始分析 根据水线 进行 水位控制 的机制 ;
WMARK_HIGH
高水位 , WMARK_LOW
低水位 , WMARK_MIN
最低水位 ,
3
3
3 个水位线 , 将 " 内存区域 " 分割成
4
4
4 部分 ;
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-4.12\\include\\linux\\mmzone.h#255
一、zone 结构体中水线控制相关成员 ( managed_pages | spanned_pages | present_pages )
在 linux 内核源码中 描述 " 内存区域 " 的结构体 struct zone
中 , 有几个重要的参数 , 用于 控制 区域水线水位 :
managed_pages
成员 表示 伙伴分配器 管理的 物理页个数 ; 使用 如下 公式进行计算 :
z o n e _ e n d _ p f n − z o n e _ s t a r t _ p f n \\rm zone\\_end\\_pfn - zone\\_start\\_pfn zone_end_pfn−zone_start_pfn
spanned_pages
成员 表示 内存区域 的 所有可用物理页 个数 , 包括 内存空洞 ; 使用 如下 公式进行计算 :
s p a n n e d _ p a g e s − h o l e _ p a g e s \\rm spanned\\_pages - hole\\_pages spanned_pages−hole_pages
present_pages
成员 表示 当前 内存区域 的 物理页个数 , 不包括 内存空洞 ; 是通过 伙伴分配器 管理的 物理页 ; 使用 如下 公式进行计算 :
p r e s e n t _ p a g e s − r e s e r v e d _ p a g e s \\rm present\\_pages - reserved\\_pages present_pages−reserved_pages
present_pages
、 spanned_pages
、 managed_pages
三者之间有如下关系 :
spanned_pages
( 内存区域所有可用物理页数 有空洞 ) >
present_pages
( 当前区域物理页数 无空洞 ) >
managed_pages
( 伙伴分配器管理的物理页数 )
参考 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 ) 博客 ;
struct zone
结构体相关源码 :
struct zone
/* Read-mostly fields */
/* zone watermarks, access with *_wmark_pages(zone) macros */
unsigned long watermark[NR_WMARK];
...
unsigned long managed_pages;
unsigned long spanned_pages;
unsigned long present_pages;
...
源码路径 : linux-4.12\\include\\linux\\mmzone.h#427
二、在 Ubuntu 中查看内存区域水位线
在 Ubuntu 的 命令行 中 , 执行
cat /proc/zoneinfo
命令 , 查看 " 内存区域 " 信息 ;
输出内容中 , 其中 Normal 区域的信息如下 :
Node 0, zone Normal
pages free 5754
min 4615
low 5768
high 6921
spanned 262144
present 262144
managed 236760
protection: (0, 0, 0, 0, 0)
DMA32 区域的信息如下 :
Node 0, zone DMA32
pages free 43834
min 12202
low 15252
high 18302
spanned 1044480
present 782288
managed 759709
protection: (0, 0, 924, 924, 924)
DMA 区域的信息如下 :
Node 0, zone DMA
per-node stats
nr_inactive_anon 10820
nr_active_anon 320858
nr_inactive_file 231022
nr_active_file 234555
nr_unevictable 16
nr_slab_reclaimable 44884
nr_slab_unreclaimable 18674
nr_isolated_anon 0
nr_isolated_file 0
输出完整内容 :
han@ubuntu:~$ cat /proc/zoneinfo
Node 0, zone DMA
per-node stats
nr_inactive_anon 10820
nr_active_anon 320858
nr_inactive_file 231022
nr_active_file 234555
nr_unevictable 16
nr_slab_reclaimable 44884
nr_slab_unreclaimable 18674
nr_isolated_anon 0
nr_isolated_file 0
workingset_nodes 0
workingset_refault 0
workingset_activate 0
workingset_restore 0
workingset_nodereclaim 0
nr_anon_pages 320578
nr_mapped 153680
nr_file_pages 476705
nr_dirty 26878
nr_writeback 0
nr_writeback_temp 0
nr_shmem 11129
nr_shmem_hugepages 0
nr_shmem_pmdmapped 0
nr_file_hugepages 0
nr_file_pmdmapped 0
nr_anon_transparent_hugepages 0
nr_unstable 0
nr_vmscan_write 0
nr_vmscan_immediate_reclaim 0
nr_dirtied 287542
nr_written 244390
nr_kernel_misc_reclaimable 0
pages free 3968
min 77
low 96
high 115
spanned 4095
present 3997
managed 3976
protection: (0, 2445, 3369, 3369, 3369)
nr_free_pages 3968
nr_zone_inactive_anon 0
nr_zone_active_anon 0
nr_zone_inactive_file 0
nr_zone_active_file 0
nr_zone_unevictable 0
nr_zone_write_pending 0
nr_mlock 0
nr_page_table_pages 0
nr_kernel_stack 0
nr_bounce 0
nr_zspages 0
nr_free_cma 0
numa_hit 1
numa_miss 0
numa_foreign 0
numa_interleave 0
numa_local 1
numa_other 0
pagesets
cpu: 0
count: 0
high: 0
batch: 1
vm stats threshold: 6
cpu: 1
count: 0
high: 0
batch: 1
vm stats threshold: 6
cpu: 2
count: 0
high: 0
batch: 1
vm stats threshold: 6
cpu: 3
count: 0
high: 0
batch: 1
vm stats threshold: 6
node_unreclaimable: 0
start_pfn: 1
Node 0, zone DMA32
pages free 43834
min 12202
low 15252
high 18302
spanned 1044480
present 782288
managed 759709
protection: (0, 0, 924, 924, 924)
nr_free_pages 43834
nr_zone_inactive_anon 8454
nr_zone_active_anon 245858
nr_zone_inactive_file 181846
nr_zone_active_file 177532
nr_zone_unevictable 4
nr_zone_write_pending 26534
nr_mlock 4
nr_page_table_pages 5641
nr_kernel_stack 8472
nr_bounce 0
nr_zspages 0
nr_free_cma 0
numa_hit 4159869
numa_miss 0
numa_foreign 0
numa_interleave 192366
numa_local 4159869
numa_other 0
pagesets
cpu: 0
count: 50
high: 378
batch: 63
vm stats threshold: 36
cpu: 1
count: 335
high: 378
batch: 63
vm stats threshold: 36
cpu: 2
count: 300
high: 378
batch: 63
vm stats threshold: 36
cpu: 3
count: 121
high: 378
batch: 63
vm stats threshold: 36
node_unreclaimable: 0
start_pfn: 4096
Node 0, zone Normal
pages free 5754
min 4615
low 5768
high 6921
spanned 262144
present 262144
managed 236760
protection: (0, 0, 0, 0, 0)
nr_free_pages 5754
nr_zone_inactive_anon 2366
nr_zone_active_anon 75000
nr_zone_inactive_file 49176
nr_zone_active_file 57023
nr_zone_unevictable 12
nr_zone_write_pending 344
nr_mlock 12
nr_page_table_pages 5556
nr_kernel_stack 7096
nr_bounce 0
nr_zspages 0
nr_free_cma 0
numa_hit 839519
numa_miss 0
numa_foreign 0
numa_interleave 223408
numa_local 839519
numa_other 0
pagesets
cpu: 0
count: 253
high: 378
batch: 63
vm stats threshold: 24
cpu: 1
count: 202
high: 378
batch: 63
vm stats threshold: 24
cpu: 2
count: 325
high: 378
batch: 63
vm stats threshold: 24
cpu: 3
count: 291
high: 378
batch: 63
vm stats threshold: 24
node_unreclaimable: 0
start_pfn: 1048576
Node 0, zone Movable
pages free 0
min 0
low 0
high 0
spanned 0
present 0
managed 0
protection: (0, 0, 0, 0, 0)
Node 0, zone Device
pages free 0
min 0
low 0
high 0
spanned 0
present 0
managed 0
protection: (0, 0, 0, 0, 0)
han@ubuntu:~$
以上是关于Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理分区伙伴分配器 ① ( 分区伙伴分配器源码数据结构 | free_area 空闲区域数组 | MAX_ORDER 宏定义 | 空闲区域的页最大阶数 )
Linux 内核 内存管理分区伙伴分配器 ④ ( 备用内存区域列表排序方式 | 节点优先顺序 | 区域优先顺序 | 排序方式优缺点 | 默认排序方式 )
Linux 内核 内存管理分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )
Linux 内核 内存管理分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )
Linux 内核 内存管理分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
Linux 内核 内存管理物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )