我正在运行测试来检查磁盘读取统计信息。这是相同的代码:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(int argc, char* argv)
{
int count=1000, size;
char block[4096]="0";
int fd = open("file1.txt",O_RDONLY | O_SYNC);
//int pid = getpid();
system("pid=$(ps -a | grep 'a.out' | awk '{print $1}'); iotop -bokp $pid > test1c.out &");
system("echo 'Starts reading in 10'");
srand(time(NULL));
system("sleep 1");
while(count--){
int random = (rand()%16)*666;
printf("%d;",random);
lseek(fd, random, SEEK_SET);
size = read(fd,block,4096);
printf("Number of bytes read: %d\n", size);
fsync(fd);
//printf("Read 4kb from the file.\n");
}
system("sleep 1");
system("killall iotop");
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在打开一个大文件,获取 a.out 文件的 PID,并将其传递给 iotop。之后我随机查找文件中的 4kb 块并读取数据。
如果您在系统上运行此代码,您会发现 iotop 输出显示 0kb 读取,这是没有意义的。难道我做错了什么?
清除缓存解决了这个问题。我在此页面上找到了清除缓存的脚本:
https://www.howtoing.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
有窍门吗!
| 归档时间: |
|
| 查看次数: |
2311 次 |
| 最近记录: |