中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

亲和性与绑核

亲和性(Affinity)是进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被 OS 调度到其他CPU上,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的CPU跑,不会由操作系统调度到其他CPU上。这样能够大大提高CPU cache的命中率,提高性能。

  1. 使用shell命令,把进行运行的任务绑定在NUMACPU

    numactlLinux提供了一个手工调优的命令,可以指定进程在某个NUMA node上运行或者特定的CPU核心上运行。

    1. NUMAnumactl --cpubind=0 --membind=0 java SIMDTest_Compare_Max2
    2. CPU核心:numactl -C 0-19 --membind=0 java SIMDTest_Compare_Max2
    3. 验证绑核是否成功top命令也可以显示CPU被分配给哪个进程。
  2. 在程序代码中通过系统API调用指定

    利用glibc库中的sched_getaffinity接口,我们获取应用程序当前的cpu亲和性,而通过sched_setaffinity接口则可以把应用程序绑定到固定的某个或某几cpu上运行。

    接口定义如下:
    #include <sched.h>
    int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);
    int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);
    void CPU_CLR(int cpu, cpu_set_t *set);
    int CPU_ISSET(int cpu, cpu_set_t *set);
    void CPU_SET(int cpu, cpu_set_t *set);
    void CPU_ZERO(cpu_set_t *set);

    绑核实例如下:

    #include <sched.h>
    cpu_set_t cpu_mask;
    memset((VOS_VOID *)(&cpu_mask), 0 , sizeof(cpu_mask));
    cpu_mask.__bits[0] = 1 << 0;
    (VOS_VOID)sched_setaffinity(0, sizeof(cpu_mask), &cpu_mask);
  3. 应用软件绑核

    鲲鹏920系列处理器包含2Super CPU ClusterSCCL),每个SCCL包含6~8CPU Cluster,每个CPU Cluster包含4CPU Core。例如,在KVM虚拟机环境下对KVM进行CPU绑核时,建议尽量分布到多个CPU Cluster中,可以减少同一个CPU Cluster内多个Core竞争导致L3 Cache出现内存带宽瓶颈问题,从而整体提升虚拟机性能。

    1. Linux系统中先查询NUMA节点信息以及拓扑结构。
      numactl -H

    2. Linux系统中编辑虚拟机xml配置文件,设置CPU绑核尽量分布到多个CPU Cluster上,配置举例如下:
      <domain type = 'KVM'>
      ...
        <vcpu placement = 'static' cpuset='0,1,4,5,8,9,12,13'>8</vcpu>
        <cputune>
          <vcpupin vcpu='0' cpuset='0'/>
          <vcpupin vcpu='1' cpuset='1'/>
          <vcpupin vcpu='2' cpuset='4'/>
          <vcpupin vcpu='3' cpuset='5'/>
          <vcpupin vcpu='4' cpuset='8'/>
          <vcpupin vcpu='5' cpuset='9'/>
          <vcpupin vcpu='6' cpuset='12'/>
          <vcpupin vcpu='7' cpuset='13'/>
          </cputune>
      ...
      </domain>

      (0,1),(4,5),(8,9),(12,13)分别在不同的CPU Cluster上。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词