- 博客(17)
- 收藏
- 关注
原创 FOR UPDATE和LOCK IN SHARE MODE的正交关系
是一种共享锁,它允许其他事务对同一行数据进行读取和共享锁定,但阻止其他事务对同一行数据进行修改或使用。是一种排他锁,它阻止其他事务对同一行数据进行修改或锁定;当一个事务(事务A)对一行数据使用了。当一个事务(事务A)对一行数据使用了。
2024-03-16 15:13:01
635
1
原创 漏桶算法【转载】
假设在某个时刻我们的存储桶为[200,500,400,500,100][ 2 0 0 ,5 0 0 ,4 0 0 ,5 0 0 ,1 0 0 ]。如果许多主机连接到网络并且不断向网络发送突发流量,则可能会导致数据包丢失和意外延迟,从而降低服务质量,并且数据包可能会积压。然后我们想要开发一种算法,假设数据可用,该算法将以统一的速率发送5 Mbps 的数据。是一种流量整形算法,用于通过平均发送到网络的数据速率将突发流量转换为平滑流量。现在,在每次迭代中,我们将传输数据包,以使每个数据包的大小总和不大于泄漏率。
2024-01-05 15:37:53
1927
1
原创 RBD: Exclusive Lock 原理
一种分布式的实现,如果一个LUN配置了排它锁feature,对于一些配置流程:如创建快照、clone等,IO流程:如写IO。客户端会去获取排他锁,防止同时有两个客户端对同一个LUN进行操作。
2023-11-15 14:58:01
704
1
原创 pg lock 与读写锁
由于读流程是同步的,因此整个流程都会持有PG Lock和Read Lock,同步读到数据后,释放Read Lock后,再释放PG Lock。
2023-08-25 21:29:30
354
1
原创 ceph osd 写流程回调梳理
erase第一点是在ReplicatedBackend::do_repop_reply函数中,这个是接收到客户端消息的处理函,也就是从osd写副本后 ,主osd收到从osd的相应,只有在CEPH_OSD_FLAG_ONDISK的时候才会erase。从代码①处的逻辑可以看出,repop_queue起到了保序的作用,即不是每个IO三副本提交了以后马上就回调,而是按照先入先出的原则,如果一个IO不在队列头,不回调,后来的IO如果在队列头,会驱动前面已经all_committed的IO进行回调。
2023-08-25 16:29:06
534
1
原创 ceph osd find_object_context 代码解读
find_object_context是要获取一个对象的上下文,关键的流程在代码中已经进行了解释。
2023-08-17 17:33:27
251
1
原创 osd shard queue
shardedthreadpool_worker是线程的处理函数,最终会调用业务队列的处理函数进行处理,在这里就是。①第四个参数就是上面提到的成员1:ShardedThreadPool,决定了该队列处理线程的个数。该变量在构造函数中进行初始化,其中get_num_op_threads的实现如下。成员2:ShardedOpWQ op_shardedwq,该成员是一个内部类。start_threads函数会去启动num_threads的工作线程。成员1:ShardedThreadPool osd_op_tp。
2023-08-14 20:04:04
409
原创 RBD cache 是否开启的逻辑
在初始化ObjectCacherObjectDispatch的时候,先根据配置项。默认是true,因此默认不开启cache。
2023-07-20 11:15:07
238
1
原创 ceph-csi rbd挂载点的元数据查看方法
在ceph-csi重建之后,需要恢复挂载点的信息,rbd_healer.go会调用相关函数去恢复,以nbd为例,在恢复的时候不会调用map命令,而是调用attach,而attach的时候需要指定设备名称,如/,这些信息就是通过这个元数据而获得的。
2023-05-31 15:05:30
400
1
原创 JuiceFs buildSlice实现
有点类似于二叉树排序树,但是比二插排序树要简单,最终构建出来的结果是:父亲节点的pos大于等于所有左边孩子的pos+length。父亲节点的pos小于等于所有右边边孩子的pos。
2023-05-16 15:09:46
148
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅