一个关于linux文件预读机制问题
曾经,有人问我这样一个问题:
一个Native 程序 mmap 了一个文件,如果什么都不读 RSS是0,但是读一个字节,RSS就变成64k,这个在哪儿能控制大小?
mmap不同大小,这个读一个字节的申请的物理也不同,貌似跟文件大小有关系,不过这个应该可以配置吧?
其实:
我的回答如下:
读取文件,还与预读机制有关系,在读取文件时,预读机制会多读一些。物理内存以页为单位。 读取文件时,会读取到页高速缓存中。内核代表进程多读取一些,预读机制跟几个参数有关。参见《深入理解linux内核》第三版16.1. Reading and Writing a File、16.1.2. Read-Ahead of Files
struct file_ra_state
open.c (fs): file_ra_state_init(&f->f_ra, f->f_mapping->host->i_mapping);
在sys目录, find . | grep -i read_ahead_kb 可以找到read_ahead的大小配置,与具体块设备有关有关。
blk-sysfs.c
static struct queue_sysfs_entry queue_ra_entry = {
.attr = {.name = "read_ahead_kb", .mode = S_IRUGO | S_IWUSR },
.show = queue_ra_show,
.store = queue_ra_store,
};
更详细的内容请参见我的视频课程:《深入linux内核》
https://edu.51cto.com/course/17155.html
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
转载于:https://blog.51cto.com/8906847/2373742