如何从 Citrix XenServer 获取更高的 I/O 性能?

如何从 Citrix XenServer 获取更高的 I/O 性能?

我在 HP 服务器上安装了 Citrix XenServer 6.1(1x Intel Xeon E5630 @ 2.53GHz(4 核,8 线程,RAM:752MB 用于 dom0,55286MB 用于客户机)。该服务器有 2 个 scsi 镜像磁盘,用于开发/测试。

主机运行 5 个客户机,我在测试期间打开或关闭了这些客户机。大多数性能测试结果都不太好。但我想调整 Xen:例如,“dd if=/dev/zero ...” 在主机上提供 130MB/s,但在单个客户机上仅提供 75MB/s。

如果我在客户机上运行dd if=/dev/urandom,​​CPU 就会饱和,并且我得到 7MB/s。

通过tune-vcpus,我设法为 dom0 分配了 8 个 vCPU,但性能却有所下降。默认值为 4 个 vCPU,我想只为 dom0 分配 1 个 vCPU,但这样做不行。

以下是我尝试过的:

  • 编辑/etc/sysconfig/tunes-vcpus> NR_DOMAIN0_VCPUS=1 和 MAX_NR_DOMAIN0_VCPUS=1
  • /etc/init.d/tune-vcpus开始分钟
  • 重启主机

我也试过

/opt/xensource/libexec/xen-cmdline -set-dom0 blkbk.reqs=256

为了从存储中获得更多性能,它不会改变任何东西。

我在 VBD 上启用了 Qos,并为进行测试的 VBD 赋予最高优先级。

经过所有这些,我的 I/O 性能并没有得到任何提升。还有其他办法吗?

答案1

您可以尝试为 max_sectors_kb 找到一个合适的值。默认情况下,它设置为 512 或 1024。例如,您可以将其设置为 128,然后再次测试(dom0 以及 domU)。

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

此设置不是永久的。将条目放入 /etc/rc.local 以在启动时进行设置。

请发布您的结果。

答案2

您可以尝试添加的一件事是将虚拟机中的 io 调度程序切换到截止时间,并在那里实际禁用 io 合并。这应该会总体上减少 io 延迟,并且它可能与 Xen 的 IO 环结构配合得更好。

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

我的理由和经验是,Linux 的块代码其实并不智能,但它认为自己很智能。因此,它会尝试将所有 IO 请求合并为一个,然后再将它们传递给磁盘驱动程序。在 Xen 的情况下,下一步将是将它们分开,以便它们适合环形缓冲区。然后它们位于 dom0 中,而那里的磁盘驱动程序可以更好地找出需要合并的内容,因为它不需要利用单个单独的 VM 知识来进行对齐。

如果没有帮助,则撤消更改,但这是我在尝试了所有其他方法后要查看的地方。

也许你的服务器早已被废弃,但我认为这仍然会帮助其他人。

答案3

听起来你指的是来自客户的存储吞吐量。这只是众多性能指标之一。I/O 吞吐量是带宽潜伏。这意味着,为了实现高吞吐量,您需要最小化延迟并最大化带宽(即随时传输大量数据,并尽快满足对这些数据的请求)。

当您处于虚拟化环境中时,您不可避免地会增加延迟来处理您的请求。这意味着 domU 很难达到您在 dom0 中看到的吞吐量。希望通过允许更多数据随时传输(通过让许多虚拟机执行 I/O 或通过有足够大的请求)来最大限度地减少这种影响。

考虑到您的硬件和您所指的速率(~150 MB/s),如果您无法从具有dd正确参数的客户机上看到类似的吞吐量,我会感到非常惊讶。

从你的“dom0”和“domU”尝试一下(下面的命令将写入 500MB 的数据delete.me

dd if=/dev/zero of=delete.me bs=1M count=500 oflag=direct

确保oflag=direct这些写入将绕过虚拟机(dom0 和 domU)缓冲区缓存。

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

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

相关内容