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
- librbd代码目录解读
- 代码解读
- 代码解读
- linux 目录解读
- TOMCAT目录结构解读
- TOMCAT目录结构解读
- 解读 Maven 安装目录
- underscore源码解读 -- 目录
- librbd调用流程--读流程
- 条码打印机代码解读!
- 解读eXtremeComponents代码结构
- FFMPEG框架代码解读
- DiskPerf代码解读
- Android震动代码解读
- LightweightSystem.setContents代码解读
- phpcms v9代码解读
- SEP4020 PWM代码解读
- Cassandra Compaction代码解读
- 探究printf
- 三栏布局的实现
- 关于Node.js你必须要知道的原理性知识
- Flume:本地文件到HDFS
- Cordova(Phonegap)在iOS端App的使用(二)---插件的创建
- librbd代码目录解读
- python 类属性
- Leetcode题解 70. Climbing Stairs
- Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt
- 【Leetcode】1.Two Sum 解题
- 【码上杂谈】关于之前对Server上允许的最大TCP连接数理解错误的更正
- poj 2082 Terrible Sets
- 背包问题
- ZOJ-3802-Easy 2048 Again【状态压缩dp】【位运算】【好题】