---
title: CPU 1:1绑核，内存访问同一个Die
description: "在进行绑核操作时，可以选择按CPU绑核或按NUMA绑核，但是需要注意避免虚拟机内存访问跨Die和跨片，建议不要跨Die和跨片。默认情况下，不同虚拟机的vCPU可能运行在相同物理CPU核上，会造成CPU资源竞争，也会导致VMID频繁切换造成L1 TLB频繁flush，从而推高TLB miss rate，最终造成虚拟机性能下降。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengkvm_05_0009.html
sourcePath: /source/zh/kunpengcpfs/ecosystemEnable/QEMU-KVM/kunpengkvm_05_0009.html
indexId: c3cdbaf6f87468b8420185c25b5e7c5c98762580e45c6da685101d3f3910cd5771
---
# CPU 1:1绑核，内存访问同一个Die

在进行绑核操作时，可以选择按CPU绑核或按NUMA绑核，但是需要注意避免虚拟机内存访问跨Die和跨片，建议不要跨Die和跨片。默认情况下，不同虚拟机的vCPU可能运行在相同物理CPU核上，会造成CPU资源竞争，也会导致VMID频繁切换造成L1 TLB频繁flush，从而推高TLB miss rate，最终造成虚拟机性能下降。

1. 在Linux系统中查询NUMA节点信息。
  1 numactl -H

2. 在Linux系统中编辑虚拟机XML配置文件，在同一个Die（同NUMA）下进行1:1绑核，配置举例如下。
  1 2 3 4 5 6 7 8 9 10 11 12 <domain type = 'KVM'> ... <vcpu placement = 'static' cpuset='4-7'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune> ... </domain>

3. 虚拟机配置使用1个NUMA通道，绑定到NUMA 0。
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <domain type = 'KVM'> ... <vcpu placement = 'static' cpuset='4-7'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='4'/> <vcpupin vcpu='1' cpuset='5'/> <vcpupin vcpu='2' cpuset='6'/> <vcpupin vcpu='3' cpuset='7'/> <emulatorpin cpuset='4-7'/> </cputune> ... <numatune> <memory mode='strict' nodeset='0'/> </numatune> ... <cpu mode='host-passthrough' check='none'> <topology sockets='1' cores='4' threads='1'/> <numa> <cell id='0' cpus='0-3' memory='8388608' unit='KiB'/> </numa> </cpu> ... </domain>

  在严格模式（strict mode）下，不允许跨NUMA节点的内存分配。而“preferred”模式则优先从设定的NUMA节点分配内存，若该节点内存不足，再从其他NUMA节点进行分配。POC（Proof of Concept）测试和比拼测试推荐采用严格模式，因为这样可以带来大约5%的性能提升。<numa>项为虚拟机内部呈现NUMA拓扑结构提供了功能，其中cpus指定vCPU的编号，memory则指定对应vnode（虚拟节点）上的内存大小。 <numa>项为虚拟机内部呈现NUMA拓扑结构提供了功能，其中cpus指定vCPU的编号，memory则指定对应vnode上的内存大小。 如果希望进一步提升虚拟机的性能，需要配置<numatune>和<cputune>，确保vCPU和对应的内存位于同一个物理NUMA节点上（即同NUMA分配）。 在<numatune>中，cellid与<numa>中的cell id是相互对应的。mode参数可以配置为以下几种模式：“strict”（严格从指定节点申请内存，若内存不足则操作失败）、“preferred”（优先从某一节点申请内存，若不足则尝试其他节点）、“interleave”（从指定的节点以交叉方式申请内存）。nodeset则用于指定物理NUMA节点。
