[클러스터] MODTRAN Benchmark 결과 보고서
==========================================================================
기상 연구소 응용 프로그램 MODTRAN Benchmark 결과 보고서
테스트 수행자 : 클루닉스 기술부 서 진우
테스트 날짜 : 2004년 7월 21일
==========================================================================
테스트 수행자 평가 결론 :
————————————————————————–
테스트 요구 사항 : MODTRAN 프로그램 구동 과정 중 생성된 MM5_user_card 를
ses.exe 실행명령으로 실행 했을 때의 실행 속도를 체크함.
실제 mm5_user_card.f 로 생성된 카드 생성 프로그램으로 생성되는 카드 수는
120221 개로 개별적으로 ses.exe 를 실행하기 때문에 과도한 DISK I/O 발생과
컴파일 시 많은 Memory 가 필요하였음.
결론 :
실제 성능 분석은 아래와 같습니다. Opteron AMD 64 시스템의 성능이 Xeon에 비해 2배
정도 단축되는 걸 볼수 있습니다.
아래 작업을 하면서 주요 체크 포인트는 SYSTEM I/O 부분이였습니다.
작업 과정에 많은 파일을 생성 하고 생성된 파일을 참조하여 작업을 수행함으로 실제
System i/o 부분이 성능 평가에 많은 영향을 주는 거 같았습니다. 그리고 ..컴파일러의
종류와 컴파일러 옵션에 따라 성능 차이가 나는 것을 확인 하였습니다.
Itenium 과 Xeon에 Intel Compiler를 설치 하여 작업을 수행 하였을 때 비해 옵테론의
PGI 컴파일러를 설치 하여 작업을 수행 했을 때 월등한 성능 향상이 있음을 확인했습니다.
뿐만 아니라 Xeon 에 PGI Compiler를 설치하고, Itenium 과 Intel compiler를
설치하여 기본 옵션으로 작업하였을때 성능이 거의 유사하게 나옴을 확인하였습니다.
( Itenium 의 컴파일 옵션을 보다 최적화 하니 Itenium 의 성능이 조금 우세하였음)
일단 성능의 영향을 주는 요소로 컴파일러의 영향은 상당히 크다는 것을 발견하였습니다.
이밖에 32bit 시스템 (Xeon) 과 64bit 시스템 ( Opteron / Itenium )의 차이로는 가장 큰 것이
System i/o 의 차이가 있었습니다.
실제 mm5_user_card.f 파일을 컴파일하고 실행했을 때 10만개 이상의 파일을 생성하는데
이때 system i/o를 체크하면 32bit 시스템의 경우 7000 ~10000 정도의 수치가 나오는데
64bit 의 시스템의 System i/o 를 체크하면 1500~2500 정도로 4배 이상의 i/o 측 성능향상이
있었습니다.
이는 실제 시스템의 System Bus 대역폭의 차이도 있겠지만..OS 의 차이도 상당부분 있는 걸로
추측합니다. 실제 Xeon 시스템의 경우 Redhat 9 Linux 이고 64bit 의 경우는 모두 Redhat advance Server
( Itenium ), Redhat Enterprise Server ( Opteron ) 버전입니다.
실제 Advance / Enterprise 급 Linux 의 경우 System i/o 향상을 위한 여러 가지 커널 패치가
되어져 있습니다. ( Memory i/o , Disk i/o )
이밖에 MODTRAN 의 프로그램 성격 상 Filesystem 의 선정 방식에 따라 많은 성능 향상을
기대할 수 있습니다. 작은 크기의 많은 파일 수를 가지고 있을 때 Disk i/o 의 안정성과 성능에서
타 파일시스템에 비해 월등한 성능을 나타내는 ReiserFS 를 채택함으로 보다 더 성능 향상을
기대할 수 있을 것입니다.
MODTRAN 프로그램의 경우 이후 실제 HPC 시스템 구축 시에 워낙 많은 파일들을 생성함으로
File Sync 방식만 시스템을 구축하는 것은 무리가 있으리라 봅니다. 부분적인 NFS 방식 도입이
필요할 거라 생각되고 또한 20여개의 계산 노드가 MODTRAN 유형의 디스크 작업을 한 개의
NFS 서버로 집중하게 되면 이 부분 역시 많은 문제가 될 요인이 있을거라 예상합니다.
Multi Network File System 구축을 고려하셔야 할 것입니다.
테스트 시간이 짧은 관계로 보다 더 자세한 테스트는 못해 보았지만.. Process / File System / Compiler
간의 성능 향상 요인에 대한 보다 더 객관적이고 자세한 테스트를 진행할 생각입니다.
—————————————————————————————-
– 설치 과정
—————————————————————————————-
MODTRAN_PATH : /data/MODTRAN
[clunix@otn2 DATA]$ cd /data/MODTRAN/MODTRAN/DATA/
[clunix@otn2 DATA]$ pgf90 -byteswapio MOLBMP.f
[clunix@otn2 DATA]$ ./a.out
PROGRAM MOLBMP: CONVERTS BETWEEN THE SEQUENTIAL-ACCESS ASCII
(FORMATTED) AND THE DIRECT-ACCESS BINARY (UNFORMATTED)
MODTRAN4 MOLECULAR BAND MODEL PARAMETER FILES
(THE FILE FROM WHICH DATA IS READ IS NOT DELETED).
ENTER 1 TO CREATE BINARY (UNFORMATTED) FILE FROM ASCII (FORMATTED) FILE
2 TO CREATE ASCII (FORMATTED) FILE FROM BINARY (UNFORMATTED) FILE
–> 1
ENTER ASCII BAND MODEL FILE NAME (MAX 150 CHARACTERS)
[ENTER 0 FOR NAME = “MOLBMP96.ASC”]
[ENTER 1 FOR NAME = “BMP96_15.ASC”]
[ENTER 2 FOR NAME = “BMP97_01.ASC”]
[ENTER 3 FOR NAME = “BMP97_15.ASC”]
–> 2
ENTER BINARY BAND MODEL FILE NAME (MAX 150 CHARACTERS)
[ENTER 0 FOR NAME = “MOLBMP96.BIN”]
[ENTER 1 FOR NAME = “BMP96_15.BIN”]
[ENTER 2 FOR NAME = “BMP97_01.BIN”]
[ENTER 3 FOR NAME = “BMP97_15.BIN”]
-> 2
WARNING: THE FILE “BMP97_01.BIN” ALREADY EXISTS.
DO YOU WISH TO OVERWRITE THE PRE-EXISTING FILE (Y/N)?
-> Y
*************************************************
* THIS MACHINE REQUIRES THAT OPTION “RECL” BE *
* SET EQUAL TO 60 IN ROUTINE “driver.f” *
*************************************************
실행이 끝나면 MODTRAN_PATH/MODTRAN/srcmod37/driver.f 가 생성된 driver.f 의 492열의 RECL 값이 60
으로 되어져 있는지 확인 ( 안되어져 있으면 수정 )
[clunix@otn2 DATA]$ cat ../srcmod37/driver.f | grep RECL
1 FORM=’UNFORMATTED’,RECL=60)
[clunix@otn2 DATA]$ cd novam
[clunix@otn2 novam]$ ./createnovam.exe
[clunix@otn2 novam]$ cd ../..
[clunix@otn2 MODTRAN] $ make
// objmod37 밑에 object 파일과 ses.exe 실행 파일 생성
[clunix@otn2 DATA]$ cd /data/MODTRAN/MM5_INTPUT/
[clunix@otn2 MM5_INTPUT]$ pgf90 -byteswapio read_mmout.f
[clunix@otn2 MM5_INTPUT]$ ./a.out
// MODTRAN_PATH/MM5_INPUT/DATA/MMOUT_DOMAIN3_00 파일 생성 // MODTRAN_PATH/DATA/LATLON.DAT 파일 생성
[clunix@otn2 MM5_INTPUT]$ cd ../PROG/
[clunix@otn2 PROG]$ pgf90 extra.f
[clunix@otn2 PROG]$ ./a.out
// MODTRAN_PATH/DATA/MM5_TOTAL_PROFILE.DAT 파일 생성
[clunix@otn2 PROG]$ pgf90 mm5_user_card.f
[clunix@otn2 PROG]$ ./a.out
// MODTRAN_PATH/OUT 에 MM5_001001.tp5 ~ MM5_346356.tp5 의 mm5_user_card 가 생성
[clunix@otn2 PROG]$ cd ../MODTRAN
[clunix@otn2 MODTRAN]$ echo ../OUT/MM5_001001 > modroot.in
[clunix@otn2 MODTRAN]$ ./ses.exe 001001
test=
../OUT/MM5_001001.plt
FORTRAN STOP
// 실제 ../OUT/MM5_001001.plt 의 생성 여부와 내용을 확인 한다.
[clunix@otn2 MODTRAN]$ vi ../OUT/MM5_001001.plt
———————————————————————
14.285714 2.46668E-04
14.265335 2.63368E-04
14.245014 2.57361E-04
14.224751 2.46913E-04
14.204545 2.81389E-04
14.184397 2.73469E-04
14.164306 3.09649E-04
14.144272 2.76672E-04
14.124293 3.08146E-04
14.104372 3.22488E-04
14.084507 3.24004E-04
14.064697 2.90607E-04
14.044944 3.47960E-04
14.025246 3.55437E-04
14.005602 3.50212E-04
13.986014 3.37998E-04
13.966480 4.10154E-04
———————————————————————-
마지막 ses.exe 실행 파일을 실행하는 속도 측정이 이번 테스트의 목적임
ses.exe 를 생성할려면 modroot.in 파일에 각 mm5_user_card 를 한개씩 넣어서 실행해야 한다. 총 card 수가
12만개 정도를 일일이 수작업으로 modroot.in 에 해당 card 를 적고 ses.exe 를 수행하는건 비효율적이며 결과의
신빙성이 떨어 짐으로 간단한 수행 Script 를 작성함.
# vi speedchk
———————————————————————-
#!/bin/sh
spdchk () {
list=`cat card_list`
for var in `echo $list`
do
echo $var > modroot.in
./ses.exe
done
}
if [ $# -ne 1 ]
then
echo -n ”
Input Start MM5_Card Number !!
”
exit;
fi
find ../OUT -name MM5_${1}*.tp5 > file_list.tmp
sort file_list.tmp > file_list sed -e ‘s/.tp5//’ file_list > card_list
time spdchk
———————————————————————-
[clunix@otn2 MODTRAN]$ ./speedchk 001001
test=
../OUT/MM5_001001.plt
FORTRAN STOP
real 0m0.914s
user 0m0.860s
sys 0m0.060s
————————————————————————–
==========================================================================
Opteron2 / Xeon / Itenium2 시스템 별 테스트 결과
==========================================================================
###################################################################
Opteron System ( AMD64 -244 Dual / ECC 2G / SCSI Ultra320 )
Compiler : pgi ( linux_amd64 용 )
Compile Otion : pgf90 -fast -byteswapio -tp k8-64
###################################################################
mm5_user_card 수 : 1개
ses.exe 실행 속도 : 0.8초
————————————————————
[clunix@otn1 MODTRAN]$ ./speedchk 001001
test=
../OUT/MM5_001001.plt
FORTRAN STOP
real 0m0.800s
user 0m0.740s
sys 0m0.060s
————————————————————
mm5_user_card 수 : 100 개
ses.exe 실행 속도 : 1분 24초 ( 84초 )
————————————————————
[clunix@otn1 MODTRAN]$ ./speedchk 0010
real 1m24.012s
user 1m13.050s
sys 0m9.360s
————————————————————
mm5_user_card : 346
ses.exe : 5분 11초 ( 311 초 )
————————————————————
[clunix@otn1 MODTRAN]$ ./speedchk 001
real 5m11.933s
user 4m16.130s
sys 0m40.560s
————————————————————
mm5_user_card 수 : 34254
ses.exe 실행 예상 속도 : 34254×0.85초 = 29115 초 ( 약 8시간 )
————————————————————
실제 3대의 옵테론 서버에서 전체(12만개의 mm5_user_card) 작업을
수행했을 때 위의 작업은 24시간이 수요될 수 있습니다.
———————————————————–
###################################################################
Xeon System ( Xeon 2.4 Dual / ECC 1G / SCSI Ultra320 )
Compiler : pgf ( linux_x86 용 )
Compile Otion : pgf90 -fast -tp p7 -Mvect=sse
###################################################################
mm5_user_card 수 : 1 개
ses.exe 실행 속도 : 1.9초
————————————————————-
[clunix@www3 MODTRAN]$ ./speedchk 001001
test=
../OUT/MM5_001001.plt
FORTRAN STOP
real 0m1.940s
user 0m1.930s
sys 0m0.010s
————————————————————
mm5_user_card : 100 개
ses 실행 속도 : 3분 11초 ( 191초 )
————————————————————
[clunix@www3 MODTRAN]$ ./speedchk 0010
real 3m11.489s
user 3m9.540s
sys 0m1.890s
————————————————————
mm5_user_card : 346 개
ses.exe 실행 속도 : 11분 11초 ( 671초 )
————————————————————
[clunix@www3 MODTRAN]$ ./speedchk 001
real 11m11.659s
user 10m59.940s
sys 0m11.180s
————————————————————
mm5_user_card : 34254
ses.exe 실행 예상 속도 : 34254×1.95초 = 66795초 ( 약 18 시간 30 분 )
———————————————————–
3대의 서버로 전체 작업 수행 시는 약 18시간 30분 수행 예상
———————————————————–
###################################################################
itenium2 HP-RX2600 ( IA-64 1400 Daul / ECC 1G / SCSI Ultra320 )
Compiler : Intel Fortran Compiler 8.0 ( Itenium 용 )
Compile Option : efc -quiet -O3 -tpp2 -convert big_endian
####################################################################
mm5_user_card 수 : 1개
ses.exe 실행 속도 : 1.4 초
———————————————————–
[root@rx2600 MODTRAN]# ./speedchk 001001
test=
../OUT/MM5_001001.plt
real 0m1.423s
user 0m0.965s
sys 0m0.355s
———————————————————–
mm5_user_card : 100개
ses 실행 속도 : 2분 33초 ( 153초 )
————————————————————
[root@rx2600 MODTRAN]# ./speedchk 0010
real 2m33.741s
user 1m55.591s
sys 0m33.521s
————————————————————
mm5_user_card : 346개
ses.exe 실행 속도 : 8분 50초 ( 530초 )
————————————————————
[root@rx2600 MODTRAN]# ./speedchk 001
Real 8m50.335s
User 6m44.244s
Sys 1m49.776s
————————————————————
mm5_user_card : 34254
ses.exe 실행 예상 속도 : 34254×1.5 = 51381초 ( 약 14시간 )
————————————————————
3대의 서버로 전체 작업 수행 시 14시간 소요 예상
————————————————————