对于新发布的 Ubuntu 24.04,我购买了新的 WD_Black SN770 NVMe,宣传速度高达 5150MB/s(GEN4)。我的主板(ASrock X570 Pro4)支持 Gen4x4,根据 LinkSta(LnkSta:速度 16GT/s,宽度 x4)一切都应该正常。
但如果我进行测试,速度就会慢很多:
hdparm -t /dev/nvme0n1
/dev/nvme0n1:
Timing buffered disk reads: 8840 MB in 3.00 seconds = 2946.04 MB/sec
那么我的系统可能出了什么问题?为什么我没有得到 ~5GB/s?在另一个帖子中,有人说这是“barrier-flag”的问题,但这并没有解决我的问题。
答案1
尽管 hdparm 测试旨在实现最小开销,但我认为测试结果仍然受到系统和 CPU 的限制。
我的 Ubuntu 24.04 测试服务器中安装了两个 NVME 驱动器。两者都是 WD Black SN850X,顺序读取规格为 7300 MB/秒。一个是 1TB,一个是 2TB。
我得到:
doug@s19:/media/nvme/home/doug/c$ sudo taskset -c 6 hdparm -t /dev/nvme0n1
/dev/nvme0n1:
Timing buffered disk reads: 5070 MB in 3.00 seconds = 1689.66 MB/sec
doug@s19:/media/nvme/home/doug/c$ sudo taskset -c 6 hdparm -t /dev/nvme1n1
/dev/nvme1n1:
Timing buffered disk reads: 7718 MB in 3.00 seconds = 2572.02 MB/sec
但同时进行 top 捕获时,观察到 CPU 6 没有空闲时间,并且似乎系统受限。正如观察到的那样,我们预计 IO 等待时间会很长。
top - 08:27:01 up 2 days, 1:34, 2 users, load average: 0.12, 0.04, 0.01
Tasks: 212 total, 3 running, 209 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 1.0 us, 38.4 sy, 0.0 ni, 0.0 id, 60.6 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 31924.4 total, 4513.2 free, 858.0 used, 27021.1 buff/cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5506 root 20 0 4860 4736 2304 R 39.0 0.0 0:00.67 hdparm
1 root 20 0 22256 12392 9064 S 0.0 0.0 0:01.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pool_wo+
...
如果我说的是真的,那么测试结果应该与 CPU 最大频率有关:
Max-Freq Results %
100% 2590.10 MB/sec
90% 2544.17 MB/sec -1.77%
80% 2531.59 MB/sec -2.26%
70% 2492.58 MB/sec -3.77%
60% 2423.82 MB/sec -6.42%
50% 2305.09 MB/sec -11.00%