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
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기