微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

central-processing-unit – kvm和qemu host:最大CPU是否有限制(Ubuntu 10.04)?

今天我们在两个相同的kvm和qemu主机(Dell R910)上遇到了一个非常奇怪的行为.
每个主机系统都有4 x 10个内核,这意味着40个物理内核在操作系统中显示为80(Ubuntu Linux 10.04 64位,内核3.0).

我们在其中一个节点上启动了Windows 2003 32位VM(1个cpu,1 GB RAM,我们多次更改了这些值),并注意到启动过程开始需要15分钟.在这15分钟内,显示黑屏,没有任何反应. libvirt和主机系统显示客人的qemu-kvm进程几乎是空闲的.支持这个过程只显示一些FUTEX条目,但没什么特别的.

15分钟后,Windows VM突然启动并出现Windows徽标.几秒钟后,VM就可以使用了. VM本身非常高效,因此这不是性能问题.

我们尝试使用virsh和taskset工具来固定cpu,但这只会让事情变得更糟.

当我们使用Linux Live CD启动Windows VM时,还会有黑屏几分钟,但不会长达15分.当在此主机(Ubuntu 10.04)上启动另一台虚拟机时,它也会出现黑屏问题,此处也是黑屏只显示2-3分钟(而不是15分钟).

所以,夏天这个:
每个相同节点上的每个客户在启动几分钟后都会空转.几分钟后,启动过程突然开始.
我们观察到空闲时间恰好在客人的BIOS被初始化之后发生.

我们的一位员工有想法在Grub(内核参数)中限制maxcpus = 40(因为存在40个物理内核)的cpu数量,突然“黑屏空闲”行为消失了.

搜索KVM和Qemu邮件列表,互联网,论坛,服务器故障和其他各种已知错误的网站都没有显示有用的结果.即使在开发IRC频道中询问也没有带来任何新想法.那里的人建议我们使用cpu固定,但如前所述它没有帮助.

我现在的问题是:对于qemu或kvm主机系统,是否有一种cpu限制?浏览这两个工具的源代码表明,如果主机的cpu数超过255,KVM会发出警告.但我们甚至没有抓住这个限制.

关于主机系统的一些东西:

3.0.0-20-server
kvm 1:84+dfsg-0ubuntu16+0.14.0+noroms+0ubuntu4
kvm-pxe 5.4.4-7ubuntu2
qemu-kvm 0.14.0+noroms-0ubuntu4
qemu-common 0.14.0+noroms-0ubuntu4
libvirt 0.8.8-1ubuntu6
4 x Intel(R) Xeon(R) cpu E7-4870  @ 2.40GHz,10 Cores

编辑:还尝试了3.2内核(没有使用maxcpus参数) – 不幸的是这使事情变得更糟. dstat显示了越来越多的上下文变换:

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0  99   0   0   0|1164k  638k|   0     0 |   0     0 |4972  6319 
  0   1  99   0   0   0|   0     0 |3456B 4847B|   0     0 |  18k   33k
  0   1  99   0   0   0|   0     0 |6126B 4550B|   0     0 |  17k   33k
  0   1  99   0   0   0|   0     0 |1772B 4139B|   0     0 |  17k   33k
  0   1  99   0   0   0|   0     0 |5507B 3674B|   0     0 |  17k   32k

对于具有一个VM的该系统,正常值将为大约7000.

编辑:
我使用maxcpus = 40作为启动参数启动了主机系统. virsh nodeinfo显示40个物理内核,没有超线程内核.

启动虚拟机时,它仍然具有大约30秒的“启动中断”.在此期间,上下文切换量从300(每秒)上升到600 000(每秒).在黑屏30秒后,VM启动正常启动过程,并且上下文切换下降到<7000秒:

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  1   2  97   0   0   0| 943k    0 |  26k   12k|   0     0 |  22k   40k
  3   7  84   6   0   0|  26M   64k|  71k   18k|   0     0 |  10k   16k
  1   1  97   1   0   0|5282k 2560B|9751B   15k|   0     0 |  13k   23k
  1   4  95   0   0   0|1216k    0 |  14k   18k|   0     0 | 295k  592k
  1   3  96   0   0   0|   0    52k|5518B 7299B|   0     0 | 228k  456k
  1   3  96   0   0   0|  12k   24k|1228B 1514B|   0     0 | 258k  518k
  1   4  96   0   0   0|   0     0 |  14k   32k|   0     0 | 280k  565k
  1   3  96   0   0   0|   0     0 |  19k   38k|   0     0 | 284k  573k
  1   3  96   0   0   0|   0     0 |6465B 7203B|   0     0 | 288k  581k
  1   3  96   0   0   0|   0   172k|  26k   11k|   0     0 | 290k  584k
  1   3  96   0   0   0|   0     0 |  23k   11k|   0     0 | 288k  580k
  1   3  96   0   0   0|   0    12k|5678B 4556B|   0     0 | 289k  583k
  1   3  96   0   0   0|   0     0 |1192B 2929B|   0     0 | 288k  580k
  1   3  96   0   0   0|   0     0 |6304B   10k|   0     0 | 272k  547k
  1   3  96   0   0   0|4096B   52k|8330B   14k|   0     0 | 300k  605k
  1   3  96   0   0   0|   0    24k|  11k   20k|   0     0 | 293k  591k
  1   3  96   0   0   0|   0     0 |  13k   28k|   0     0 | 291k  587k
  1   3  96   0   0   0|   0   512B|  10k   18k|   0     0 | 291k  587k
  2   3  95   0   0   0|   0     0 |6653B   10k|   0     0 | 167k  337k
  3   0  97   0   0   0|   0   160k|  23k 5524B|   0     0 |  10k   19k
  7   0  92   0   0   0|   0    36k|  22k 3335B|   0     0 | 949   924 
 10   0  90   0   0   0|   0     0 |5172B 3318B|   0     0 | 908   923 
  5   0  94   0   0   0|   0     0 |2234B 2825B|   0     0 | 846   875

编辑:根据要求,我将添加一个strace -f -p的摘录:

25734 <... read resumed> "\16\0\0\0\0\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0"...,128) = 128
25752 futex(0x927e60,FUTEX_WAIT_PRIVATE,2,NULL <unfinished ...>
25734 rt_sigaction(SIgalRM,NULL,{0x4b2300,~[KILL STOP RTMIN RT_1],SA_RESTORER,0x7fe09ac108f0},8) = 0
25734 write(8,"\1\0\0\0\0\0\0\0",8)   = 8
25734 read(15,0x7fffcea69f70,128)     = -1 EAGAIN (Resource temporarily unavailable)
25734 timer_gettime(0x1,{it_interval={0,0},it_value={0,0}}) = 0
25734 timer_settime(0x1,250000}},NULL) = 0
25734 timer_gettime(0x1,182592}}) = 0
25734 futex(0x927e60,FUTEX_WAKE_PRIVATE,1 <unfinished ...>
25752 <... futex resumed> )             = 0
25734 <... futex resumed> )             = 1
25752 futex(0x927e60,1 <unfinished ...>
25734 select(25,[7 10 14 15 16 17 18 24],[],{1,0} <unfinished ...>
正如其中一条评论中所推荐的那样(感谢cperrin88),Ubuntu 12.04带来了解决方案.一些参数:

>内核3.2
> 80个核心(40个物理,80个因为Intel HT)
> kvm 1:84 dfsg-0ubuntu16 1.0 noroms 0ubuntu13
> kvm-ipxe 1.0.0 git-3.55f6c88-0ubuntu1
> qemu-kvm 1.0 noroms-0ubuntu13
> libvirt 0.9.8-2ubuntu17.1

Windows guest虚拟机现在在启动的前30秒内显示一个启动栏,然后启动(正常行为).

与我之前的测试情况(每秒200到24k之间)相比,上下文切换的数量现在非常低.

所以问题解决了.我只需要找出改变了什么(我猜这是KVM中的一个错误).

感谢所有评论和您的努力!

原文地址:https://www.jb51.cc/ubuntu/348520.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐