10G 網路上的寫入速度非常慢(NVME 驅動器)
搭建實驗實驗室集群,通過10G光纖連接接收數據的寫入速度為本地寫入速度的10%。
測試兩台相同機器之間的傳輸速度;
iperf3
顯示良好的記憶體到記憶體速度為9.43Gbits/s。磁碟(讀取)到記憶體的傳輸速度為(9.35Gbit/s):test@rbox1:~$ iperf3 -s -B 10.0.0.21 test@rbox3:~$ iperf3 -c 10.0.0.21 -F /mnt/k8s/test.3g Connecting to host 10.0.0.21, port 5201 Sent 9.00 GByte / 9.00 GByte (100%) of /mnt/k8s/test.3g [ 5] 0.00-8.26 sec 9.00 GBytes 9.35 Gbits/sec
但是發送超過 10G 的數據並寫入另一台機器上的磁碟要慢一個數量級:
test@rbox1:~$ iperf3 -s 10.0.0.21 -F /tmp/foo -B 10.0.0.21 test@rbox3:~$ iperf3 -c 10.0.0.21 Connecting to host 10.0.0.21, port 5201 [ 5] local 10.0.0.23 port 39970 connected to 10.0.0.21 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 103 MBytes 864 Mbits/sec 0 428 KBytes [ 5] 1.00-2.00 sec 100 MBytes 842 Mbits/sec 0 428 KBytes [ 5] 2.00-3.00 sec 98.6 MBytes 827 Mbits/sec 0 428 KBytes [ 5] 3.00-4.00 sec 99.3 MBytes 833 Mbits/sec 0 428 KBytes [ 5] 4.00-5.00 sec 91.5 MBytes 768 Mbits/sec 0 428 KBytes [ 5] 5.00-6.00 sec 94.4 MBytes 792 Mbits/sec 0 428 KBytes [ 5] 6.00-7.00 sec 98.1 MBytes 823 Mbits/sec 0 428 KBytes [ 5] 7.00-8.00 sec 91.2 MBytes 765 Mbits/sec 0 428 KBytes [ 5] 8.00-9.00 sec 91.0 MBytes 764 Mbits/sec 0 428 KBytes [ 5] 9.00-10.00 sec 91.5 MBytes 767 Mbits/sec 0 428 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 959 MBytes 804 Mbits/sec 0 sender Sent 959 MByte / 9.00 GByte (10%) of /mnt/k8s/test.3g [ 5] 0.00-10.00 sec 953 MBytes 799 Mbits/sec receiver
NVME 驅動器能夠更快地在本地
dd
寫入(詳細資訊和fio
測量值如下)- 對於單程序和4k/8k/10m塊:fio
隨機寫入速度為330/500/1300 MB/s我正在嘗試實現接近 NVME 驅動器的實際本地寫入速度的寫入速度(所以是的,很好地闡明了這個假設——我希望能夠達到非常相似的速度寫入單個 NVME 驅動器。網路;但我什至無法獲得其中的 20%)。
在這一點上,我完全被踩住了,看不到還有什麼可以嘗試的——除了不同的核心/作業系統——任何指針、更正和幫助都將不勝感激。
這裡有一些測量/資訊/結果:
到目前為止我嘗試了什麼:
- 兩台機器上的巨型幀(MTU 9000)並驗證它們工作(使用
ping -mping -M do -s 8972
)- 消除了網路交換機的干擾,我通過 2m Dumplex OM3 多模光纖電纜直接連接了兩台機器(所有機器上的電纜和收發器都是相同的),並將 iperf3 伺服器/客戶端綁定到這些介面。結果是一樣的(慢)。
- 在測試期間斷開所有其他乙太網/光纖電纜(以消除路由問題) - 沒有變化。
- 更新了主機板和光纖網卡的韌體(同樣,沒有變化)。我還沒有更新 NVME 韌體 - 似乎已經是最新的了。
- 甚至嘗試將 10G 卡從 PCIE 插槽 1 移動到下一個可用插槽;想知道 NVME 和 10G NIC 是否共享和最大化物理集線器通道頻寬(同樣,沒有可測量的變化)。
發現了一些“有趣”的行為:
- 增加並行客戶端的數量會增加頻寬使用率;有 1 個客戶端,目標機器正在寫入 900Mbits/sec;4 個客戶端 1.26 Gbits/sec(超過 4 個並行客戶端會產生不利影響)
- 在具有 AMD Ryzen 5 3600X 和 64G RAM(相同的 NVME 驅動器 + 10G NIC)的更強大的機器上測試寫入——1 個客戶端可以達到 1.53Gbit/sec,4 個客戶端可以達到 2.15Gbits/sec(8 個客戶端可以達到 2.13Gbit/sec )。本例流量流經 Mikrotik CS309 交換機,MTU 為 1500;更強大的機器似乎接收/寫入更快
- 測試期間沒有明顯的負載——這適用於小型和大型機器;2核可能是26%
編輯 06/07:
在@shodanshok 評論之後,通過 NFS 安裝遠端機器;以下是結果:
nfs exports: /mnt/nfs *(rw,no_subtree_check,async,insecure,no_root_squash,fsid=0)
cat /etc/mtab | grep nfs 10.0.0.21:/mnt/nfs /mnt/nfs1 nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.21,mountvers=3,mountport=52335,mountproto=udp,local_lock=none,addr=10.0.0.21 0 0
fio --name=random-write --ioengine=libaio --rw=randwrite --bs=$SIZE --numjobs=1 --iodepth=1 --runtime=30 --end_fsync=1 --size=3g
dd if=/dev/zero of=/mnt/nfs1/test bs=$SIZE count=$(3*1024/$SIZE)
| fio (bs=4k) | fio (bs=8k) | fio (bs=1M) | dd (bs=4k) | dd (bs=1M) nfs (udp) | 153 | 210 | 984 | 907 |962 nfs (tcp) | 157 | 205 | 947 | 946 |916
所有這些測量結果都是MB/s我很滿意 1M 塊非常接近 10G 連接的理論速度限制。
看起來
iperf3 -F ...
不是測試網路寫入速度的方法;但我也會嘗試讓iperf3
開發人員接受它。設置詳情:
每台機器都有 AMD Ryzen 3 3200G 和 8GB RAM,MPG X570 GAMING PLUS (MS-7C37) 主機板。1 個 1TB NVME 驅動器(消費級 WD Blue SN550 NVMe SSD WDS100T2B0C),位於最靠近 CPU 的 M.2 插槽中。以及 PCIe 插槽中的一張 SolarFlare S7120 10G 光纖卡。
NVME 磁碟資訊:
test@rbox1:~$ sudo nvme list Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 21062Y803544 WDC WDS100T2B0C-00PXH0 1 1.00 TB / 1.00 TB 512 B + 0 B 211210WD
NVME磁碟寫入速度(4k/8k/10M)
test@rbox1:~$ dd if=/dev/zero of=/tmp/temp.bin bs=4k count=1000 1000+0 records in 1000+0 records out 4096000 bytes (4.1 MB, 3.9 MiB) copied, 0.00599554 s, 683 MB/s test@rbox1:~$ dd if=/dev/zero of=/tmp/temp.bin bs=8k count=1000 1000+0 records in 1000+0 records out 8192000 bytes (8.2 MB, 7.8 MiB) copied, 0.00616639 s, 1.3 GB/s test@rbox1:~$ dd if=/dev/zero of=/tmp/temp.bin bs=10M count=1000 1000+0 records in 1000+0 records out 10485760000 bytes (10 GB, 9.8 GiB) copied, 7.00594 s, 1.5 GB/s
使用 fio-3.16 測試隨機寫入速度:
test@rbox1:~$ fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --numjobs=1 --iodepth=1 --runtime=30 --time_based --end_fsync=1 random-write: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=posixaio, iodepth=1 Run status group 0 (all jobs): WRITE: bw=313MiB/s (328MB/s), 313MiB/s-313MiB/s (328MB/s-328MB/s), io=9447MiB (9906MB), run=30174-30174msec Disk stats (read/write): dm-0: ios=2/969519, merge=0/0, ticks=0/797424, in_queue=797424, util=21.42%, aggrios=2/973290, aggrmerge=0/557, aggrticks=0/803892, aggrin_queue=803987, aggrutil=21.54% nvme0n1: ios=2/973290, merge=0/557, ticks=0/803892, in_queue=803987, util=21.54% test@rbox1:~$ fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=8k --numjobs=1 --iodepth=1 --runtime=30 --time_based --end_fsync=1 random-write: (g=0): rw=randwrite, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=posixaio, iodepth=1 Run status group 0 (all jobs): WRITE: bw=491MiB/s (515MB/s), 491MiB/s-491MiB/s (515MB/s-515MB/s), io=14.5GiB (15.6GB), run=30213-30213msec Disk stats (read/write): dm-0: ios=1/662888, merge=0/0, ticks=0/1523644, in_queue=1523644, util=29.93%, aggrios=1/669483, aggrmerge=0/600, aggrticks=0/1556439, aggrin_queue=1556482, aggrutil=30.10% nvme0n1: ios=1/669483, merge=0/600, ticks=0/1556439, in_queue=1556482, util=30.10% test@rbox1:~$ fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=10m --numjobs=1 --iodepth=1 --runtime=30 --time_based --end_fsync=1 random-write: (g=0): rw=randwrite, bs=(R) 10.0MiB-10.0MiB, (W) 10.0MiB-10.0MiB, (T) 10.0MiB-10.0MiB, ioengine=posixaio, iodepth=1 Run status group 0 (all jobs): WRITE: bw=1250MiB/s (1310MB/s), 1250MiB/s-1250MiB/s (1310MB/s-1310MB/s), io=36.9GiB (39.6GB), run=30207-30207msec Disk stats (read/write): dm-0: ios=9/14503, merge=0/0, ticks=0/540252, in_queue=540252, util=68.96%, aggrios=9/81551, aggrmerge=0/610, aggrticks=5/3420226, aggrin_queue=3420279, aggrutil=69.16% nvme0n1: ios=9/81551, merge=0/610, ticks=5/3420226, in_queue=3420279, util=69.16%
核心:
test@rbox1:~$ uname -a Linux rbox1 5.8.0-55-generic #62-Ubuntu SMP Tue Jun 1 08:21:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
光纖網卡:
test@rbox1:~$ sudo sfupdate Solarflare firmware update utility [v8.2.2] Copyright 2002-2020 Xilinx, Inc. Loading firmware images from /usr/share/sfutils/sfupdate_images enp35s0f0np0 - MAC: 00-0F-53-3B-7D-D0 Firmware version: v8.0.1 Controller type: Solarflare SFC9100 family Controller version: v6.2.7.1001 Boot ROM version: v5.2.2.1006 The Boot ROM firmware is up to date The controller firmware is up to date
光纖網卡的初始化和MTU設置:
test@rbox1:~$ sudo dmesg | grep sf [ 0.210521] ACPI: 10 ACPI AML tables successfully acquired and loaded [ 1.822946] sfc 0000:23:00.0 (unnamed net_device) (uninitialized): Solarflare NIC detected [ 1.824954] sfc 0000:23:00.0 (unnamed net_device) (uninitialized): Part Number : SFN7x22F [ 1.825434] sfc 0000:23:00.0 (unnamed net_device) (uninitialized): no PTP support [ 1.958282] sfc 0000:23:00.1 (unnamed net_device) (uninitialized): Solarflare NIC detected [ 2.015966] sfc 0000:23:00.1 (unnamed net_device) (uninitialized): Part Number : SFN7x22F [ 2.031379] sfc 0000:23:00.1 (unnamed net_device) (uninitialized): no PTP support [ 2.112729] sfc 0000:23:00.0 enp35s0f0np0: renamed from eth0 [ 2.220517] sfc 0000:23:00.1 enp35s0f1np1: renamed from eth1 [ 3.494367] [drm] VCN decode and encode initialized successfully(under DPG Mode). [ 1748.247082] sfc 0000:23:00.0 enp35s0f0np0: link up at 10000Mbps full-duplex (MTU 1500) [ 1809.625958] sfc 0000:23:00.1 enp35s0f1np1: link up at 10000Mbps full-duplex (MTU 9000)
主機板編號:
# dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 2.8 present. Handle 0x0001, DMI type 1, 27 bytes System Information Manufacturer: Micro-Star International Co., Ltd. Product Name: MS-7C37 Version: 2.0
其他硬體資訊(主要用於列出物理連接 - 網橋)
test@rbox1:~$ hwinfo --short cpu: AMD Ryzen 3 3200G with Radeon Vega Graphics, 1500 MHz AMD Ryzen 3 3200G with Radeon Vega Graphics, 1775 MHz AMD Ryzen 3 3200G with Radeon Vega Graphics, 1266 MHz AMD Ryzen 3 3200G with Radeon Vega Graphics, 2505 MHz storage: ASMedia ASM1062 Serial ATA Controller Sandisk Non-Volatile memory controller AMD FCH SATA Controller [AHCI mode] AMD FCH SATA Controller [AHCI mode] network: enp35s0f1np1 Solarflare SFN7x22F-R3 Flareon Ultra 7000 Series 10G Adapter enp35s0f0np0 Solarflare SFN7x22F-R3 Flareon Ultra 7000 Series 10G Adapter enp39s0 Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller network interface: br-0d1e233aeb68 Ethernet network interface docker0 Ethernet network interface vxlan.calico Ethernet network interface veth0ef4ac4 Ethernet network interface enp35s0f0np0 Ethernet network interface enp35s0f1np1 Ethernet network interface lo Loopback network interface enp39s0 Ethernet network interface disk: /dev/nvme0n1 Sandisk Disk /dev/sda WDC WD5000AAKS-4 partition: /dev/nvme0n1p1 Partition /dev/nvme0n1p2 Partition /dev/nvme0n1p3 Partition /dev/sda1 Partition bridge: AMD Matisse Switch Upstream AMD Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge AMD Raven/Raven2 Device 24: Function 3 AMD Raven/Raven2 PCIe GPP Bridge [6:0] AMD Matisse PCIe GPP Bridge AMD Raven/Raven2 Device 24: Function 1 AMD Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge AMD FCH LPC Bridge AMD Matisse PCIe GPP Bridge AMD Matisse PCIe GPP Bridge AMD Raven/Raven2 Device 24: Function 6 AMD Matisse PCIe GPP Bridge AMD Raven/Raven2 Root Complex AMD Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A AMD Raven/Raven2 Device 24: Function 4 AMD Matisse PCIe GPP Bridge AMD Raven/Raven2 Device 24: Function 2 AMD Matisse PCIe GPP Bridge AMD Raven/Raven2 Device 24: Function 0 AMD Raven/Raven2 Device 24: Function 7 AMD Raven/Raven2 PCIe GPP Bridge [6:0] AMD Raven/Raven2 Device 24: Function 5
這個答案的靈感來自@shodanshok 的評論,他評論了(所以我不能贊成他的貢獻——而是發布一個答案)
編輯 2021/06/09 -
iperf3
開發人員發現了一個可能的問題;軟體包的較新版本可能具有不同的行為,YMMV。見:https ://github.com/esnet/iperf/issues/1159最初,我是
iperf3 -F ....
用來測量網路上的寫入速度(以驗證 10G 光纖連接)。然而,它產生的結果比通過 NFS 寫入數據(使用fio
基準測試生成)要慢得多。這非常令人費解,因為
rsync
它遠遠低於100MB/s
,即使考慮到解密/加密,它在 10G 光纖上也不應該那麼慢。所以我一直在錯誤的方向上探勘。下面的測量表明,帶有 NVME(單)磁碟的 10G 網路能夠超過 900MB/s,並且有空閒的 CPU 容量。
在我的設置中,我使用的是邏輯卷 (LVM),奇怪的是 LVM 統計資訊與
NVME
分區不一致;這是系統上唯一的分區——因此,如果沒有 LVM,看看會發生什麼可能會很有趣。nfs 出口:
/mnt/nfs *(rw,no_subtree_check,async,insecure,no_root_squash,fsid=0)
貓 /etc/mtab | grep nfs
10.0.0.21:/mnt/nfs /mnt/nfs1 nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.21,mountvers=3,mountport=52335,mountproto=udp,local_lock=none,addr=10.0.0.21 0 0
命令用於產生以下測量值:
`fio --name=random-write --ioengine=libaio --rw=randwrite --bs=$SIZE --numjobs=1 --iodepth=1 --runtime=30 --end_fsync=1 --size=3g` `dd if=/dev/zero of=/mnt/nfs1/test bs=$SIZE count=$(3*1024/$SIZE)` | | fio (bs=4k) | fio (bs=8k) | fio (bs=1M) | dd (bs=4k) | dd (bs=1M) | |------------|----------------|----------------|---------------|---------------|------------| |nfs (udp) | 153 | 210 | 984 | 907 | 962 | |nfs (tcp) | 157 | 205 | 947 | 946 | 916 |
iostat 圖
從:
`fio --name=random-write --ioengine=libaio --rw=randwrite --bs=1m --numjobs=1 --iodepth=1 --runtime=30 --end_fsync=1 --size=20g`
這