학사학위논문 고해상도의수치모의를위한 리눅스병렬시스템구축 2001년 11월경북대학교천문대기과학과이정훈 (starwave@hanmail.net) 지도교수 : 박명구
< 제목차례> 1. 서론 1 2. System 구성및소프트웨어 2 2.1 System 구성도 2 2.2 시스템사양 2 2. 3 사용소프트웨어 2 3. MM5 설치 4 3.1 Linux 설치및환경설정 4 3.1.1 Linux 설치방법 4 3.1.2 GCC 설치 4 3.1.3 rsh, rlogin 설정 4 3.2 PGI Workstation(Trail Version) 설치 5 3.3 MPICH 설치 5 3.4 MM5-MPP설치 6 3.5 Test 7 3.6 Slave Node 설정 7 3.6.1 Linux기본설치 7 3.6.1.1 rsh, rlogin 7 3.6.1.2 NFS 7 3.6.2 계정관리 8 3.7 TEST 8 4. Channel Bonding 하기 9 4.1 Channel Bonding 이란? 9 4.2 Lan card 설치하기 9 4.3 Kernel 컴파일 9 4.4 설정하기 9 4.4.1 /etc/sysconfig/network 9 4.4.2 /etc/sysconfig/network-scripts/ifcfg-bond0 9 4.4.3 /etc/sysconfig/network-scripts/ifcfg-[eth0,eth1] 1 0 4.4.4 /etc/sysconfig/network-scripts/ifcfg-[eth1,eth2] 1 0 4.5 TEST 1 0 5. Diskless 하기 1 1 5.1 Diskless 란? 1 1 5.2 필요프로그램 1 1 5.3 etherboot 설정 1 1 5.4 kernel 컴파일 1 1 5.5 DHCP(Dynamic Host Configuration Protocol) 설정하기 12 5.6 tftp설정 1 3 5.7 IP변경하기 1 3 5.8 Slave Node 설정하기 1 4 5.8.1 /tftpboot/node2/etc/fstab 1 4
5.8.2 etc/sysconfig/network 1 4 5.9 문제점들 1 4 6. software RAID 1 6 6.1 RAID(Level 0) 란? 1 6 6.2 설정방법 1 6 6.2.1 Kernel 컴파일 1 6 6.2.2 프로그램설치 1 6 6.2.3 raidtab파일을작성 1 6 6.2.4 fdisk 1 7 6.2.5 Raid Disk 만들기 1 7 6.3 성능 TEST 1 7 7. Benchmark 1 8 8. 결론 1 9 첨부 1 2 1 첨부 2(8 노드로확장후) 2 7 첨부 3 (Linux@Work 2001년 11월호 - 디스크없는(diskless) 클러스터만들기) 2 9 첨부 4 (Linux@Work 2001년 9월호 - 리눅스활용사례/ 제주지방기상청) 4 3
1. 서론 MM5(Fifth generation Mesoscale Model) 는 PSU/NCAR(Pennsylvania State University - National Center for Atmospheric Research) 에서개발된중규모기상수치모델로, 1970년 대개발된이후로많은변화를거쳐현재다양한분야에서기본모델로활용되고있다. 고 해상도의수치모의에요구되는시스템사양과수행시간때문에, MM5는주로고가의 Cray 시스템에서운영되었지만최근 PC(Personal Computer) 기술의급격한발달과 PC 환경에서 Unix 환경을제공해주는운영체제인 Linux의개발로 PC와같은저가시스템에서도이용할 수있게되었다. 그러나단일 PC 시스템으로 MM5를이용한수치모의를하기에는운영시간 이지나치게길다는단점이여전히존재한다. 이러한단점을보완할수있는한방법으로 서높은사양의시스템을사용할수도있겠지만, 현재전세계적으로각종연구분야에서 각광받고있는 PC 클러스터링기술이보다근본적인대안이다. MM5는 1998년 2.8버전부터 IBM SP, Cray T3E, Fujitsu VPP, PC( 또는워크스테이션) Beowulf 클러스터와다중프로세서의분산메모리클러스터와같은분산메모리 (Distributed Memory - DM) 병렬컴퓨터를지원하고있다. MM5의분산메모리기능은 MPI(Message Passing Interface) 를이용해구현되었다. 이에저가고효율병렬시스템인 리눅스를이용하여병렬시스템을구축하였고, 실제성능을테스트해보았다. -1-
2. System 구성및소프트웨어 2.1 System 구성도 각노드별로하나의 CPU를가진컴퓨터로 4 대를구성하였다. Master Node에는 4개의 Ethernet Card 를가지고있고, 나머지 Slave Node에는각 3개의 Ethernet Card를가지고 있다. 3개의 8Port Switching HUB 를사용하여네트워크병목현상을줄였다. Master Node 에는 SCSI HDD, IDE HDD, CD-ROM, Graphic Card 등모든장치가있지만, Slave Node에는 HDD, CD-ROM 등을제거하였다. (Fig 1)(Fig 2)(Fig3) 2.2 시스템사양 시스템선정시많은고민이있었지만, 최근펜티엄(Pentium) 4보다뛰어난성능을발휘하 는 AMD 애슬론(Athlon) 1.4 를사용하였다. 애슬론 CPU는펜티엄 4에비해저렴한가격과 더욱뛰어난계산능력을보여주고있어선택하였고, 매인보드(MainBoard) 는 ASUS A7V133 을선택하였다. SCSI Controller는 Adaptec 7892A 를, HDD는 IBM 10000rpm 18GByte하드를 선택하였으며, Slave Node와함께구입한 IDE 하드디스크는시게이트바라쿠다(Seagate Barracuda) ATA IV 를구입하였다. 랜카드(Lan Card) 는 3Com 10/100Mbps를외부인터넷용 으로, Intel Express 10/100Mbps를내부 NFS 용으로, Realtek 8139 10/100Mbps 각2개씩을 계산용으로사용하였다.(Fig 4) 2.3 사용소프트웨어 O/S(Operation System) 는 RedHat 7.1 을설치하였고, 최신커널인 2.4.13 을사용하였다. 컴파일러(Compiler) 는 Gnu Compiler와 PGI f77 컴파일러, MPICH 를사용하였다. MM5는 MM5V3 를사용하였으며, Diskless를위해서 etherboot 를사용하였다.(Fig 5) Fig 1 System 구성 Fig 2 Slave Node 내부 -2-
HOSTNAME : node3,node3b eth0:192.168.0.31 bond0(eth1+2):192.168.0.32 HOSTNAME : node4,node4b eth0:192.168.0.41 bond0(eth1+2):192.168.0.42 사설망 인터넷 HOSTNAME : node2,node2b eth0:192.168.0.21 bond0(eth1+2):192.168.0.22 HOSTNAME : hydra.knu.ac.kr,node1,node1b eth 0:155.230.156.227 eth 1:192.168.0.11 bond0(eth2+3):192.168.0.12 Fig 3 System 구성도 Master Node Slave Node CPU AMD Athlon(Thunderbird) 1.33@1.4Ghz AMD Athlon(Thunderbird) 1.4Ghz Memory 756MB(PC133 SDRAM) 512MB(PC133 SDRAM) 19GB SCSI HDD 40GB IDE 3 (40GB 2=Software RAID) 3Com 10/100Mbps 1 LAN Intel 10/100Mbps 1 Realtek 10/100Mbps 2 HUB ReeNet 10/100Mbps Switching 8Port 3 Fig 4 각Node별System 사양 Intel 10/100Mbps 1 Realtek 10/100 2 Software Web Site O/S RedHat 7.1 (Kernel : 2.4.13) www.redhat.com Gnu compiler 2.95.3 bbs.hancom.com/databbs/pds15_files/gcc-2.95.3.tar.gz Compiler PGI Workstation 3.2 www.pgroup.com MPICH 1.2.2.2 www-unix.mcs.anl.gov/mpi/mpich/ MM5 MM5V3 + MMP MM5 www.mmm.ucar.edu/mm5/mm5-home.html Diskless etherboot-5.0.4 etherboot.sourceforge.net/doc/html/userman.html Fig 5 사용 Software -3-
3. MM5 설치 3.1 Linux 설치및환경설정 3.1.1 Linux 설치방법 Linux 설치시기본적인프로그램을설치하고, nfs, rsh, rlogin, Kernel Development, GCC 관련프로그램도함께설치하여야한다. Network은 Master Node에서 eth0는외부인터넷을 eth1 에는내부인터넷을연결하고, eth1 의네트워크환경을아래와같이설정한다. IP : 192.168.0.1 SUBNET : 255.255.255.0 네트워크 : 192.168.0.0 브로드케스트 : 192.168.0.255 3.1.2 GCC 설치 RedHat 7.1에는 GCC ver2.6 버전이들어있다. ver2.96은 GCC 정식버전이아닌테스트버 전으로 MPICH test 시에에러가발생한다. 따라서안정버전인 2.95.3으로다시설치하여 야한다. 먼저 http://bbs.hancom.com/databbs/pds15_files/gcc-2.95.3.tar.gz( 한글과컴퓨터) 에서 GCC 와라이브러리가함께들어있는프로그램을다운로드받는다. rpm -Uvh --nodep --force [Package_Name] 으로컴파일러와라이브러리를설치한다. 3.1.3 rsh, rlogin 설정 /etc/xinetd.d/rsh 파일을열어 disable = yes를 disable = no 로변경하고, 같은방법으 로 /etc/xinetd.d/rlogin 파일을열어 disable = yes를 disable = no 로변경한다. 그런 후 /etc/rc.d/initd.d/xinetd restart하여 xinetd 데몬을다시실행한다. /etc/hosts 파일을열어각노드들을등록해준다. example) /etc/hosts 127.0.0.1 hydra.knu.ac.kr hydra localhost.localdomain localhost 155.230.156.227 hydra.knu.ac.kr hydra 192.168.0.1 node1 192.168.0.2 node2 192.168.0.3 node3 192.168.0.4 node4 /etc/hosts.equiv 파일을열어각노드들에게rsh 로접속할수있게한다. -4-
example) /etc/hosts.equiv hydra node1 node2 node3 node4 3.2 PGI Workstation(Trail Version) 설치 사용자 shell은 csh 로변경한다. ftp://ftp.pgroup.com/x86/linux86-hpf-cc.tar.gz에서 PGI Workstation 을다운로드받고, /tmp나기타디렉토리에linux86-hpf-cc.tar.gz 파일의압축을푼다. install 파일을실행하여프로그램을설치한다. 설치경로 : /usr/local/pgi 설치후, license.dat 파일을출력을하여보관하도록한다. /etc/csh.cshrc 에경로를추가한다. setenv PGI /usr/local/pgi set path = ( $PGI/linux86/bin $path ) 다시로그인하거나, 현재 path 에도위의경로를추가해준다. 3.3 MPICH 설치 http://www-unix.mcs.anl.gov/mpi/mpich/index.html에서 mpich-1.2.2.2 를다운받고, mpich.tar.gz파일의압축을푼후 mpich-1.2.2.2 디렉토리로들어간다. setenv FC /usr/local/pgi/linux86/bin/pgf77 setenv FLINKER /usr/local/pgi/linux86/bin/pgf77./configure -prefix=/usr/local/mpich-1.2.2.2 을한다. 그런후 Makefile에 NOFF77=0 인지확인하고, 0 이아니면위의과정을다시확인해본다. make make testing -> 이과정에서에러가나는지잘확인해야한다. (GCC compiler를 2.96을 사용하면여기서에러가발생한다.) make install PREFIX=/usr/local/mpich-1.2.2.2 /etc/csh.cshrc 에경로를추가한다. set path = ( /usr/local/mpich-1.2.2.2 $path ) -5-
/usr/local/mpich-1.2.2.2/share/machines.linux 파일을열어, 각노드들의이름을입력한 다. example) /usr/local/mpich-1.2.2.2/share/machines.linux hydra node2 node3 node4 3.4 MM5-MPP설치 http://www.mmm.ucar.edu/mm5/ 에서 MM5V3와 MPP 를다운로드받는다. MM5.tar.gz 파일의압축을푼다. MPP.tar.gz파일을 MM5/ 디렉토리밑에푼다. configure.user를 configure.user.unix 로변경하고, configure.user.linux를 configure.user 로변경한다. configure.user.unix에서 7. MPP options 부분과 7g. Linux PCs. Need Portland Group pgf77 and MPICH. 부분을복사해서 configure.user의 6. Physics options 다 음부분에추가한다. configure.user의 7g.... 에서 LOCAL_LIBRARIES = -L$(LINUX_MPIHOME)/build/LINUX/ch_p4/lib -lfmpich -lmpich 를 LOCAL_LIBRARIES = -L$(LINUX_MPIHOME)/lib -lfmpich -lmpich 로수정하고, CFLAGS = -DMPI -I/usr/local/mpi/include 를 CFLAGS = -DMPI -I/usr/local/mpich/include 로수정한다. /home/mm5/mm5/mpp/rsl/rsl/ 로이동후, makefile 에서다음과같이수정한다. linux : linux : 한다. $(MAKE) -f makefile.linux LINUX_MPIHOME=$(LINUX_MPIHOME) $(MAKE_OPTS) all 를 $(MAKE) -f makefile.linux LINUX_MPIHOME=/usr/local/mpich $(MAKE_OPTS) all 로수정 MM5 최상위디렉토리로이동한다음 make mpp를하여 Run/mm5.mpp 를생성하고, make mm5.deck을하여 mm5.deck 을생성한후,./mm5.deck을실행하여 mm5.deck 을적용시킨다. -6-
모델초기자료(MM5 HomePage에서다운받는 test 자료 - input2mm5.tar.gz) 를 Run/ 디렉 토리로옮기거나링크시킨다. 3.5 Test ~mm5/mm5/run 에서 mpirun -np 1 mm5.mpp 로MM5 를테스트해볼수있다. 실행시간을측정해보려면, time sh -c 'mpirun -np 1 mm5.mpp' 로테스트해볼수있다. example) $ time sh -c 'mpirun -np 1 mm5.mpp' hydra.knu.ac.kr -- rsl_nproc_all 1, rsl_myproc 0 619.870u 2.680s 10:53.27 95.2% 0+0k 0+0io 4728pf+0w * 총소요시간은 10분 53 초이고, 평균적으로 95.2% 의 CPU 를사용하였다. 3.6 Slave Node 설정 3.6.1 Linux기본설치 Slave Node에는 kernel Development와 GCC 컴파일러는필요치않지만, nfs, rsh, rlogin 은반드시포함시켜야한다. 3.6.1.1 rsh, rlogin Master Node 와같이설정한다. /etc/hosts, /etc/hosts.equiv 파일도동일하게한다. mm5계정으로로그인하여 rsh node2와같이각노드들에게 rsh 로접속이가능한지, 확인 한다. 3.6.1.2 NFS nfs를설치하기위해서는 Master Node 에서 /etc/exports 파일을열어각노드들에게 nfs 로마운트할수있게한다. example) /etc/exports /home /home /home /usr/local /usr/local /usr/local node2(rw,no_root_squash,no_all_squash) node3(rw,no_root_squash,no_all_squash) node4(rw,no_root_squash,no_all_squash) node2(rw,no_root_squash,no_all_squash) node3(rw,no_root_squash,no_all_squash) node4(rw,no_root_squash,no_all_squash) -7-
Slave Node 에서는 /etc/fstab파일에서 Master Node 의 /home /usr/local 디렉토리를마 운드한다. example) /etc/fstab 192.168.0.1:/home /home nfs hard,intr,rw 192.168.0.1:/usr/local /usr/local nfs hard,intr,rw 3.6.2 계정관리 Master Node의 mm5계정과 Salve node의계정의 UID와 GID 가같은지확인하고, 기본 SHELL을역시csh 로변경하고, /etc/csh.cshrc 을동일하게만든다. 3.7 TEST Master Node에서 nfs 데몬은다시실행하고, Slave Node 는 /home 과 /usr/local을마운트 하거나리부팅한다. Master Node 에서 ~mm5/mm5/run에서 MM5 을실행한다. mpirun -np 4 mm5.mpp example) $ time sh -c 'mpirun -np 4 mm5.mpp' [mm5@hydra Run]$ time `mpirun -np 4 mm5.mpp` hydra.knu.ac.kr -- rsl_nproc_all 4, rsl_myproc 0 node3 -- rsl_nproc_all 4, rsl_myproc 2 node2 -- rsl_nproc_all 4, rsl_myproc 1 node4 -- rsl_nproc_all 4, rsl_myproc 3 208.500u 7.350s 4:38.59 77.4% 0+0k 0+0io 9410pf+0w * 총소요시간은 4분 38 분이고, 평균적으로 77.4% 의 CPU 를사용하였다. -8-
4. Channel Bonding 하기 4.1 Channel Bonding 이란? 2개이상의 Ethernet 을하나로묶어네트워크의대역폭을늘리는방법이다. 4.2 Lan card 설치하기 인터넷에연결된랜카드를 eth0 으로, bonding을할 Lan을 eth1과 eth2 로설정하였다. *A7V133의경우같은랜카드를 2개설정하면 AGP 슬롯에가까운쪽부터먼저인식한다. 예 를들어AGP슬롯에가까운쪽에3Com 랜카드가그다음에Realtek Lan 이있다면, 3Com 랜 카드를 eth0으로 Realtek 랜카드를 eth1 로인식한다. HUB를 2개사용하여 HUB1에는 Master Node의 eth1과 Slave Node의 eth0 을연결하고, HUB2 에는 Master Node의 eth2과 Slave Node의 eth1 을연결하였다. 4.3 Kernel 컴파일 Channel Bonding 을하기위해서는커널을컴파일해야한다. Network device support ---> <*> Bonding driver support 4.4 설정하기 먼저 iputil RPM Package 가설치되어있는지확인한다. 4.4.1 /etc/sysconfig/network 기존설정은그대로두고, GATEWAYDEV=bond0 를추가한다. 4.4.2 /etc/sysconfig/network-scripts/ifcfg-bond0 기존의 ifcfg-eth0의설정을유지하면서 DEVICE=eth0를 DEVICE=bond0 로변경한다. example) /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 USERCTL=no ONBOOT=yes BOOTPROTO=none BROADCAST=192.168.0.255-9-
NETWORK=192.168.0.0 NETMASK=255.255.255.0 IPADDR=192.168.0.12 4.4.3 /etc/sysconfig/network-scripts/ifcfg-[eth0,eth1] DEVICE=[eth0,eth1] -> Master Node = eth1, Slave Node = eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none 4.4.4 /etc/sysconfig/network-scripts/ifcfg-[eth1,eth2] DEVICE=[eth1,eth2] -> Master Node = eth2, Slave Node = eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none 4.5 TEST Channel Bonding을하기전에 network 데몬을정지시켰으면, network데몬을다시시작하면 되고, 그렇지않으면리부팅한다.( 다른방법도있다.) Master Node와 Salve Node 모두 Channel Bonding 이되어있는지확인한다. ifconfig을실행하여 bond0 가있는지확인하고, Slave와 ftp등을이용해서파일을다운로 드받아본다. FTP 로파일전송한결과 Channel Bonding 전 : 1.1e+03 Kbytes/sec Channel Bonding 후 : 2.2e+03 Kbytes/sec -10-
5. Diskless 하기 5.1 Diskless 란? Slave Node 에디스크를두지않고, Network 을이용하여부팅하는것을말한다. 5.2 필요프로그램 기존에 NFS, DHCP, tftp 가설치되어있는지확인한다. etherboot, mknbi (http://http://etherboot.sourceforge.net/) *kernel컴파일만으로 Diskless 를구현할수있지만, Lan Card의 EPPROM을사용할경우 EPPROM의한계인 512K 에커널크기를맞춰야하기때문에제약사항이많다. 따라서 etherboot 을이용하였다. 5.3 etherboot 설정 http://sourceforge.net/projects/etherboot에서 etherboot와 mknbi 을다운받는다. etherboot 의압축을풀고, mknbi는 RPM 으로설치한다. cd etherboot/src make make bin/boot1a.bin Floppy Disk 를넣고, cat bin/boot1a.bin bin32/eepro100.lzrom > /dev/fd0 #FloppyDisk에이미지생성 *eepro100.lzrom은 INTEL Ethernet Pro 100-82559 Chip 을위한이미지다. *realtek8139의경우rtl8139.lzrom 으로한다. 5.4 kernel 컴파일 기본적인설정과함께 Networking options -> IP:kernel level autoconfiguration -> IP:DHCP support -> IP:BOOTP support -> IP:RARP support Network device support -> Ethernet (10 or 100Mbit) -> 사용하는네트워크카드를선택한다.(Slave Node 는반드시커널에포함하여야한다.) File systems -11-
-> Network File System -> NFS 에관련된모든기능을선택 커널컴파일후 bzimage 를특정디렉토리로복사한다.( 여기서는 /tftpboot/) mknbi를실행하여 kernel에게 root 디렉토리가 nfs 라는것을알려준다. mknbi-linux bzimage --output=vmlinuz_node2.nb --ip=192.168.0.2:192.168.0.1:192.168.0.1:255.255.255.0:node2 *--ip=clientip:nfs-serverip:gatewayip:netmask:clienthostname 5.5 DHCP(Dynamic Host Configuration Protocol) 설정하기 /etc/dhcpd.conf 파일을열어편집한다. example) /etc/dhcpd.conf option broadcast-address 192.168.0.255; option domain-name-servers 192.168.0.11; #Broadcast #DNS option routers 192.168.0.11; subnet 192.168.0.0 netmask 255.255.255.0 { host node2 { #node2에대한설정 hardware ethernet 00:03:47:7a:XX:XX; #node2에있는 LAN의 MAC fixed-address 192.168.0.21; option root-path "/tftpboot/node2"; #node2의 #node2의 IP root directory filename "vmlinuz_node2.nb"; #node2의 kernel이있는위치 } host node3 { hardware ethernet 00:03:47:7a:XX:XX; fixed-address 192.168.0.31; option root-path "/tftpboot/node3"; filename "vmlinuz_node3.nb"; } host node4 { hardware ethernet 00:03:47:7a:XX:XX; fixed-address 192.168.0.41; option root-path "/tftpboot/node4"; filename "vmlinuz_node4.nb"; } } -12-
subnet 155.230.156.0 netmask 255.255.252.0 { } *node들의 MAC address를얻기위해서는 node들이 disk를가지고있다면 ping 테스트를 한후arp -a를해보면mac address 를알수있고, diskless라면앞에서 etherboot를이 용해만든floppy disk로부팅하면mac address 를알수있다. dhcpd 데몬을다시시작한다. 5.6 tftp설정 /etc/xinetd.d/tftp 에서 disable=yes를 disable=no로변경한후 xinetd 데몬을다시시작한다. root(/) 디렉토리에 /tftpboot 디렉토리를만들고, 각노트의이름으로디렉토리를만든다. example) ls -al /tftpboot drwxr-xr-x 17 root root 4096 11월 5 11:15 node2 drwxr-xr-x 17 root root 4096 11월 3 12:01 node3 drwxr-xr-x 17 root root 4096 11월 3 12:01 node4 /tftpboot/nodex/ 에 Master Node 의모든파일을권한(Permission) 과함께복사한다. cp -Rp / /tftpboot/nodex */home 과 /usr 등은제외하고복사해도된다. 나중에다시 nfs 로묶어도된다. 단, link로 연결하면 Slave 들이부팅후인식하지못한다. 5.7 IP변경하기 Master Node에는 4개의 Lan Card, Slave Node에는각 3개의 Lan Card 가장착된다. 2개의 Lan Card는 Channel Bonding을하므로 Master Node에는외부 IP를포함하여 3개의 IP가 Slave Node에는각 2개의 IP 가필요하다. Diskless를하기전에는 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4 로주었지만, 각 2개의사설 IP를주기위해 Fig 6 과같이 IP 를변경하였다. -13-
Node 변경전 변경후 이름 용도 155.230.156.227 eth1 155.230.156.227 hydra 외부인터넷 Master(node1) eth2 192.168.0.11 node1 NFS-ROOT 192.168.0.1 bond0 192.168.0.12 node1b MM5 node2 192.168.0.2 eth0 192.168.0.21 node2 NFS bond0 192.168.0.22 node2b MM5 node3 192.168.0.3 eth0 192.168.0.31 node3 NFS bond0 192.168.0.32 node3b MM5 node4 192.168.0.4 eth0 192.168.0.41 node4 NFS bond0 192.168.0.42 node4b MM5 Fig 6 IP 변경 Table 5.8 Slave Node 설정하기 앞에서설명한것과같이 Slave Node의 root 디렉토리는 Master Node 의 /tftpboot/nodex 이다. /tftpboot/nodex/etc 밑에있는파일들을편집한다. exports 파일을삭제한다. 5.8.1 /tftpboot/node2/etc/fstab root 를비롯하여 /usr, /home 디렉토리를마운트한다. example) /tftpboot/node2/fstab 192.168.0.11:/tftpboot/node2 / nfs defaults 0 0 192.168.0.11:/usr /usr nfs defaults 0 0 192.168.0.11:/usr/local /usr/local nfs defaults 0 0 192.168.0.11:/home /home nfs defaults 0 0 none /proc proc defaults 0 0 5.8.2 etc/sysconfig/network 각 Node 에맞게네트워크에관련된파일들은편집한다. 예제는첨부1 에나온다. 5.9 문제점들 위와같이 Channel Bonding과 Diskless 를하면문제가발생한다. 만약, 같은 Lan Card를 3 개를사용하면, Fig 7의 Slave Node의 PCI 4에있는 Lan Card를기 본으로하여 etherboot가 Master Node 를찾기때문에부팅하지못한다. 따라서 PCI 3에다른 종류( 여기서는 Intel) 의 Lan Card 로변경하여, etherboot에서 Floppy Disk로이미지만들때 해당되는 Lan Card 의이미지를넣으면, 원하는 Lan Card 를이용하여부팅을할수있다. -14-
SLOT Device Lan AGP VGA PCI 1 SCSI PCI 2 3Com Lan eth0 PCI 3 Intel Lan eth1 PCI 4 Realtek Lan Channel eth2 PCI 5 Realtek Lan Bonding eth3 2 1 3 SLOT Device Lan AGP VGA PCI 1 PCI 2 PCI 3 Intel Lan eth0 PCI 4 Realtek Lan eth1 PCI 5 Realtek Lan eth2 Master Node의 SLOT구성 Slave Node의 SLOT구성 Fig 7 3개의 Lan을구성하여나타나는문제점 1 : Slave Node가부팅되어 DHCP 서버를찾아간다. 2 : Master Node가 DHCP 정보를준다.( 기본적으로 eth2 의정보를준다.) 3 : Slave Node가 Master Node의 eth2에게서 kernel 을받아오려한다. 그리고 Channel Bonding을할때설명한 Lan card 의위치를주의해야한다. Fig 7에서보 는것과같이 mknbi-linux에서사용하는디바이스는 eth0( 1) 이다. 하지만, Master Node 의 dhcpd가 Slave Node에게넘겨주는 Master Node의 IP는 Channel Bonding된 Device의 IP( 2) 이다따라서 Slave Node에서 Master Node에있는 Kernel 을가져올수없다( 3). 원 인은정확히는알수없었지만, dhcpd를실행할때네트워크디바이스중가장먼저나오 는 ip 를사용하는것같았다. 따라서이것을해결하기위해서 /etc/rc.d/init.d/route.sh라는 shell script 를만들었다. 작동원리는 Channel Bonding 을해제하고, eth2와 eth3을중지시킨후 dhcpd 를실행한다. 그런후네트워크을 Channel Bonding 을한후다시실행한다. 그리고각디바이스별로보내는데이터의종류를지정하기위해서는 여지정하였다. example) /etc/rc.d/init.d/route.sh /etc/sysconfig/network-scripts/setorgnetwork.sh /etc/sysconfig/network-scripts/ifdown eth2 /etc/sysconfig/network-scripts/ifdown eth3 /etc/rc.d/init.d/dhcpd restart /etc/sysconfig/network-scripts/setbonding.sh route명령을사용하 #ChannelBonding 해제 script #eth2 정지 #eth3 정지 #dhcpd 재시작 #ChannelBonding로설정 route add 192.168.0.21 eth1 #192.168.0.21로가는데이터는 eth1로가게함 route add 192.168.0.22 bond0 #192.168.0.22로가는데이터는 bond0로가게함 route add 192.168.0.31 eth1 #192.168.0.31로가는데이터는 eth1로가게함 route add 192.168.0.32 bond0 #192.168.0.32로가는데이터는 bond0로가게함 route add 192.168.0.41 eth1 #192.168.0.41로가는데이터는 eth1로가게함 route add 192.168.0.42 bond0 #192.168.0.42로가는데이터는 bond0로가게함 -15-
6. software RAID 6.1 RAID(Level 0) 란? 하나의데이터를기록할때여러하드디스크에분산저장을함으로써빠른입출력을가능 하게한다. 6.2 설정방법 6.2.1 Kernel 컴파일 Kernel 컴파일시 RAID 와관련된것을선택해준다. CONFIG_BLK_MD=y CONFIG_AUTODETECT_RAID=y CONFIG_MD_LINEAR=y #Raid #Raid #Raid 구성을위한멀티플디바이스지원 자동인식 선형적인블럭디바이스접근모드 CONFIG_MD_STRIPED=y #Raid 0 CONFIG_MD_MIRRORING=y #Raid 1 CONFIG_MD_RAID5=y #Raid 5 커널컴파일후리부팅해야한다. 6.2.2 프로그램설치 raidtools RPM package 를받아설치한다. 6.2.3 raidtab파일을작성 /usr/share/doc/raidtools-0.90/ 에각 Level 별로예제파일이있다. example) /etc/raidtab raiddev /dev/md0 raid-level 0 # it's not obvious but this *must* be # right after raiddev persistent-superblock 1 # set this to 1 if you want autostart, # BUT SETTING TO 1 WILL DESTROY PREVIOUS # CONTENTS if this is a RAID0 array created # by older raidtools (0.40-0.51) or mdtools! chunk-size 4 nr-raid-disks 2 nr-spare-disks 0 device /dev/hde1 raid-disk 0 device /dev/hdg1 raid-disk 1-16-
6.2.4 fdisk fdisk를이용하여설정할하드디스크를파이션을 raid 로생성한다. example) fdisk /dev/hde Command (m for help): n Partition number (1-8): 1 First cylinder (0-1965): 0 Last cylinder or +size or +sizem or +sizek (0-1965, default 1965): 1965 Command (m for help): p Device Flag Start End Blocks Id System /dev/hde1 0 1965 1336200 83 Linux native Command (m for help): t Partition number (1-8): 1 Hex code (type L to list codes): fd Command (m for help): w 각값을하드디스크의용량에맞게입력을한다. 2 개( 또는그이상) 의하드디스크의용량은같이않아도되며, 종류또한달라도된다. 6.2.5 Raid Disk 만들기 Raid 파티션으로설정된하드디스크에 File System 을만든다. mkraid /dev/md0 mkfs /dev/mo0 Raid 생성이완료되었다. mount /dev/md0 /MODEL 6.3 성능 TEST 간단하게성능을테스트하기위해서약 2Gbyte 용량의파일을복사해보았다. (Fig 8) Source Disk Target Disk Time SCSI HDD IDE RAID 1분34.510초 SCSI HDD IDE HDD 1분19.301초 IDE RAID IDE RAID 1분34.034초 IDE HDD IDE HDD 2분55.269초 SCSI HDD SCSI HDD 3분19.867초 Fig 8 HDD 성능테스트 -17-
7. Benchmark Channel Bonding이나 Diskless를하기전의결과는 MM5에서제공하는 TEST데이터에관련된 결과만있다. 하지만이 Test 데이터로나온결과는실제한반도범위(Fig 9) 를 MM5에입력 할자료와는계산시간에많은차이가있고, 그결과역시상당한차이를보인다. 한반도 (Fig 9) 데이터를입력하면 Channel Bonding 을전 후의계산시간에는별차이가없었지만, Test데이터를사용하여계산을하면시간이 20% 정도더걸렸다. 이문제는데이터범위차이 에의해서계산양이나계산방식에많은차이가있는것으로보여진다. 계산범위위도경도참고 30Km 25N~45N 106E~143E Fig 11 10Km 32N~44N 118E~133E Fig 12 Fig 9 입력되는데이터범위 Master Node만실행약 18시간 10분 2Node에서실행약 9시간 15분 4Node 모두에서실생약 5시간 12분 소요시간 Fig 10 노드개수별실행시간 Fig 11 격자거리 30Km Fig 12 격자거리 10Km -18-
8. 결론 하나의 Node에서만 MM5를실행했을때약18시간 10 분이걸렸으나, Cluster를구성한후에 는 5시간 12분으로 350% 계산속도가향상되었다. Channel Bonding을하기전과후의정확한소요시간과 Diskless를하기전과후의정확한소 요시간은그당시시스템불안정으로측정하지못했지만, Channel Bonding으로인한성능 향상은거의없었고, 또한 Diskless 로인한성능저하또한크게나타나진않았다. 4Node 로는아직 Network 대역폭을 100Mbps 를넘지못하는것으로생각되어진다. 하지만차후 Node가늘어나면Channel Bonding 으로인한성능향상이있을것으로예상된다. 한가지아쉬운것은시간부족으로좀더많은벤치마크를하지못한점과모니터링프로 그램으로네트워크사용량등을확인하지못한것이아쉽다. -19-
참고자료 http://linux.sarang.net http://kldp.org Linux@Work 2001년9월호P190-202 http://www.redhat.com http://bbs.hancom.com/databbs/pds15_files/gcc-2.95.3.tar.gz http://www.pgroup.com http://www-unix.mcs.anl.gov/mpi/mpich/ http://www.mmm.ucar.edu/mm5/mm5-home.html http://etherboot.sourceforge.net/doc/html/userman.html http://www.metri.re.kr/~tkjang -20-
첨부 1 각종설정파일들 1. Master Node /etc/hosts 127.0.0.1 hydra.knu.ac.kr hydra localhost.localdomain localhost 155.230.156.227 hydra.knu.ac.kr hydra 192.168.0.11 node1 192.168.0.12 node1b 192.168.0.21 node2 192.168.0.22 node2b 192.168.0.31 node3 192.168.0.32 node3b 192.168.0.41 node4 192.168.0.42 node4b /etc/exports /tftpboot/node2 /tftpboot/node3 /tftpboot/node4 /usr /usr/local /home node2(rw,no_root_squash,no_all_squash) node3(rw,no_root_squash,no_all_squash) node4(rw,no_root_squash,no_all_squash) node*(rw,no_root_squash,no_all_squash) node*(rw,no_root_squash,no_all_squash) node*(rw,no_root_squash,no_all_squash) /etc/hosts.equiv hydra node1 node1b node2 node2b node3 node3b node4 node4b /etc/dhcpd.conf option broadcast-address 192.168.0.255; -21-
option domain-name-servers 192.168.0.11; option routers 192.168.0.11; subnet 192.168.0.0 netmask 255.255.255.0 { host node2 { hardware ethernet 00:03:47:7a:eb:f8; fixed-address 192.168.0.21; option root-path "/tftpboot/node2"; filename "vmlinuz_node2.nb"; } host node3 { hardware ethernet 00:03:47:7a:ec:57; fixed-address 192.168.0.31; option root-path "/tftpboot/node3"; filename "vmlinuz_node3.nb"; } host node4 { hardware ethernet 00:03:47:7a:ea:fc; fixed-address 192.168.0.41; option root-path "/tftpboot/node4"; filename "vmlinuz_node4.nb"; } } subnet 155.230.156.0 netmask 255.255.252.0 { } /etc/sysconfig/network NETWORKING=yes #HOSTNAME=hydra.knu.ac.kr HOSTNAME=node1b GATEWAY=bond0 GATEWAY=155.230.156.5 /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 USERCTL=no -22-
ONBOOT=yes BOOTPROTO=none BROADCAST=192.168.0.255 NETWORK=192.168.0.0 NETMASK=255.255.255.0 IPADDR=192.168.0.12 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static BROADCAST=155.230.156.255 IPADDR=155.230.156.227 NETMASK=255.255.252.0 NETWORK=155.230.156.0 ONBOOT=yes /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BROADCAST=192.168.0.255 IPADDR=192.168.0.11 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes BOOTPROTO=static /etc/sysconfig/network-scripts/ifcfg-eth2 DEVICE=eth2 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none /etc/sysconfig/network-scripts/ifcfg-eth3 DEVICE=eth3 USERCTL=no ONBOOT=yes -23-
MASTER=bond0 SLAVE=yes BOOTPROTO=none /etc/sysconfig/network-scripts/setbonding.sh /etc/rc.d/init.d/network stop cd /etc/sysconfig rm -f network ln -s network_bonding network cd /etc/sysconfig/network-scripts rm -f ifcfg-eth2 rm -f ifcfg-eth3 ln -s ifcfg-bond0_bonding ifcfg-bond0 ln -s ifcfg-eth2_bonding ifcfg-eth2 ln -s ifcfg-eth3_bonding ifcfg-eth3 /etc/rc.d/init.d/network start echo 'if you run manually "setbonding.sh", you must run "/etc/rc.d/init.d/route.sh"' /etc/sysconfig/network-scripts/setorgnetwork.sh /etc/rc.d/init.d/network stop cd /etc/sysconfig rm -f network ln -s network_org network cd /etc/sysconfig/network-scripts rm -f ifcfg-bond0 rm -f ifcfg-eth2 rm -f ifcfg-eth3 ln -s ifcfg-eth2_org ifcfg-eth2 ln -s ifcfg-eth3_org ifcfg-eth3 /etc/rc.d/init.d/network start /etc/rc.d/init.d/route.sh /etc/sysconfig/network-scripts/setorgnetwork.sh /etc/sysconfig/network-scripts/ifdown eth2 /etc/sysconfig/network-scripts/ifdown eth3 /etc/rc.d/init.d/dhcpd restart -24-
/etc/sysconfig/network-scripts/setbonding.sh route add node2 eth1 route add node2b bond0 route add node3 eth1 route add node3b bond0 route add node4 eth1 route add node4b bond0 2. Slave Node (node2) /tftpboot/node2/etc/hosts Master Node와같음 /tftpboot/node2/etc/hosts.equiv Master Node와같음 /tftpboot/node2/etc/fstab 192.168.0.11:/tftpboot/node2 / nfs defaults 0 0 192.168.0.11:/usr /usr nfs defaults 0 0 192.168.0.11:/usr/local /usr/local nfs defaults 0 0 192.168.0.11:/home /home nfs defaults 0 0 none /proc proc defaults 0 0 /tftpboot/node2/etc/sysconfig/network NETWORKING=yes HOSTNAME=node2b GATEWAY=192.168.0.11 GATEWAY=bond0 /tftpboot/node2/etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 USERCTL=no ONBOOT=yes BOOTPROTO=none BROADCAST=192.168.0.255 NETWORK=192.168.0.0 NETMASK=255.255.255.0 IPADDR=192.168.0.22-25-
/tftpboot/node2/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.0.255 IPADDR=192.168.0.21 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes /tftpboot/node2/etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=no /tftpboot/node2/etc/sysconfig/network-scripts/ifcfg-eth2 DEVICE=eth2 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=no /tftpboot/node2/etc/rc.2/init.d/route.sh route add node1 eth0 route add node1b bond0 route add node3 eth0 route add node3b bond0 route add node4 eth0 route add node4b bond0-26-
첨부 2 (2001년 12월 4 Node 추가) Master Node Slave Node CPU AMD Athlon MP 1600+ (1.4Ghz) 2 Fig 1 추가된 Node들의 System 사양 AMD Athlon XP 1600+ (1.4Ghz) M/B TYAN S2460 (Thunder K7) SUMA SUPERIOR 8KHA+ Memory 1GB(PC2100 DDR RAM) 512MB(PC2100 DDR RAM) HDD 19GB SCSI 80GB IDE 1 LAN HUB 3Com 10/100Mbps 1 Intel 10/100Mbps 1 Realtek 10/100Mbps 2 NETGEAR 10/100Mbps Switching 8Port 1 ( 변경) Intel 10/100Mbps 1 Realtek 10/100 2 Master Node는 Fig 1에보듯이 Dual Athlon MP 로변경하였고, 추가되는 3 Node는 Athlon XP 로하였다. 2001년 12월 10일현재 100% 설치가끝난것은아니지만, Slave Node들은모두테스트중 이다. 추가사항 1. HUB & 문제점들 기존에사용하던 ReeNet HUB를 NFS 용으로사용하면, 추가된 Slave Node들은부팅되지 않았다(DHCP를이용하여 IP 는가져오지만, Kernel 을가져오지못한다). 따라서 NFS용 HUB를 NETGEAR 10/100Mbps Switching HUB 를변경하여해결하였다. 무엇이 문제인지는알수없었으나, MainBoard와 HUB간의충돌이라고밖엔설명할수없었다 (CPU, RAM, Mainboard를제외한랜카드등다른장비는모두기존 Node 와동일하다). 그리고현재 ReeNet HUB를계산용으로만사용하지만이역시컴퓨터에전원을넣지않 았는데도, 몇몇 Node에서만 HUB의 LINK램프가들어오는등부품들의조화가완벽하다는 느낌을받지는못했다( 어떻게보면 MainBoard 문제일지도... 처음구입한 Asus MainBoard를사용하는 Node 에서는문제가없었다). 다음에 Node를추가하기위하여 HUB 를구입하거나또는다른 Cluster를구성할때는성능에는이상이없다고하여도어느 정도괜찮은 HUB 를사용해야할것으로생각된다( 실제계산용으로사용하기에는전혀 이상이없다 ). 2. Node 추가시잊어버렸던부분 Node를추가할때 hosts, hosts.equiv, exports등 RedHat의기본적인설정파일뿐만아 니라, Master Node와각 Node 의 /etc/rc.d/init.d/route.sh 도변경해주어야한다. -27-
example) 변경된 Master Node 의 /etc/rc.d/init.d/route.sh route add node2 eth0 route add node2b bond0 route add node3 eth0 route add node3b bond0 route add node4 eth0 route add node4b bond0 route add node5 eth0 route add node5b bond0 route add node6 eth0 route add node6b bond0 route add node7 eth0 route add node7b bond0 route add node8 eth0 route add node8b bond0 3. Dual Athlon MP 1600+ 에서 Test한결과계산은종료하는데 7시간 12 분걸렸다. 2 Node에서는 9시간 15분이소요된것에비해 2시간 3 분빠른결과이다. 평균 CPU 점유율이약 96% 에이르는등 2대의컴퓨터를연결하는것보다빠른결과는보여주었다. 물론 CPU와 RAM 의성능이향상된점도있지만, 생각했던것보다많이향상된결과를보여주었다. 하지만, 1CPU Node를 8대연결하여 Cluster를구성하는것과 2CPU Node를 4대연경하여 Cluster를구성하는것은어느쪽이빠르다고추정할수없었다. 실제테스트가있어야만알수있을것으로생각되어진다. 4. HomePage http://hanl.knu.ac.kr/~mm5 매일 04 시, 16시마다실행한 MM5 의결과를위홈페이지에실시간으로보여준다. (Design & Program : 원덕진, 장태규) 5. 8Node Benchmark 결과 (Dual Athlon System 을사용하지않고, 기존 Master Node 사용) 8 Node를모두사용하여 MM5모델을실행하면 3시간 15 분이걸렸다. 정확한시간은제시할수없으나, 7 Node를사용하여 MM5 모델은동작시킨결과와약 1시간 15 분정도차이가난다. 그리고평균 CPU 점유율또한약 5~10% 정도더상승한것으로생각된다. 2, 4, 8, 16,... 2 n 으로실행하였을때성능이더욱향상되는것으로생각된다. 마지막으로아주단순히생각했을때( 전처리과정과후처리과정을 8 Node일경우만포함했을때) 1 Node에서만계산했을때 18시간 10 분이소요되었고, 이시간은단순히 8로나누면 137 분이된다. 이시간을실제 8 Node 로계산하였을때의시간(3시간 15 분) 과비교하면각Node당평균가동률은약 70% 가된다. -28-