CurveFS rename 接口实现方案
© XXX Page 1 of 15 rename 接口实现方案(已实现,选用方案二)© XXX Page 2 of 15 1. 2. 3. 4. 1. 2. 1. 3. 1. 2. 背景 方案调研 Chubaofs Juicefs 方案实现 方案一:chubaofs 方案二:事务方案 方案三:利用 KV 自带的分布式事务 Q&A 1 2:rename A→C (A 存在,而 C 存在) 4. 当 2 个操作的 dentry 属于同一个 copyset 有什么不一样? 背景 当前 curvefs 并没有实现 rename 接口,本文档是对 rename 接口实现的调研及方案设计。 rename 操作,主要操作的是 dentry,如 rename /dir1/file1 /dir2/file2,主要有 2 个步骤:(1) 删除 file1 file1 的 dentry,(2) 增加 file2 的 dentry(该 dentry 的 inodeid 等同 file1 的 inode id)。 关于 rename 接口的实现,主要调研了 chubaofs 和 juicefs,而 rename 的实现难点主要在于其原子性的保证。 方案调研 Chubaofs chubaofs 中的 rename 实现不是原子性的,它是通 用创建源文件的硬0 码力 | 15 页 | 555.93 KB | 5 月前3添加测试服务
0 码力 | 1 页 | 128.00 B | 5 月前3Curve文件系统元数据Proto(接口定义)
© XXX Page 1 of 15 curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 2 of 15 1、代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。 2、文件系统proto定义 2.1 mds.proto0 码力 | 15 页 | 80.33 KB | 5 月前3TiDB中文技术文档
RC1 1.1 Beta 1.1 Alpha 1.0 Pre-GA RC4 RC3 RC2 RC1 TiDB 路线图 性能测试 TiDB Sysbench 性能测试报告 - v1.0.0 TiDB TPC-H 50G 性能测试报告 - v2.0 TiDB Sysbench 性能对比测试报告 - v2.0.0 对比 v1.0.0 - 5 - 本文档使用 书栈(BookStack.CN) 构建 致谢 当前文档 统计信息的导出接口为: 1. http://${tidb-server-ip}:${tidb-server-status-port}/stats/dump/${db_name}/${table_name} 2. > 通过该接口可以获取数据库 `${db_name}` 中的表 `${table_name}` 的 json 格式的统计信息。 导入的统计信息一般是通过统计信息导出接口得到的 json 文件。 文档内部的字段建立索引。基于此,用户可以很灵 活地处理那些 schema 不确定的业务,同时不必受限于传统文档数据库糟糕的读性能及匮乏的事务支持。 TiDB 的 JSON 主要参考了 MySQL 5.7 的用户接口。例如,可以创建一个表,包含一个 JSON 字段来存储那些复 杂的信息: 1. CREATE TABLE person ( 2. id INT NOT NULL AUTO_INCREMENT0 码力 | 444 页 | 4.89 MB | 6 月前3CurveFs 用户权限系统调研
© XXX Page 1 of 33 CurveFs 用户权限系统调研(已实现)© XXX Page 2 of 33 一、Curvefs测试 1. 启动curvefs 问题1:root用户无法访问挂载目录 测试 allow_root 测试allow_other 参考文献 问题2:本地文件系统挂载默认是共享的? 问题3:文件系统访问控制是在哪一层实现的? 二、文件系统权限管理 文件类型 ACL的表示 内存中的ACL 是如何与具体的 Inode 相关联 如何存储和获取ACL信息 Inode权限校验 chmod、chown、setfacl、getfacl接口文件系统自己如何实现 结论: 参考文献: 一、Curvefs测试 代码:https://github.com/cw123/curve/tree/fs_s3_joint_debugging 环境:test2 1. 启动curvefs volume=/fs -o user=test -o conf=./curvefs/conf/curvefs_client.conf /tmp/fsmount 问题1:root用户无法访问挂载目录 测试发现client mount进程是哪个用户启动的就只有该用户(filesystem owner)可以访问该目录,即使挂载点mode是777。 # filesystem owner wanghai00 码力 | 33 页 | 732.13 KB | 5 月前3Curve支持S3 数据缓存方案
读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page 3 of 9 1.append接口目前采用先从s3 ge unk,然后通过offset~len找到是否有合适的datacache或者new datacache。 对外接口 流程上对于读写缓存有影响的接口包括:write,read,releaseCache,flush,fssync。后面会详细介绍这些接口流程。这里不需要提供truncate接口,可以由client直接修改inode的len,由metaserver的碎片整 理(马杰负责)模块进行truncate的无效数据清理 he有交集(包括刚好是边界的情况)即可写。 4.2 同时计算后续的多个DataCache是否和chunkPos~len有交集,如果有则一并获取 5. 如果有可写的DataCache,则调用Write接口将数据合并到DataCache中; ,加入到ChunkCacheManager的Map中。 如果没有可写的DataCache则new一个 5.完成后返回成功。 Read流程 1.根据请求offset,计算出对应的chunk0 码力 | 9 页 | 179.72 KB | 5 月前3Rust 程序设计语言 简体中文版 1.85.0
程序设计语言 简体中文版 11. 编写自动化测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 11.1. 如何编写测试 . . . . . . . . . . . . . . . 220 11.2. 控制测试如何运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 11.3. 测试的组织结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 12.4. 采用测试驱动开发完善库的功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 562 页 | 3.23 MB | 10 天前3Open Flags 调研
© XXX Page 1 of 23 open flags 调研(已实现)© XXX Page 2 of 23 open接口原型 open flags flags定义 flags的含义 libfuse open open flags 在curvefs上的测试 open flags 实现方式 整体flags支持方案 具体flag的实现方案 O_TRUNC I/O模式类 O_DIRECT O_SYNC O_SYNC, O_DSYNC O_NONBLOCK(O_NDELAY ), FASYNC, O_TMPFILE 结论 参考文献 open接口原型 # man page open, openat, creat - open and possibly create a file #includeint open(const char *pathname, int flags); open flags flags定义 flags通过宏定义实现,定义见 ,主要包括如下flag fcntl.h # 红色是不支持且会执行结果错误;橙色是暂不确定但不影响写入结果;紫色为暂时无法测试;黑色是已经支持 #define O_RDONLY 00000000 #define O_WRONLY 00000001 #define O_RDWR 00000002 #define O_CREAT 0 码力 | 23 页 | 524.47 KB | 5 月前3CurveFS方案设计
为更好的支持云原生的场景,Curve需要支持高性能通用文件系统,其中高性能主要是适配云原生数据库的场景。当前Curve是实现了块存储,向上提供块设备服务,CurveFS会基于此实现。第一阶段的目标是实现 满足数据库场景的文件接口。 调研 开源fs 当前对已有的开源分布式文件系统进行了调研,主要包括系统架构,元数据内存结构,元数据持久化,调研文档如下: chubaofs: ChubaoFS© XXX Page 3 of 并对以上文件系统在相同环境进行了元数据节点性能测试: 。测试结果c开发的moosefs和fastcfs元数据性能远优于go开发的chubaofs和c开发的cephfs,理论上分析这个结果是合理的,分布式的元数据设 调研测试 计会涉及到多次rpc的交互。这里需要确认的一点是:我们需要怎样的元数据节点的性能? 可行性分析 方案对比 根据上述调研和测试结果,我们考虑了三种curvefs的元数据设计方案: 能相比单机要弱一些 b. 扩展性/可用性/可靠性 使用 multi-raft, 扩展性、可用性和可靠性与元数据节点一致 对比结论 CurveFS 近期要能支持mysql所要接口,长期需要支持通用文件接口。 kv 虽然改造简单,短期内对基本功能的支持没有问题,但这个架构不利于 Curve 长期的规划和演进,因此选择通用的 dentry,inode 两层映射的元数据结构。对于 fs© XXX0 码力 | 14 页 | 619.32 KB | 5 月前3PFS SPDK: Storage Performance Development Kit
●根据阿里《When Cloud Storage Meets RDMA》的说法 ●在100Gbps网络带宽时,内存带宽成为瓶颈 ●Intel Memory Latency Checker (MLC)测试得到的CPU内存带宽是 61Gbps10/17/22 3 RDMA可以减轻CPU负担 ●可以减少CPU操作网络通讯的开销 ●读写内存都由网卡进行offload ●应用程序不再通过系统调用在内核和用户态来回切换10/17/22 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系统元数据的操作非常少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 ●不再基于daemon模式,而是直接使用pfs core api ●依然向外提供管理工具, 例如 pfs ls、cp、rm等 ●增加spdk驱动10/17/22 7 新增PFS接口 ●增加pfs_pwritev和pfs_preadv接口 ●ssize_t pfs_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset); ●ssize_t0 码力 | 23 页 | 4.21 MB | 5 月前3
共 73 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8