![XCP-ng(XEN)服务器之间的虚拟机传输速度](https://linux22.com/image/731192/XCP-ng%EF%BC%88XEN%EF%BC%89%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%BC%A0%E8%BE%93%E9%80%9F%E5%BA%A6.png)
我有两台 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 是一种透明技术,它不能引入在普通以太网上不会出现的损伤。