1. mmap 与 read/write 在页缓存利用与数据复制次数上的性能差异从何而来?
mmap 与 read/write 在页缓存利用与数据复制次数上的性能差异从何而来?
- 理解 read/write 的用户态复制
- 理解数据复制次数差异
- 理解页缓存共享
mmap 将文件页直接映射到进程地址空间,通过缺页机制按需加载页,访问时由 CPU 直接操作页缓存中的页,无需在用户态与内核态之间复制数据(仅一次页表建立,缺页时从磁盘读入页缓存)。read/write 每次调用都需将数据从内核页缓存复制到用户缓冲区(read)或从用户缓冲区复制到内核(write),即存在一次用户态<->内核态的数据拷贝。因此 mmap 在"读改写"场景减少一次复制,且页缓存可被多个进程共享(MAP_SHARED),减少重复读盘。差异来源:复制次数(mmap 零拷贝 vs read/write 一次拷贝)与页缓存共享。mmap 的缺页开销(page fault)与地址空间管理是其代价,随机小读写时 read/write 可能更优。
核心差异是"是否经过用户态缓冲区复制"。mmap 直接映射页缓存,减少拷贝并支持共享;read/write 必须复制。但 mmap 有缺页与 TLB 开销,需按访问模式权衡。