我想在一个给定的时间范围内,以编程方式测量一些与磁盘io相关的数字。 这意味着我不想像iostat那样产生一个进程来获得我的数字,比较喜欢从proc或类似的地方读取某些东西。
我需要知道:
如果我只通过磁盘或分区得到这个信息…这更好,因为我不需要知道从proc读取了多less信息。
如果我另外知道这个过程等待IO完成了多less时间…甚至更好。
这是可能的一些IO调用,或通过读取和parsing/ proc文件?
iostat从/proc/diskstats读取 – 我不能告诉你哪个列对应于什么。 这将需要一些调查。 另外,如果你想获得更多关于特定进程的信息, /proc/[processID]包含与进程相关的信息,比如io和mem
文件中的一行如下所示:
8 0 sda 1576985 366566 29817737 8671588 4847477 21489330 210704848 14116392 0 14120880 22772188
从/usr/src/linux-*/Documentation/iostats.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 6 -- # of writes merged See the description of field 2. 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.