libvirt/qemu特性之numa

声明:

本博客欢迎转发,但请保留原作者信息!

博客地址:http://blog.csdn.net/halcyonbaby

内容系本人学习、研究和总结,如有雷同,实属荣幸!

Numa

查看主机node情况

  • 使用virsh命令查看
virsh # capabilities
<topology>
      <cells num='1'>
        <cell id='0'>
          <memory unit='KiB'>8166976</memory>
          <cpus num='24'>
            <cpu id='0' socket_id='0' core_id='0' siblings='0,12'/>
            ...
          </cpus>
        </cell>
      </cells>
    </topology>
  • 使用numactl命令查看
# numactl --hardware

Guest Numa

设置guest numa topology

qemu内部安装ACPI规范将node信息,topology信息防止在bios中供guest识别。
guest识别numa topology的意义在于,guest中的OS可以更好的进行进程调度和内存分配。

  • libvirt
<cpu>
    <topology sockets='1' cores='8' threads='1'/>
    <numa>
      <cell cpus='0-3' memory='1024000'/>
      <cell cpus='4-7' memory='1024000'/>
     </numa>
  </cpu>
  • qemu
-smp 8,sockets=1,cores=4,threads=1
-numa node,nodeid=0,cpus=0-3,mem=1000 -numa node,nodeid=1,cpus=4-7,mem=1000

可以在guest中使用numactl --hardware看到这些node节点。

CPU/内存亲和性设置

进程的处理器亲和性(Processor Affinity),即是CPU的绑定设置,是指将进程绑定到特定的一个或多个CPU上去执行,
而不允许调度到其他的CPU上。

在虚拟化环境中,qemu的vcpu是作为线程存在的,可以对线程进行亲和性设置。
多数情况下,我们无需设置亲和性。但是某些特殊场合,比如需要确保CPU资源不被其他虚拟机负载影响,
可以设置CPU的亲和性。

CPU亲和性由libvirt通过调用sched_setaffinity系统调用实现(如下以cpu热插中的代码为例),不需要在qemu层进行设置。

src/qemu/qemu_driver.c
static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
        ¦       ¦       ¦       ¦ virDomainObjPtr vm,
        ¦       ¦       ¦       ¦ unsigned int nvcpus)
{
      ...
      virProcessSetAffinity(cpupids[i],
      ...
}
src/util/virprocess.c
int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
{
      ...
      if (sched_setaffinity(pid, masklen, mask) < 0) {
      ...
}

memory的亲和性也是由libvirt通过调用numa_set_membind函数实现(由libnuma.so提供,该so为numactl的库)。

  int
  virNumaSetupMemoryPolicy(virNumaTuneDef numatune,
          ¦       ¦       ¦virBitmapPtr nodemask)
  {
        ...
        numa_set_membind(&mask);
        ...

备注:可以使用taskset工具手工对线程设置亲和性。

VCPU绑定物理核

<vcpu cpuset='1-2'>4</vcpu>

查看CPU绑定情况(其中28863为qemu的进程IP)

#grep Cpus_allowed_list /proc/28863/task/*/status 
/proc/28863/task/28863/status:Cpus_allowed_list:    1-2
/proc/28863/task/28864/status:Cpus_allowed_list:    1-2
/proc/28863/task/28865/status:Cpus_allowed_list:    1-2
/proc/28863/task/28866/status:Cpus_allowed_list:    1-2
/proc/28863/task/28867/status:Cpus_allowed_list:    1-2

cputune

cputune提供了精细的vcpu绑定设定,可以具体到每个vcpu设置。
而且提供vcpu能力的标准化,如quota,period,shares,可以用于实现cpu的Qos。

 <vcpu placement='static'>4</vcpu>
  <cputune>
    <shares>2048</shares>
    <period>1000000</period>
    <quota>-1</quota>
    <vcpupin vcpu='0' cpuset='8'/>
    <vcpupin vcpu='1' cpuset='16'/>
    <emulatorpin cpuset='16'/>
  </cputune>

memtune

<numatune>
    <memory mode="strict" nodeset="1"/>
  </numatune>

查看内存的设定情况:(其中18104为qemu的pid)

#grep Mems_allowed_list /proc/18104/task/*/status
/proc/18104/task/18104/status:Mems_allowed_list:    1
/proc/18104/task/18105/status:Mems_allowed_list:    1
/proc/18104/task/18106/status:Mems_allowed_list:    1
/proc/18104/task/18114/status:Mems_allowed_list:    1

动态修改

  • numa
    可以使用virsh numatune进行动态修改。
  • cpu affinity
    可以使用virsh vcpupin进行修改。
  • 设置emulator的cpu affinity
    可以使用virsh emulatorpin进行修改。

Libvirt/qemu社区关于numa的最新动态

-object memory-ram,size=512M,host-nodes=1,policy=membind,id=ram-node0 
-numa node,nodeid=0,cpus=0,memdev=ram-node0 
-object memory-ram,size=1024M,host-nodes=2-3,policy=interleave,id=ram-node1 
-numa node,nodeid=1,cpus=1,memdev=ram-node1 

numa的一些缺点

如果配置不当,可能不但无法获取高性能,反而有可能导致性能恶化。

另外numa与透明页共享的冲突,即由于页合并导致的跨node访问。
vmware对此有专门优化,频繁访问的页面,在node上有页面副本,从而避免跨node访问带来的性能恶化。


更多相关文章
  • 易网科技讯 3月16日消息,浙江广电网络省网整合取得新进展.易网科技从浙江华数公司获悉,衢州市本级所属县市区已于近日以全资形式统一加入浙江华数广电网络股份有限公司,成为浙江"一省一网"整合发展的关键一步.据了解,此次签约之后,浙江华数广电网络股份有限公司将以超高速跨代网为网络基础 ...
  • 编者按,下文为红杉资本中国基金的创始及执行合伙人沈南鹏,在清科集团举办的"第十四届中国股权投资年度论坛"上的演讲.今年我发现是一个非常有意思的现象,两个极端:一方面从年中开始听到很多投资界人士提醒大家,是不是冬天马上要来了,要做好最坏的准备:另一方面创投市场异常活跃,今年不管VC ...
  • 信息化技术的高速发展,为每个时代烙下了不同的印记.如今,我们正处于云计算和大数据时代,云计算以其灵活的计算能力和平台开放能力,为大数据的快速发展打下了良好基础,并已先行落地;而大数据作为云计算应用的升华,正在展现着数据的价值与魅力,并为各行各业的业务创新不断提速. 大数据来势汹汹,传统行业面临着重构 ...
  • 最近在一次项目中使用到了C#中命名管道,所以在此写下一篇小结备忘.   为什么要使用命名管道呢?为了实现两个程序之间的数据交换.假设下面一个场景.在同一台PC上,程序A与程序B需要进行数据通信,此时我们就可以使用命名管道技术来实现.命名管道的两个对象.NamedPipeClientStream 和 ...
  • 一.使用指针传出分解后的数字 实现一个方法“多个返回值”的效果:返回一个三位数数字的个位.十位.百位.这里,我们借助指针来”返回“分解后的结果.这种应用也是最常见的指针应用. // fun1:分解一个三位数,传递个位.十位和百位数字 int parseNumber(int num,int* g,in ...
  • 如有需要WPF工具的朋友可以移步 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥>承蒙大家喜爱和编辑推荐,在此非常感谢大家支持.在中我发现很多朋友还在使用老的IDE, ...
一周排行
  • 已经有很长一段时间了,北京的天气总是那样的阳光明媚,明媚的让人有点乏味,天天太阳晒,太单调了,来点"暴风雨"行吗? 这不,说来就来了,今天中午时分,北京市上空突然漆黑如夜,道路上的车辆不得不开灯行 ...
  • 今天,继续android学习,一个小小的例子来记录一下. 布局文件如下: " xml文件的相关参数,我已经在之前的电话拨号器里面有简单的介绍到,这里就不做详细的介绍了. 接下来就是相关的操作了,具体代码如下 ...
  • 1.法官驳回苹果要求禁售三星手机诉讼一位美国法官周四驳回了苹果公司要求在美国永久性禁销一些老款三星智能手机的诉讼.美国地方法院裁定,苹果没有提出足够的证据证明其专利是驱动消费需求的重要因素.尽管三星电子已停止销售禁令 ...
  • 作者:崔启亮   原始出处“软件质量研究网”http://www.sqstudy.org   作为全球软件外包地新兴力量,中国软件外包服务备受全球瞩目,但是缺少专业外包人才成为制约外包发展的一大瓶颈,培养满足外包企业 ...
  • 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏幕).这是一种典型的处理方式,程序本身具备了一个系统所应该 ...
  • a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串来点名,每次读出一个串的时候,如果这个串 ...
  • 智慧城市与LBS Esri中国 卢萌         智慧城市一直都是一个大热门,每年各种会议从来不停,各种专家学者都提出了无数关于智慧城市的学说和解释,也有无数的城市借着"智慧城市"的东风,完成 ...
  • 在很多人看来,做IT这一行,技术永远是第一位的,特别是对于初入职场的人来说更为如此.那么,事实上是否真的技术独尊?的确,技术对于做IT人员来说非常重要,可是在很多情况下,只懂得提升技术的人往往很容易就遇到瓶颈了. 在 ...
  • Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 Ai大于0时表示 ...
  •  这是个有意思的问题.在 linux 里面,根据TIS 的ELF规范,一个可执行程序,也就是一个可执行的对象文件,它有一个程序进入点,这个进入点不是 我们写的 main 函数,而是位于 c 库中的 _start 汇编 ...