Raid

XCP-ng (XEN) 伺服器之間的 VM 傳輸速度

  • January 3, 2020

我在 RAID 1+0 設置中的 HP p420 RAID 控制器上有兩台具有 4x 1TB 的 HP DL380 G8 伺服器。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 遷移到另一台機器,如果 WM 執行在轉移的時間。

單個 VM 傳輸的網路與儲存速度

但是,儲存 I/O 速率可能會很高.. 遠遠高於網路速度,o 我認為儲存速度不是問題.. 對嗎?

我正在使用 XCP-ng Center,通過 VPN 連接。它是全新安裝的,XCP-ng 是 v7.6。

理想情況下,我希望伺服器之間的傳輸速度約為 2x125 MB/s,有什麼想法為什麼沒有發生?

也許有類似堆棧的任何人都可以分享經驗?謝謝!

綁定在這裡沒有幫助,因為您的源 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 的數據包間間隙。

因此,您獲得的速度並不像您預期的那樣異常。

編輯以回答rjt的問題:

LACP 是一種創建虛擬介面的協議,該虛擬介面將一個或多個(最多 16 個,其中最多 8 個可以處於活動狀態)物理介面綁定在一起。該協議可以在伺服器、路由器和交換機中實現。然而,不要求鏈路的一端必須是交換機。

LACP 不能使用循環。以下是CCIE Routing & Switching v5.0的引述,CCIE 考試的官方認證指南,第 155 頁(重點是我的):

此散列函式是確定性的,這意味著單個流中的所有幀都產生相同的散列值,因此通過相同的物理鏈路轉發。因此,單個流從未經歷過可用頻寬的增加;相反,多個流有機會分佈在多個鏈路上,從而實現更高的聚合吞吐量。單個流由單個鏈路承載,因此不能從頻寬增加中受益這一事實可以被認為是一個缺點;但是,這種方法也可以防止幀被重新排序。此屬性至關重要,因為 EtherChannel(作為一種透明技術)不得引入在普通乙太網上看不到的損傷。

引用自:https://serverfault.com/questions/946451