(4096 对齐)高级格式磁盘的随机读/写性能极低

(4096 对齐)高级格式磁盘的随机读/写性能极低

在 SATA 3.0、6.0 Gb/s 上

*-disk:0
       description: ATA Disk
       product: WDC WD20EFRX-68E
       vendor: Western Digital
       physical id: 0
       bus info: scsi@1:0.0.0

hw_sector_size: 512
logical_block_size: 512
physical_block_size: 4096

# parted /dev/sda print
Model: ATA WDC WD20EFRX-68E (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B

我有以下内容fio 结果空的/dev/sda3 (ext4):

fio --name=seqread --rw=read --direct=1 --ioengine=libaio --bs=8k --numjobs=8 --size=1G --runtime=600  --group_reporting
seqread IOPS=8960, BW=70.0MiB/s (73.4MB/s)(8192MiB/117028msec)

fio --name=seqwrite --rw=write --direct=1 --ioengine=libaio --bs=32k --numjobs=4 --size=2G --runtime=600 --group_reporting
seqwrite IOPS=1538, BW=48.1MiB/s (50.4MB/s)(8192MiB/170345msec); 0 zone resets

fio --name=randread --rw=randread --direct=1 --ioengine=libaio --bs=8k --numjobs=16 --size=1G --runtime=600 --group_reporting
randread IOPS=163, BW=1305KiB/s (1337kB/s)(765MiB/600078msec)

fio --name=randwrite --rw=randwrite --direct=1 --ioengine=libaio --bs=64k --numjobs=8 --size=512m --runtime=600 --group_reporting
randwrite IOPS=165, BW=10.3MiB/s (10.8MB/s)(4096MiB/395912msec); 0 zone resets

fio --name=randrw --rw=randrw --direct=1 --ioengine=libaio --bs=16k --numjobs=8 --rwmixread=90 --size=1G --runtime=600 --group_reporting
randrw read IOPS=141, BW=2258KiB/s (2313kB/s)(1324MiB/600086msec)
randrw write IOPS=15, BW=253KiB/s (259kB/s)(148MiB/600086msec); 0 zone resets

一开始我以为我的扇区排列不正确,

Number  Start          End             Size            File system  Name              Flags
 1      1048576B       511705087B      510656512B      fat32                          boot, esp
 2      511705088B     54198796287B    53687091200B                                   raid
 3      54198796288B   215260069887B   161061273600B   ext4         Linux filesystem
 4      215260069888B  2000398917119B  1785138847232B               Linux RAID        raid

但所有起始扇区都能被 4096 整除,而 parted 告诉我

(parted) align-check opt 1
1 aligned
(parted) align-check opt 2
2 aligned
(parted) align-check opt 3
3 aligned
(parted) align-check opt 4
4 aligned

SMART看起来不错: 在此处输入图片描述

这些 fio 结果与在 Debian 10 和Arch Linux Live CD。这些都不是最快的旋转器,所以我可以接受连续的结果(尽管它们应该更高),但随机的 R、W 和 RW 结果是不可接受的。

内核是 5.0.x(live CD 中是 5.2.x),调度程序是默认的(并且受到推崇的

# cat /sys/block/sda/queue/scheduler
[mq-deadline] none

将调度程序更改为巴菲特没有帮助。

据我所知部门协调很好,但要么是我遗漏了什么东西,要么是我有一些有缺陷的驱动器(全新的并且在保修期内)。<200 IOPS 和 <2.5MB/s 有时会导致系统无法使用。

我很茫然。我该如何修复这个问题?还是我的驱动器有问题(不太可能,因为这是两个完全相同的驱动器,结果也相似)?

答案1

您似乎正在使用 fio 作业在文件系统内执行 I/O。如果是这样,这会给您的结果增加另一个混淆因素。警告 - 直接对磁盘节点执行 I/O 可能会破坏已存在的文件系统和数据所以如果您选择直接前往,请务必小心/dev/sda

您将直接使用最多 8 个未完成的 I/O。这可能太低,无法看到磁盘的最佳性能(SATA 磁盘通常可以排队大约 32 个未完成的 I/O)。您还使用多个进程来提交 I/O,与异步提交 I/O 相比,这可能会产生一些开销。

摘要:无法判断磁盘是否有缺陷,因为您的 fio 作业看起来很奇怪。可能提交的 I/O 不足(fio 提到了您未在此处包含的磁盘统计信息 - 检查您的磁盘利用率)。此外,磁盘本身的缓存等因素可能意味着您最终会得到扭曲的结果,因为您工作的区域太小,并且多个作业在磁盘的同一区域上工作,因此也要注意(我想这在“连续”情况下更有可能发生)。

相关内容