簡體   English   中英

使用C ++在Linux中計算磁盤讀/寫

[英]Calculating Disk Read/Write in Linux with C++

我的要求是使用總磁盤讀/寫操作(或讀/寫的數據量)來分析當前進程磁盤的讀/寫操作。 我需要第二次取樣並在這兩者之間繪制圖表。 我需要在c ++中的Linux(Ubuntu 12.10)上執行此操作。

是否有任何API /工具可用於此任務? 我找到了一個工具iotop但是我不確定如何在當前進程和系統范圍內使用該工具。

謝謝

您可以/proc/diskstats讀取文件/proc/diskstats 每行代表一個設備。

從內核的“ Documentation / iostat.txt”中:

Field  1 -- # of reads completed
    This is the total number of reads completed successfully.
Field  2 -- # of reads merged, field 6 -- # of writes merged
    Reads and writes which are adjacent to each other may be merged for
    efficiency.  Thus two 4K reads may become one 8K read before it is
    ultimately handed to the disk, and so it will be counted (and queued)
    as only one I/O.  This field lets you know how often this was done.
Field  3 -- # of sectors read
    This is the total number of sectors read successfully.
Field  4 -- # of milliseconds spent reading
    This is the total number of milliseconds spent by all reads (as
    measured from __make_request() to end_that_request_last()).
Field  5 -- # of writes completed
    This is the total number of writes completed successfully.
Field  7 -- # of sectors written
    This is the total number of sectors written successfully.
Field  8 -- # of milliseconds spent writing
    This is the total number of milliseconds spent by all writes (as
    measured from __make_request() to end_that_request_last()).
Field  9 -- # of I/Os currently in progress
    The only field that should go to zero. Incremented as requests are
    given to appropriate struct request_queue and decremented as they finish.
Field 10 -- # of milliseconds spent doing I/Os
    This field increases so long as field 9 is nonzero.
Field 11 -- weighted # of milliseconds spent doing I/Os
    This field is incremented at each I/O start, I/O completion, I/O
    merge, or read of these stats by the number of I/Os in progress
    (field 9) times the number of milliseconds spent doing I/O since the
    last update of this field.  This can provide an easy measure of both
    I/O completion time and the backlog that may be accumulating.

對於每個進程,您都可以使用/proc/<pid>/io ,它會生成如下內容:

rchar: 2012
wchar: 0
syscr: 7
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
  • rchar,wchar:讀取/寫入的字節數。
  • syscr,syscw:讀/寫系統調用的數量。
  • read_bytes,write_bytes:讀取/寫入存儲介質的字節數。
  • cancelled_write_bytes:據我所知,是由於調用“ ftruncate”導致取消了對同一文件的未決寫操作。 可能最經常為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM