使用C ++在Linux中计算磁盘读/写

我的要求是通过总磁盘读/写操作(或读/写数据量)来分析当前进程磁盘读/写操作。 我需要先抽取样品,并在这两者之间绘制图表。 我需要在c ++中的Linux(Ubuntu 12.10)上执行此操作。

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

谢谢

Solutions Collecting From Web of "使用C ++在Linux中计算磁盘读/写"

您可以/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。