使用C ++在Linux中计算磁盘读/写 [英] Calculating Disk Read/Write in Linux with C++

查看:229
本文介绍了使用C ++在Linux中计算磁盘读/写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的要求是使用总磁盘读/写操作(或读/写数据量)来配置当前进程磁盘读/写操作。我需要抽取样本第二和绘制这两者之间的图表。我需要在c ++中的Linux(Ubuntu 12.10)上执行此操作。

My requirement is to profile current process disk read/write operations with total disk read/write operations (or amount of data read/written). I need to take samples evry second and plot a graph between these two. I need to do this on Linux (Ubuntu 12.10) in c++.

有没有任何API /工具可用于此任务?我发现了一个工具, iotop ,但我不知道如何使用这个当前的过程和系统广泛使用。

Are there any APIs/Tools available for this task ? I found one tool namely iotop but I am not sure how to use this for current process vs system wide usage.

谢谢

推荐答案

$ c> / proc / diskstats 每秒。每行代表一个设备。

You can read the file /proc/diskstats every second. Each line represents one device.

从内核的Documentation / iostat.txt:

From kernel's "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 ,生成如下所示的内容:

For each process, you can get use /proc/<pid>/io, which produces something like this:

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.

    • rchar, wchar: number of bytes read/written.
    • syscr, syscw: number of read/write system calls.
    • read_bytes, write_bytes: number of bytes read/written to storage media.
    • cancelled_write_bytes: from the best of my understanding, caused by calls to "ftruncate" that cancel pending writes to the same file. Probably most often 0.
    • 这篇关于使用C ++在Linux中计算磁盘读/写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆