基本硬體資訊:
有問題的硬碟是 Seagate BarraCuda 4TB(型號:ST4000DM004)。有關更多詳細信息,請參閱hdparm -I
最後附錄中的輸出。
問題描述與測試:
從表面上看,這個問題就像是快取了要寫入磁碟的數據,但寫入速度卻比這慢。然而,在這起案件中,事情似乎並沒有那麼簡單。
複製檔案(在 NTFS 檔案系統上):
當寫入相當大量的資料時,驅動器的效能會突然急劇下降。同樣,通常這就像在 RAM 中快取檔案一樣簡單,然後磁碟工作一段時間。然而,在這裡,當監視/proc/meminfo
文件時(在 Ubuntu 下),觀察到的行為似乎並不支援這一點。甚至後寫入資料(大檔案或幾個較小的檔案)並調用sync
,「髒」內存量將繼續減少一段時間,然後幾乎完全停止。還會不斷減少非常慢慢地,直到有時它最終加速。這可以重複,具體取決於剩餘的資料量。當寫入速度降低時,讀取設備也會極為緩慢,sync
如果在「慢速模式」下讀取,即使完成後,讀取設備也會持續一段時間。
這些初始測試是在 Ubuntu 21.10 和 Windows 10 上執行的,具有類似的行為。
Windows 附加說明:
當完成複製操作後磁碟保持緩慢狀態時,我嘗試從磁碟讀取檔案(例如播放視頻,一直滯後),資源監視器和任務管理器都顯示裝置上的磁碟使用率很高(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
答案2
硬碟機將資料寫入磁軌上的磁區中,但是磁軌在不互相干擾的情況下可以放置在多近的位置是有限的。
硬碟供應商意識到,如果他們放棄傳統的隨機寫入存取模型並按順序寫入大面積數據,則可以減輕相鄰磁軌相互幹擾的問題。每首曲目都會與上一首曲目略有重疊。這意味著每個盤片可以容納更多數據,這意味著更高的容量和/或更低的成本。這被稱為「疊瓦磁記錄」(小型反應爐),類比屋頂瓦重疊的方式。
當然,需要對作業系統進行重大更改的硬碟銷售不會很好。所以他們添加了翻譯韌體和CMR快取區域,這樣 SMR 驅動器對於作業系統來說就像是常規驅動器。這與 SSD 供應商已經在做的事情並沒有太大不同。
不同之處在於,雖然快閃記憶體速度很快,所以即使有轉換層,SSD 仍然比 HDD 快得多。另一方面,當 CMR 快取區域耗盡且磁碟機必須在重寫瓦片的緩慢過程中阻止新的寫入操作時,SMR HDD 的效能就會急劇下降。
不幸的是,剩下的三個 HDD 供應商決定他們發布這項技術的方式是在不告訴人們的情況下將其納入產品陣容。因此,人們並沒有能夠有意識地選擇是否接受性能懸崖以換取稍低的單位存儲成本,而是在不知不覺中收到了這些驅動器。在媒體的壓力下,他們最終確實公佈了哪些驅動器型號是SMR的訊息,但對客戶來說仍然不明顯。
由於是三大硬碟廠商幹的,所以你不能只是抵制罪魁禍首,所以看來唯一的選擇就是從現在開始仔細檢查你購買的每一個硬碟。
奇怪的是,儘管 SMR 背後的最初動機是容量,但似乎最大的硬碟通常仍然是 CMR,其中 SMR 主要出現在低個位數 TB 的硬碟上。