作業系統本身是否曾導致磁碟讀取速度間歇性變慢?
我注意到我的 CenTOS 5.x 虛擬機上的磁碟讀/寫速度間歇性變慢。
有時 hdparm 會報告:
/dev/sda3: Timing buffered disk reads: 6 MB in 3.03 seconds = 2.04 MB/sec
其他時候,它會報告:
/dev/sda3: Timing buffered disk reads: 80 MB in 3.53 seconds = 22.34 MB/sec
我傾向於懷疑 VMWare 主機系統負擔過重,但在我向 VMWare 管理員提出此問題之前,我想排除可能導致此行為的作業系統特有的任何其他內容。
我可以執行任何其他區域或測試嗎?任何類型的 VM/OS 損壞都會導致這種行為嗎?重建/更換虛擬機有幫助嗎?
根據手冊頁:
-t Perform timings of device reads for benchmark and comparison purposes. For meaningful results, this operation should be repeated 2-3 times on an otherwise inactive system (no other active processes) with at least a couple of megabytes of free memory.
所以,是的,其他過程可能會干擾這些結果。
我可以執行任何其他區域或測試嗎?
查看其他程序是否正在使用磁碟的一種方法是從此處
sysstat
的主網頁下載。Sysstat 當然已經可以從 repo 中獲得,但不幸的是,它不包括檢查它所需的命令。pidstat
EL5 核心從 EL5.4 開始將磁碟記帳向後移植到核心中,但沒有提供使用它的介面,但是一旦你完成了這個,pidstat 就會工作。
然後執行
pidstat -d
命令為磁碟 I/O 生成有用的指標,特別是其他程序對磁碟執行的操作。您還可以使用pidstat -d <interval> <count>
獲取正在使用的磁碟的更實時的爭用指標。任何類型的 VM/OS 損壞都會導致這種行為嗎?
作業系統損壞的可能性很小(我猜系統呼叫被搞砸了)。hdparm 不利用文件系統進行測試,從而消除了該區域的任何減速,包括分解問題。如果您使用 LVM,那麼您可能會碰巧從碎片化的範圍中讀取數據。但是,您的範例並未表明這一點。
虛擬機損壞,以及我猜想的任何遊戲,這歸結為我能想到的一些因素,但可能包括更多:
- 磁碟是什麼圖像格式。
- 數據是如何分配給底層儲存機制的(它本身是一個帶有擴展區的邏輯卷嗎?)
- 如果磁碟控制器內部正在進行 raid 重建或其他一些塊級維護。IE 如果控制器實際上是一個 SAN 進行某種形式的 RAID 重新平衡。
- RAID 中的磁碟故障強制奇偶校驗計算。
- 數據是否在現實中被 FusionIO 等“快速”記憶體、SAN 中的數據記憶體或電池支持的 RAID 卡讀取。
- 底層媒體是否以某種方式對您的儲存進行分層。
- 虛擬機管理程序的磁碟爭用導致您的 I/O 請求排隊時間更長。
- SAN 的磁碟爭用導致 I/O 請求排隊的時間更長(VM 駐留在共享儲存上很常見)。
- 精簡配置的捲具有很高的碎片風險。這如何影響您的測試完全取決於您為精簡配置範圍分配了多少塊。例如,在 linux 的 LVM 精簡配置中,extent 大小預設為 32M,因此在磁碟上傳遞 32M 標記可能會導致額外的尋軌,從而弄亂您的時間。
重建/更換虛擬機有幫助嗎?
我猜是好還是壞。請參閱上述可能有助於/阻礙的環境因素。
歸根結底,如果您在寫入介質的數據流中的任何一點(在您的主機、VM 級別、SAN/控制器級別)使用捲管理軟體或精簡配置軟體,您可以沒有可靠的期望您正在執行的順序讀取確實是順序的,或者您正在寫入的媒體是一致的(如果它是一個快速磁碟或數據被移動到一個慢速磁碟)。
虛擬化之所以如此強大,是因為它為主機添加了一層邏輯抽象。但是,由於該抽象層,對它們執行任何可靠程度的容量管理也可能是可怕的。