Linux NUMA memory policy(内存分配策略)
来源:互联网 发布:js sleep函数 编辑:程序博客网 时间:2024/05/20 12:22
参考内核文档:Document/vm/numa_memory_policy
memory policy是决定在NUMA系统上从哪个节点分配内存的策略,它是一类提供给能更好利用NUMA系统进行内存分配的应用程序使用的编程接口,
请不要将它和cpusets混淆,后者是一种限定哪些process可以从该节点进行内存分配的管理机制,当一个task同时存在两种机制时,cpuset优先。
Linux分四种类型policy,分别是:
System Default Policy,它是在没用应用下面其他policy时的默认policy,具体行为是:系统启动过程中,采用interleave策略分配内存,
即在所有可满足需求的节点上交叉分配,防止启动时在某个节点上负载过重;在系统启动后,采用local allocation,即在task运行的cpu所在的node上进行内存分配。Task/Process Policy,它是task用来制定其内存分配时的策略,如果没有定义,将fall back到system default policy。
VMA Policy,它是制定在某段VMA进行内存分配时策略,如果没有定义,将fall back到Task/Process Policy,如果Task/Process Policy没有定义,递归fall back到system default policy。
Shared Policy,它是制定在分配某个内存对象时的policy,这个内存对象可能被多个task共享,而VMA policy只限定某个task的某段VMA。
Linux 内存分配方法包含三部分:mode,optional mode flags,an optional set of nodes。
mode决定policy的具体行为,the optional mode flags决定mode的行为,an optional set of nodes可以看做是以上行为的参数。mode有四种:
Default Mode--MPOL_DEFAULT,
MPOL_BIND,它指定在哪几个节点上进行内存分配。
MPOL_PREFERRED,它指定首先在preferred的节点上进行内存分配,如果失败再搜索其他节点。
MPOL_INTERLEAVED,它指定在an optional set of nodes几个节点上,以页为单位,交叉分配内存。
optional mode flags:
MPOL_F_STATIC_NODES: 该标志指定,在policy定义后,如果task或VMA设置的可分配nodes发生了改变,用户传递过来的nodemask不应被remap。MPOL_F_RELATIVE_NODES: 和上个flag相反,该情况时,用户传递过来的nodemask应被remap。
Linux为内存分配策略提供了三个APIs:
long set_mempolicy(int mode, const unsigned long *nmask, unsigned long maxnode);
Get内存分配策略及相关信息,flags决定mode的行为是get哪些信息
long get_mempolicy(int *mode, const unsigned long *nmask, unsigned long maxnode, void *addr, int flags);
安装内存分配策略
long mbind(void *start, unsigned long len, int mode, const unsigned long *nmask, unsigned long maxnode,unsigned flags);
命令行工具:
+ set the task policy for a specified program via set_mempolicy(2), fork(2) and exec(2)+ set the shared policy for a shared memory segment via mbind(2)
- Linux NUMA memory policy(内存分配策略)
- 内存管理策略(memory Management Policy)
- IOS内存管理策略(Memory Management Policy)
- IOS内存管理策略(Memory Management Policy)
- Linux Memory Policy
- [c&cpp][memory] 内存对齐分配策略(含位域模式)
- [c&cpp][memory] 内存对齐分配策略(含位域模式)
- FiveDay(内存分配策略)
- 动态内存分配 (Dynamic memory)
- 动态内存分配 (Dynamic memory)
- Memory Management Policy(内存管理政策)
- The Linux Programming Interface 07 Memory Allocation 分配内存
- Memory Policy
- 内存分配策略
- Memcache内存分配策略
- Memcached内存分配策略
- 内存分配策略
- 内存对齐分配策略
- matlab eval 可变变量名 赋值
- 基于CallStack的反Rootkit HOOK检测
- 面试题整理:xml部分
- java post请求接口
- C语言中define的用法
- Linux NUMA memory policy(内存分配策略)
- 10有关String的经典面试题
- Cracking the coding interview--Q5.7
- CodeForces 149D Coloring Brackets(JAVA版)
- winSDK C++ 模仿基础对话框的简单的基础程序
- 图像变换中常用的一些插值方法
- Android之资源访问机制
- Hive 随谈(六)– Hive 的扩展特性
- 十八大以来习近平同志关于经济工作的重要论述