gpt4 book ai didi

c - 如何更改内核 I/O 缓冲区大小

转载 作者:IT王子 更新时间:2023-10-29 00:25:15 24 4
gpt4 key购买 nike

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

我如何知道内核中输入/输出缓冲区的当前大小?内核是否根据需要使用多个缓冲区?我怎样才能改变这个缓冲区的大小?某处是否有存储此信息的配置文件?

(明确地说,我不是在谈论处理器或磁盘缓存,我是在谈论内核内部使用的缓冲区,它在不时将读/写刷新到磁盘之前缓冲读/写)。

提前致谢。

最佳答案

内核并不像你想的那样缓冲读取和写入......它维护一个“页面缓存”来保存来自磁盘的页面。你不能操纵它的大小(好吧,无论如何不能直接操纵);内核将始终使用所有 可用的空闲内存作为页面缓存。

你需要解释你真正想做什么。如果您想控制内核从磁盘预取的数据量,请尝试搜索“linux readahead”。 (提示:blockdev --setra XXX)

如果您想控制内核在将脏页刷新到磁盘之前保留多长时间,请尝试搜索“linux dirty_ratio”。

特定的应用程序也可以使用O_DIRECT 完全绕过页面缓存,并且可以使用fsyncsync_file_range 对其进行一些控制、posix_fadviseposix_madvise。 (O_DIRECTsync_file_range 是特定于 Linux 的;其余的是 POSIX。)

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

关于c - 如何更改内核 I/O 缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044863/

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