硬盘性能大幅下降

硬盘性能大幅下降

基本硬件信息:
该硬盘为 Seagate BarraCuda 4TB(型号:ST4000DM004)。更多详细信息请参见hdparm -I文末附录中的输出。

问题和测试描述:
这个问题表面上看就像是将要写入磁盘的数据缓存起来,但写入速度却比缓存慢,但实际上事情并没有那么简单。

复制文件(在 NTFS 文件系统上):
当写入大量数据时,驱动器的性能会突然急剧下降。同样,这通常只是将文件缓存在 RAM 中,然后磁盘工作一段时间。然而,在这里,当监控文件时/proc/meminfo(在 Ubuntu 下),观察到的行为似乎不支持这一点。即使写入数据(大文件或几个较小的文件)并调用 时sync,“脏”内存量将继续减少一段时间,然后逐渐接近完全停止。它将继续减少非常慢慢地,直到有时最终加速。这可能会重复,具体取决于剩余的数据量。当写入速度降低时,读取设备的速度也会非常缓慢,sync如果在“慢速模式”下读取,即使完成后也会持续一段时间。

这些初始测试是在 Ubuntu 21.10 和 Windows 10 上进行的,行为类似。

Windows 的附加说明:
当完成复制操作后磁盘仍然很慢时,我尝试从磁盘读取文件(例如播放视频,但一直很滞后),资源监视器和任务管理器都显示设备的磁盘使用率很高(100% 或接近 100%),而实际显示的速度却不到 1 MB/s。(操作系统也一度完全冻结,但这可能与此有关,也可能无关。)

磁盘基准测试:
为了查看这是文件系统还是硬件本身的问题,我使用该gnome-disks实用程序对设备进行了基准测试。我将在此处展示的此类基准测试结果证实了我上面描述的情况,在某个时间点之后,读写速度急剧下降到几乎为零,然后恢复(蓝色和红色分别是从磁盘外部向内部采集的每个单独样本的读写速度,总共 1000 个;绿色的点和线对应于与其他基准不同的访问时间基准):

读/写基准

请注意,据我所知,基准测试工具排除了诸如写入缓存之类的因素。此外,/proc/meminfo在任何情况下,在缓慢期间,缓存中几乎没有等待写入的数据;其完整内容可在附录中看到。

在基准测试中禁用写入后,不会出现这种现象,尽管磁盘内部速度似乎出现异常突然下降:

只读基准

(减少的位置是不是取决于花费的时间,而是取决于磁盘上的物理位置,正如其他具有不同样本号的基准测试所示,截止发生在同一位置。)

对系统中其他可能健康的硬盘进行等效基准测试,可以得到预期的常规结果,如下所示:

健康磁盘上的读/写基准

结论/问题:
由此我推断,该问题可能是由某些硬件或固件故障引起的,但也可能是我忽略了许多事情。

出现上述现象的可能原因是什么?我应该采取哪些后续步骤来进一步诊断问题?任何帮助都将不胜感激。

附录:
详细硬件信息(由 输出hdparm -I):

/dev/sdb:

ATA device, with non-removable media
        Model Number:       ST4000DM004-2CV104
        Serial Number:      ZFN3J8RH
        Firmware Revision:  0001
        Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
        Used: unknown (minor revision code 0x006d)
        Supported: 10 9 8 7 6 5
        Likely used: 10
Configuration:
        Logical         max     current
        cylinders       16383   16383
        heads           16      16
        sectors/track   63      63
        --
        CHS current addressable sectors:    16514064
        LBA    user addressable sectors:   268435455
        LBA48  user addressable sectors:  7814037168
        Logical  Sector size:                   512 bytes
        Physical Sector size:                  4096 bytes
        Logical Sector-0 offset:                  0 bytes
        device size with M = 1024*1024:     3815447 MBytes
        device size with M = 1000*1000:     4000787 MBytes (4000 GB)
        cache/buffer size  = unknown
        Form Factor: 3.5 inch
        Nominal Media Rotation Rate: 5425
Capabilities:
        LBA, IORDY(can be disabled)
        Queue depth: 32
        Standby timer values: spec'd by Standard, no device specific minimum
        R/W multiple sector transfer: Max = 16  Current = 16
        Recommended acoustic management value: 208, current value: 208
        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
             Cycle time: min=120ns recommended=120ns
        PIO: pio0 pio1 pio2 pio3 pio4
             Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
        Enabled Supported:
           *    SMART feature set
                Security Mode feature set
           *    Power Management feature set
           *    Write cache
           *    Look-ahead
           *    Host Protected Area feature set
           *    WRITE_BUFFER command
           *    READ_BUFFER command
           *    DOWNLOAD_MICROCODE
                Power-Up In Standby feature set
           *    SET_FEATURES required to spinup after power up
                SET_MAX security extension
           *    48-bit Address feature set
           *    Mandatory FLUSH_CACHE
           *    FLUSH_CACHE_EXT
           *    SMART error logging
           *    SMART self-test
           *    General Purpose Logging feature set
           *    WRITE_{DMA|MULTIPLE}_FUA_EXT
           *    64-bit World wide name
                Write-Read-Verify feature set
           *    WRITE_UNCORRECTABLE_EXT command
           *    {READ,WRITE}_DMA_EXT_GPL commands
           *    Segmented DOWNLOAD_MICROCODE
           *    unknown 119[6]
           *    unknown 119[7]
           *    Gen1 signaling speed (1.5Gb/s)
           *    Gen2 signaling speed (3.0Gb/s)
           *    Gen3 signaling speed (6.0Gb/s)
           *    Native Command Queueing (NCQ)
           *    Host-initiated interface power management
           *    Phy event counters
           *    READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
           *    DMA Setup Auto-Activate optimization
                Device-initiated interface power management
           *    Software settings preservation
                unknown 78[7]
           *    SMART Command Transport (SCT) feature set
           *    SCT Write Same (AC2)
           *    SCT Data Tables (AC5)
                unknown 206[7]
                unknown 206[12] (vendor specific)
                unknown 206[13] (vendor specific)
           *    DOWNLOAD MICROCODE DMA command
Security:
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
                frozen
        not     expired: security count
                supported: enhanced erase
        490min for SECURITY ERASE UNIT. 490min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000c500c6a79fae
        NAA             : 5
        IEEE OUI        : 000c50
        Unique ID       : 0c6a79fae
Checksum: correct

/proc/meminfo在第一次基准测试期间,读写速度较慢时:

MemTotal:       16323712 kB
MemFree:         9894056 kB
MemAvailable:   12815716 kB
Buffers:          138380 kB
Cached:          3038420 kB
SwapCached:            0 kB
Active:          1533040 kB
Inactive:        4396560 kB
Active(anon):       2960 kB
Inactive(anon):  2817480 kB
Active(file):    1530080 kB
Inactive(file):  1579080 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:      17577980 kB
SwapFree:       17577980 kB
Dirty:               176 kB
Writeback:             0 kB
AnonPages:       2752844 kB
Mapped:           694816 kB
Shmem:             73200 kB
KReclaimable:     137092 kB
Slab:             260112 kB
SReclaimable:     137092 kB
SUnreclaim:       123020 kB
KernelStack:       13872 kB
PageTables:        33292 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    25739836 kB
Committed_AS:    9749696 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       76616 kB
VmallocChunk:          0 kB
Percpu:             8128 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      512904 kB
DirectMap2M:     7813120 kB
DirectMap1G:     8388608 kB

答案1

Seagate ST4000DM004 使用小型磁共振将数据写入磁盘表面。这意味着,为了写入单个字节,可能需要重写多个千兆字节

在“正常使用模式”(由硬盘供应商指定,而不是用户指定)下,这不会造成太大的问题 - 数据被写入心脏磁共振缓存在磁盘外缘。稍后,当磁盘使用率下降时,固件会将日期移动到 SMR 带中的最终位置。

当一次写入大量数据时,此 CMR 缓存将被耗尽,并且必须接管 SMR 带的 I/O 过程 - 这会使速度慢几个数量级。

注意:这不是 RAM 缓存 - 它是磁盘表面的一小部分,以 CMR 格式写入(即没有重叠轨道),以使用户不太明显地看到 SMR 的恐怖之处。

答案2

硬盘将数据写入轨道上的扇区中,但是,在不互相干扰的情况下,轨道之间的距离是有限制的。

硬盘供应商意识到,如果放弃传统的随机写入访问模型并按顺序写入大量数据,相邻磁道相互干扰的问题就可以得到缓解。写入的每个磁道都会与上一个磁道略有重叠。这意味着每个盘片上的数据更多,从而意味着更高的容量和/或更低的成本。这就是所谓的“叠瓦式磁记录”(小型磁共振),类似屋顶瓦片的搭接方式。

当然,需要对操作系统进行重大更改的硬盘不会卖得很好。因此他们添加了翻译固件和心脏磁共振缓存区域,这样 SMR 驱动器在操作系统看来就像普通驱动器一样。这与 SSD 供应商已经做的工作​​并无太大不同。

但不同之处在于闪存速度很快,因此即使有转换层,SSD 仍然比 HDD 快得多。另一方面,当 CMR 缓存区域用尽时,SMR HDD 的性能会急剧下降,驱动器必须在缓慢的重写瓦片过程中阻止新的写入操作。

不幸的是,剩下的三家 HDD 供应商都决定,他们发布这项技术的方式是悄悄将其放入产品线中,而不告诉人们。因此,人们无法有意识地选择是否接受性能下降以换取略低的单位存储成本,而是在不知情的情况下收到了这些驱动器。在媒体的压力下,他们最终公布了哪些驱动器型号是 SMR 的信息,但客户仍然不知道。

由于这三家主要的 HDD 供应商都这样做,您不能直接抵制这些罪魁祸首,因此唯一的选择似乎是从现在开始仔细检查您购买的每个硬盘。

奇怪的是,尽管 SMR 背后的最初动机是容量,但似乎最大的驱动器通常仍然是 CMR,而 SMR 主要见于低个位数 TB 的驱动器。

相关内容