Linux

作業系統本身是否曾導致磁碟讀取速度間歇性變慢?

  • July 27, 2012

我注意到我的 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/控制器級別)使用捲管理軟體或精簡配置軟體,您可以沒有可靠的期望您正在執行的順序讀取確實是順序的,或者您正在寫入的媒體是一致的(如果它是一個快速磁碟或數據被移動到一個慢速磁碟)。

虛擬化之所以如此強大,是因為它為主機添加了一層邏輯抽象。但是,由於該抽象層,對它們執行任何可靠程度的容量管理也可能是可怕的。

引用自:https://serverfault.com/questions/411982