"Percpu rw semaphores" 是一种新的读写信号量设计,针对读取操作进行了优化。
传统的读写信号量存在一个问题,即当多个核心获取读取锁时,包含信号量的缓存行在各个核心的 L1 缓存之间反复传输,导致性能下降。
读取锁定非常快速,它使用 RCU,并且在锁定和解锁路径中避免了任何原子指令。另一方面,写入锁定非常昂贵,它调用 synchronize_rcu(),可能需要数百毫秒的时间。
该锁使用 "struct percpu_rw_semaphore" 类型声明。锁通过 percpu_init_rwsem 进行初始化,成功时返回 0,分配失败时返回 -ENOMEM。必须使用 percpu_free_rwsem 释放锁,以避免内存泄漏。
使用 percpu_down_read、percpu_up_read 进行读取锁定,使用 percpu_down_write、percpu_up_write 进行写入锁定。
优化读写锁的 RCU 使用思路由 Eric Dumazet eric.dumazet@gmail.com 提出。代码由 Mikulas Patocka mpatocka@redhat.com 编写。