User Tools

Site Tools


proc:io_accounting_fields

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
proc:io_accounting_fields [2017/04/06 14:58] – created peterproc:io_accounting_fields [2020/07/15 09:30] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Proc - IO Accounting Fields ====== ====== Proc - IO Accounting Fields ======
 +
 +**/proc/<pid>/io** display the IO accounting fields, which are IO statistics for each running process.
 +
 +<code bash>
 +dd if=/dev/zero of=/tmp/test.dat &
 +[1] 3828
 +
 +
 +cat /proc/3828/io
 +
 +rchar: 323934931
 +wchar: 323929600
 +syscr: 632687
 +syscw: 632675
 +read_bytes: 0
 +write_bytes: 323932160
 +cancelled_write_bytes: 0
 +</code>
 +
 +where:
 +
 +  * **rchar** is count of chars read.  The number of bytes which this task has caused to be read from storage.  This is simply the sum of bytes which this process passed to **read()** and **pread()**.  It includes things like tty IO and it is unaffected by whether or not actual physical disk IO was required (the read might have been satisfied from pagecache)
 +  * **wchar** is count of chars written. The number of bytes which this task has caused, or shall cause to be written to disk. Similar caveats apply here as with **rchar**.
 +  * **syscr** is a count of read syscalls.  Attempt to count the number of read I/O operations, i.e. syscalls like **read()** and **pread()**.
 +  * **syscw** is a count of writen syscalls.  Attempt to count the number of write I/O operations, i.e. syscalls like **write()** and **pwrite()**.
 +  * **read_bytes** is count of bytes read.  Attempt to count the number of bytes which this process really did cause to be fetched from the storage layer.  Done at the **submit_bio()** level, so it is accurate for block-backed filesystems.  TODO:  Add status regarding NFS and CIFS at a later time.
 +  * **write_bytes** is count of bytes written.  Attempt to count the number of bytes which this process caused to be sent to the storage layer.  This is done at **page-dirtying** time.
 +  * **cancelled_write_bytes** The big inaccuracy here is truncate.  If a process writes 1MB to a file and then deletes the file, it will in fact perform no writeout.  But it will have been accounted as having caused 1MB of write.  In other words:  The number of bytes which this process caused to not happen, by truncating pagecache.  A task can cause "negative" IO too.  If this task truncates some dirty pagecache, some IO which another task has been accounted for (in its write_bytes) will not be happening.  We _could_ just subtract that from the truncating task's write_bytes, but there is information loss in doing that.
 +
 +<WRAP warning>
 +**WARNING:**  At its current implementation state, this is a bit racy on 32-bit machines: if process A reads process B's **/proc/pid/io** while process B is updating one of those 64-bit counters, process A could see an intermediate result.
 +
 +More information about this can be found within the taskstats documentation in Documentation/accounting.
 +</WRAP>
  
proc/io_accounting_fields.1491490705.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki