system: [SYSTEM]

user: 5. 仿真实验 5.1. 实验环境设计 1) 搭建包含以下之一Mellanox网卡适配器的服务器： • ConnectX®-5 Ex (VPI， IB， EN) (firmware: fw-ConnectX5) • ConnectX®-5 (VPI， IB， EN) (firmware: fw-ConnectX5) • ConnectX®-4 Lx (EN) (firmware: fw-ConnectX4Lx) • Innova IPsec 4 Lx EN • ConnectX®-4 (VPI， IB， EN) (firmware: fw-ConnectX4) • ConnectX®-3 Pro (VPI， IB， EN) (firmware: fw-ConnectX3Pro) • ConnectX®-3 (VPI， IB， EN) (firmware: fw-ConnectX3) • Connect-IB® (IB) (firmware: fw-Connect-IB) 2) 1GB以上大小硬盘 3) 最新的Mellanox device IDs 4) Linux 操作系统 5) root安装权限 5.2. 实验过程 5.2.1. 软件工具 软件方面，OEM 厂商Dell将Mellanox网卡固件程序升级至最新版本： Network_Firmware_TPTR3_LN_14.20.18.20_01.BIN；以确保支持RDMA源端口变化等高级特性。此外MPI驱动程序采用的是Mellanox原厂驱动：MLNX_MPI_LINUX-4.2-1.0.0.0-rhel7.4-x86_64。 1) 确认系统装有网络适配器(HCA/NIC)，采用下面的命令可以显示Mellanox HCA的安装信息： # lspci -v | grepMellanox 86:00.0 Network controller [ 0207 ]: Mellanox Technologies MT27620 Family Subsystem: Mellanox Technologies Device 0014 86:00.1 Network controller [ 0207 ]: Mellanox Technologies MT27620 Family Subsystem: Mellanox Technologies Device 0014 2) 下载tgz压缩文件 文件的格式MLNX_MPI_LINUX- - .tgz.注：下载前查看Linux系统版本： 下载路径http://www.mellanox.com --> Products --> Software-->InfiniBand/VPI Drivers -->MellanoxMPI Linux (MLNX_MPI)。 5.2.2. 硬件工具 测试使用的RDMA和RoCE协议中，以太网交换机需要支持PFC，ECN，ETS功能；网卡需要支持RoCE协议。网卡主要使用了Mellanox ConnectX-4 LX [ 9 ] 系列双25 Gpbs网口网卡。在测试中，主要测试了锐捷S6500-4C交换机，在部分测试中也有使用到S6510交换机。 5.2.3. 测试过程 1) 以root权限登陆到系统 2) 运行安装脚本#./mlnxMPIinstall；运行前如果安装过程中需要升级网络适配器固件ConnectX-3/ConnectX-3 Pro-重启驱动、ConnectX-4/ConnectX-4 Lx-重启系统、ConnectX-5/ConnectX-5 Ex-重启系统；否则重启驱动# /etc/init.d/openibd restart。 3) 运行hca_self_test.MPI实用程序来验证InfiniBand链接是否up。该实用程序还检查和显示额外的信息，例如：HCA固件版本、内核体系结构、驱动程序版本、与它们的状态一起活动的HCA端口的数量、节点GUID等信息。如需了解有关hca_self_test. MPI的更多细节，查看文件： docs/readme_and_user_manual/hca_self_test. readme。 4) 安装完成后，运行命令/ etc/infiniband/ info来获取关于安装的Mellanox的信息，例如前缀、内核版本和安装参数，在启动后自动加载的模块列表可以在/ etc/infiniband/ openib. conf文件中找到。 5) 端口设置 创建一个包含信息(源端口、目的端口、源IP、目的IP、协议)的五元组，利用Parallel Matrix Multiplication [ 10 ] 算法实现RDMA Ib_write源端口变化，实现多用户、多业务端口变化的目的，达成亿级的用户量和数据量。设置过程如下： Step 1：五元组信息(源端口、目的端口、源IP、目的IP、协议)初始化； 1) 源mac无变化(24:8a:07:9a:28:83)目的mac无变化(58:69:6c:14:ca:01) 2) 源ip无变化(10.10.10.177)目的ip无变化(30.0.0.182) 3) 源端口变化随机，目的端口随机 4) 协议：RoCE 5) 报文长度：1082 Step 2：利用Parallel Matrix Multiplication算法实现RDMA MPI源端口变化，根据用户五元组中的源端口的变化，确定业务服务数量；当业务服务数量小于预设阈值3000时，不进行任何处理，当业务服务数量大于预设阈值3000时，转到Step 3执行。从而实现多用户、多业务端口变化的目的，达成亿级的用户量和数据量； Step 3：在MPI业务下，从接收的用户多类业务请求中获取MPI矩阵乘法链路带宽等参数信息，根据这些信息给链路分配带宽，实现链路负载均衡。当矩阵的行和列较大时，如行，列都大于1024，此时矩阵直接相乘会导致内存空间不够，并出现多次读取的问题。把整个矩阵乘法的动作，切割成很多局部小矩阵的乘法，这样就可以把两个小矩阵加载到共享内存中，小矩阵本身的乘法就不需要再加载其它数据到内存了。把大的整体矩阵A、B分成小的局部矩阵时，矩阵C = A × B，A、B、C分别为M × K、K × N、M × N的矩阵，其中，M = wp，N = hq，K = kr。具体分割是将某些连续行和某些连续列的交叉部分划分为一块。确保每个元素都在唯一一个局部矩阵里。将矩阵A和B分割成A和B的子矩阵。从而达到优化程序，节约缓存的目的。具体为： 1) 定义MPI矩阵行和列的数据结构，分别是MPI_Commrow_comm和MPI_Commcol_comm；The BLAS matrix*matrix multiply算法，当M > 1024，N > 1024情况下，启动Parallel Matrix Multiplication算法(并行矩阵)，并开启多线程调用； 2) 从接收的用户业务请求中获取MPI矩阵乘法的参数信息，将矩阵分成局部小矩阵，并给局部要相乘的矩阵分配内存，分配具体方法如下： a) 首先将矩阵分块，将矩阵C分解为p × q的分块矩阵C ij ，每个 C i j = ( A × B ) i j 是一个w × h的小矩阵，A分解成为p × k个分块矩阵A ij ，每个A ij 是一个w × r的局部矩阵，B分解成为k × q的分块矩阵B ij ，每个B ij 是一个r × h的局部矩阵。则分块矩阵乘法的定义为： A = ( A 11 A 12 ⋯ A 1 k A 21 A 22 ⋯ A 2 k ⋮ ⋮ ⋱ ⋮ A p 1 A p 2 ⋯ A p k ) ，     B = ( B 11 B 12 ⋯ B 1 q B 21 B 22 ⋯ B 2 q ⋮ ⋮ ⋱ ⋮ B k 1 B k 2 ⋯ B k q ) b) mpi_bcast行块，本地矩阵块乘法： C = A × B = ( ( A B ) 11 ( A B ) 12 ⋯ ( A B ) 1 q ( A B ) 21 ( A B ) 22 ⋯ ( A B ) 2 q ⋮ ⋮ ⋱ ⋮ ( A B ) p 1 ( A B ) p 2 ⋯ ( A B ) p q ) c) mpi_send_receive列块，mpi_bcast， mpi_send_receive， 使用mpirdmaucx通信库，实现源端口变化发送和接受行和块数据： ( A B ) i j = ∑ k = 1 m A i k B k j Step 4：根据矩阵BMR (broadcast-multiply-roll algorithm)算法结果，计算出运行时间，最终输出用户数量，线程数量，计算出网络延迟和带宽。 5.3. 实验结果 根据上文中所述的方案及实验过程，MPI矩阵乘法并行开销。MPI矩阵乘法的并行开销定义如下： f = N ∗ ( 1 + log 2 N ) 4 ∗ M ∗ Tcomm Tflops 使用16台服务器测试得到的并行矩阵乘法的并行开销与 N ∗ ( 1 + log 2 N ) 4 ∗ M 的比率如图4，显示线性函 数的斜率与Tcomm/Tflops的测量之间的误差在5%之内。证明该并行矩阵乘法的加速比成线性增长模式。 图4. MPI矩阵乘法并行开销