레이블이 nmon인 게시물을 표시합니다. 모든 게시물 표시
레이블이 nmon인 게시물을 표시합니다. 모든 게시물 표시

2018년 2월 6일 화요일

Minsky 등 Linux on POWER 서버에서의 nmon을 이용한 자원 모니터링

nmon은 실시간 모니터링은 물론, CSV 포맷의 log를 남겨 장단시간에 걸친 사용률 추이를 볼 수 있는 유용한 freeware입니다.  원래 AIX용으로 개발되었으나, 지금은 Linux on POWER는 물론 Linux on x86도 지원됩니다.

nmon binary는 아래 site에서 download 받으실 수 있습니다.

http://nmon.sourceforge.net/pmwiki.php?n=Site.Download

위 site에서, IBM Minsky 또는 AC922인 경우는 nmon16g_power.tar.gz를 download 받으시면 됩니다.  이 속에는 Ubuntu와 SuSE, Redhat을 위해 compile된 binary들이 각각 들어있습니다.

nmon16g_power_ubuntu1604
nmon16g_power_sles122
nmon16f_power_rhel73LE

윗 파일을 PC에서 download 받아 Minsky 또는 AC922 서버에 upload하거나, 만약 서버가 internet에 연결되어 있다면 다음과 같이 직접 download 받으시면 됩니다.

u0017649@sys-91436:~$ wget http://sourceforge.net/projects/nmon/files/nmon16g_power.tar.gz

이 중에서 원하는 파일을 풀어냅니다.  가령 Minsky인 경우 Ubuntu일테니 다음과 같이 Ubuntu용 binary만 골라 풀어냅니다.

u0017649@sys-91436:~$ tar -zxvf nmon16g_power.tar.gz nmon16g_power_ubuntu1604
nmon16g_power_ubuntu1604

이제 이 파일에 실행 permission을 준 뒤, /usr/bin/nmon으로 copy를 하시면 됩니다.  꼭 /usr/bin 밑이 아니어도 상관없습니다.

u0017649@sys-91436:~$ chmod a+x nmon16g_power_ubuntu1604
u0017649@sys-91436:~$ sudo cp nmon16g_power_ubuntu1604 /usr/bin/nmon

실시간 모니터링을 위한 실행은 그냥 nmon이라고 치시면 됩니다.  이어서 키워드 문자를 입력하여 보고 싶은 패널을 보면 되는데, 기본적으로는 l (long term usage)와 t (top process), m (memory)과 d (disk) 등을 많이 사용합니다.   c (CPU usage)를 치면 SMT의 많은 logical HW thread가 다 display되므로 c는 잘 안 씁니다.




일정한 시간에 걸친 시스템 자원 사용률 모니터링을 위해 nmon을 사용하려면 다음과 같이 합니다.

u0017649@sys-91436:~$ nmon -f -s 120 -c 720 -m /tmp/nmon

위에서 -f는 csv의 spreadsheet 형태로 log를 받으라는 뜻이고, -s는 초 단위 간격, 그리고 -c는 그 간격으로 몇 번 받으라는 count입니다.  즉, 2분 단위로 720번, 즉 24시간을 받게 됩니다.  -m은 log를 떨어뜨릴 directory를 지정하는 옵션입니다.

여기서는 아래와 같이 떨군 경우의 log를 보겠습니다.
u0017649@sys-91436:~$ nmon -f -s 2 -c 720 -m /tmp/nmon

u0017649@sys-91436:~$ ls -l /tmp/nmon
-rw-rw-r-- 1 u0017649 u0017649  87917 Feb  5 20:45 sys-91436_180205_2042.nmon

이것을 PC로 download 받으신 뒤, 아래 site에서 nmon analyzer를 PC에 download 받으십시요.

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser

이 nmon analyzer는 Excel macro입니다.  이걸 열어보면 아래와 같이 버튼이 보이는데, 이걸 클릭한 뒤 아까 download 받은 *.nmon 파일을 선택하면 됩니다.  그러면 자동으로 로그를 분석하여 각종 그래프가 그려진 *.xls를 만들어 줍니다.





CPU나 disk는 직관적으로 보실 수 있습니다만, memory는 거의 언제나 free memory가 부족한 상태로 보일 겁니다.  이는 다른 OS들과 마찬가지로 Linux도 남는 free memory를 항상 file cache로 사용하기 때문입니다.  그러니 저 뒤쪽의 'VM' tab에 있는 'Swap space activity'가 0으로 유지된다면 memory 문제는 없다고 생각하셔도 됩니다.





단, 아직까지는 nmon에서 GPU에 대한 모니터링을 정식으로 지원하지는 않습니다.   일부 버전에서는 nvidia-smi에서 가져오는 정보를 이용하여 GPU usage를 display 해주기도 하는데 (a 옵션), 위와 같이 log를 받는 옵션은 없고, 또 nvidia-smi에서 보여주는 정보와 좀 다른 수치를 보여주는 등 아직 문제가 좀 있습니다.   현재 최신 nmon 버전에서는 이 GPU 모니터링 옵션은 빠져 있습니다.  GPU 자원에 대한 모니터링은 아직까지는 nvidia-smi를 이용하셔야 합니다.

2017년 2월 10일 금요일

Redhat 7.3이 설치된 Minsky 서버에 CUDA 설치하기

먼저 local disk에 Redhat 7.3의 package들을 복사해놓고 local YUM repository를 만들어야 합니다.  이를 위해 RHEL ISO image를 /mnt에 mount 합니다.

# mount -o loop ./RHEL-7.3-20161019.0-Server-ppc64le-dvd1.iso /mnt

# mkdir /home/YUM

ISO image의 Packages directory의 내용을 모두 /home/YUM으로 copy합니다.

# cp -r /mnt/Packages/* /home/YUM

그 중 먼저 YUM repository 구성에 필요한 package를 rpm으로 먼저 설치합니다.

# cd /home/YUM

# rpm -Uvh deltarpm*.rpm python-deltarpm*.rpm createrepo*.rpm

Repository를 만듭니다.

# createrepo /home/YUM

local.repo라는 이름의 repo 파일을 아래와 같이 만들어 줍니다.

# vi /etc/yum.repos.d/local.repo
[local]
name=Red Hat Enterprise Linux
failovermethod=priority
baseurl=file:///home/YUM
enabled=1
metadata_expire=0d
gpgcheck=0

다음으로는, 필요한 기초 package들을 설치합니다.

# yum install gcc openssh-server openssh-clients openssl-devel python-devel

이외에 아래 package들을 설치합니다.  

kernel kernel-devel kernel-headers gcc g++ bzip2-devel openssh-server openssh-clients openssl-devel libaio make automake wget vim-enhanced rsync zip unzip rdate lapack blas blas-devel atlas atlas-devel atlas-sse2-devel atlas-sse2 alsa-utils openmpi glibc libgomp tcsh numpy libpng libpng-devel libpng12 lapack-devel freetype-devel sqlite sqlite-devel curl curl-devel
portaudio portaudio-devel libsndfile libsndfile-devel ftp vsftpd dos2unix unix2dos python-devel


이어서 CUDA를 설치합니다.  CUDA 설치 파일은 다음과 같이 받을 수 있습니다.

# wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-rhel7-8-0-local-ga2-8.0.54-1.ppc64le-rpm

이를 rpm 명령으로 설치합니다.

# rpm -Uvh cuda-repo-rhel7-8-0-local-ga2-8.0.54-1.ppc64le-rpm

이렇게 설치된 것은 CUDA가 아니라 CUDA를 위한 local repo입니다.  이제 다시 YUM 명령으로 cuda를 설치합니다.

# yum list | grep cuda
cuda-repo-rhel7-8-0-local-ga2.ppc64le    8.0.54-1                  installed
cuda.ppc64le                             8.0.54-1                  cuda-8-0-local-ga2
cuda-8-0.ppc64le                         8.0.54-1                  cuda-8-0-local-ga2
cuda-command-line-tools-8-0.ppc64le      8.0.54-1                  cuda-8-0-local-ga2
cuda-core-8-0.ppc64le                    8.0.54-1                  cuda-8-0-local-ga2
cuda-cublas-8-0.ppc64le                  8.0.54-1                  cuda-8-0-local-ga2
cuda-cublas-dev-8-0.ppc64le              8.0.54-1                  cuda-8-0-local-ga2
cuda-cudart-8-0.ppc64le                  8.0.54-1                  cuda-8-0-local-ga2
cuda-cudart-dev-8-0.ppc64le              8.0.54-1                  cuda-8-0-local-ga2
cuda-cufft-8-0.ppc64le                   8.0.54-1                  cuda-8-0-local-ga2
cuda-cufft-dev-8-0.ppc64le               8.0.54-1                  cuda-8-0-local-ga2
cuda-curand-8-0.ppc64le                  8.0.54-1                  cuda-8-0-local-ga2
cuda-curand-dev-8-0.ppc64le              8.0.54-1                  cuda-8-0-local-ga2
cuda-cusolver-8-0.ppc64le                8.0.54-1                  cuda-8-0-local-ga2
cuda-cusolver-dev-8-0.ppc64le            8.0.54-1                  cuda-8-0-local-ga2
...


실제로 cuda를 설치하기 이전에, nvidia driver 설치에 필요한 dkms를 먼저 설치합니다.

# wget ftp://fr2.rpmfind.net/linux/fedora-secondary/development/rawhide/Everything/ppc64le/os/Packages/d/dkms-2.3-1.20161202gitde1dca9.fc26.noarch.rpm

# rpm -Uvh dkms-2.3-1.20161202gitde1dca9.fc26.noarch.rpm


이어서 실제로 cuda를 설치합니다.  대표명인 cuda package를 설치하면 모든 것이 다 설치됩니다.
중간에 아래와 같이 dkms 관련하여 non-fatal error가 하나 발생하지만 이는 무시해도 됩니다.

# yum install cuda
...
Installing : 1:nvidia-kmod-361.107-2.el7.ppc64le 26/41

Creating symlink /var/lib/dkms/nvidia/361.107/source ->
/usr/src/nvidia-361.107

DKMS: add completed.
Error! echo
Your kernel headers for kernel 3.10.0-514.el7.ppc64le cannot be found at
/lib/modules/3.10.0-514.el7.ppc64le/build or /lib/modules/3.10.0-514.el7.ppc64le/source.
Error! echo
Your kernel headers for kernel 3.10.0-514.el7.ppc64le cannot be found at
/lib/modules/3.10.0-514.el7.ppc64le/build or /lib/modules/3.10.0-514.el7.ppc64le/source.
warning: %post(nvidia-kmod-1:361.107-2.el7.ppc64le) scriptlet failed, exit status 1
Non-fatal POSTIN scriptlet failure in rpm package 1:nvidia-kmod-361.107-2.el7.ppc64le
Installing : 1:xorg-x11-drv-nvidia-361.107-1.el7.ppc64le 27/41
...

Installed:
cuda.ppc64le 0:8.0.54-1

Dependency Installed:
cuda-8-0.ppc64le 0:8.0.54-1 cuda-command-line-tools-8-0.ppc64le 0:8.0.54-1
cuda-core-8-0.ppc64le 0:8.0.54-1 cuda-cublas-8-0.ppc64le 0:8.0.54-1
cuda-cublas-dev-8-0.ppc64le 0:8.0.54-1 cuda-cudart-8-0.ppc64le 0:8.0.54-1
cuda-cudart-dev-8-0.ppc64le 0:8.0.54-1 cuda-cufft-8-0.ppc64le 0:8.0.54-1
cuda-cufft-dev-8-0.ppc64le 0:8.0.54-1 cuda-curand-8-0.ppc64le 0:8.0.54-1
cuda-curand-dev-8-0.ppc64le 0:8.0.54-1 cuda-cusolver-8-0.ppc64le 0:8.0.54-1
cuda-cusolver-dev-8-0.ppc64le 0:8.0.54-1 cuda-cusparse-8-0.ppc64le 0:8.0.54-1
cuda-cusparse-dev-8-0.ppc64le 0:8.0.54-1 cuda-demo-suite-8-0.ppc64le 0:8.0.54-1
cuda-documentation-8-0.ppc64le 0:8.0.54-1 cuda-driver-dev-8-0.ppc64le 0:8.0.54-1
cuda-drivers.ppc64le 0:361.107-1 cuda-license-8-0.ppc64le 0:8.0.54-1
cuda-misc-headers-8-0.ppc64le 0:8.0.54-1 cuda-npp-8-0.ppc64le 0:8.0.54-1
cuda-npp-dev-8-0.ppc64le 0:8.0.54-1 cuda-nvgraph-8-0.ppc64le 0:8.0.54-1
cuda-nvgraph-dev-8-0.ppc64le 0:8.0.54-1 cuda-nvml-dev-8-0.ppc64le 0:8.0.54-1
cuda-nvrtc-8-0.ppc64le 0:8.0.54-1 cuda-nvrtc-dev-8-0.ppc64le 0:8.0.54-1
cuda-runtime-8-0.ppc64le 0:8.0.54-1 cuda-samples-8-0.ppc64le 0:8.0.54-1
cuda-toolkit-8-0.ppc64le 0:8.0.54-1 cuda-visual-tools-8-0.ppc64le 0:8.0.54-1
nvidia-kmod.ppc64le 1:361.107-2.el7 xorg-x11-drv-nvidia.ppc64le 1:361.107-1.el7
xorg-x11-drv-nvidia-devel.ppc64le 1:361.107-1.el7 xorg-x11-drv-nvidia-libs.ppc64le 1:361.107-1.el7

Complete!

여기서 한번 rebooting을 한 뒤, GPU의 utilization을 모니터링 해봅니다.

$ nvidia-smi -l 5



CUDA 기본 sample 중 일부를 compile하여 수행해 봅니다.  해당 directory에서 make를 수행하면 nvcc가 수행되면서 실행 file이 만들어집니다.  그것을 수행해봅니다.

$ cd /usr/local/cuda/samples/0_Simple/simpleMultiCopy

$ sudo make
/usr/local/cuda-8.0/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode

$ ls -ltr
total 796
-rw-r--r--. 1 root root  11855 Oct 28 17:14 simpleMultiCopy.cu
-rw-r--r--. 1 root root    566 Oct 28 17:14 readme.txt
-rw-r--r--. 1 root root   2583 Oct 28 17:14 NsightEclipse.xml
-rw-r--r--. 1 root root   9110 Nov  3 20:35 Makefile
drwxr-xr-x. 2 root root    192 Feb 10 02:58 doc
-rw-r--r--. 1 root root  66664 Feb 10 03:13 simpleMultiCopy.o
-rwxr-xr-x. 1 root root 736864 Feb 10 03:13 simpleMultiCopy

$ ./simpleMultiCopy

제대로 나오면 준비 완료입니다.

root user에서 다음과 같이 기본 tuning을 합니다.  CPU clock의 governor를 기본인 ondemand에서 performance로 바꾸고, GPU autoboost도 enable합니다. 

# cpupower frequency-set --governor performance

# nvidia-smi -pm ENABLED

# nvidia-smi -ac 715,1480


모니터링에 편리한 tool인 nmon도 download 받습니다.

# wget http://sourceforge.net/projects/nmon/files/nmon16f_power_mr_nmon.tar.gz

이 gz file 속에는 ubuntu 및 SuSE 등 모든 ppc64 용 nmon binary가 다 들어있으니, 그 중 Redhat LE에 필요한 것만 뽑아내어 /usr/bin/nmon으로 copy 합니다.

# tar -ztvf nmon16f_power_mr_nmon.tar.gz
-rwx------ nag/rtc      555016 2016-05-19 17:12 nmon16f_power_ubuntu1604
-rwx------ nag/rtc      452341 2016-05-19 17:26 nmon16f_power_sles12
-rwx------ nag/rtc      438960 2016-05-19 17:31 nmon16f_power_sles113
-rwx------ nag/rtc      411549 2016-05-19 17:39 nmon16f_power_rhel65
-rwx------ nag/rtc      462722 2016-05-19 17:48 nmon16f_power_rhel71BE
-rwx------ nag/rtc      461411 2016-05-19 17:56 nmon16f_power_rhel71LE
-rwx------ nag/rtc      541671 2016-05-19 18:14 nmon16f_power_ubuntu1404

# tar -zxvf nmon16f_power_mr_nmon.tar.gz nmon16f_power_rhel71LE
nmon16f_power_rhel71LE

# chmod a+x nmon16f_power_rhel71LE
# cp nmon16f_power_rhel71LE /usr/bin/nmon

사용방법은 AIX의 nmon과 동일합니다만, adapter stats를 보여주는 a option은 없는 점이 아쉽습니다.