TGT服务器的优化
637.11 KB
15 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pdf | 3 |
摘要 | ||
本文档阐述了TGT服务器的优化策略,重点在于多线程管理和块设备协议的支持。通过为每个target增加锁机制,TEL线程和管理面线程实现互斥,解决了数据一致性问题。在支持块设备协议方面,iSCSI广泛支持多系统,而NBD则限于Linux。同时,文档探讨了性能优化的问题,包括多CPU利用、IO处理的效率以及相关协议的可靠性。TGT服务器采用纯用户态代码,便于扩展和维护,适用于复杂的存储系统。 | ||
AI总结 | ||
《TGT服务器的优化》总结如下:
### 管理平面优化
1. **问题背景**:管理面是主线程,负责登录及增删改target、lun、session等操作,同时target epoll线程也需要访问这些数据,导致多线程冲突和数据一致性问题。
2. **优化措施**:
- 为每个target增加一把锁。
- Target Event Loop (TEL)线程与管理面线程通过锁互斥访问数据。
- TEL线程运行时锁住目标,管理面等待;TEL进入epoll等待状态后释放锁。
- 无需target list lock,因TEL线程只处理自己负责的target,管理面单线程遍历target list不需互斥。
### 块设备协议优化
1. **协议选择**:
- **NBD**:Linux专有协议,适用于Linux。
- **iSCSI**:广泛支持,适合Windows和类UNIX系统,支持块设备和磁带协议。
- **优势**:通过iSCSI替代SAN,利用raft副本一致性和copyset概念,支持自动修复副本和扩容,具有高可靠性和稳定性,适合廉价硬件搭建。
### 性能优化
1. **问题分析**:
- 多个target时,设备多且客户端请求量大,单线程event loop多路复用成为瓶颈。
- 开源界尝试修改(如sheepdog的patch)效果不理想。
2. **优化策略**:
- 使用多个epoll线程,充分利用多CPU能力。
- 每个target一个epoll线程,负责Initiator的I/O处理,CPU使用由OS分配,粒度更细。
- 支持多个卷的lun共享一个target,但可能导致单CPU限制。
### Curve驱动支持
1. **实现方式**:
- 编写curve驱动,利用异步I/O和pipeline。
- 使用NEBD PART 1接口,与nebdserver在同一台机器运行。
2. **功能支持**:
- 共享打开curve卷,支持multipath。
- 支持卷resize,添加命令更新盘大小。
- Windows和Linux Initiator均支持。
### 其他技术对比
1. **TCMU**:
- 多了一层转接,配置复杂。
- 用户态代码受框架约束,灵活性不足。
2. **TGT (STGT)**:
- 纯用户态,代码独立,容易扩展。
- 支持复杂存储系统(如ceph rbd、sheepdog),适合多种需求。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
3 页请下载阅读 -
文档评分