XCP-ng(XEN)服务器之间的虚拟机传输速度

XCP-ng(XEN)服务器之间的虚拟机传输速度

我有两台 HP DL380 G8 服务器,在 HP p420 RAID 控制器上配备 4x 1TB 的 RAID 1+0 设置。Eth0 连接到路由器,Eth3 和 Eth4 绑定(LACP)并直接连接到机器之间。

如果我跑

#!/bin/bash
clear

echo 'Starting disk speed analysis..'
echo -e '\n  Reading different size files (1M, 100M, 1G):\n \e[93m'

dd if=/dev/sda of=/dev/zero iflag=direct bs=1M count=1000 &> test-results.log
tail -1 test-results.log

dd if=/dev/sda of=/dev/zero iflag=direct bs=100M count=10 &> test-results.log
tail -1 test-results.log

dd if=/dev/sda of=/dev/zero iflag=direct bs=1G count=1 &> test-results.log
tail -1 test-results.log

echo -e '\n  \e[39mWriting different size files (1M, 100M, 1G):\n \e[93m'
dd if=/dev/zero of=/root/testfile oflag=direct bs=1M count=1000 &> test-results.log
tail -1 test-results.log

dd if=/dev/zero of=/root/testfile oflag=direct bs=100M count=10 &> test-results.log
tail -1 test-results.log

dd if=/dev/zero of=/root/testfile oflag=direct bs=1G count=1 &> test-results.log
tail -1 test-results.log

rm test-results.log
echo -e '\e[39m'

我得到:

Reading different size files (1M, 100M, 1G):
1048576000 bytes (1.0 GB) copied, 2.81374 s, 373 MB/s
1048576000 bytes (1.0 GB) copied, 1.98058 s, 529 MB/s
1073741824 bytes (1.1 GB) copied, 1.88088 s, 571 MB/s

Writing different size files (1M, 100M, 1G):
1048576000 bytes (1.0 GB) copied, 0.871918 s, 1.2 GB/s
1048576000 bytes (1.0 GB) copied, 3.08039 s, 340 MB/s
1073741824 bytes (1.1 GB) copied, 3.2694 s, 328 MB/s

Reading different size files (1M, 100M, 1G):
1048576000 bytes (1.0 GB) copied, 2.80229 s, 374 MB/s
1048576000 bytes (1.0 GB) copied, 2.50451 s, 419 MB/s
1073741824 bytes (1.1 GB) copied, 2.136 s, 503 MB/s

Writing different size files (1M, 100M, 1G):
1048576000 bytes (1.0 GB) copied, 1.64036 s, 639 MB/s
1048576000 bytes (1.0 GB) copied, 3.48586 s, 301 MB/s
1073741824 bytes (1.1 GB) copied, 4.5464 s, 236 MB/s

这似乎是公平的速度,但如果我尝试通过绑定网络将 100Gb 大小的 VM 迁移到另一台机器,我只能获得~60MB/s 的网络传输速度和 120MB/s 的短传输速度(如果 WM 在传输时正在运行)。

单个虚拟机传输的网络与存储速度

但是,存储 I/O 速率可以相当高,远高于网络速度,所以我认为存储速度不是问题,对吗?

我正在使用 XCP-ng Center,通过 VPN 连接。这是全新安装,XCP-ng 是 v7.6。

理想情况下,我希望服务器之间的传输速度约为 2x125 MB/s,有什么想法为什么没有发生这种情况吗?

也许有类似堆栈的人可以分享经验?谢谢!

答案1

由于源 IP 地址和目标 IP 地址是固定的,因此绑定在这里不起作用。LACP 根据这些 IP 地址(以及可选的 TCP 端口号)计算哈希值,以确定要使用哪个物理链路。因此,单个 TCP 会话始终将来自同一流的数据包放在同一物理链路上。

千兆以太网接口使用8b/10b 编码因此它的最大发送速度为 800Mbps,包括第 2、3 和 4 层开销。假设开销为:

  • 18字节以太网头
  • IP 头为 20 字节;
  • TCP 报头为 20 个字节

这意味着每 1518 字节的第 2 层帧有 58 字节的开销,即大约 4%。从 800Mbps(=100MB/s)中减去这个值,我们得到的最大值为 96MB/s。这仍然不包括包间间隙对于千兆以太网来说为96ns。

因此,您获得的速度并不像您预期​​的那样异常。

编辑以回答韋斯特的问题:

LACP 是一种协议,它创建一个虚拟接口,将一个或多个(最多 16 个,其中最多 8 个可以处于活动状态)物理接口绑定在一起。此协议可以在服务器、路由器和交换机中实现。但是,并不要求链路的一端必须成为一个开关。

LACP 不能使用循环。下面引用自CCIE 路由和交换 v5.0,CCIE 考试的官方认证指南,第 155 页(重点是我的):

此哈希函数是确定性的,这意味着单个流中的所有帧都会产生相同的哈希值,因此会通过相同的物理链路转发。因此,单个流永远不会经历可用带宽的增加;相反,多个流有机会分布在多个链路上,从而实现更高的聚合吞吐量。单个流由单个链路承载,因此不会从带宽增加中受益,这一事实可以被视为一个缺点;但是,这种方法还可以防止帧被重新排序。这个特性至关重要,因为 EtherChannel 是一种透明技术,它不能引入在普通以太网上不会出现的损伤。

相关内容