SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Ubuntu 로 슈퍼컴 만들기
작은 것들의 모임
속도
컴퓨터 속도의 한계
일반적으로 컴퓨터의 속도를 결정짓는 이론적인 요인
- 컴퓨터의 CPU clock 속도
- 단위 clock당 수행할 수 있는 instruction의 개수
보통 CPU clock 속도는 Hz로 표시
- 1초당 진동하는 진동수를 의미
연산 성능 척도 => MFlops, GFlps
1Gflops = 초당 10억번의 실수 연산 능력
Pentium III 800Mhz 의 이론 성능은 800Mhz * 1 CPU = 800 MFlops 가 됨
Pentium Xeon 2.4 의 이론성능은 2.4Ghz *2(SSE2) = 4.8 GFlops 가 됨
Ia64 1.4 GHz의 이론성능은 1.4 X 2 X 2 = 5.6 Gflops 가 됨
-> 실제 성능치는 이론성능의 58~60% 정도의 효울을 보임
1980년대~1990년대 초반
당시 슈퍼 컴퓨터들은 고성능의 단일 CPU를 탑재 하거나 벡터 레지스터(Vector register) 기능을 포함
해 CPU성능 향상을 통해 고성능 연산 능력을 제공하는 벡터형 SMP(Symmetric Multi Processor)가 주류
입출력 성능과 벡터 레지스터를 이용한 CPU의 계산 능력은 우수하였으나 가격이 매우 비싸다는 문제와
차후 시스템 확장성에 대한 한계를 가짐
- SMP의 경우, 시스템이 하나의 운영체제를 이용해 여러 개의
CPU를 작업량에 맞게 효율적으로 활용하는 기능으로써 여러
개의 CPU를 이용해 별다른 연결장치 없이 내부적으로 memory
를공유해 효율적인 성능을 높일 수 있었다.
- 2~4개의 프로세서를 갖는 SMP 시스템은 아주 간단하게
구축할 수 있지만, 그 이상의 프로세서를 갖는 시스템의 경우
에는 문제가 모든 프로세서가 모든 I/O 및 메모리 자원을 엑세
스할 수 있어야 하기 때문 자치 공유 자원이 병목 현상에 빠지
기 시작하며, CPU를 더 추가 할 경우 반환률이 감소 될 수도 있
다
1994년 ~1997년
- CPU 에 대 한 단 가 가 저 렴 해 졌 기 때 문 에 다 수 의 일 반 적 인 CPU(4 ~ 1024CPUs) 를 이 용 하 는
MPP(Massively Parallel Processor)형 병렬 슈퍼컴퓨터가 등장한 시기
- MPP란 프로그램을 여러 부분으로 나누어 여러 프로세서가 각 부분을 동시에 수행
- 각 프로세서는 운영체계와 메모리를 따로 가지며 프로세서간에는 message passing로 통신
- 상용 소프트웨어들의 부재와 병렬 시스템을 사용하는 사용자
들이 병렬화라는 특수한 개념의 프로그램 기법을 습득 해야 한
다는 치명적인 단점을 지님
- 사용자 측면의 단위 계산 성능 향상을 추구 할 때에는 다른 머
신 보다도 훨씬 좋은 성능을 병렬화를 통하여 보일 수 있음
- 사용자들이 병렬 슈퍼컴퓨터 시스템에 탑재되어 있는 CPU 수
만큼의 웍스테이션들이라고 생각 할 수 있어 작업량이 많을 때
는 여러 대의 웍스테이션들을 보유하고 있는 것처럼 Through-
Put(단위 시간당 작업 소화 능력)개념으로 확대해 사용할 수 있
다는 점.
1998년 ~ 현재
- 현 재 는 CC-NUMA(Cache Coherent Non-Uniform Memory Access) 라 는 DSMP(Distributed Shared
Memory Processor)구조의 슈퍼컴퓨터들이 인기를 끌며 주류를 이루고있음
-CC-NUMA 아키텍쳐의 슈퍼 컴퓨터는 손쉽게 작업 성능을 향상 시켜 줄 수 있는 SMP 구조와 최대 성능
을 보장해 줄수 있는 MPP 구조로 되어 있음
- 1996년부터 불어오기 시작한 리눅스 열풍은 기초과학 분야
및 연구소등에서 값비싼 슈퍼컴퓨터들을 구입해 활용하기보다
저비용으로 고성능을 보일 수 있는 리눅스 기반의 PC 클러스터
시스템이 등장하게됨
-클러스터(Cluster)는 MPP 보다 좀더 관리자 면에서 효율적인
운영체제가 필요한 시스템임,
-사용자가 직접 machine를 관리/통제(병렬프로그래밍)해야 한
다는 점이 MPP와 같다. 시스템들은 서로 memory를 제공 할 수
있는 연결 장치가 사용자의 기호(비용)에 맞게 구축 될 수 있으
며, 문제가 발생한 machine은 바로 교체가 가능하며 low
machine과 High machine을 혼합하여 사용할 수 있다는 특징이
있다.
현재
모임
작은 힘들의 모임
Cluster
•486DX4 100Mhz X 16node
•Each processor had 16M of 60ns DRAM.
•Each node had a 540M or 1G EIDE disk.
•Three 10Mbs bus-master ethernet cards
Beowulf
- Beowulf 는 1994 년 미 항 공 우 주 국 NASA 산 하 연 구 소 인
CESDIS(Center of Excellence in Space Data and information
Science)에서 Super 컴퓨터 Cray의 임대기간 종료에 대비하기 위
해 새로운 병렬처리 용 Super 컴퓨터의 개발을 시작하였고 16 노
드의 클러스터를 이용하여 만든 병렬 컴퓨터의 프로젝트명
- 베어울프는 8세기 영국의 서사시의 주인공
- 도날드 베커, 토머스 스털링
- Beowulf는 PC를 Ethernet과 같은 LAN으로 연결하여 만든 PC
Cluster에서 병렬처리 한 프로그램을 실행시켜서 Gflops급의
Super 컴퓨터를 구현것이다.
-1994 년 16 대 의 66MHz Intel 80486 + 10Mbps Ethernet ->
100MHz 486DX4 업그레이드 (74MFLOPS)
http://www.top500.org
Computing Node Block
Login Node
Block
Cluster Management Block
RAID
Storage
High-Performance
Computing Network
Management and Public
Network
NFS Node Block
다수의 컴퓨팅 시스템
무인증
자원의 공유
작업의 분배 및 모니터링
병렬 프로그램밍
OS
무인증
/etc/ssh
sshd_config 파일 수정
HostbasedAuthentication yes
ssh_config 파일 수정
HostbasedAuthentication yes
EnableSSHKeysign yes
SSH
SSH
Key 복사
cp ssh_host_rsa_key.pub ssh_known_hosts2
ssh_known_host2 파일 수정
of,192.168.100.250 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDIWbfwXYNe04NtEYqhEP+LzN9a3VxfFX0SQ6m
03dqjF1q1vf168EE5XhH6My6bso7I60FbfnAkjpaRukXaWam8C3aRgrykNXU5qP+ejWRK
5D54PQDIxzfTDvyLXabZwfA/dSL4BV1gjB/8BUPbCipRnqOPOJCeaoBOJMkh1eE3WkCI7x
uZwzXi5B7XT/SkIYUuTpX9OkEnhxRImQlSD1VDcT/yBtwWBKqzaFJ629X0uQHnshatVdM
60DVJVHvhj2j3CkIuquY4InSnUDLdOZmbpJfL8If1pkL8Mel67EIfF6a25TuTH605d6xzd0N
JNNuE9wth1sQ1HJzj//o1aolx root@openform
ssh_known_host2 파일 안에 다른 노드의 키 추가
SSH
SSH
자원의 공유
sudo apt-get install nfs-kernel-server
NFS
NFS
NFS
작업의 분배
http://clusterresources.com/downloads/torque 에서 version 2.3.6을 다운로드
tar zxf torque-2.3.6.tar.gz
./configure --with-debug --with-scp --disable-gcc-warnings --prefix=/usr
make
make packages
$ ./torque-package-clients-linux-x86_64.sh --install
$ ./torque-package-devel-linux-x86_64.sh --install
$ ./torque-package-doc-linux-x86_64.sh --install
$ ./torque-package-mom-linux-x86_64.sh --install
./torque-package-server-linux-x86_64.sh --install
$ ./torque-package-clients-linux-x86_64.sh --install
$ ./torque-package-devel-linux-x86_64.sh --install
$ ./torque-package-doc-linux-x86_64.sh --install
$ ./torque-package-mom-linux-x86_64.sh --install
TORQUE
sudo apt-get install torque-server
sudo apt-get install torque-scheduler
sudo apt-get install torque-mom
sudo apt-get install torque-client torque-client-x11
TORQUE
TORQUE
TORQUE
TORQUE
TORQUE
TORQUE
TORQUE
모니터링
sudo apt-get install ganglia-monitor
sudo apt-get install ganglia-webfrontend
sudo apt-get install --reinstall ganglia-monitor
sudo apt-get install ganglia-monitor
Ganglia
병렬 프로그래밍
MPI(Message Passing Interface)는 병령 실행 프로그램에서 노드에 분산된 프로세스
사이에 정보를 교환하는 메시지를 전달하는 방법을 정의한 규약 중 하나이다.
MPICH 는 MPI 표준규약이 적용된 프리, 오픈소스이다. 이 프로그램은 Argonne
National Lab 과 Mississippi State University 에서 작성하였으며 MPI-1.1을 따른
MPICH 와 MPI-2 에 따른 MPICH2 가 있다.
http://www-unix.mcs.anl.gov/mpi/mpich/
configure –prefix=/home/share/mpich -cc=gcc -fc=f77
$ make
$ make install
MPICH
1. SUM
다음 프로그램은 1부터 100까지 더하는 프로그램으로 Broadcast 연산과 Reduce 연산을 하도록 되어 있고 프로
그램 흐름은 다음과 같다.
위 그림과 같이 node01 은 ( 1,3 5,7, 9.... 99)까지 합을 node02 는 ( 2,4,6,8,10 ... 100)가지의 합을 구하게 되어
이를 합하게 되는 구조이다.
MPICH
---------------- sum.c Source -----------------------
#include <stdio.h>
#include <sys/time.h>
#include "mpi.h"
static struct timeval time_value1;
static struct timeval time_value2;
#define START_TIMER gettimeofday (&time_value1, (struct timezone *) 0)
#define STOP_TIMER gettimeofday (&time_value2, (struct timezone *) 0)
#define ELAPSED_TIME ((double) ((time_value2.tv_usec - time_value1.tv_usec)*0.001 + ((time_value2.tv_sec -
time_value1.tv_sec) * 1000.0 )))
MPICH
int main (int argc, char *argv[])
{
   int done = 0;
   int number = 0;
   int sum;
   int mysum = 0;
   int iproc;
   int nproc;
   int i;
   MPI_Init (&argc, &argv);
MPI_Comm_size (MPI_COMM_WORLD, &nproc);
MPI_Comm_rank (MPI_COMM_WORLD, &iproc);
MPICH
   while (!done)
   {
       if (iproc == 0)
       {
           if (number == 0) number = 100;
           else number = 0;
           START_TIMER;
           }
MPI_Bcast (&number, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPICH
        if (number == 0) done = 1;
        else
        {
            for (i = iproc + 1; i <= number; i+= nproc) mysum += i;
            MPI_Reduce (&mysum, &sum, 1, MPI_INTEGER, MPI_SUM, 0, MPI_COMM_WORLD);
            if (iproc == 0)
            {
                 STOP_TIMER;
                 printf ("sum is %dn", sum);
                 printf ("elapsed time is %.3fmsn", ELAPSED_TIME);
             }
          }
    }
MPI_Finalize ();
}
MPICH
MPICH
컴파일 방법 :
기존
cc -o ksy sumcc
MPI 사용시
mpicc -o ksy sum.c
실행 방법 : mpirun -np {프로세서 수} 실행 파일
Mpirun -np 12 ksy
실제 이 프로그램을 CPU 1개가 있는 노드 2개에 실행을 하여 보면 다음과 같다.
1 CPU 사용 시
[baron@node01 TEST]$ mpirun -np 1 SUM
sum is 5050
elapsed time is 0.061ms
2 CPU 사용 시
[baron@node01 TEST]$ mpirun -np 2 SUM
sum is 5050
elapsed time is 3.547ms
문제 :
병렬 처리에도 불구 하고 이 결과가 나오는 이유는 무엇인가?
MPICH
답 :
이유는, 실제 계산을 보면, 2CPU로 나누어 계산은 빠르나 이를 합하는 과정에서
네트워크 사용에 의한 트래픽 결과 이다. 이 때문에 1 CPU 보다 늦은 결과가 나온
다. 그러나 만일 100 가지 합이 아니라 1억까지 합이라면 그 결과는 달라진다.
결론 :
병렬 처리를 할 경우 다양한 문제에 대한 정확한 접근이 필요로 한다.
위 예제에서 보여 주듯 문제에 대한 정확한 이해와 그 성능에 대한 정확한 이해가
필요로 한다.
MPICH
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)

Contenu connexe

Tendances

2node cluster
2node cluster2node cluster
2node cluster
sprdd
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
sprdd
 
Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0
sprdd
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
Ji-Woong Choi
 

Tendances (20)

[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
[오픈소스컨설팅]초간단 Cubrid HA구성
[오픈소스컨설팅]초간단 Cubrid HA구성[오픈소스컨설팅]초간단 Cubrid HA구성
[오픈소스컨설팅]초간단 Cubrid HA구성
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7
 
Solaris11 기초 자료
Solaris11 기초 자료Solaris11 기초 자료
Solaris11 기초 자료
 
Solaris messages v0.2
Solaris messages v0.2Solaris messages v0.2
Solaris messages v0.2
 
2node cluster
2node cluster2node cluster
2node cluster
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
 
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3
 
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
Welcome to keystone the open stack identity service_v1.0.0-20141208-1212
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치
 
Openstack Instance Resize
Openstack Instance ResizeOpenstack Instance Resize
Openstack Instance Resize
 
Mininet
MininetMininet
Mininet
 
Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0Glusterfs 구성제안서 v1.0
Glusterfs 구성제안서 v1.0
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
[242]open stack neutron dataplane 구현
[242]open stack neutron   dataplane 구현[242]open stack neutron   dataplane 구현
[242]open stack neutron dataplane 구현
 
Rhel7 beta information
Rhel7 beta informationRhel7 beta information
Rhel7 beta information
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 

Similaire à 김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)

Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
흥배 최
 

Similaire à 김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D) (20)

Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
Nvidia architecture
Nvidia architectureNvidia architecture
Nvidia architecture
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Free rtos seminar
Free rtos seminarFree rtos seminar
Free rtos seminar
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOps
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart Contract
 
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
 
MCU(nanheekim)
MCU(nanheekim)MCU(nanheekim)
MCU(nanheekim)
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍Visual C++10을 활용한 병렬 프로그래밍
Visual C++10을 활용한 병렬 프로그래밍
 
Tcp summary
Tcp summaryTcp summary
Tcp summary
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
Chapter2 ap group11
Chapter2 ap group11Chapter2 ap group11
Chapter2 ap group11
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
실무로 배우는 시스템 성능 최적화 8부 - 1,2,3장
 
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
20150502 unix v6로 배우는 커널의 원리와 구조 1 김지은
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 

Plus de Ubuntu Korea Community

Plus de Ubuntu Korea Community (20)

권총 사격하러 우분투 써밋 참가한 썰.txt
 권총 사격하러 우분투 써밋 참가한 썰.txt  권총 사격하러 우분투 써밋 참가한 썰.txt
권총 사격하러 우분투 써밋 참가한 썰.txt
 
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
 
우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리우분투한국커뮤니티 2022년 활동 정리
우분투한국커뮤니티 2022년 활동 정리
 
우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회우분투한국커뮤니티 2022년 신년회
우분투한국커뮤니티 2022년 신년회
 
Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea at FOSSASIA Summit 2022Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea at FOSSASIA Summit 2022
 
Overview of the Flatpak
Overview of the FlatpakOverview of the Flatpak
Overview of the Flatpak
 
Usage of the MQTT
Usage of the MQTTUsage of the MQTT
Usage of the MQTT
 
Open Source and the License
Open Source and the LicenseOpen Source and the License
Open Source and the License
 
Memory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack TechniquesMemory Attack - The Memory Attack Techniques
Memory Attack - The Memory Attack Techniques
 
Python을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop ApplicationPython을 이용한 Linux Desktop Application
Python을 이용한 Linux Desktop Application
 
나의 우분투 이야기
나의 우분투 이야기나의 우분투 이야기
나의 우분투 이야기
 
Malware Dataset & Ubuntu
Malware Dataset & UbuntuMalware Dataset & Ubuntu
Malware Dataset & Ubuntu
 
케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들케라스와 함께하는 재밌는 딥러닝 활용 사례들
케라스와 함께하는 재밌는 딥러닝 활용 사례들
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티9월 서울지역 세미나 GPG 키사이닝 파티
9월 서울지역 세미나 GPG 키사이닝 파티
 
우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고우분투한국커뮤니티 2018년도 상반기 활동 보고
우분투한국커뮤니티 2018년도 상반기 활동 보고
 
새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조새로운 Libhanjp 라이브러리 구조
새로운 Libhanjp 라이브러리 구조
 
스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기스타트업에서 하드웨어 개발 프로세스 도입하기
스타트업에서 하드웨어 개발 프로세스 도입하기
 
기계들의 소셜 미디어, MQTT
기계들의 소셜 미디어, MQTT기계들의 소셜 미디어, MQTT
기계들의 소셜 미디어, MQTT
 
모바일에 딥러닝 심기
모바일에 딥러닝 심기모바일에 딥러닝 심기
모바일에 딥러닝 심기
 

김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)

  • 1. Ubuntu 로 슈퍼컴 만들기 작은 것들의 모임
  • 3.
  • 4. 컴퓨터 속도의 한계 일반적으로 컴퓨터의 속도를 결정짓는 이론적인 요인 - 컴퓨터의 CPU clock 속도 - 단위 clock당 수행할 수 있는 instruction의 개수 보통 CPU clock 속도는 Hz로 표시 - 1초당 진동하는 진동수를 의미 연산 성능 척도 => MFlops, GFlps 1Gflops = 초당 10억번의 실수 연산 능력 Pentium III 800Mhz 의 이론 성능은 800Mhz * 1 CPU = 800 MFlops 가 됨 Pentium Xeon 2.4 의 이론성능은 2.4Ghz *2(SSE2) = 4.8 GFlops 가 됨 Ia64 1.4 GHz의 이론성능은 1.4 X 2 X 2 = 5.6 Gflops 가 됨 -> 실제 성능치는 이론성능의 58~60% 정도의 효울을 보임
  • 5. 1980년대~1990년대 초반 당시 슈퍼 컴퓨터들은 고성능의 단일 CPU를 탑재 하거나 벡터 레지스터(Vector register) 기능을 포함 해 CPU성능 향상을 통해 고성능 연산 능력을 제공하는 벡터형 SMP(Symmetric Multi Processor)가 주류 입출력 성능과 벡터 레지스터를 이용한 CPU의 계산 능력은 우수하였으나 가격이 매우 비싸다는 문제와 차후 시스템 확장성에 대한 한계를 가짐 - SMP의 경우, 시스템이 하나의 운영체제를 이용해 여러 개의 CPU를 작업량에 맞게 효율적으로 활용하는 기능으로써 여러 개의 CPU를 이용해 별다른 연결장치 없이 내부적으로 memory 를공유해 효율적인 성능을 높일 수 있었다. - 2~4개의 프로세서를 갖는 SMP 시스템은 아주 간단하게 구축할 수 있지만, 그 이상의 프로세서를 갖는 시스템의 경우 에는 문제가 모든 프로세서가 모든 I/O 및 메모리 자원을 엑세 스할 수 있어야 하기 때문 자치 공유 자원이 병목 현상에 빠지 기 시작하며, CPU를 더 추가 할 경우 반환률이 감소 될 수도 있 다
  • 6. 1994년 ~1997년 - CPU 에 대 한 단 가 가 저 렴 해 졌 기 때 문 에 다 수 의 일 반 적 인 CPU(4 ~ 1024CPUs) 를 이 용 하 는 MPP(Massively Parallel Processor)형 병렬 슈퍼컴퓨터가 등장한 시기 - MPP란 프로그램을 여러 부분으로 나누어 여러 프로세서가 각 부분을 동시에 수행 - 각 프로세서는 운영체계와 메모리를 따로 가지며 프로세서간에는 message passing로 통신 - 상용 소프트웨어들의 부재와 병렬 시스템을 사용하는 사용자 들이 병렬화라는 특수한 개념의 프로그램 기법을 습득 해야 한 다는 치명적인 단점을 지님 - 사용자 측면의 단위 계산 성능 향상을 추구 할 때에는 다른 머 신 보다도 훨씬 좋은 성능을 병렬화를 통하여 보일 수 있음 - 사용자들이 병렬 슈퍼컴퓨터 시스템에 탑재되어 있는 CPU 수 만큼의 웍스테이션들이라고 생각 할 수 있어 작업량이 많을 때 는 여러 대의 웍스테이션들을 보유하고 있는 것처럼 Through- Put(단위 시간당 작업 소화 능력)개념으로 확대해 사용할 수 있 다는 점.
  • 7. 1998년 ~ 현재 - 현 재 는 CC-NUMA(Cache Coherent Non-Uniform Memory Access) 라 는 DSMP(Distributed Shared Memory Processor)구조의 슈퍼컴퓨터들이 인기를 끌며 주류를 이루고있음 -CC-NUMA 아키텍쳐의 슈퍼 컴퓨터는 손쉽게 작업 성능을 향상 시켜 줄 수 있는 SMP 구조와 최대 성능 을 보장해 줄수 있는 MPP 구조로 되어 있음 - 1996년부터 불어오기 시작한 리눅스 열풍은 기초과학 분야 및 연구소등에서 값비싼 슈퍼컴퓨터들을 구입해 활용하기보다 저비용으로 고성능을 보일 수 있는 리눅스 기반의 PC 클러스터 시스템이 등장하게됨 -클러스터(Cluster)는 MPP 보다 좀더 관리자 면에서 효율적인 운영체제가 필요한 시스템임, -사용자가 직접 machine를 관리/통제(병렬프로그래밍)해야 한 다는 점이 MPP와 같다. 시스템들은 서로 memory를 제공 할 수 있는 연결 장치가 사용자의 기호(비용)에 맞게 구축 될 수 있으 며, 문제가 발생한 machine은 바로 교체가 가능하며 low machine과 High machine을 혼합하여 사용할 수 있다는 특징이 있다.
  • 9.
  • 10.
  • 11.
  • 15. •486DX4 100Mhz X 16node •Each processor had 16M of 60ns DRAM. •Each node had a 540M or 1G EIDE disk. •Three 10Mbs bus-master ethernet cards Beowulf - Beowulf 는 1994 년 미 항 공 우 주 국 NASA 산 하 연 구 소 인 CESDIS(Center of Excellence in Space Data and information Science)에서 Super 컴퓨터 Cray의 임대기간 종료에 대비하기 위 해 새로운 병렬처리 용 Super 컴퓨터의 개발을 시작하였고 16 노 드의 클러스터를 이용하여 만든 병렬 컴퓨터의 프로젝트명 - 베어울프는 8세기 영국의 서사시의 주인공 - 도날드 베커, 토머스 스털링 - Beowulf는 PC를 Ethernet과 같은 LAN으로 연결하여 만든 PC Cluster에서 병렬처리 한 프로그램을 실행시켜서 Gflops급의 Super 컴퓨터를 구현것이다. -1994 년 16 대 의 66MHz Intel 80486 + 10Mbps Ethernet -> 100MHz 486DX4 업그레이드 (74MFLOPS)
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. Computing Node Block Login Node Block Cluster Management Block RAID Storage High-Performance Computing Network Management and Public Network NFS Node Block
  • 25.
  • 26. 다수의 컴퓨팅 시스템 무인증 자원의 공유 작업의 분배 및 모니터링 병렬 프로그램밍
  • 27. OS
  • 28.
  • 29.
  • 31.
  • 32. /etc/ssh sshd_config 파일 수정 HostbasedAuthentication yes ssh_config 파일 수정 HostbasedAuthentication yes EnableSSHKeysign yes SSH
  • 33. SSH
  • 34. Key 복사 cp ssh_host_rsa_key.pub ssh_known_hosts2 ssh_known_host2 파일 수정 of,192.168.100.250 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIWbfwXYNe04NtEYqhEP+LzN9a3VxfFX0SQ6m 03dqjF1q1vf168EE5XhH6My6bso7I60FbfnAkjpaRukXaWam8C3aRgrykNXU5qP+ejWRK 5D54PQDIxzfTDvyLXabZwfA/dSL4BV1gjB/8BUPbCipRnqOPOJCeaoBOJMkh1eE3WkCI7x uZwzXi5B7XT/SkIYUuTpX9OkEnhxRImQlSD1VDcT/yBtwWBKqzaFJ629X0uQHnshatVdM 60DVJVHvhj2j3CkIuquY4InSnUDLdOZmbpJfL8If1pkL8Mel67EIfF6a25TuTH605d6xzd0N JNNuE9wth1sQ1HJzj//o1aolx root@openform ssh_known_host2 파일 안에 다른 노드의 키 추가 SSH
  • 35. SSH
  • 37.
  • 38. sudo apt-get install nfs-kernel-server NFS
  • 39. NFS
  • 40. NFS
  • 42.
  • 43. http://clusterresources.com/downloads/torque 에서 version 2.3.6을 다운로드 tar zxf torque-2.3.6.tar.gz ./configure --with-debug --with-scp --disable-gcc-warnings --prefix=/usr make make packages $ ./torque-package-clients-linux-x86_64.sh --install $ ./torque-package-devel-linux-x86_64.sh --install $ ./torque-package-doc-linux-x86_64.sh --install $ ./torque-package-mom-linux-x86_64.sh --install ./torque-package-server-linux-x86_64.sh --install $ ./torque-package-clients-linux-x86_64.sh --install $ ./torque-package-devel-linux-x86_64.sh --install $ ./torque-package-doc-linux-x86_64.sh --install $ ./torque-package-mom-linux-x86_64.sh --install TORQUE
  • 44. sudo apt-get install torque-server sudo apt-get install torque-scheduler sudo apt-get install torque-mom sudo apt-get install torque-client torque-client-x11 TORQUE
  • 51.
  • 53.
  • 54. sudo apt-get install ganglia-monitor sudo apt-get install ganglia-webfrontend sudo apt-get install --reinstall ganglia-monitor sudo apt-get install ganglia-monitor Ganglia
  • 55.
  • 57.
  • 58. MPI(Message Passing Interface)는 병령 실행 프로그램에서 노드에 분산된 프로세스 사이에 정보를 교환하는 메시지를 전달하는 방법을 정의한 규약 중 하나이다. MPICH 는 MPI 표준규약이 적용된 프리, 오픈소스이다. 이 프로그램은 Argonne National Lab 과 Mississippi State University 에서 작성하였으며 MPI-1.1을 따른 MPICH 와 MPI-2 에 따른 MPICH2 가 있다. http://www-unix.mcs.anl.gov/mpi/mpich/ configure –prefix=/home/share/mpich -cc=gcc -fc=f77 $ make $ make install MPICH
  • 59. 1. SUM 다음 프로그램은 1부터 100까지 더하는 프로그램으로 Broadcast 연산과 Reduce 연산을 하도록 되어 있고 프로 그램 흐름은 다음과 같다. 위 그림과 같이 node01 은 ( 1,3 5,7, 9.... 99)까지 합을 node02 는 ( 2,4,6,8,10 ... 100)가지의 합을 구하게 되어 이를 합하게 되는 구조이다. MPICH
  • 60. ---------------- sum.c Source ----------------------- #include <stdio.h> #include <sys/time.h> #include "mpi.h" static struct timeval time_value1; static struct timeval time_value2; #define START_TIMER gettimeofday (&time_value1, (struct timezone *) 0) #define STOP_TIMER gettimeofday (&time_value2, (struct timezone *) 0) #define ELAPSED_TIME ((double) ((time_value2.tv_usec - time_value1.tv_usec)*0.001 + ((time_value2.tv_sec - time_value1.tv_sec) * 1000.0 ))) MPICH
  • 61. int main (int argc, char *argv[]) {    int done = 0;    int number = 0;    int sum;    int mysum = 0;    int iproc;    int nproc;    int i;    MPI_Init (&argc, &argv); MPI_Comm_size (MPI_COMM_WORLD, &nproc); MPI_Comm_rank (MPI_COMM_WORLD, &iproc); MPICH
  • 62.    while (!done)    {        if (iproc == 0)        {            if (number == 0) number = 100;            else number = 0;            START_TIMER;            } MPI_Bcast (&number, 1, MPI_INT, 0, MPI_COMM_WORLD); MPICH
  • 63.         if (number == 0) done = 1;         else         {             for (i = iproc + 1; i <= number; i+= nproc) mysum += i;             MPI_Reduce (&mysum, &sum, 1, MPI_INTEGER, MPI_SUM, 0, MPI_COMM_WORLD);             if (iproc == 0)             {                  STOP_TIMER;                  printf ("sum is %dn", sum);                  printf ("elapsed time is %.3fmsn", ELAPSED_TIME);              }           }     } MPI_Finalize (); } MPICH
  • 64. MPICH 컴파일 방법 : 기존 cc -o ksy sumcc MPI 사용시 mpicc -o ksy sum.c 실행 방법 : mpirun -np {프로세서 수} 실행 파일 Mpirun -np 12 ksy
  • 65. 실제 이 프로그램을 CPU 1개가 있는 노드 2개에 실행을 하여 보면 다음과 같다. 1 CPU 사용 시 [baron@node01 TEST]$ mpirun -np 1 SUM sum is 5050 elapsed time is 0.061ms 2 CPU 사용 시 [baron@node01 TEST]$ mpirun -np 2 SUM sum is 5050 elapsed time is 3.547ms 문제 : 병렬 처리에도 불구 하고 이 결과가 나오는 이유는 무엇인가? MPICH
  • 66. 답 : 이유는, 실제 계산을 보면, 2CPU로 나누어 계산은 빠르나 이를 합하는 과정에서 네트워크 사용에 의한 트래픽 결과 이다. 이 때문에 1 CPU 보다 늦은 결과가 나온 다. 그러나 만일 100 가지 합이 아니라 1억까지 합이라면 그 결과는 달라진다. 결론 : 병렬 처리를 할 경우 다양한 문제에 대한 정확한 접근이 필요로 한다. 위 예제에서 보여 주듯 문제에 대한 정확한 이해와 그 성능에 대한 정확한 이해가 필요로 한다. MPICH