如何从Citrix XenServer获得更多的I / O性能?

我在HP服务器上安装了Citrix XenServer 6.1(1x Intel Xeon E5630 @ 2.53GHz(4核心,8线程,内存:dom0为752MB,guest虚拟机为55286MB)。服务器有2个scsi镜像磁盘,用于dev /testing。

主机运行testing期间打开或closures的5个客人。 大多数的性能testing结果不佳。 但是我想调整Xen:例如,“dd if = / dev / zero …”在主机上提供130MB / s,而单独的guest虚拟机上只有75MB / s。

如果我在一个guest虚拟机上运行“dd if = / dev / urandom”,则CPU已经饱和,我得到7MB / s。

通过'tune-vcpus',我设法给8个vCPU给dom0,而且我的perfs减less了。 默认是4个vCPU,我想给dom0只有1个vCPU,但是不起作用。 这是我试过的:

  • 编辑'/ etc / sysconfig / tunes-vcpus'> NR_DOMAIN0_VCPUS = 1和MAX_NR_DOMAIN0_VCPUS = 1
  • /etc/init.d/tune-vcpus start min
  • 重新启动主机

我也试过“/ opt / xensource / libexec / xen-cmdline -set-dom0 blkbk.reqs = 256”来从存储中获得更多的perf,它不会改变任何东西。

而且我在VBD上启用了Qos,并将我的testing中的优先级放在了最高的地位。

毕竟,I / O性能没有任何好处。 还有什么要做的吗?

谢谢,

格雷格。

你可以尝试为max_sectors_kbfind一个很好的值。 默认情况下,它设置为512或1024.例如,你可以将它设置为128并再次testing(dom0以及domU)。

echo 128 > /sys/block/[your blockdevice]/queue/max_sectors_kb 

这个设置不是持久的。 在/etc/rc.local中添加一个条目,以便在启动时进行设置。

请张贴您的结果。

这听起来像是你特地提到来自客户的存储吞吐量。 这只是众多performance指标之一。 I / O吞吐量是带宽延迟的函数。 这意味着,为了实现高吞吐量,您需要尽量减less延迟和最大化带宽(即,有大量的数据在任何时间飞行,并有尽可能快的服务数据的要求)。

当您处于虚拟化环境中时,您将不可避免地增加延迟来满足您的请求。 这意味着domU将很难匹配您在dom0中看到的吞吐量。 希望通过允许更多数据在任何时候飞(通过让许多虚拟机进行I / O操作或具有足够大的请求)来将这种影响降至最低。

考虑到您的硬件和您所指的速率(〜150 MB / s),如果您的dd具有正确的参数,如果您无法看到与客人相似的吞吐量,我将感到非常惊讶。

从“dom0”和“domU”(下面的命令将写入500MB的数据到dest ,所以注意不要覆盖重要的数据):

 dd if=/dev/zero of=dest bs=1M count=500 oflag=direct 

oflag=direct确保这些写操作将绕过虚拟机(dom0和domU)缓冲区高速caching。

此外,请参阅以下文档以更好地了解XenServer 6.1.0如何实现虚拟化存储及其任何性能影响(包括vCPU数量和固定的调整build议):

http://support.citrix.com/article/CTX136861

问候,

费利佩

你可以尝试添加的一件事是将vm中的io调度器切换到最后期限,并实际上禁用io在那里合并。 一般来说,这应该会减lessIo延迟,并且在Xen的IO环结构中可能会更好。

 echo 1 > /sys/block/$dev/queue/nomerges 

我的推理和经验是Linux的块代码不是很聪明,但认为它是。 所以它会尝试理想地将所有的IO请求合并成一个,然后将它们传递给磁盘驱动器。 在Xen的情况下,下一步的行动是将它们分开,使它们适合环形缓冲区。 然后,他们在dom0中,磁盘驱动程序有很多更好的位置来找出需要合并的东西,因为它不需要单独获取单个虚拟机的知识来进行alignment。

如果它没有帮助,那么撤消这个改变,但是当所有其他的东西都已经被尝试过的时候,它就是我的样子。

也许你的服务器很久以前就被抛弃了,但是我仍然会帮助别人。