Bee*_*ope 8 linux io performance
我想确定所有进程通过系统调用(例如和)逻辑读取/写入的字节数.这与从存储层实际获取的字节数(由iotop等工具显示)不同,因为它包含(例如)读取页面缓存的读取,并且在识别写入时也有所不同:逻辑写入IO立即发生当调用时,而实际的物理IO可一段时间后,因各种因素出现(通常的Linux缓存写入和做物理IO一段时间后).read()write()write
Mar*_*555 10
如果要将/proc文件系统用于总计数(而不是每秒计数),则非常容易.
这也适用于相当老的内核(在Debian Squeeze 2.6.32内核上测试).
# cat /proc/1979/io
rchar: 111195372883082
wchar: 10424431162257
syscr: 130902776102
syscw: 6236420365
read_bytes: 2839822376960
write_bytes: 803408183296
cancelled_write_bytes: 374812672
Run Code Online (Sandbox Code Playgroud)
对于系统范围,只需对所有进程中的数字求和,但这只能在短期内得到好处,因为当进程死亡时,它们的统计信息将从内存中删除.您需要启用进程记帐才能保存它们.
这些文件的含义记录在内核源文件中Documentation/filesystems/proc.txt:
rchar - I/O计数器:字符读取
此任务导致从存储中读取的字节数.这只是这个进程传递给read()和pread()的字节总和.它包括tty IO之类的东西,它不受是否需要实际物理磁盘IO的影响(可能已从pagecache中读取了读取)
wchar - I/O计数器:写的字符
此任务导致或将导致写入磁盘的字节数.类似的警告同样适用于rchar.
syscr - I/O计数器:读取系统调用
尝试计算读取I/O操作的数量,即read()和pread()等系统调用.
syscw - I/O计数器:写系统调用
尝试计算写入I/O操作的数量,即write()和pwrite()等系统调用.
read_bytes - I/O计数器:读取的字节数
尝试计算此进程确实导致从存储层获取的字节数.在submit_bio()级别完成,因此它对于块支持的文件系统是准确的.
write_bytes - I/O计数器:写入的字节数
尝试计算此进程导致发送到存储层的字节数.这是在页面弄脏的时候完成的.
cancelled_write_bytes
这里的大不准确是截断.如果进程将1MB写入文件然后删除该文件,则实际上不执行写操作.但它会被认为造成了1MB的写入.换句话说:通过截断pagecache,此进程不会发生的字节数.任务也可能导致"负面"IO.
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |