infiniband
Linux内核中InfiniBand核心层驱动模块,位于drivers/infiniband/core目录下。InfiniBand是一种高性能、低延迟的网络互连技术,主要用于高性能计算(HPC)和数据中心环境。该模块提供了InfiniBand协议栈的核心实现,包括设备管理、通信管理、内存管理、用户空间接口等关键功能。
项目包含72个文件,其中56个C源文件,16个头文件。主要文件大小从283字节到146KB不等,平均文件大小约21.8KB。这是Linux内核中一个成熟且复杂的子系统,涉及网络协议栈、设备驱动、用户空间接口等多个方面。
架构描述: ## InfiniBand Core 架构分析
1. 核心层次结构
应用层接口 (User Space API)
├── uverbs (用户空间verbs接口)
├── ucma (用户空间CMA接口)
└── user_mad (用户空间MAD接口)
核心管理层 (Core Management)
├── 设备管理 (device.c)
├── 通信管理器 (cma.c, cm.c)
├── 子网管理器代理 (agent.c)
└── 安全管理 (security.c)
协议实现层 (Protocol Implementation)
├── MAD协议 (mad.c, mad_rmpp.c)
├── SA查询 (sa_query.c)
├── 多播管理 (multicast.c)
└── 地址解析 (addr.c)
资源管理层 (Resource Management)
├── 队列对管理 (verbs.c)
├── 完成队列 (cq.c)
├── 内存区域 (umem.c, umem_odp.c)
├── 内存池 (mr_pool.c)
└── 资源跟踪 (restrack.c)
基础设施层 (Infrastructure)
├── 缓存管理 (cache.c)
├── 计数器 (counters.c)
├── 系统文件接口 (sysfs.c)
├── Netlink接口 (netlink.c, nldev.c)
└── 配置接口 (cma_configfs.c)
2. 主要模块功能
2.1 设备管理模块 (device.c)
- 提供IB设备的注册、注销和管理
- 设备属性查询和配置
- 端口管理和状态监控
2.2 通信管理器 (CMA - Communication Manager)
- cma.c: RDMA通信管理器,处理连接建立和维护
- cm.c: InfiniBand连接管理器,处理IB特定的连接管理
- iwcm.c: iWARP连接管理器,处理iWARP协议连接
2.3 用户空间接口
- uverbs_*: 提供用户空间verbs API实现
- ucma.c: 用户空间CMA接口
- user_mad.c: 用户空间MAD接口
2.4 MAD协议栈
- mad.c: 管理数据报(MAD)协议核心实现
- mad_rmpp.c: RMPP(可靠多包传输)扩展
- agent.c: 子网管理器代理
2.5 内存管理
- umem.c: 用户空间内存管理
- umem_odp.c: On-Demand Paging支持
- umem_dmabuf.c: DMA缓冲区支持
3. 关键数据结构
3.1 核心数据结构
struct ib_device: IB设备抽象struct ib_pd: 保护域struct ib_qp: 队列对struct ib_cq: 完成队列struct ib_mr: 内存区域
3.2 连接管理
struct rdma_cm_id: RDMA连接标识struct ib_cm_id: IB连接标识struct iw_cm_id: iWARP连接标识
4. 依赖关系
项目依赖于多个Linux内核子系统:
- 网络协议栈 (TCP/IP, Netlink)
- 内存管理子系统
- 设备模型 (sysfs)
- 安全子系统
- Cgroup资源控制
关键发现: ['项目实现了完整的InfiniBand协议栈核心功能', '采用分层架构设计,各模块职责清晰', '提供丰富的用户空间接口(uverbs, ucma, user_mad)', '支持多种传输协议(IB, iWARP, RoCE)', '包含完整的安全和资源管理机制', '与Linux内核深度集成,使用 标准内核API']
架构图
