ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

NUMA简介&内存配置策略

2022-07-19 22:35:06  阅读:311  来源: 互联网

标签:简介 unsigned long mempolicy NUMA MPOL 节点 内存


  1. 计算机程序和采用的模式类型包括:
  2. numa和内存、cpu得关系:
    NUMA(non uniform memory access): 非一致性内存访问架构,非统一内存访问;用于多处理器的电脑内存体系设计,遵循对称多处理(SMP)架构,二十时机九十年代被开发出来

     

    • numa系统中有多个内存控制器,每隔内存控制器和每隔cpu距离并不是相等的
    • 每个节点有自己的专属控制器,所管理的内存称为本地内存,距离自己最近因此访问最快
    • 不属于本节点的内存称为远端内存,访问速度较慢,具体慢多少与具体硬件结构有关系
  3. 内存配置策略

mempolicy相关系统调用主要有set_mempolicy/get_mempolicy

mbind主要配置task/process policy和vma policy,如下图:

 

    •  set_mempolicy
      • 作用:修改当前task,调整NUMA mem policy策略,且该进程创建得子进程也会继承该特性
      • 链接库:-Lnuma     <numaif.h>
      • 原型:long set_mempolocy(int mode, const unsigned long * nodemask, unsigned long maxnode);
      • 参数解释:
      • mode: mem policy配置策略模式,包括两部分:用户设置得mempolicy mode+flag
        • 用户设置得mempolocy mode包括:
          • MPOL_DEFAULT: 默认配置策略,一般是采用本地内存
          • MPOL_PREFERRED: 首先在指定节点上分配,分配失败则去其他节点分配
          • MPOL_BIND:指定在具体得节点上进行内存分配
          • MPOL_INTERLEVE:指定在an optional set of nodes节点上,以页为单位,交叉分配内存
          • MPOL_LOCAL: 从本地内存中申请内存(3.8版本中引入)
        • flag包括外部flag和内部flag:
          • MPOL_F_STATIC_NODES: 在policy定义后,若task或者VMA设置得可分配nodes发生了改变,用户传递过来得nodemask不应被remap
          • MPOL_F_RELATIVE_NODES:与STATIC_NODES相反,用户传递过来得nodemask应被remap
          • MPOL_F_NUMA_BALANCING(内核5.12之后支持)
          • [内部]MPOL_F_SHARED: 共享,被多个VMA或者线程共享
          • [内部]MPOL_F_LOCAL:使用本地得preferrd节点,一般为程序运行得节点
          • [内部]MPOL_F_MOF: 在page fault时可以或者即将进行迁移
          • [内部]MPOL_F_MORON: 将页面迁移到使用该内存得节点上
      • nodemask: 进程NUMA mem polocy要支持得numa节点量,按照bit位计算
      • maxnode: 进程支持得最大节点
    • kernel_set_mempolicy
      • 作用:
      • 原型:static long kernel_set_mempolicy(int mode, const unsigned long __user *nmask, unsigned long maxnode)
      • 参数解释:同上
    • get_mempolicy
      • 作用:获取当前进程或者具体地址内存得mempolicy策略
      • 原型:long get_mempolicy(int mode, unsigned long * nodemask, unsigned long maxnode, void *addr, unsigned long flags)
      • 参数解释:
      • mode: 若mode不为空,则结果返回指定mode得mempolicy节点
      • nodemask: 数组,大小位maxnode/sizeof(unsigned long)
      • maxnode: 支持得最大numa节点个数
      • addr: 具体得内存地址
      • flags:
        • 若=0,则获取当前线程得mempolicy,此时addr=null
        • 若=MPOL_F_MEMS_ALLOWD,则忽略mod参数,nodemask会返回配置支持得numa节点
        • 若=MPOL_F_ADDR,则返回指定addr对应得mempolicy numa节点
    • kernel_get_mempolicy->do_get_mempolicy
    • mbind
      • 作用:设置VMA mempolicy级别,可以只设置某一个内存区域NUM节点策略
      • 原型:long mbind(void *addr, unsigned long len, int mode, const unsigned long *nodemask, unsigned long maxnode, unsigned int flags)
      • 参数解释:
      • flags:
        • 若=MPOL_MF_STATICT,且mode!=MPOL_DEFAULT,则表明要严格遵循设置得numa设置,若申请得物理页面和numa配置策略不一致,则返回EIO
        • 若=MPOL_MF_MOVE,则内核尝试将已经分配得内存(不符合设置得numa节点)进行迁移,迁移到符合配置numa节点上
        • 若=MPOL_MF_MOVE_ALL,则内核尝试将已经分配得内存(不符合设置numa节点要求)进行迁移,迁移该物理页面时不关心其他进程是否正在使用
    • do_mbind->mbind_range: 将指定得内存区域进行内存策略绑定,若绑定成功,则判断是否已经分配物理页面;若已经分配页面,则根据flag,确认是否需要做迁移

参考地址1:linux内核那些事之mempolicy(2) (icode9.com)

参考地址2:linux内核那些事之mempolicy(1)_Huo的藏经阁的博客-CSDN博客

标签:简介,unsigned,long,mempolicy,NUMA,MPOL,节点,内存
来源: https://www.cnblogs.com/baihh/p/16496053.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有