【Ceph】AsyncMessenger 简析 II/III

目录

AsyncMessenger 简析 II

EventCenter

file events

external events

AsyncMessenger 简析 III

RDMAStack IO路径

Send IO

Receive IO


AsyncMessenger 简析 II

在IO栈的优化中,同步改异步是很常用的一种方法,往往可以提高系统的吞吐率,Ceph Messenger就是利用Linux的阻塞异步IO机制,以及自身设计的队列结构来实现对Event的异步处理,进而获取了比Simple Messenger优越很多的性能。

Ceph的异步机制根据EventCenter::EventDriver的不同实例可以使用几种模型,本文讨论的是基于epoll机制的Ceph Async + RDMAStack下的IO路径

EventCenter


Ceph Async机制的核心即是EventCenter,下图简述了EventCenter对这一机制的实现


在Async机制中,Ceph Msg模块将所有的异步事件分为两类:

  1. handler固定、”定点”执行的file_event,通常用于频繁执行的routine,
  2. handler形式多样但”顺便”执行的external_event

file events(与fd绑定)

file events的核心结构是EventCenter::vector<> file_events,该vector以fd为索引封装了一组FileEvents实例,每个FileEvents实例都包含两个handler:

1)readcb用于处理fd可读,

2)writecb用于fd可写。

系统通过create_file_event()将fd及其handler注册到file_events。最终,所有的file_events注册的fd都会通过epoll_ctl()将其注册到内核(epoll),并通过在Worker中调用epoll_wait()来实现异步阻塞IO

external events (与fd无关)--->绑定pipe

相比于file_events与特定的fd绑定,external events要自由的多,external_events就是一个EventCallback的deque,使用方式与fd无关, 所以只要EventCallback及其子类的实例,都可以在需要的时候注册到其中以此让Worker线程执行之。值得注意的是,在Ceph的设计中,file event和external event并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值