BRPC与UCX集成指南
BRPC简介 ●Channel类 –代表一个连接,Client通过Channel发 送请求和接收应答 ●Server类 –代表一个服务器,可以注册不同的 接口服务,例如上面的EchoService6 BRPC SERVER7 BRPC SERVER8 BRPC client9 BRPC EndPoint EndPoint是一个代表通讯地址的数据结构, 是一个C++类。 字段: ip,port ●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 –消息异步发送 ●Tag –MPI使用 ●Stream –官方不推荐30 WORKER 应用应开启busy poll。323334 BRPC怎么指定使用UCX?35 修改 BRPC ChannelOptions 增加字段:36 BRPC的Server开启RDMA server类有如下成员函数, 如何指定开启ucx连接?37 修改 BRPC ServerOptions ●ServerOptions添加成员 ●当前取舍的:TCP总是可用的, UCX作为选项38 Ucp Context0 码力 | 66 页 | 16.29 MB | 5 月前3CurveFS方案设计
元数据管理的雏形,具备了基本的元数据管理功能。(当时为什么要设计为 namespace 的管理形式?留有租户这个概念),直接基于 namespace 开发: a. 功能 软/硬链接:目前是都不支持的。软链接可以通过标识文件类型解决;由于 prefix + parentid + filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 检查目的节点的父节点中是否有同名文件存在: 存在 若源节点类型为TYPE_DIRECTORY则对源节点目录下的所有子文件进行快照 若源节点类型为TYPE_FILE则开始比较源节点与目的节点的 inode 是否相同,若完全一样则说明目的节点已经是源节点的快照了不需要做任何处理, 否则删除目的节点,再创建新的 dentry 指向源节点的 inode 若源节点类型为TYPE_SYMLINK,重新设置目的节点与源节点保持一致 若源节点type= TYPE_DIRECTORY,递归创建源节点目录下的所有子文件进行快照 若源节点type= TYPE_FILE,则设置length、chunks使其与源节点的对应属性一致 若源节点类型为TYPE_SYMLINK,设置目的节点的path与源节点保持一致 为 dentry 中对应chunk添加一个快照结构 flist 表示该chunk新关联了一个fsnode© XXX Page 8 of0 码力 | 14 页 | 619.32 KB | 5 月前3CurveFS S3数据整理(合并碎片、清理冗余)
试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息, 获取不到就退出; 不是s3类型的inode退出 对于每一个s3类型的inode来说, 对每一个index内的chunkinfo按照chunkid升序排序. 对于一个chunk来说,chunkinfo数量大于20即进行处理 计算变更 - 记录整个chunk最大的chunkid0 码力 | 3 页 | 101.58 KB | 5 月前3CurveFS ChunkID持久化
AllocateS3ChunkResponse 的状态码的类型为 FSStatusCode; proto/space.proto/service SpaceAllocService中的 rpc AllocateS3Chunk 复制到 proto/space.proto/service/MdsService中; curvefs/src/mds/mds_services.h MdsServiceImp类中增加 AllocateS3Chunk AllocateS3Chunk 实现; curvefs/src/mds/mds_services.h MdsServiceImp类中增加 ChunkIDGenerator 类对象,方法 AllocateS3Chunk 调用 ChunkIDGenerator对象的GenChunkID方法; ChunkIDGenerator 类 构造函数 初始化 init 函数:用于初始化或者更改 ChunkIdAllocatorImpl 的0 码力 | 3 页 | 79.38 KB | 5 月前3CurveFS Copyset与FS对应关系
态,新创建的 文件和目录,会导致copyset管理的元数据越来越多;如果copyset管理的Inode分配完了,转为readonly状态,随着文件和目录的删除,copyset管理的元数据会越来越少。类chubaofs方案的均衡问题如何解决? CopySetScheduler: copyset均衡调度器。根据集群中copyset的分布情况生成copyset迁移任务; LeaderScheduler: com/opencurve/curve/pull/495 增加copyset.proto 增加heartbeat.proto 增加topology.proto 8、inode和dentry的内存估算 类型 byte sizeof(dentry) 56 dentry的name字段,按照最大估算 256 sizeof(inode) 112 sizeof(volumeExtentList) 48 inode大小: 空的inode占用112 + 48 + 48 = 208B; 目录类型的inode占用208B; link类型的inode最大占用208 + 256 = 464B; volume file类型的inode,按照1w条extent估算,占用内存208 + 10000*56 = 560208B; s3 类型的inode,按照1w条s3info估算,占用内存208 + 10000*640 码力 | 19 页 | 383.29 KB | 5 月前3Curve文件系统元数据管理
(n)复杂度。 c++ stl unordered_map moose,使用c实现 4、curve文件系统的元数据内存组织 curve文件系统元数据主要有3个类型,inode, dentry, 。 extent 4.1 inode定义: inode定义见:curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 5 of 24 typedef 400 200 + E → 300 0 + B → 200 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink /B/E,指向文件/A/C 1、client给server0发送请求: 缓存可以在挂载文件系统的时候缓存在client端。不缓存具体的Inode的结构体,仅仅缓存(inodeid, partitionid)的映射,如果inodeid为uint64类型,partitionid为uint64_t类型,那么一条记录需要16字节。一个文件系统按照10亿的元数据统计,10亿 * 16字节 = 1.5GB,全部缓存到内存需要1.5GB的内存。除了缓存需要占用的内存资源之外,如果涉0 码力 | 24 页 | 204.67 KB | 5 月前3Open Flags 调研
flags的含义 libfuse open open flags 在curvefs上的测试 open flags 实现方式 整体flags支持方案 具体flag的实现方案 O_TRUNC I/O模式类 O_DIRECT O_SYNC, O_DSYNC O_NONBLOCK(O_NDELAY ), FASYNC, O_TMPFILE 结论 参考文献 open接口原型 # man page open )中指向这个打开的文件。打开的文件描述符记录中保存着文件的offset 和 文件status。 每个进程都有个 task_struct 描述符用来描述进程相关的信息,其中有个 files_struct 类型的 files 字段,里面有个保存了当前进程所有已打开文件 描述符的数组,而通过 fd 就可以找到具体的文件描述符:© XXX Page 3 of 23 open & openat 系统调用的区别 root@pubbeta1-nostest2:/tmp/fsmount# echo "aaa" > f root@pubbeta1-nostest2:/tmp/fsmount# cat f aaa I/O模式类 O_DIRECT, O_SYNC, O_DSYNC, FASYNC, O_NONBLOCK(O_NDELAY ),这类flags应该是内核进行了支持,在用户态文件系统中进行相应设置,例如O_DIR0 码力 | 23 页 | 524.47 KB | 5 月前3Curve质量监控与运维 - 网易数帆
设计方法 500+用例 异常测试 40+自动化用例 混沌测试 20轮自动化随机故障注入 12/33单元测试 单元测试是软件开发的过程中最基本的测试,它用来对一个模块、一个函数或者一个类来进行 正确性检验的测试工作。 curve通过lcov统计代码覆盖率,衡量单元测试的完备程度,如下图所示: 13/33集成测试 测试目的 测试内容 单元测试后,有必要进行集成测试,发现 并排除在模块连接中可能发生的上述问题, 20/33监控指标(metric)的生成 Curve使用brpc内置的bvar计数器类库,来生成监控指标,其特点是: thread local存储,减少了cache bouncing,性能开销极小; 支持在 brpc server 服务的端口上以web portal的方式导出和查询监控指标: 常用的bvar数据类型: bvar::Adder: 计数器,默认0, varname 0 码力 | 33 页 | 2.64 MB | 5 月前3Curve文件系统元数据持久化方案设计
checksum | +------+------------+-----+----------------+---------+----------+ 字段 字节数 说明 type 1 操作类型,共有以下 2 类: SET (0X01):ADD 和 UPDATE 都可以转换成 SET 操作 DEL (0X02):当为 DEL 操作时,value_length 和 value 则为空 key_length0 码力 | 12 页 | 384.47 KB | 5 月前3PFS SPDK: Storage Performance Development Kit
●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系统元数据的操作非常少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 int fd, off_t offset, size_t max_count) ●这个函数的实现是按PRP的规定来做的 ●IOPortal就是IOBuf,是BRPC存放数据的类 ●CurveBS 使用brpc::Controller 的attachment 发送数据 ●attachment是一个IOBuf ●IOBuf直接通过rdma发送出去 ●以上过程在读chun0 码力 | 23 页 | 4.21 MB | 5 月前3
共 20 条
- 1
- 2