Io
如何計算磁碟 IO 負載百分比?
以下是 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 需要多長時間。