Linux内核机制—percpu_rwsem

一、相关资料

1. kernel-5.10/Documentation/locking/percpu-rw-semaphore.rst

percpu rw 信号量是一种新的读写信号量设计,针对读取锁定进行了优化。

传统的读写信号量的问题在于,当多个内核读取锁时,包含信号量的cache-line在内核的 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 优化 rw-lock 的想法是由 Eric Dumazet <eric.dumazet@gmail.com>。代码由 Mikulas Patocka <mpatocka@redhat.com> 编写

2. 目前内核中使用的位置还不多

mm/mmu_notifier.c
drivers/bluetooth/hci_uart.h
fs/ext4/ext4.h
include/linux/fs.h
include/linux/mmu_notifier.h
include/linux/cgroup-defs.h

 

补充:

percpu_down_write() 里面竟然使用了RCU!

 

TODO:

posted on   Hello-World3  阅读(1053)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示