如何更改内核i/o缓冲区大小

jit*_*hsk 7 c linux io linux-kernel

我正在运行I/O密集型应用程序的一些实验,并试图了解改变内核i/o缓冲区大小,不同电梯算法等的影响.

如何知道内核中i/o缓冲区的当前大小?内核是否在需要时使用多个缓冲区?如何更改此缓冲区的大小?是否存在存储此信息的配置文件?

(要明确的是,我不是在讨论处理器或磁盘缓存,我在谈论内核使用的缓冲区,缓冲读/写,然后再将它们刷新到磁盘).

提前致谢.

Nem*_*emo 9

内核不会以您的思维方式缓冲读取和写入...它维护一个"页面缓存",用于保存磁盘中的页面.你无法操纵它的大小(好吧,不管怎么说); 内核将始终使用所有可用的可用内存用于页面缓存.

你需要解释你真正想做的事情.如果您想控制内核从磁盘预取多少数据,请尝试搜索"linux readahead".(提示:blockdev --setra XXX)

如果你想控制内核在将它们刷新到磁盘之前保存多长时间,请尝试搜索"linux dirty_ratio".

特定的应用程序也可以完全绕过页面缓存使用O_DIRECT,并且它可以使用实行某种控制权fsync,sync_file_range,posix_fadvise,和posix_madvise.(O_DIRECT并且sync_file_range是特定于Linux的;其余的是POSIX.)

如果您首先了解Linux VM子系统,尤其是页面缓存,您将能够提出更好的问题.