Linux

使用 fio 或其他工具模擬一些程序 IO

  • May 21, 2021

有什麼方法可以跟踪特定程序並獲取磁碟 IO 的統計資訊,例如隊列深度、讀/寫執行緒總數、讀/寫百分比等?

主要目標是使用所有這些資訊通過 fio 工具模擬 IO 活動。

或者可能有任何其他方式(工具)來估計哪些硬體可以更好地滿足特定負載?

當然測試是最好的選擇,但對我來說並不完全可用,我無法購買所有可能的硬體。

因此,我必須與購買前已經做出一些假設的產品進行比較。

您可以使用它pidstat -d來獲取每個程序的 IO 統計資訊。-p如果您想獲取特定程序的統計資訊,請使用 - 例如,每秒獲取 java 程序的磁碟統計資訊:

pidstat 1 -d -p $(pgrep java)

用於iostat -x擴展磁碟統計資訊,例如“平均隊列大小”等。

iostat -xmdz 1
...
Device            r/s     rMB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wMB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dMB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
sda              0.00      0.00     0.00   0.00    0.00     0.00    2.00      0.01     1.00  33.33    0.50     6.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.40

另請參閱https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55

請注意,除非您正在執行“原始磁碟 IO”,否則文件系統作業系統層可能會對您的應用程序的性能產生巨大影響 - 例如,Linux 中的頁面記憶體會將文件的最新內容記憶體在記憶體中,因此讀取速度可能會遠高於可能的速度僅通過磁碟。要監控文件系統操作,您可以使用 BPF 工具,如、vfsstatbiolatency等。您還可以測量原始磁碟 IO 速度和“記憶體 IO”速度 - 例如ext4slower``ext4dist``hdparm

root@ubuntu-18:~# hdparm -tT /dev/sda

/dev/sda:
Timing cached reads:   11568 MB in  1.99 seconds = 5807.23 MB/sec
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Timing buffered disk reads: 1682 MB in  3.00 seconds = 560.58 MB/sec

請注意,與“緩衝磁碟讀取”相比,“記憶體讀取”的吞吐量要大得多,接近 6GBs/秒。如果您使用中等大小的雲/AWS 實例,可能會有更大的差異。

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