linux内核网络中的互斥 “每日读书”

本文介绍了网络代码中常见的几种互斥机制,如回转锁(spinlock)和读写回转锁,以及Linux内核中的读取拷贝更新(RCU)。着重强调了在不同场景下选择合适锁机制的重要性,并以RCU在路由子系统中的应用为例。
摘要由CSDN通过智能技术生成

网络代码中广泛使用上锁本书中每项主题可能都会发现上锁议题对众多程序设计类型而言尤其针对内核程序设计互斥上锁机制以及同步都是一般主题而且相当有趣复杂linux不但引入互斥而且对一些方法做了优化本节总结网络代码所见到上锁机制建议参阅O Relly 出版 深入理解linux内核 linux设备驱动程序深入详尽讨论

每种互斥机制都是特定环境下最佳选择以下网络代码常见互斥方法

回转锁spinlock

这是一种某一时刻只能一个执行线程持有如果试图有另一个线程抢占则会进入循环等待直到被释放由于进入循环造成浪费回转只用于处理器系统而且通常指用在短期等待场景由于引起其他执行线程浪费执行现场在持有回转时候不能休眠

读写 回转

当给定使用可以明确分为只读读写应该先试用/回转回转读写回转差别在于 回转而言多个可以同时持有然而在同一个时刻持有者只能有一个人可以写入同时背斜入者持有时读取都不能取得由于读取者优先级高于写入因此读取者数目远远超过写入数目这种类型很好工作

只读模式下取得的不能直接提升-模式

读取 拷贝 更新 RCU

RCUlinux提供互斥最新机制之一下列特定条件下工作非常好

1 只读锁请求相比-请求很少见

2 持有代码原子形式而且不能休眠

3 保护数据结构通过指针访问的

第一个条件性能, 另外两个则是RCU工作原理基础

注意第一个条件似乎意味着应该使用-回转代替RCU为了了解恰当使用为什么RCU-回转更好需要考虑其他方面比如SMP 系统上处理缓存影响

RCU设计背后工作原理简单而且高效有关RCU优势清晰描述及其实现简述可以参考Paul McKenney 文章

RCU网络代码中使用实例就是路由子系统在缓存查询更新频繁因此实现路由缓存查询函数不会搜索期间堵塞

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值