本文主要是介绍【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、zone 结构体中水线控制相关成员 ( managed_pages | spanned_pages | present_pages )
- 二、在 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 Normalpages free 5754min 4615low 5768high 6921spanned 262144present 262144managed 236760protection: (0, 0, 0, 0, 0)
DMA32 区域的信息如下 :
Node 0, zone DMA32pages free 43834min 12202low 15252high 18302spanned 1044480present 782288managed 759709protection: (0, 0, 924, 924, 924)
DMA 区域的信息如下 :
Node 0, zone DMAper-node statsnr_inactive_anon 10820nr_active_anon 320858nr_inactive_file 231022nr_active_file 234555nr_unevictable 16nr_slab_reclaimable 44884nr_slab_unreclaimable 18674nr_isolated_anon 0nr_isolated_file 0
输出完整内容 :
han@ubuntu:~$ cat /proc/zoneinfo
Node 0, zone DMAper-node statsnr_inactive_anon 10820nr_active_anon 320858nr_inactive_file 231022nr_active_file 234555nr_unevictable 16nr_slab_reclaimable 44884nr_slab_unreclaimable 18674nr_isolated_anon 0nr_isolated_file 0workingset_nodes 0workingset_refault 0workingset_activate 0workingset_restore 0workingset_nodereclaim 0nr_anon_pages 320578nr_mapped 153680nr_file_pages 476705nr_dirty 26878nr_writeback 0nr_writeback_temp 0nr_shmem 11129nr_shmem_hugepages 0nr_shmem_pmdmapped 0nr_file_hugepages 0nr_file_pmdmapped 0nr_anon_transparent_hugepages 0nr_unstable 0nr_vmscan_write 0nr_vmscan_immediate_reclaim 0nr_dirtied 287542nr_written 244390nr_kernel_misc_reclaimable 0pages free 3968min 77low 96high 115spanned 4095present 3997managed 3976protection: (0, 2445, 3369, 3369, 3369)nr_free_pages 3968nr_zone_inactive_anon 0nr_zone_active_anon 0nr_zone_inactive_file 0nr_zone_active_file 0nr_zone_unevictable 0nr_zone_write_pending 0nr_mlock 0nr_page_table_pages 0nr_kernel_stack 0nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 1numa_miss 0numa_foreign 0numa_interleave 0numa_local 1numa_other 0pagesetscpu: 0count: 0high: 0batch: 1vm stats threshold: 6cpu: 1count: 0high: 0batch: 1vm stats threshold: 6cpu: 2count: 0high: 0batch: 1vm stats threshold: 6cpu: 3count: 0high: 0batch: 1vm stats threshold: 6node_unreclaimable: 0start_pfn: 1
Node 0, zone DMA32pages free 43834min 12202low 15252high 18302spanned 1044480present 782288managed 759709protection: (0, 0, 924, 924, 924)nr_free_pages 43834nr_zone_inactive_anon 8454nr_zone_active_anon 245858nr_zone_inactive_file 181846nr_zone_active_file 177532nr_zone_unevictable 4nr_zone_write_pending 26534nr_mlock 4nr_page_table_pages 5641nr_kernel_stack 8472nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 4159869numa_miss 0numa_foreign 0numa_interleave 192366numa_local 4159869numa_other 0pagesetscpu: 0count: 50high: 378batch: 63vm stats threshold: 36cpu: 1count: 335high: 378batch: 63vm stats threshold: 36cpu: 2count: 300high: 378batch: 63vm stats threshold: 36cpu: 3count: 121high: 378batch: 63vm stats threshold: 36node_unreclaimable: 0start_pfn: 4096
Node 0, zone Normalpages free 5754min 4615low 5768high 6921spanned 262144present 262144managed 236760protection: (0, 0, 0, 0, 0)nr_free_pages 5754nr_zone_inactive_anon 2366nr_zone_active_anon 75000nr_zone_inactive_file 49176nr_zone_active_file 57023nr_zone_unevictable 12nr_zone_write_pending 344nr_mlock 12nr_page_table_pages 5556nr_kernel_stack 7096nr_bounce 0nr_zspages 0nr_free_cma 0numa_hit 839519numa_miss 0numa_foreign 0numa_interleave 223408numa_local 839519numa_other 0pagesetscpu: 0count: 253high: 378batch: 63vm stats threshold: 24cpu: 1count: 202high: 378batch: 63vm stats threshold: 24cpu: 2count: 325high: 378batch: 63vm stats threshold: 24cpu: 3count: 291high: 378batch: 63vm stats threshold: 24node_unreclaimable: 0start_pfn: 1048576
Node 0, zone Movablepages free 0min 0low 0high 0spanned 0present 0managed 0protection: (0, 0, 0, 0, 0)
Node 0, zone Devicepages free 0min 0low 0high 0spanned 0present 0managed 0protection: (0, 0, 0, 0, 0)
han@ubuntu:~$
这篇关于【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!