基于uGNI的Cray XE MPICH2 Nemesis网络模块解析
1. 通用网络接口(GNI)
通用网络接口(GNI)为网络中间件提供了一个底层API,以便高效利用Cray XE网络。它主要面向用户空间和内核空间的网络应用,这些应用的通信模式本质上是基于消息的,并且从网络故障中恢复的能力很重要。该API并非用于开发终端用户应用,而是供库开发人员开发消息传递库,如MPI。
GNI的设计采用了分层方法:
- 最低层的通用硬件抽象层(GHAL)用于与Gemini的特定实现进行接口,它可以屏蔽硬件寄存器等实现细节,使上层组件不受影响。
- kGNI是设备驱动程序,实现了内核级API。
- uGNI库为用户空间应用实现了API。
1.1 API元素
GNI API使用了一些软件构造来利用底层的Gemini硬件,为开发者提供灵活性,同时提供足够的抽象以高效映射到未来的Gemini实例。API的重要概念包括:
- 通信域(CDM):一组进程(即对等体),在网络内形成一个硬件保护域。
- 端点(EP):用于管理CDM内对等体之间的数据交换的软件构造。
- 完成队列(CQ):传递完成队列事件(CQE),为跟踪网络事务提供轻量级通知机制。
- 内存句柄(MH):用于RDMA操作的内存区域的句柄。
1.2 远程直接内存访问事务和消息传递
GNI提供了使用BTE或FMA单元发起RDMA事务的接口,支持RDMA写、读和原子内存操作(AMO)。应用程序通常为每个RDMA或消息传递事务请求一个全局CQE。
GNI利用Gemini的带远程通知的专用R