CurveFS Client 概要设计如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之; 判断inode结构中,对应请求[off, size]位置的空间是否有分配:如果未分配或只有部分分配空间,则调用空间分配器分配空间,并根据空间分配器返回结果,修改inode结构(包括file length); inode修改需要持久化到底层并修改本地cache; *name, mode_t mode, dev_t rdev); 这两个函数的功能是类似,都用来创建文件。 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode 预分配一些空间?可先不做 mkdir© XXX Page 7 of 11 void (*mkdir) (fuse_req_t req, fuse_ino_t fuse_ino_t parent, const char *name, mode_t mode); 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode forget void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup);0 码力 | 11 页 | 487.92 KB | 6 月前3
PFS SPDK: Storage Performance Development KitNVME读对齐实现 ●内存分配页面对齐,实现基于PRP严格的规定,这样SGL也可以用 ●第一个页面可以从非0的页内位置开始直到页面结束位置,必须是512字节倍数。 第 二个页面必须是整页,内存位置必须在页内位置0处。 最后一个页面,开始位置也在 页面0处,但可以是不完整的一个页面。 ●如上图所示,绿色位置是数据传输部分。 ●如果以iovec来表示: [page0+3584, page0+4096),[page10 码力 | 23 页 | 4.21 MB | 6 月前3
CurveFS方案设计分别建立对应的内存结构,再回放 wal 日志完成构建 卷的元数据管理 卷的元数据中需要包含建立在该卷之上的文件系统元数据分片的位置,以便进行元数据的索引 常见的元数据操作 Create 与 mds 交互获取 inode 和 dentry 的 copyset 位置 创建 inode© XXX Page 7 of 14 1. 3. 2. 1. 2. 3. 3 3. 4. 6. 1. 2. 7. 1. 创建 dentry Mkdir 与 mds 交互获取 inode 和 dentry 的 copyset 位置 创建 inode 创建 dentry Lookup (/A/B) 与 mds 交互获取 /(inodeid=1) 所在的 copyset 根据 parent-inode=1 和 name=A parent-inode=* (/A的的inodeid) 和 name=B 获取对应的 dentry,从而获取到 /A/B 的 inode ReadDirAll (/A/B) 先获取 /A/B 的 inode 所在的位置,即可在同一个 copyset 中获取所有的子项信息 Rename(/A → /B) 获取 /A 所在的 copyset /A 对应的dentry新增计数 创建 /B 节点 删除 /A 节点 Symlink0 码力 | 14 页 | 619.32 KB | 6 月前3
CurveFs 用户权限系统调研33 SUID: 可执行的文件上。默认情况下,当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文件的所有者;换句话说, 。 仅设置在 进程以所有者的身份运行 权限所显示的位置在文 件的属主的权限位中的执行权限位上,如果属主本来就具有执行权限,则显示为“s”,如果本来没有执行权限,则显示为“S”。 # SUID # chmod u+s FILE # chmod 4755 SGID可设置在可执行文件或目录的属组权限位的执行权限上。如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录创建的新文件和目录的所属组均为其父目录的所属组,而并非进 程发起者的主要组。SGID权限的显示位置在文件的属组权限位上的执行权限上;如果属组本来就有执行权限。则显示为"s",否则,就显示为“S”; # SGID # chmod g+s DIR # chmod 2770 DIR wanghai0 *i_default_acl; #endif ... } 如何存储和获取ACL信息 ACL 是物理文件系统的一个属性,需要永久保存。如何将 ACL 保存在外存中,包括 ACL 在外存中具体存放的位置,以及如何从外存中读取和写入原始 ACL 内容。涉及到 VFS 和具体的物理文件系统,这里以Ext4文件系统为例说明。© XXX Page 28 of 33 在 Linux 操作系统中,如果libattr0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve支持S3 数据缓存方案太好。 元数据采用2层索引 由于chunk大小是固定的(默认64M),所以Inode中采用maps3ChunkInfoMap用于保存对象存储的位置信息。采用2级索引的好处是,根据操作的offset可以快速定位到index,则只需要遍历index相关的S3ChunkInfoList,减少了遍历的范围。 对象名设计 对象名采用chunkId+ Cache都是最小粒度为blockSIze的缓存,所以存在3种情况:要读的 chunkPos~len的区间全部被缓存,部分被缓存,以及无缓存。将缓存部分buf直接copy到接口的buf指针对应的偏移位置,无缓存部分生成requestVer。 3.遍历requestVer,根据每个request的offset找到inode中对应index的S3ChunkInfoList,根据S3ChunkInfoL 0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve文件系统空间分配方案后将这一个块中的前2MiB空间分配给这个文件,剩余部分加入到level2中的list中。 后续,file1再次追加写入2MiB数据,此时申请空间时,需要附带上file1最后一个字节数据在底层存储的位置,再加1(期望申请的地址空间起始offset)。以图中为例,则附带的值为30MiB。 这次的空间申请,直接从level2中以30MiB作为key进行查找,找到后,进行空间分配。分配之后,相关信息如下图所示:0 码力 | 11 页 | 159.17 KB | 6 月前3
共 6 条
- 1













