两个硬盘:规格相同,速度不同。需要查找配置问题

两个硬盘:规格相同,速度不同。需要查找配置问题

我有两个节点(每个节点有 3 个专用数据驱动器),它们显示出截然不同的写入速度。它们的“hdparm”输出看起来相同,并且它们的“hdparm -t -T”输出也相当,但在已安装的文件系统上运行“dd”命令会产生截然不同的写入速度。再次使用“dd”测试读取速度会产生类似的结果。

服务器和硬盘是完全相同的型号,都运行相同的软件包(我们使用 chef 将包推送到我们的集群上)。

我正在寻找一些可以检查的参数或其他可以运行的测试,以帮助我解决性能差异。它看起来是在 OS/FS 级别,但我不确定还要看什么。两个挂载的文件系统都是 EXT4,并且启用了 noatime 和 user_xattr。

快速服务器:

hdparm -t -T输出:

/dev/sdb1:
 Timing cached reads:   2138 MB in  2.00 seconds = 1070.08 MB/sec
 Timing buffered disk reads:  232 MB in  3.02 seconds =  76.84 MB/sec

写出一个 4GB 的测试文件

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 40.1102 s, 107 MB/s
0.20user 10.91system 0:40.14elapsed 27%CPU (0avgtext+0avgdata 3472maxresident)k
16inputs+8388608outputs (1major+263minor)pagefaults 0swaps

从磁盘读取该文件(并读取到 /dev/null)

$ dd bs=4K of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 53.3914 s, 80.4 MB/s
0.19user 5.80system 0:53.53elapsed 11%CPU (0avgtext+0avgdata 3488maxresident)k
8389872inputs+0outputs (2major+264minor)pagefaults 0swaps

慢节点:

hdparm -t -T输出

/dev/sdc1:
 Timing cached reads:   1982 MB in  2.00 seconds = 991.27 MB/sec
 Timing buffered disk reads:  224 MB in  3.02 seconds =  74.16 MB/sec

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 98.1583 s, 43.8 MB/s
0.35user 17.58system 1:38.17elapsed 18%CPU (0avgtext+0avgdata 3456maxresident)k
8inputs+8388608outputs (0major+263minor)pagefaults 0swaps


$ dd bs=4k of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 54.7789 s, 78.4 MB/s
0.25user 10.84system 0:54.92elapsed 20%CPU (0avgtext+0avgdata 3488maxresident)k
8389864inputs+0outputs (2major+263minor)pagefaults 0swaps

答案1

尝试

hdparm -i -I /dev/sda

对于两个驱动器和不同的输出,应该会向您显示是否存在不同的 dma 或前瞻设置。

根据您的发行版,应该有一个地方放置 hdparm 设置以确保它们相同。

我还会仔细检查电缆。可能只是一个驱动器坏了,你可能需要检查智能 ECC 速率等。

/usr/sbin/smartctl -A -H /dev/sda
/usr/sbin/smartctl -a /dev/sda

是我用来检查驱动器是否智能的方法。

答案2

  1. 可能是磁盘坏了。检查错误。(还要检查输出以查看它们是否真的相同:型号、固件、大小和扇区大小)

    smartctl -a /dev/sdb smartctl -a /dev/sdc

    如果出现错误,请运行一个简短的测试(需要 2 分钟):

    smartctl -t 短/dev/sdb

    如果测试顺利通过且没有错误,则使用“long”而不是“short”(需要几个小时)再次运行。

    然后,当它完成后,再次使用“-a”进行检查,并将零写入该扇区的磁盘以重新定位它们(​​这会破坏数据!请非常小心您输入的内容,因为那是在原始级别用零覆盖的内容)。

    例如,如果您的扇区大小为 512 且 LBA 555 已损坏,则输入此命令(破坏数据!)

    dd if = / dev / zero of = / dev / sdb bs = 512 count = 1 seek = 555

    我会做更高的计数,这样您就不需要经常重复测试和写零,因为坏扇区通常彼此相邻。(破坏更多数据!)

    dd if = / dev / zero of = / dev / sdb bs = 512 count = 500 seek = 555

  2. 也许您的对齐方式是错误的。确保所有分区都从 63 开始或之后,并且如果您的逻辑扇区大小小于物理扇区大小,请确保您的对齐方式可以被 physicalsize/logicalsize 整除。这应该会极大地影响写入速度,但不会对读取速度产生很大影响/根本不会。

    例如,如果物理扇区是 4096,逻辑扇区是 512,那么起始扇区必须能被 8 整除 (4096/512)。在某些磁盘上,起始扇区必须远高于 63。在这些磁盘上,我使用 252 作为第一个分区的起始扇区。

    如果您使用的是 SSD,还必须对齐到擦除块。对齐的安全数字是 129024 的倍数(这满足旧磁盘上的 63 要求、4096 字节扇区 [高级格式磁盘,例如大多数 Seagate 和 WD Green 磁盘]、大多数 SSD 上的 1024 MB 和罕见 SSD 上的 2048 MB)

    此外,对于 SSD,如果它们看起来很慢,您应该在使用它们之前用供应商提供的工具擦除它们,或者使用 TRIM。

  3. 使用适当的基准测试。

    除非使用 conv=f​​datasync 或其他方法,否则您无法使用 dd 进行写入测试。David Schwartz 建议使用“time dd ...”,但如果您使用 conv=f​​datasync,它会告诉您 dd 中的正确时间和速度,而无需您自己重新计算。如果您有大量 RAM 或写入缓存,如果您不使用 conv=f​​datasync 之类的选项,那么您正在测量 RAM 和磁盘。http://romanrm.ru/en/dd-benchmark

    例如。

    dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M conv=f​​datasync

  4. 使用适当的基准测试。(第 2 部分)

    许多文件系统或磁盘在写入零时的表现会非常不同。您需要使用随机文件才能获得最佳效果。

    例如。

    第一次复制到 RAM

    cp /某处/带有/big/files/bigfile.iso /dev/shm

    运行测试

    dd bs=4K if=/dev/shm/bigfile.iso of=/mnt/vol1/test.file count=1M conv=f​​datasync

    或者

    准备随机文件

    dd if=/dev/random of=/dev/shm/randfile bs=1M count=500

    运行测试

    dd bs=4K if=/dev/shm/randfile of=/mnt/vol1/test.file count=1M conv=f​​datasync

  5. 另外,如果您的磁盘不太一样,或者有不同的文件系统,它们在 4k 块大小下的性能会有很大差异。还要测试 128k 和 1M。

相关内容