2

私の要件は、現在のプロセスのディスク読み取り/書き込み操作を、合計ディスク読み取り/書き込み操作 (または読み取り/書き込みデータ量) でプロファイルすることです。毎秒サンプルを取得し、これら 2 つの間のグラフをプロットする必要があります。これは Linux (Ubuntu 12.10) の c++ で行う必要があります。

このタスクに使用できる API/ツールはありますか? つまり、1つのツールを見つけましiotopたが、現在のプロセスとシステム全体での使用にこれを使用する方法がわかりません。

ありがとうございました

4

1 に答える 1

9

/proc/diskstats毎秒ファイルを読み取ることができます。各行は 1 つのデバイスを表します。

カーネルの「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のようなものを生成するuse を取得できます。

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: ストレージ メディアに読み書きされたバイト数。
  • cancel_write_bytes: 私の理解の限りでは、同じファイルへの保留中の書き込みをキャンセルする「ftruncate」の呼び出しが原因です。おそらくほとんどの場合、0 です。
于 2013-01-25T16:29:15.377 に答える