原文链接 作者 Alexandra (Sasha) Fedorova
关于mmap为什么比系统调用快,作者通过实验进行了验证,通过连续,随机,进行缓存, 不进行缓存,分为4种情况
- 文件连续访问且被缓存
- 文件连续访问且未被缓存
- 文件随机访问且被缓存
- 文件随机访问且未被缓存 实验结果发现出去少数例外,
mmap比系统调用快2-6倍
通过专业的CPU检测工具可以看到 系统调用 60%左右时间 花费在copy_user_enhanced_fast_string 一个复制到用户空间的函数。 mmap 60%左右的时间花费在__memmove_avx_unaligned_erms和36%时间花在设置页面映射的各种操作上
可以看到两种方式用在复制的时间大概都在60%, mmap复制只用了AVX技术结合CPU预取功能,使mmap的确非常快。
AVX for wiki
| |
为什么内核实现不能使用AVX 因为如果这样做了,那么它将必须在每个系统调用中保存和恢复那些寄存器,这将使内核态到用户态变得更加昂贵。 因此,这是Linux内核中的一个有意识的决定.