librbd代码目录解读

来源:互联网 发布:mac jmeter下载安装 编辑:程序博客网 时间:2024/05/01 05:50

librbd目录中目前有4个文件夹:

  • exclusive_lock,这个目录里主要是将之前的exclusive lock 处理逻辑迁移到async state machines模式
  • image,这个目录主要是将image refresh的处理逻辑迁移到 async state machines模式
  • object_map,(consolidate object map invalidation to new state machine)
  • operation, 这个目录里实现了关于image的主要操作,包括flatten、resize、trim、snapshot create、snapshot remove、snapshot protect、snapshot unprotect、snapshot rename、snapshot rollback

和一些零散的文件,目前先整理出和I/O相关的文件,后期再补充其他的文件说明:

  • librbd.cc,这个文件里并没有具体实现所有的接口,而其实大部分接口的具体实现是在internal.cc,除了I/O相关的接口,read/write。
  • ImageCtx.h和ImageCtx.cc,定义了image的上下文,包括image layout的初始化、卷/snap相关元数据的获取接口以及后来引入的rbd mirror的相关元数据结构(object map、journal 等)的创建。
  • AioImageRequestWQ.h/AioImageRequestWQ.cc、AioImageRequest.h/AioImageRequest.cc,实现了aio相关的I/O接口,进入rbd的read请求会转变成一个AioImageRead的实例,而write请求会变成一个AioImageWrite的对象。而这些对象最终会分别调到AioImageRead.send_request()和AbstractAioImageWrite::send_request()这两个函数,来处理IO请求(其中主路径中关于journal的部分可以先略过去)。下图是这个类的继承关系。

      

  • AioObjectRequest.h/AioObjectRequest.cc,I/O请求会通过Striper::file_to_extents()被影射成针对某个/某些对象的操作,这些操作都被定义/实现在这两个文件中
  • AioCompletion.h/AioCompletion.cc,这两个文件实现了Aio的回调处理逻辑。上层应用可以通过rbd_aio_create_completion()创建一个AioCompletion的对象,并传入自己的回调函数。这样当具体操作结束之后,AioCompletion对象会调用上层应用的回调函数
  • LibrbdWriteback.h/LibrbdWriteback.cc,这两个文件主要是通过现有的ObjectCacher机制,在librbd中支持Writeback这种I/O方式
  • ImageWatcher.h/ImageWatcher.cc,这是后来引入的watch/notify机制,用于增加了管理image exlusive lock的支持
  • Async*.cc/Async*.h,这类文件之后再分析
  • Journal*,这些文件主要实现rbd mirror的功能,后续分析
  • CopyupRequest.h/CopyupRequest.cc,这个主要用于处理clone卷的逻辑,后续分析


0 0
原创粉丝点击