Linux
磁碟 IOPS 和 sar tps 的關係
我正在嘗試估計在 32 位 CentOS 6.2 上執行的應用程序的 IOPS 要求。我開始在帶有 SATA 磁碟的機器上進行一些測量,但我對 sar 測量的 IOPS 和 tps 之間的差異感到非常困惑。
根據維基百科SATA 磁碟應該執行 75-100 IOPS。ioping 實用程序似乎為隨機訪問測試證實了這一點:
# ./ioping -R /dev/sda --- /dev/sda (device 931.0 Gb) ioping statistics --- 279 requests completed in 3.0 s, 92 iops, 371.3 kb/s min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms
但是 sar 產生的 tps 值要高得多(/dev/sda):
# iostat 1 avg-cpu: %user %nice %system %iowait %steal %idle 0.17 0.00 2.02 14.86 0.00 82.96 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 559.00 0.00 142600.00 0 142600 dm-0 18433.00 0.00 147464.00 0 147464 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
它並不介意這種載入是順序的(具有各種塊大小的dd)還是隨機訪問(ioping),值仍然相同。我認為 tps 實際上是 IOPS,我希望它會隨著更大的塊傳輸而下降。
那麼 tps 值究竟是什麼意思呢?它與 IOPS 有什麼關係?
事務是寫入 RAW 磁碟(在您的範例 dm-0 中)的單個 IO 命令(獲取塊/寫入塊)。linux-kernel 嘗試將這些命令排序為更好的序列或嘗試將它們壓縮為更有效的命令(例如:一次獲取兩個塊,而不是獲取一個塊並在此塊之後立即獲取另一個塊)。這些是發送到磁碟控制器(sda 的 tps)的事務。
好的控制器可能有自己的邏輯,可以進一步減少實際交易數量。
事務可能是 SCSI 命令“從扇區 22 開始向 crontoller 1 目標 2 lun 3 寫入 2 GB)。正如您所見,這不能與吞吐量數直接相關。
你所追求的是持續的寫入率。這裡有幾個限制因素:
- 客戶端連接:如果網路是千兆的,你的輸入永遠不會超過 100 MB/s
- 磁碟控制器:如果這是一個 3 Gb 控制器,您的吞吐量將永遠不會超過 300 MB/s
- 磁碟:查找製造商對持續寫入性能的價值
- 文件系統:有一點成本,因為作業系統需要處理數據 - 在 RAM 磁碟中測試…
我對您的系統的猜測是:獲得一個能夠執行 10 或 5 次 RAID 並獲得至少 6 個快速 (15k) 磁碟的良好硬體 RAID 控制器。
對於專業用途,請使用 SAS 而不是 SATA。