跳转至

Unison Take-Away

TL; DR

原论文里mtpmpi是两种不同的模式,单独用mtp的数据并没有提供。

想开启mpi,必须先开mtp,即(mtp+mpi),为方便表达,本文均采用mpi的表示方法

mtp一般用于中小规模的实验,mpi用于大规模分布式系统实验,mpi是mtp的超大加强版,fig1需要的是mpi服务(原因见后文)。

  1. 目前尝试了mtp模式下所有常规的负载/拓扑,最高提升倍数是7.4左右,原论文fig1的提升倍数暂时无法复现。
  2. 在开启mtp且关闭超线程的中小型拓扑中,可以看见“随着规模增大,提升倍数逐渐上升”的趋势(见本文第三部分)

可能影响提升倍数的因素:

  1. 跑实验的服务器是否开启超线程?
    1. 关闭超线程,在一定程度上,增大提升倍数
  2. 对于大规模分布式服务,如论文中的fig1,是否开启mpi?
    1. fig1 中 k = 8, cluster = [48,72,96,...] 对应fat-tree-distributed,需要的是mpi服务
    2. 需要用mpi的模型,若简单起见用mtp,则达不到相应的倍数,且会出现运行时长时间停顿的异常
    3. 即:不能允许“降级服务”
  3. 同一时间,服务器本身其他的负载如何?
    1. 其他负载越小,提升倍数越高

下一步只有服务器配置OpenMPI的相应环境才能做(原因见下),如果可以的话,按照Unison的要求来把环境全部过一遍会比较好:

Bash
1
2
3
4
5
6
7
8
# update all
sudo apt update
# install dependencies
sudo apt install build-essential cmake git openmpi-bin openmpi-doc libopenmpi-dev linux-tools-generic ninja-build nfs-common texlive-latex-recommended texlive-fonts-extra -y
# allow perf
sudo sysctl -w kernel.perf_event_paranoid=-1
disable hyper-threading
echo off | sudo tee /sys/devices/system/cpu/smt/control

为什么 fig1 无法复现

fig1对应于mpi服务

原论文的fig1对应于:

  • k=8, cluster=48, fat-tree
  • k=8, cluster=72, fat-tree
  • k=8, cluster=96, fat-tree

由于cluster已经大于24,故属于fat-tree-distributed模型,需要的是mpi服务。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1 (7d)
    elif argv[1] == 'fat-tree-distributed':
        e = Experiment(argv[1])
        e.run('fat-tree', ['barrier', 'nullmsg', 'unison'],
              k=8,
              cluster=[48, 72, 96, 120, 144],
              # cluster=8, # for small-scale
              delay=3000,
              bandwidth='100Gbps',
              flow=False,
              incast=1,
              victim=lambda args: '-'.join([str(i) for i in range(int(args['k']) ** 2 // 4)]),
              time=0.1,
              interval=0.01,
              flowmon=False,
              core=lambda args: args['cluster'])
Python
1
2
3
4
5
elif simulator == 'unison' and core > conf['maxcore']:
            args['thread'] = math.ceil(core / math.ceil(core / conf["maxcore"]))
            configure_cmd.append('--enable-mtp')
            configure_cmd.append('--enable-mpi')
            mpi_cmd = f'mpirun -n {math.ceil(core / conf["maxcore"])} --map-by ppr:1:node --bind-to none'

configure_cmd.append('--enable-mpi')说明给到CLI的实际指令开启了mpi服务。

sugon服务器目前不支持OpenMPI服务

这是原论文中对应的配置。

我按照要求重新写了shell脚本生成相应的CLI指令,经检查指令没问题。

sugon服务器,在复现fat-tree-distributed实验的configure时会显示:

原因 (1):

服务器没有安装mpi:

Bash
1
2
3
4
5
6
7
bxhu@sugon:~/UNISON-for-ns-3$ mpiexec --version
Command 'mpiexec' not found, but can be installed with:
apt install lam-runtime       # version 7.1.4-7, or
apt install mpich             # version 4.1.2-2
apt install openmpi-bin       # version 4.1.6-5ubuntu1
apt install slurm-wlm-torque  # version 23.02.6-1ubuntu2
Ask your administrator to install one of them.

我在电脑本机上安装了mpi,在configure后,显示mpi是ON的,说明可以继续往下做:

Bash
1
2
3
4
5
# local machine mpiexec --version
mpiexec (OpenRTE) 4.1.2

Report bugs to http://www.open-mpi.org/community/help/
Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# local machine
-- ---- Summary of optional ns-3 features:
Build profile                 : optimized
Build directory               : /Users/huluobo/paper/UNISON-for-ns-3/build
BRITE Integration             : OFF (missing dependency)
DES Metrics event collection  : OFF (not requested)
DPDK NetDevice                : OFF (not requested)
Emulation FdNetDevice         : OFF (missing dependency)
Examples                      : OFF (not requested)
File descriptor NetDevice     : OFF (missing dependency)
GNU Scientific Library (GSL)  : OFF (missing dependency)
GtkConfigStore                : OFF (missing dependency)
LibXml2 support               : OFF (missing dependency)
MPI Support                   : ON
Multithreaded Simulation      : ON

这里MPI Support : ON说明已经可以做OpenMPI相关实验了

原因 (2):

潜在原因,目前还没体现出来,可能会爆雷,不好说

Bash
1
2
3
4
5
6
7
bxhu@sugon:~/UNISON-for-ns-3$ lscpu
Architecture:             x86_64
  CPU op-mode(s):         32-bit, 64-bit
  Address sizes:          46 bits physical, 48 bits virtual
  Byte Order:             Little Endian
CPU(s):                   72
  On-line CPU(s) list:    0-71

该实验 (fig1) 需要服务器 CPU core number 至少是144,但是sugon的核数是72。达不到需求,不允许开启mpi.

中小规模mtp的数据启示

在开启mtp且关闭超线程的中小型拓扑中,可以看见“随着规模增大,提升倍数逐渐上升”的趋势。

以fat-tree拓扑为例:

超线程未关闭

k c result
2 2 1.986
2 4 3.12
2 8 2.942
2 16 2.61

超线程已关闭

k c result
2 2 2.203
2 4 2.874
2 8 3.079
2 16 3.09

乐观估计,mtp确实有效果,且规模越大效果越好,但目前没有实验验证与数据佐证。

  1. 原论文fig1没有提供mtp下的提升数据,10x的提升倍数是mpi模式的
  2. 目前尚不清楚这个“大”的界定是什么,还在观测数据找规律

下一步要做什么

计划是,如果可以的话,配置全套OpenMPI工具 (第一部分的sudo),复现原论文fig1的数据

如一致,则说明没问题;否则,进行规模测试,定量探究mtp和mpi模式下“提升倍数随实验规模”的规律。