比较 内核 读写锁与顺序锁, RCU

news/2024/7/23 20:07:40 标签: kernel

读写锁与顺序锁, RCU

自旋锁读写锁范式 悲观顺序锁范式 乐观RCU 理智礼让沟通 j
哲学比较悲观,假设最坏情况, 认为读时有人写,读写冲突大比较乐观,假设最好情况,认为读时没人写。 读写冲突小。理智派。综合二者优缺点。认为读时,有人写,但是写比较理智礼让,会等待读完成。
读写冲突的读写有等待读写有等待读写无等待写,回退读无等待读,有限等待写
读时机[now, ∞)[now, ∞) after write[now, ∞) after write and retry
可无限等待
等待读期间的写完成 and retry
now
写时机
写忙等时间范围
[now, ∞)[now, ∞)now[now, grace period] 有限等待
等待写期间 [rcu_assign_pointer] grace preriod的读完成,无retry。
这里通过时序图来表达比较好。
读并发
读写优先级读=写读=写写>读读>写
副作用读回退。死锁。有优先级,就有死锁可能(优先级反转,高优先级读写的却在 低优先级的进程里,通过禁止抢占解决),高优先(写)的必须要禁止抢占,果然write_seqcount_begin 有 preempt_disable,因需写写互斥,就进一步升级为 spin_lock()死锁,高优先级(读)必须要禁止抢占。果然 rcu_read_lock 里有 preempt_disable。禁止抢占,免得进程被调度走,解决优先级反转的问题。
优化场景读并发读并发,写>读读并发,读>写
优点相比自旋锁,读并发,写独占。相比自旋锁,读并发,写独占。
无等待读写,但是读可能回退。
缺点无法保证读优先。写饥饿。频繁写,性能更差
读多写少,且要优先保证读性能!读多写少,且优先级 写>读。要优先保证写性能!
场景举例
并发读时的写性能
频繁读,写极少
写性能差。写要等待读完成。频繁读时,写很慢。保证写性能,写能无等待完成。
并发读时的写性能
频繁写
最差情况
退化为自旋锁造成频繁的读回退,性能比自旋锁还差。
readwrite_lock

write_unlock
do {
seqnum = read_seqcount_begin(&seqcount);

} while (read_seqcount_retry(&seqcount, seqnum));
rcu_read_lock (=preempt_disable)
old_ptr=rcu_dereference§ // 保存旧指针
进行读访问
rcu_read_unlock (=preempt_enable)
writeread_lock

read_unlock
write_seqcount_begin(&seqcount);

write_seqcount_end(&seqcount);
… Read Copy Update
rcu_assign_pointer(ptr, new_ptr);
synchronize_rcu()
free(old_ptr)

http://www.niftyadmin.cn/n/2870.html

相关文章

实验二 数据选择器的设计与vivado集成开发环境【Verilog】

实验二 数据选择器的设计与vivado集成开发环境【Verilog】前言实验二 数据选择器的设计与vivado集成开发环境一、实验目的二、实验环境三、实验任务四、实验原理五、实验步骤六、实验思考vivado开发设计流程文档工程创建添加源文件下板Code资料最后前言 以下内容源自Verilog实…

C · 初阶 | 循环语句

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

使用微服务实现多设备自动调度

在实现app自动化过程中,有时候我们需要将多个手机中的任务,按照某种规则进行调度,这时仅仅使用移动端的脚本就无法完成了,需要配合使用微服务来完成。下面就举个例子来实际说明如何使用。 需求 假设我们有100台手机做任务&#…

PromQL基础语法(上)-数据类型、时序选择器、二元操作符【prometheus查询语句】

文章目录1. 数据类型1.1 Gauge(仪表盘)1.2 Counter(计数器)1.3 HIstogram(直方图)1.4 Summary(摘要)2. 时序选择器2.1 瞬时向量选择器2.2 区间向量选择器2.3 偏移修饰器- 瞬时向量的…

计算机毕业设计(附源码)python音蕾心动

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

信息竞赛(NOI)如何高效刷题 建议刷题历程

信息学竞赛刷题建议历程 信息学竞赛刷题建议历程_PYL2077的博客-CSDN博客_信息学奥赛提高组省一刷题攻略 https://blog.csdn.net/ykw_cnyali/artice/details/70227630 信息学竞赛刷题建议历程_Adam710的博客-CSDN博客 如何准备信息学算法竞赛? ——我是如何赢得美…

JdbcTemplate

1、什么是 JdbcTemplate &#xff08;1&#xff09;Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 2、准备工作 &#xff08;1&#xff09;引入相关 jar 包 &#xff08;2&#xff09;在 spring 配置文件配置数据库连接池 <!-- 数据…

请问swat输出的是有机氮、 有机磷、 硝态氮等,但目前只有总磷、总氮和氨氮的数据,该怎么率定呢?

受全球环境变化和经济快速发展的影响&#xff0c;面源污染已逐渐成为水环境污染的第一因素。但面源污染由于具有排放分散、隐蔽&#xff0c;排污随机、不确定、不易监测等特点&#xff0c;再加上单位面积上的污染负荷小&#xff0c;人们往往忽视其宏观效应。因此&#xff0c;打…