花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述Linux 内核 内存管理物理分配页 ③ ( 物理页分配标志位分析 | ALLOC_WMARK_MIN | ALLOC_WMARK_MASK | ALLOC_HARDER )相关的知识,希望能为你提供帮助。
文章目录
- ??一、物理页分配标志位分析??
- ??1、水线相关标志位 ( ALLOC_WMARK_MIN | ALLOC_WMARK_LOW | ALLOC_WMARK_HIGH | ALLOC_NO_WATERMARKS )??
- ??2、水线位源码 ( ALLOC_WMARK_MASK )??
- ??3、物理页分配标志位 ( ALLOC_HARDER | ALLOC_HIGH | ALLOC_CPUSET | ALLOC_CMA )??
- ??二、物理页分配相关标志位完整源码??
使用 水线位 分配内存 , 相关源码定义在 Linux 内核源码的 linux-4.12\\mm\\internal.h#475 位置 ;
1、水线相关标志位 ( ALLOC_WMARK_MIN | ALLOC_WMARK_LOW | ALLOC_WMARK_HIGH | ALLOC_NO_WATERMARKS )?
?ALLOC_WMARK_MIN?
? 宏定义 , 表示使用 " 最低水线 " 分配内存 ;
?
?ALLOC_WMARK_LOW ?
? 宏定义 , 表示使用 " 低水线 " 分配内存 ;
?
?ALLOC_WMARK_HIGH ?
? 宏定义 , 表示使用 " 高水线 " 分配内存 ;
?
?ALLOC_NO_WATERMARKS ?
? 宏定义 , 表示使用 分配内存 时 , 不检查水位线 ;
/* The ALLOC_WMARK bits are used as an index to zone-> watermark */
#define ALLOC_WMARK_MINWMARK_MIN
#define ALLOC_WMARK_LOWWMARK_LOW
#define ALLOC_WMARK_HIGHWMARK_HIGH
#define ALLOC_NO_WATERMARKS 0x04 /* dont check watermarks at all */
源码路径 : linux-4.12\\mm\\internal.h#475
2、水线位源码 ( ALLOC_WMARK_MASK )?
?ALLOC_WMARK_MASK ?
? 宏定义 , 表示 获取 " 水线位 " 的 掩码 ;
/* Mask to get the watermark bits */
#define ALLOC_WMARK_MASK(ALLOC_NO_WATERMARKS-1)
源码路径 : linux-4.12\\mm\\internal.h#481
3、物理页分配标志位 ( ALLOC_HARDER | ALLOC_HIGH | ALLOC_CPUSET | ALLOC_CMA )?
?ALLOC_HARDER?
? 宏定义 , 表示 试图更努力的分配内存 ;
?
?ALLOC_HIGH?
?? 宏定义 , 表示 设置调用者 ??__GFP_HIGH?
? 高优先级 ;
?
?ALLOC_CPUSET?
? 宏定义 , 表示 检查 cpuset , 是否允许分配内存页 ;
?
?ALLOC_CMA?
? 宏定义 , 表示 允许 CMA 连续内存分配器 迁移类型 分配内存 ;
#define ALLOC_HARDER0x10 /* try to alloc harder */
#define ALLOC_HIGH0x20 /* __GFP_HIGH set */
#define ALLOC_CPUSET0x40 /* check for correct cpuset */
#define ALLOC_CMA0x80 /* allow allocations from CMA areas */
源码路径 : linux-4.12\\mm\\internal.h#483
二、物理页分配相关标志位完整源码源码如下 :
/* The ALLOC_WMARK bits are used as an index to zone-> watermark */
#define ALLOC_WMARK_MINWMARK_MIN
#define ALLOC_WMARK_LOWWMARK_LOW
#define ALLOC_WMARK_HIGHWMARK_HIGH
#define ALLOC_NO_WATERMARKS 0x04 /* dont check watermarks at all */
/* Mask to get the watermark bits */
#define ALLOC_WMARK_MASK(ALLOC_NO_WATERMARKS-1)
#define ALLOC_HARDER0x10 /* try to alloc harder */
#define ALLOC_HIGH0x20 /* __GFP_HIGH set */
#define ALLOC_CPUSET0x40 /* check for correct cpuset */
#define ALLOC_CMA0x80 /* allow allocations from CMA areas */
源码路径 : linux-4.12\\mm\\internal.h#475
【Linux 内核 内存管理物理分配页 ③ ( 物理页分配标志位分析 | ALLOC_WMARK_MIN | ALLOC_WMARK_MASK | ALLOC_HARDER )】
推荐阅读
- 满屏的if-else,看我怎么消灭你!
- Linux 内核 内存管理物理分配页 ⑥ ( get_page_from_freelist 快速路径调用函数源码分析 | 检查内存区域水线 | 判定节点回收 | 判定回收距离 | 回收分配页 )
- Linux 内核 内存管理分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 )
- Linux 内核 内存管理分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )
- SpringBoot--JWT的后端搭建前后分离
- 从面试角度一文学完Kafka
- Linux 内核 内存管理分区伙伴分配器 ⑦ ( z->watermark[WMARK_MIN] 最低水位计算 | min_free_kbytes 初始化 )
- Redis实现并发阻塞锁方案
- Linux 内核 内存管理memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )