我正在进行一些与I/O密集型应用程序相关的实验,并尝试了解变化内核i/o缓冲区大小、不同电梯算法等的影响。如何知道内核中当前i/o缓冲区的大小?内核是否会根据需要使用多个缓冲区?我该如何更改此缓冲区的大小?是否有一个存储此信息的配置文件?(明确一点,我不是在谈论处理器或磁盘缓存,我是在谈论内核在将读/写缓冲到磁盘之前内部使用的缓冲区)。谢谢您的帮助。
blockdev --setra XXX
)O_DIRECT
完全绕过页面缓存,并且可以使用fsync
、sync_file_range
、posix_fadvise
和posix_madvise
来对其进行某些控制。 (O_DIRECT
和sync_file_range
是仅限于Linux的; 其余是POSIX。)我想你是指磁盘IO队列。例如:
$ cat /sys/block/sda/queue/nr_requests
128
$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
cfq
是最常见的选择,但在具有先进磁盘控制器和虚拟客户机系统中,noop
也是一个非常好的选择。
据我所知,没有针对此信息的配置文件。在需要更改队列设置的系统上,我将更改内容放入 /etc/rc.local 中,尽管您也可以使用完整的 init 脚本,并将其放入 RPM 或 DEB 中以进行大规模分发到许多系统中。