 TGT服务器的优化性能问题主要体现在不能有效使用多CPU • 对多个socket connection,在单线程里做event loop多路复用。 • 多个target时,如果挂的设备多,一旦客户端请求量大,就会忙不过来。 • 开源界有尝试修改 • 例如sheepdog的开发者提交过一个patch,但是测试效果不理想,分析 原因,event loop依然是瓶颈对TGT的性能优化 • IO是使用多个epoll 线程,充分发挥多CPU能力 params 都在主线程,而target epoll 线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 •0 码力 | 15 页 | 637.11 KB | 6 月前3 TGT服务器的优化性能问题主要体现在不能有效使用多CPU • 对多个socket connection,在单线程里做event loop多路复用。 • 多个target时,如果挂的设备多,一旦客户端请求量大,就会忙不过来。 • 开源界有尝试修改 • 例如sheepdog的开发者提交过一个patch,但是测试效果不理想,分析 原因,event loop依然是瓶颈对TGT的性能优化 • IO是使用多个epoll 线程,充分发挥多CPU能力 params 都在主线程,而target epoll 线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 •0 码力 | 15 页 | 637.11 KB | 6 月前3
 BRPC与UCX集成指南●有完善的配置功能,ucx_info可以dump配置信息 ●有性能测试工具 ●比较详细的文档2223 UCS ●是一些工具代码,例如 –链表 –hash table –epoll event loop – memory register cache –config file24 UCT ●特点是比较原始,开销小,但是没有很强的功能 ●是网络接口层,主要功能是网卡发现和远程内存传输支持,提供component查询和 socket代码不少地方需要文件句柄表示连接,使用句柄可以减少代码修改。例如 SocketOptions.fd为-1表示尚未连接。 ●UcpCm返回的文件句柄实际上是pipe的写端句柄 ●记得brpc的event dispatcher是边沿触发 ●写端句柄永远不会触发可读事件 ●写端句柄第一次epoll会返回可写,可写是brpc判断连接成功的措施 ●UcpCm从来不会写入pipe,如果pipe有可读字节,会打印错误,说明有地方遗漏了修 ●Socket通过关闭UcpCm返回的句柄来关闭连接。此举和Socket原来代码一样,减少了修 改。UcpCm检测到pipe读端可读,关闭UcpConnection。 ●以上修改实际上绕过了BRPC的Event dispatcher触发读写机制,UCX自己完成发送接收45 连接管理器UcpCm ●连接管理类 –全局唯一对象 –通过UcpCm * get_or_create_ucp_cm(void)获取0 码力 | 66 页 | 16.29 MB | 6 月前3 BRPC与UCX集成指南●有完善的配置功能,ucx_info可以dump配置信息 ●有性能测试工具 ●比较详细的文档2223 UCS ●是一些工具代码,例如 –链表 –hash table –epoll event loop – memory register cache –config file24 UCT ●特点是比较原始,开销小,但是没有很强的功能 ●是网络接口层,主要功能是网卡发现和远程内存传输支持,提供component查询和 socket代码不少地方需要文件句柄表示连接,使用句柄可以减少代码修改。例如 SocketOptions.fd为-1表示尚未连接。 ●UcpCm返回的文件句柄实际上是pipe的写端句柄 ●记得brpc的event dispatcher是边沿触发 ●写端句柄永远不会触发可读事件 ●写端句柄第一次epoll会返回可写,可写是brpc判断连接成功的措施 ●UcpCm从来不会写入pipe,如果pipe有可读字节,会打印错误,说明有地方遗漏了修 ●Socket通过关闭UcpCm返回的句柄来关闭连接。此举和Socket原来代码一样,减少了修 改。UcpCm检测到pipe读端可读,关闭UcpConnection。 ●以上修改实际上绕过了BRPC的Event dispatcher触发读写机制,UCX自己完成发送接收45 连接管理器UcpCm ●连接管理类 –全局唯一对象 –通过UcpCm * get_or_create_ucp_cm(void)获取0 码力 | 66 页 | 16.29 MB | 6 月前3
 CurveFs 用户权限系统调研its algorithms accordingly (e.g. by putting a waiting thread * to sleep instead of using a busy-loop). */ unsigned congestion_threshold; /** * When FUSE_CAP_WRITEBACK_CACHE is enabled, the kernel0 码力 | 33 页 | 732.13 KB | 6 月前3 CurveFs 用户权限系统调研its algorithms accordingly (e.g. by putting a waiting thread * to sleep instead of using a busy-loop). */ unsigned congestion_threshold; /** * When FUSE_CAP_WRITEBACK_CACHE is enabled, the kernel0 码力 | 33 页 | 732.13 KB | 6 月前3
 NJSD eBPF 技术文档 - 0924版本CacheStatus, filemap[ ] {fd, chuk, size, kernel file, ver} • update list map BFP_MAP_TYPE_PERF_EVENT_ARRAY • updata cache mapCurve社区介绍 • Curve 的成⻓离不开⼤家的⽀持和参与。⾮常欢迎社区⽤户参与社区共建,可以 通过贡献代码、丰富⽂档、提交issue、改进⽹站、交流分享等,提⾼⾃⼰专业0 码力 | 20 页 | 7.40 MB | 6 月前3 NJSD eBPF 技术文档 - 0924版本CacheStatus, filemap[ ] {fd, chuk, size, kernel file, ver} • update list map BFP_MAP_TYPE_PERF_EVENT_ARRAY • updata cache mapCurve社区介绍 • Curve 的成⻓离不开⼤家的⽀持和参与。⾮常欢迎社区⽤户参与社区共建,可以 通过贡献代码、丰富⽂档、提交issue、改进⽹站、交流分享等,提⾼⾃⼰专业0 码力 | 20 页 | 7.40 MB | 6 月前3
共 4 条
- 1













