【发布时间】:2010-07-26 12:34:41
【问题描述】:
我想了解以下问题:
一个进程在一个无限循环中只做写系统调用。当我提出 iotop 时,我希望看到与该过程相关的非零写入速度和零读取速度。但是 iotop 告诉 read 和 write 可以相等(取决于单个写入大小)。看一下C代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#define BUFSIZE 1000000
char buf[BUFSIZE];
const int write_size = 4000;
int main(){
int fd;
if ((fd = open("filename", O_RDWR | O_CREAT, 0666)) < 0){
return -1;
}
ssize_t ret;
while (1){
ret = write(fd, buf, write_size);
if (ret != write_size){
return -1;
}
}
return 0;
}
如果您为“write_size”分配不同的值,您将在 iotop 中看到不同的读取速度。如果值和上面的代码一样,iotop 显示 read 和 write 是相等的。
重要:
该问题仅在特定条件下出现:
- 在运行代码之前,必须创建文件并填充数据(假设至少 8GB)
操作系统配置:
Debian lenny,2TB 磁盘,(xfs 和 ext4 都经过测试),
unname -a
Linux g-6 2.6.26-bpo.1-xen-amd64 #1 SMP Mon Jan 12 14:32:40 UTC 2009 x86_64 GNU/Linux
提前感谢您解开谜团,
迈克尔。
【问题讨论】:
-
这个问题的好文章!我希望每个新手都能写得这么好,并且在描述他们的问题时透彻。欢迎来到本站!