2019년 3월 19일 화요일

ppc64le 환경에서의 OFED libary와 FIO 설치 및 기본 테스트



Disk의 성능 측정을 위해 FIO를 쓰는 경우가 많습니다.  FIO는 rpm으로도 제공되며, 아래에서 download 받으시면 됩니다.

[u0017649@sys-97540 files]$ wget http://mirror.premi.st/epel/7/ppc64le/Packages/f/fio-3.1-1.el7.ppc64le.rpm

다만 이 FIO는 OFED library와 libaio를 prerequisite으로 필요로 하므로, 미리 이것들을 설치해야 합니다.  libaio야 OS에 포함된 것을 그대로 쓰면 됩니다.

[u0017649@sys-97540 files]$ sudo yum install -y libaio

OFED library는 다음의 Mellanox 홈페이지에서 ppc64le용 패키지를 download 받으실 수 있습니다.

http://www.mellanox.com/page/products_dyn?product_family=26




먼저 OFED library가 요구하는 OS prerequisite을 설치해야 합니다.

[u0017649@sys-97540 files]$ sudo yum install -y pciutils lsof tcl gcc-gfortran libgfortran tcsh tk

[u0017649@sys-97540 files]$ ls -l *.tgz
-rw-rw-r--. 1 u0017649 u0017649 236217006 Mar 18 21:14 MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.5alternate-ppc64le.tgz

[u0017649@sys-97540 files]$ tar -zxf MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.5alternate-ppc64le.tgz

압축 해제된 directory 속에 들어가보면 script들이 몇개 보입니다.

[u0017649@sys-97540 files]$ cd MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.5alternate-ppc64le

[u0017649@sys-97540 MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.5alternate-ppc64le]$ ls
common_installers.pl            docs                        mlnxofedinstall       src
common.pl                       is_kmp_compat.sh            RPM-GPG-KEY-Mellanox  uninstall.sh
create_mlnx_ofed_installers.pl  LICENSE                     RPMS
distro                          mlnx_add_kernel_support.sh  RPMS_UPSTREAM_LIBS

이제 mlnxofedinstall script를 수행하면 OFED libary가 설치됩니다.

[u0017649@sys-97540 MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.5alternate-ppc64le]$ sudo ./mlnxofedinstall
(저는 실제로는 RHEL7.5ALT ppc64le 환경을 구할 수 없어서 그냥 RHEL7.4 ppc64le에서 MLNX_OFED_LINUX-4.5-1.0.1.0-rhel7.4-ppc64le.tgz를 받아서 수행했습니다.  실제로는 해당 OS 버전에 정확히 맞는 버전을 download 받아서 수행하셔야 error가 나지 않습니다.)

Detected rhel7u4 ppc64le. Disabling installing 32bit rpms...
Logs dir: /tmp/MLNX_OFED_LINUX.7174.logs
General log file: /tmp/MLNX_OFED_LINUX.7174.logs/general.log
Verifying KMP rpms compatibility with target kernel...
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, RDMA or Distribution IB packages will be removed.
Those packages are removed due to conflicts with MLNX_OFED_LINUX, do not reinstall them.

Do you want to continue?[y/N]:y

Starting MLNX_OFED_LINUX-4.5-1.0.1.0 installation ...

Installing mlnx-ofa_kernel RPM
Preparing...                          ########################################
Updating / installing...
mlnx-ofa_kernel-4.5-OFED.4.5.1.0.1.1.g########################################
Configured /etc/security/limits.conf
Installing kmod-mlnx-ofa_kernel 4.5 RPM
Preparing...                          ########################################
kmod-mlnx-ofa_kernel-4.5-OFED.4.5.1.0.########################################
Installing mlnx-ofa_kernel-devel RPM
...
mlnxofed-docs-4.5-1.0.1.0             ########################################
Preparing...                          ########################################
mpitests_openmpi-3.2.20-e1a0676.45101 ########################################

Installation finished successfully.

Preparing...                          ################################# [100%]
Updating / installing...
   1:mlnx-fw-updater-4.5-1.0.1.0      ################################# [100%]

Added 'RUN_FW_UPDATER_ONBOOT=no to /etc/infiniband/openib.conf

Attempting to perform Firmware update...
No devices found!

To load the new driver, run:
/etc/init.d/openibd restart

저는 이 시스템에 infiniband adapter가 없기 때문에 위와 같이 'No devices found!'라는 메시지가 나옵니다만, 여기서는 신경 안쓰셔도 됩니다.   다만 맨 마지막 메시지처럼, 새로 설치된 driver를 load하려면 리부팅까지는 필요없고 아래와 같은 명령을 내리시면 됩니다.

먼저 아래와 같이 lsmod 명령으로 IB 관련 모듈이 load된 것이 있는지 살펴 봅니다.  보시다시피 없습니다.

[u0017649@sys-97540 files]$ sudo lsmod | grep ib
libcrc32c               1614  1 xfs
ibmvscsi               34850  5
scsi_transport_srp     18042  1 ibmvscsi
ibmveth                32369  0

이제 아래 명령으로 driver를 load합니다.

[u0017649@sys-97540 files]$ sudo /etc/init.d/openibd restart
Unloading HCA driver:                                      [  OK  ]
Loading HCA driver and Access Layer:                       [  OK  ]

다시 lsmod 명령으로 IB 관련 모듈이 load된 것이 있는지 살펴 봅니다.   아까와는 달리 뭔가가 많이 올라온 것을 보실 수 있습니다.

[u0017649@sys-97540 files]$ sudo lsmod | grep ib
ib_ucm                 17919  0
ib_ipoib              196794  0
ib_cm                  57708  3 rdma_cm,ib_ucm,ib_ipoib
ib_umad                19974  0
mlx5_ib               380860  0
ib_uverbs             135906  3 mlx5_ib,ib_ucm,rdma_ucm
mlx5_core            1040727  2 mlx5_ib,mlx5_fpga_tools
mlx4_ib               242651  0
ib_core               341508  10 rdma_cm,ib_cm,iw_cm,mlx4_ib,mlx5_ib,ib_ucm,ib_umad,ib_uverbs,rdma_ucm,ib_ipoib
mlx4_core             413829  2 mlx4_en,mlx4_ib
mlx_compat             28099  15 rdma_cm,ib_cm,iw_cm,mlx4_en,mlx4_ib,mlx5_ib,mlx5_fpga_tools,ib_ucm,ib_core,ib_umad,ib_uverbs,mlx4_core,mlx5_core,rdma_ucm,ib_ipoib
devlink                35827  4 mlx4_en,mlx4_ib,mlx4_core,mlx5_core
libcrc32c               1614  1 xfs
ibmvscsi               34850  5
scsi_transport_srp     18042  1 ibmvscsi
ibmveth                32369  0


이제 download 받은 FIO를 설치합니다.  설치 자체는 간단합니다.

[u0017649@sys-97540 files]$ sudo rpm -Uvh fio-3.1-1.el7.ppc64le.rpm                                     warning: fio-3.1-1.el7.ppc64le.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:fio-3.1-1.el7                    ################################# [100%]

이제 fio 명령이 생겼습니다.

[u0017649@sys-97540 files]$ which fio
/usr/bin/fio

제가 테스트하는 서버는 SATA 디스크를 가상으로 쪼개어 받은 매우 형편없는 spec의 포팅용 가상머신입니다.  따라서 제대로 된 성능 테스트는 아니라는 점을 미리 인지하시기 바랍니다.

기본적인 write 테스트를 해봅니다.  numjobs=1로 돌리는데, CPU 사용량은 거의 없습니다.

[u0017649@sys-97540 files]$ time fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/tmp/test1 --bs=64k --iodepth=64 --size=500M --numjobs=1 --readwrite=randwrite --rwmixwrite=100
test: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=64
fio-3.1
Starting 1 process
test: Laying out IO file (1 file / 500MiB)
Jobs: 1 (f=1): [w(1)][99.3%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:02s]
...

Run status group 0 (all jobs):
  WRITE: bw=1924KiB/s (1970kB/s), 1924KiB/s-1924KiB/s (1970kB/s-1970kB/s), io=500MiB (524MB), run=266076-266076msec

Disk stats (read/write):
  sda: ios=0/7363, merge=0/667, ticks=0/15785000, in_queue=15789550, util=100.00%

real    4m26.400s
user    0m0.328s
sys     0m0.457s

이번에는 numjobs를 2로 다시 해보았습니다.  (OS memory cache 효과를 없애기 위해 filename에 다른 file 이름을 써야 합니다.)  처음의 numjobs=1보다는 빠르지만 물론 2배 빠른 것은 아닙니다.

[u0017649@sys-97540 files]$ time fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/tmp/test2 --bs=64k --iodepth=64 --size=500M --numjobs=2 --readwrite=randwrite --rwmixwrite=100
test: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=64
...
fio-3.1
Starting 2 processes
test: Laying out IO file (1 file / 500MiB)
Jobs: 2 (f=2): [w(2)][99.3%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:03s]
...

Run status group 0 (all jobs):
  WRITE: bw=2455KiB/s (2514kB/s), 1227KiB/s-1228KiB/s (1257kB/s-1257kB/s), io=1000MiB (1049MB), run=417045-417161msec

Disk stats (read/write):
  sda: ios=0/14383, merge=0/1643, ticks=0/48880230, in_queue=48926190, util=100.00%

real    6m57.439s
user    0m0.737s
sys     0m0.848s


이번에는 디스크가 아닌 공유 메모리 상에 써보겠습니다.  아래와 같이 /dev/shm에 1.8G 여유 공간이 있습니다.

[u0017649@sys-97540 files]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        31G  7.3G   24G  24% /
devtmpfs        1.7G     0  1.7G   0% /dev
tmpfs           1.8G   23M  1.8G   2% /dev/shm
tmpfs           1.8G   23M  1.8G   2% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/sda2      1014M  166M  849M  17% /boot
tmpfs           357M     0  357M   0% /run/user/1001

다만 이건 임시 메모리 파일시스템인 tmpfs이므로 버퍼를 쓰지 않는 --direct=1 옵션을 쓸 수 없습니다.  따라서 그냥 --direct=0 옵션을 택해야 합니다.  당연히 4GB/s의 우수한 속도가 나옵니다.

[u0017649@sys-97540 files]$ sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test --filename=/dev/shm/test2 --bs=64k --iodepth=64 --size=500M --numjobs=2 --readwrite=randwrite --rwmixwrite=100
test: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=64

...

Run status group 0 (all jobs):
  WRITE: bw=3906MiB/s (4096MB/s), 1953MiB/s-2024MiB/s (2048MB/s-2123MB/s), io=1000MiB (1049MB), run=247-256msec



Read 테스트는 다음과 같이 합니다.

[u0017649@sys-97540 files]$ fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/tmp/test1 --bs=64k --iodepth=64 --size=1G --numjobs=2 --readwrite=randread --rwmixread=100  test: (g=0): rw=randread, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=64

...

Run status group 0 (all jobs):
   READ: bw=13.2MiB/s (13.9MB/s), 6778KiB/s-6793KiB/s (6941kB/s-6956kB/s), io=2048MiB (2147MB), run=154363-154703msec


댓글 없음:

댓글 쓰기