gpt4 book ai didi

c - 如何编写 I/O 绑定(bind) C 程序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:02 25 4
gpt4 key购买 nike

我必须编写受 I/O 限制的程序,这将使我的 I/O 调度程序以前所未有的方式工作,这是操作系统作业,但我不知道如何去做。我已经尝试编写一个简单的 C 程序来计算大文本文件的行数,但它执行得太快,我无法用它来衡量我的调度程序的有效性。这占我成绩的 25%,如有任何帮助,我们将不胜感激。

最佳答案

从我的测试来看,之前的答案似乎比 I/O 绑定(bind)更多的 CPU 绑定(bind)。

我建议打开许多文件并使用低级非缓存 C 例程在每个文件中疯狂地查找。这是执行查找的 C 代码:

#define _GNU_SOURCE

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char **argv) {

if (argc != 2) {
fprintf(stderr, "specify a file to read!\n");
return EXIT_FAILURE;
}

int fd = open(argv[1], O_DIRECT);
if (fd < 0) {
perror("open error");
return EXIT_FAILURE;
}

off_t size = lseek(fd, 0, SEEK_END);

for (int i = 0; i < 1000000; i++)
lseek(fd, rand() % size, SEEK_SET);

close(fd);

return EXIT_SUCCESS;
}

然后,在 shell 中,通过查找文件系统中的每个文件运行它:

find / -exec ./io_bound {} \; 2>/dev/null

在我的系统上它运行良好,可以发现 rcu_sched 任务:

top - 20:44:48 up 57 min,  1 user,  load average: 0.84, 0.76, 0.59
Tasks: 266 total, 2 running, 264 sleeping, 0 stopped, 0 zombie
%Cpu0 : 10.0 us, 11.3 sy, 0.0 ni, 78.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 10.3 us, 8.3 sy, 0.0 ni, 81.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 15.3 us, 15.9 sy, 0.0 ni, 68.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 16.4 us, 14.7 sy, 0.0 ni, 68.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16314192 total, 9431208 free, 3312716 used, 3570268 buff/cache
KiB Swap: 15624188 total, 15624188 free, 0 used. 12630464 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13087 gluckf 20 0 4224 784 708 R 3.3 0.0 0:00.10 io_bound
7 root 20 0 0 0 0 S 0.3 0.0 0:03.54 rcu_sched
1586 root 20 0 455832 74824 62736 S 0.3 0.5 0:41.49 Xorg
2160 gluckf 20 0 1389916 137096 52548 S 0.3 0.8 0:41.27 cinnamon
2285 gluckf 20 0 498388 46752 28632 S 0.3 0.3 0:14.15 gnome-term+

关于c - 如何编写 I/O 绑定(bind) C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40097059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com