mmap_lock 进化史
演进史
当前节点是 6.13-rc7 版本内核。
名字变更
mmap_lock
一开始并不叫这个名字,它原名是 mmap_sem
,在 5.8-rc1 版本中合并了一个修改,将其名改为 mmap_lock
:
这里其实不仅仅是更名,而是将之前 mmap_sem
的加解锁封装起来,提供一个新的 API 来加解锁。之前的加锁的做法是直接调用down_write(&mm->mmap_sem)
,而这个讨论提供了新的 API:
这样做的目的有两个:
- 提供一个接口来对
mmap_sem
做一些事情,譬如发现加锁慢了,那我就可以直接在这个接口中做调试,而不用在读写锁的代码中调试;或者如果我要在加解锁mmap_sem
之前或之后做一些事情,就会方便很多。 mmap_sem
这把锁太大了,做性能优化的朋友可能会经常遇到这把锁竞争耗时严重,导致卡顿/延时等问题,未来这把锁可能会换种实现方式,不一定会使用读写信号量了,所以这里也把mmap_sem
换成mmap_lock
,算是优化mmap_sem
工作的一部分吧。