TGT服务器的优化线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 • 不需要target list lock • 因为TEL线程 因为TEL线程只存取自己负责的target,不存取别的target,所以TEL线程 不需要target list lock。 • 管理面是单线程,只有它遍历target list,没有需要互斥的情况。FIO性能测试(配置) • [global] • rw=randread • direct=1 • iodepth=128 • ioengine=aio • bsrange=16k-16k • runtime=600 码力 | 15 页 | 637.11 KB | 6 月前3
BRPC与UCX集成指南–当消息很短时,ucx使用内部缓冲提供给brpc(比较快) –当消息很大时,由brpc提供接收缓冲区(rndv,rendezvous) ●阀值可调 –接收和发送使用无锁队列 ●UcpWorker接收时写入UcpConnection的无锁队列 ●brpc发送时写入UcpWorker的无锁发送队列5455 UcpWorker实现 ●提供命令行参数调整ucp worker的行为 –--brpc_ucp_worker_busy_poll为true时使用busy0 码力 | 66 页 | 16.29 MB | 6 月前3
Curve支持S3 数据缓存方案则生成新的fileCacheManager,解锁,调用fileCacheManager的Write函数。 2.考虑到同一个client同一个文件同时只能一个线程进行文件写,所以在Write函数中加写锁。 3.根据请求offset,计算出对应的chunk index和chunkPos。将请求拆分成多个chunk的WriteChunk调用。 4.在WriteChunk内,根据index找到对应的Chu Flush流程 1.根据InodeId找到对应的FileCacheManager,执行Flush函数。 2.在Flush函数中,加写锁,通过swap获取FileCacheManager的chunkCacheMap_到临时变量tmp,并清空chunkCacheMap_,解写锁。遍历tmp中的DataCache列表,执行Flush函数,并更新对应的元数据。 3.Flush返回成功。 4.如果DataCac0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve元数据节点高可用使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic Compare-and-Swap)指的是在对key进行赋值的时候,客户端需要提供一些条件,当这些条件满足后才能赋值成功。 3. etcd clientv3的concurrency介绍0 码力 | 30 页 | 2.42 MB | 6 月前3
Curve文件系统元数据管理dentry信息 0 + A → 100 100 + D → 400 200 + E → 300 0 + B → 200 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink /B/E,指向文件/A/C + E → 300 5、client给server1发送请求: 修改记录 "C"的inode link++ 这里涉及到增加dentry和增加link,这两个操作不在一个节点上,也需要使用分布式锁进行控制,做成事务。 list:遍历/A目录 1、client给server0发送请求: parentid 0 + name "A",查询"A"的inodeid为100 inode 100,查询的"A"的inode信息。0 码力 | 24 页 | 204.67 KB | 6 月前3
CurveFS S3本地缓存盘方案本地缓存盘的异步上传 工作队列: 该队列中保存缓存盘中的待上传文件名 工作线程: 遍历工作队列(队列swap),从缓存盘目录读取到文件内容并上传到对象存储。文件上传到对象存储后,直接删除。 工作队列做好互斥管理 异常管理 如果客户端挂掉,那么写缓存盘中可能会有残留文件没有上传到对象存储;如果忘记处理,那么这些数据也就相当于是丢失了。 所以在客户端初始化建立的时候,可以先遍历写缓存目录,如果里面有文件,那么则上传到远端对象存储0 码力 | 9 页 | 150.46 KB | 6 月前3
CurveFS Copyset与FS对应关系在创建inode的时候,其实是不知道inodeid的,在创建完成之后,才有inodeid。inodeid的分配最好下放到各个分片去进行处理。否则整个集群的inode都去一个地方获取id会 造成巨大的锁开销,这个是不能接受的。 curve块设备的元数据管理,在分配数据的时候,offset一开始就是知道的,这是和curvefs分配很大的一个不同点。 假设已经确定了一个分片规则,那么根据这个分片规则,一定可以找到两个函数0 码力 | 19 页 | 383.29 KB | 6 月前3
共 7 条
- 1













