Ceph RBD:写流程 + 写cache + ObjectDispatch框架

本文结论

  • 写流程
    • rbd_open获取ImageCtx,获取过程中根据配置注册队列、cache、journal等。
    • 使用ImageCtx调用写接口,IO入队。
    • IO出队,抢exclusive-lock。
    • 根据stripe_unit、stripe_num、order配置计算写入的rados对象。
    • 写rados对象。
      • 若打开cache功能,写cache
        • 若能写cache,直接写cache后返回,脏数据后台刷盘。
        • 若不能写cache,依次写journal、写librados后返回。
      • 若未打开cache功能,跳过写cache
        • 若打开journal功能,写journal后继续写librados。
        • 写librados后返回。

写流程

入队

rbd_aio_write
	ImageRequestWQ<I>::aio_write // 执行异步写,这里的ImageRequestWQ,是ImageCtx中已经获取的。
	ImageRequestWQ<I>::queue // 加入队列
		ThreadPool::PointerWQ<ImageDispatchSpec<I> >::queue // 加入线程池中队列
		ThreadPool::PointerWQ<ImageDispatchSpec<I> >::_void_dequeue // 从线程池中出队
	ImageRequestWQ<I>::_void_dequeue // 出队
	ImageRequestWQ<I>::is_lock_required // 判断是否已经获取到锁
		AsyncOperation::start_op
	ImageRequestWQ<I>::process

出队抢exclusive-lock

抢锁流程详见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值