Io

如何計算磁碟 IO 負載百分比?

  • June 18, 2019

以下是 net-snmp 輸出,如您所見,diskIOLA 不可用:

SNMP table: UCD-DISKIO-MIB::diskIOTable

diskIOIndex diskIODevice diskIONRead diskIONWritten diskIOReads diskIOWrites diskIOLA1 diskIOLA5 diskIOLA15 diskIONReadX diskIONWrittenX

     25          sda   845276160     2882477056      576632     42597061         ?         ?          ?   5140243456    883350772736

根據這裡的定義http://www.net-snmp.org/docs/mibs/ucdDiskIOMIB.html

diskIOLAx表示磁碟的 x 分鐘平均負載 (%)。

表中的其他值是:

  • diskIONRead - 自啟動以來從此設備讀取的字節數。
  • diskIONWritten - 自啟動以來寫入此設備的字節數。
  • diskIOReads - 自啟動以來此設備的讀取訪問次數。
  • diskIOWrites - 自啟動以來對該設備的寫訪問次數

那麼,如何手動計算此負載,因為它不是在伺服器中收集的?

最後,我們希望向使用者顯示圖表,他們可以在哪裡找到磁碟 IO 是否繁重。我們可以使用讀/寫字節/秒或讀/寫請求/秒來顯示它。

如果我們單獨顯示讀/寫請求/秒,我們可以知道正在進行大量 I/O。但我們不知道磁碟 R/W 速度是否受此影響。

並且僅顯示 R/W 速度並不能告訴我們為什麼速度會受到影響——無論是因為 I/O 操作太多還是沒有足夠的緩衝記憶體用於非同步寫入。因此,我們需要同時顯示兩者。

但是,磁碟 IOLoad 的另一個值是什麼意思,我們如何計算它以及為什麼它沒有被收集到 snmp 中。如果啟用它會導致巨大的負載嗎?如果它導致收集這個值的負載很重,那麼我們可以手動計算它。但是,公式是什麼?

您指出的資訊不足以計算磁碟使用率百分比。磁碟使用率 % 計算為disk_time_spent_in_io / elapsed_time

例如,如果您的磁碟在 1 秒內花費 0.25 秒執行 IO,那麼您的磁碟使用率為 25%。

就使用率百分比而言,操作次數毫無意義。根據您的磁碟和您正在執行的 IO 類型(批量與隨機),它可能在 10 IOPS 或 10000 IOPS 時被 100% 使用。唯一知道的方法是磁碟執行這些 IOP 需要多長時間。

引用自:https://unix.stackexchange.com/questions/318274