知识卡片
mmap减少一次拷贝的原理
内容
用read/write访问文件时,数据要先从磁盘拷贝到内核的Page Cache,再从Page Cache拷贝到应用的用户空间缓冲区,这是两次数据搬运。mmap把文件直接映射进进程的虚拟地址空间后,应用程序像访问内存一样访问文件内容——首次访问触发缺页中断,内核把对应的文件块读入Page Cache并建立页表映射,之后应用直接读写这块内存即视为读写文件本身,省掉了从内核态到用户态那一次显式拷贝。发散:这解释了为什么处理大文件(视频、音频)时mmap往往比read/write更快——省下的不是I/O本身的时间,而是CPU搬运数据的开销,数据量越大这部分开销占比越明显。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》