鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

片上内存使用分析与性能优化

本节介绍如何确定片上内存的使用方式以提高程序性能。

  1. 运行目标程序,执行如下命令观察内存使用情况。
    1. 执行如下命令,查看内存的增长及SWAP使用情况,此时查看的MEM包含片上内存和DDR,无法明确不同NUMA对应的是片上内存还是DDR。

      free -h

      回显如下。

                         total                 used              free         shared           buff/cache                  available 
      Mem:               567Gi                 93Gi              425Gi         156Gi	          67Gi                       473Gi 
      Swap:                0B                   0B                 0B 
      
    2. 执行如下命令,可以看到具体的NUMA node的内存使用情况,

      numactl -H

      如下图所示1-15 NUMA为DDR,每个NUMA 32G;16 -31 NUMA 为片上内存,每个NUMA 4G

      ... 
      node 14 cpus:532  533  534  535  536  537  538  539  540  541  542  543  544  545  546  547  548  549  550  551  552  553  554  555  556  557   558  559  560  561  562  563  564  565  566  567  568  569 
      node 14 size:32250 MB 
      node 14 free:28237 MB 
      node 15 cpus:570  571  572  573  574  575  576  577  578  579  580  581  582  583  584  585  586  587  588  589  590  591  592  593  594  595   596  597  598  599  600  601  602  603  604  605  606  607 
      node 15 size:32231 MB 
      node 15 free:28098 MB 
      node 16 cpus: 
      node 16 size:4096 MB 
      node 16 free:4085 MB 
      node 17 cpus: 
      node 17 size:4096 MB 
      node 17 free:4089 MB 
      node 18 cpus: 
      node 18 size:4096 MB 
      node 18 free:4090 MB
  2. 确定片上内存的使用方式。
    • 如果整体使用内存量小于目标大小(平均单NUMA使用小于4GB),则可以直接使用numactl -m指定片上内存。
    • 如果整体使用内存大于目标大小(平均单NUMA使用大于4GB),则需要选择采用如下方式之一申请内存:1. 使用cache模式; 2. 使用numactl -P指定片上内存,超出部分会分配在DDR内存; 3. 修改代码使用上文提到的方法二:使用KUPL接口申请片上内存方法三:使用memkind接口申请片上内存