Open Flags 调研tmp/fsmount# cat f aaa I/O模式类 O_DIRECT, O_SYNC, O_DSYNC, FASYNC, O_NONBLOCK(O_NDELAY ),这类flags应该是内核进行了支持,在用户态文件系统中进行相应设置,例如O_DIRECT有具体的文档描述说明了这一点,其他flag暂时查阅资料和 代码还未发现正面说明。 O_DIRECT© XXX Page 17 of 23 件进行写操作时也一样,首先写入到缓存中,然后由操作系统同步到块设备(如磁盘)中。对于通用块设备层来说要求io请求是块设备blocksize对齐的,对应buffered io在pagecache层做了对齐,对应direct_io需要用户层来保证。© XXX Page 18 of 23© XXX Page 19 of 23 实现:direct_io功能实现由VFS层提供,fuse也进行了支持,用户态文件系统要支持该flag需要在 open中对flag进行解析,填充进fuse_file_info→direct_io,通过 返回给内核处理。 fuse_reply_open(req, fi) // curvefs void curve_ll_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) { fi->direct_io = fi->flags0 码力 | 23 页 | 524.47 KB | 6 月前3
CurveFs 用户权限系统调研启动curvefs 问题1:root用户无法访问挂载目录 测试 allow_root 测试allow_other 参考文献 问题2:本地文件系统挂载默认是共享的? 问题3:文件系统访问控制是在哪一层实现的? 二、文件系统权限管理 文件类型 文件权限 特殊权限(SUID, SGID, STICKY) 文件默认权限umask 用户&用户组 文件系统用户权限管理 对mode的管理 对ACL(Access "fuse.fuse_client", MS_NOSUID|MS_NODEV, "allow_other,fd=9,rootmode=40000,"...) = 0 问题3:文件系统访问控制是在哪一层实现的? 测试curvefs,发现文件系统链路默认是没有做权限控制。(挂载点mode 777) # mountpoint wanghai01@pubbeta1-nostest2:/tmp$ ls -l filesystems)。挂载参数‘default_permissions’用于启用内核自己的权限检查,而不是将权限检查推迟到文件系统,除了文件系统的任何权限检查之外,内核还会进行检查,并且两者都必须成功才能允许操作 。 。 。 内核执行标准的 UNIX 权限检查 如果文件系统在打开设备 fd 时的初始功能协商期间启用了 ACL 支持,则此挂载选项将被隐式激活。 在这种情况下,内核执行 ACL 和标准的 unix 权限检查 疑问0 码力 | 33 页 | 732.13 KB | 6 月前3
TGT服务器的优化SI target服务器 • LINUX LILO • 一般用于输出内核本地块设备 • TCMU • 作为LILO支持用户态的接口 • 如何评价LILO • 输出内核块设备I/O效率高 • 不利于把复杂的存储协议代码搬进内核,例如(curve, brpc, c++, protobuf 等) • TCMU多了一层转接,配置过程复杂,业界踩的坑不够多。 • TCMU的用户态代码会受到框架约束,不够灵活。iSCSI TCMU的用户态代码会受到框架约束,不够灵活。iSCSI target 服务器 • TGT(STGT) • 比较久的历史,原来叫STGT,后来改成TGT • 纯用户态,不与内核绑定 • 支持复杂的存储系统,例如ceph rbd, sheepdog, glfs • 纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve0 码力 | 15 页 | 637.11 KB | 6 月前3
BRPC与UCX集成指南用UCX实现BRPC对RDMA的支持 徐逸锋2 BRPC简介 ●BRPC是Curve的基础通讯框架 ●支持远程过程调用 –C++ –TCP传输 –bthread协程(m:n调度,减少基于内核的下文切换 ,减少cache miss) ●多协议支持 –baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 table –epoll event loop – memory register cache –config file24 UCT ●特点是比较原始,开销小,但是没有很强的功能 ●是网络接口层,主要功能是网卡发现和远程内存传输支持,提供component查询和 memory domain的打开 ●一个component包含若干 memory domain resource,一个memory ●调用poll(efd)等待有任务执行,然后再调用ucp_worker_progress() ●/dev/cpu_dma_latency 禁止power-saving模式 ●由于rdma速度很快,内核调度时延对性能影响很大。关键应用应开启busy poll。323334 BRPC怎么指定使用UCX?35 修改 BRPC ChannelOptions 增加字段:36 BRPC的Server开启RDMA0 码力 | 66 页 | 16.29 MB | 6 月前3
Curve核心组件之Client - 网易数帆数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python API https://github.com/opencurve/curve-qemu-block-driver NBD: 实现了Curve-NBD,与内核NBD模块进行交互 可以作为容器的数据存储 CSI插件也已经开源: https://github0 码力 | 27 页 | 1.57 MB | 6 月前3
NJSD eBPF 技术文档 - 0924版本通过FUSE访问passthrough_ll底层ext4 • 内核调⽤延迟测试 • 与FUSE Daemon通讯120us左右,FUSE Daemon⼤概10us以内 • 瓶颈在/dev/fuse通讯开销基于FUSE可能的优化点 • 降低内核与libfuse通讯延迟 • 基于⽂件属性的操作内核直接返回? • 基于⽂件数据的操作先内核读写 cache?实现POSIX兼容API途径及问题 ebpf是不同环境下内核配置, 调试,监控⼯具 • map映射 • 验证器 • Hook • Helper api配置TCP Initial RTO • 场景 内核4.12之前 initial RTO是⼀个常数1s • 应⽤类型BPF_PROG_TYPE_SOCK_OPS • HOOK BPF_SOCK_OPS_TIMEOUT_INIT • 内核中调⽤栈 • tcp_timeout_init Curve⽂件系统采⽤cache来提升性能,对象存储来降低成本 • ⽬前⾯临Curve⽂件系统客户端延迟较⼤的问题 • 解决延迟有ld_preload以及ebpf的⽅式,各有优缺点 • 使⽤ebpf可以在内核中直接读取cache数据,并返回,降低了延迟。 • 介绍了ebpf基于FUSE的cache设计THANKS0 码力 | 20 页 | 7.40 MB | 6 月前3
PFS SPDK: Storage Performance Development Kit(MLC)测试得到的CPU内存带宽是 61Gbps10/17/22 3 RDMA可以减轻CPU负担 ●可以减少CPU操作网络通讯的开销 ●读写内存都由网卡进行offload ●应用程序不再通过系统调用在内核和用户态来回切换10/17/22 4 磁盘的读写 ●基于EXT4的存储引擎,依然需要通过系统调用来回切换 ●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 使用dpdk内 存,才可以完成DMA写NVME10/17/22 16 PFS DMA 总体架构10/17/22 17 TCP也可以部分零copy ●读写盘的部分是零copy的 ●网络部分依赖内核tcp,不是零copy10/17/22 18 进展 ●还在测试CurveBS ●布置、监控等工具需要更新10/17/22 19 性能测试 ●使用pfs daemon测试 ●估计非daem0 码力 | 23 页 | 4.21 MB | 6 月前3
curvefs client删除文件和目录功能设计count在fuse_reply_entry和fuse_reply_create时增加1 当内核移除其inode cache时,会调用forget,此时lookup count需要减nlookup(forget的参数) 当umount时,所有lookup count减至0 不应该完全依赖forget接口去实现inode的移除,因为forget接口可能不会被内核调用(例如client崩溃) 相关调研 moosefs moosefs0 码力 | 15 页 | 325.42 KB | 6 月前3
PolarDB开源生态介绍 - 杭州Meetup 2022.10.15合作项目、解决方案 参与社区分享 • 编程之夏 • 黑客松 开源课程: (学习、实验、评 测、认证、实践、 代码协作) • 训练营 • 电子书 • 评测局 • 开源认证考试 • 开源学堂 • 内核课程 PolarDB开源社区 (2W+用户) github、官网、钉钉、微信、B站、知乎、csdn、... • 峰会 • 大咖说.对话开源 • meetup0 码力 | 7 页 | 1.45 MB | 6 月前3
Curve核心组件之chunkserver能,底层基于ext4文件系统,操 作实际的磁盘。 ChunkServer架构ChunkServer通过RPC网络层与client, MDS,其他ChunkServer通信。RPC 网络层是由brpc框架去完成的。包 括读写socket,rpc协议解析等。 ChunkServer架构RPC Service层是对外提供的一些RPC服 务的接口。包含的RPC服务有: • ChunkService。IO相关操作 绍文档中详细介绍。 ChunkServer架构Metric统计模块使用brpc中的bvar计数 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。 ChunkServer架构并发控制层,负责对chunkserver的IO 请求进行并发控制,对上层的读写请 求安照chunk粒度进行Hash,使得不同 chunk的请求可以并发执行。 ChunkServer架构DataStore是对chunk落盘逻辑的封装。 克隆chunk的管理等等。 ChunkServer架构LocalFileSystermAdaptor是对底层文件 系统的一层抽象,目前适配封装了ext4 文件系统的接口。 之所以要做这层抽 象,目的是隔离了底层文件系统的实 际读写请求,如果将来curve要适配裸 盘或者采用其他文件系统,可以在这 层进行适配。 ChunkServer架构CURVE基本架构 01 02 03 04 ChunkServer架构0 码力 | 29 页 | 1.61 MB | 6 月前3
共 22 条
- 1
- 2
- 3













