KR100738004B1 - 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체 - Google Patents

하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체 Download PDF

Info

Publication number
KR100738004B1
KR100738004B1 KR1020050049535A KR20050049535A KR100738004B1 KR 100738004 B1 KR100738004 B1 KR 100738004B1 KR 1020050049535 A KR1020050049535 A KR 1020050049535A KR 20050049535 A KR20050049535 A KR 20050049535A KR 100738004 B1 KR100738004 B1 KR 100738004B1
Authority
KR
South Korea
Prior art keywords
compilation
host
file
distributed
remote
Prior art date
Application number
KR1020050049535A
Other languages
English (en)
Other versions
KR20060121074A (ko
Inventor
윤명의
Original Assignee
(주)주빅스테크놀러지
윤명의
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)주빅스테크놀러지, 윤명의 filed Critical (주)주빅스테크놀러지
Priority to KR1020050049535A priority Critical patent/KR100738004B1/ko
Publication of KR20060121074A publication Critical patent/KR20060121074A/ko
Application granted granted Critical
Publication of KR100738004B1 publication Critical patent/KR100738004B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/457Communication

Abstract

1. 청구범위에 기재된 발명이 속한 기술분야
본 발명은 하이브리드 P2P 네트워크 지능형 분산 컴파일러 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것임.
2. 발명이 해결하려고 하는 기술적 과제
본 발명은 대용량의 컴파일 작업을 다수의 호스트에 지능적으로 할당하고 소스 파일들을 P2P(Peer To Peer) 방식으로 분배하여 컴파일 과정을 동시에 진행시킴으로써, 최대의 효율로 최단 시간내에 컴파일 작업을 수행할 수 있는 하이브리드 P2P 네트워크 지능형 분산 컴파일러 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는데 그 목적이 있음.
3. 발명의 해결방법의 요지
본 발명은, 다수의 호스트와 네트워크 연결되어 유휴 호스트의 접속 정보 리스트를 관리하는 관리 서버; 상기 다수의 호스트 중 사용자의 분산 컴파일 작업 요청을 수신한 임의의 호스트로서, 상기 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하며, 상기 유휴 호스트 접속 정보 리스트를 토대로 상기 컴파일 작업 집합을 할당하여 P2P 방식으로 전송하는 로컬 호스트; 및 상기 다수의 호스트 중 상기 로컬 호스트를 제외한 나머지 호스트로서, 상기 로컬 호스트로부터 수신한 컴파일 작업 집합에 대해 컴파일을 수행하고 그에 따른 결과물을 상기 로컬 호스트로 전송하는 리모트 호스트를 포함함.
4. 발명의 중요한 용도
본 발명은 C/C++ 소스 파일 컴파일 등에 이용됨.
하이브리드, Peer To Peer, 분산 컴파일

Description

하이브리드 P2P 네트워크 지능형 분산 컴파일러 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체{Hybrid Peer To Peer Network Intelligent Distributed Compiler System and Method thereof, and Computer Readable Recording Medium on which a Program therefor is recorded}
도 1은 본 발명에 따른 분산 컴파일러 시스템의 일실시예 네트워크 구성도,
도 2는 도 1의 로컬 호스트에서의 컴파일 작업 집합 분석 과정을 설명하는 일실시예 도면,
도 3은 본 발명에 따른 하이브리드 P2P 네트워크 지능형 분산 컴파일 방법을 설명하는 일실시예 흐름도,
도 4는 본 발명에 따른 하이브리드 P2P 네트워크 지능형 분산 컴파일 방법을 설명하는 다른 일실시예 흐름도이다.
* 도면의 주요 부분에 대한 부호의 설명
101, 103 : 리모트 호스트 102 : 로컬 호스트
104 : 관리 서버
본 발명은 분산 컴파일 시스템에 관한 것으로, 상세하게는 네트워크 상에서 접근 가능한 유휴 리모트 호스트들에 지능적으로 컴파일 작업들을 할당하고 소스 파일들을 P2P(Peer To Peer) 방식으로 분배하여 컴파일 과정을 동시에 진행시키는 하이브리드 P2P 네트워크 지능형 분산 컴파일러 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
소프트웨어의 크기가 점차 커지고 복잡해지고 있으며, 그에 따라 소프트웨어를 구성하는 구성물인 프로그램 소스 파일도 점차 비대해지고 있다. 따라서, 프로그램 소스 파일들을 컴파일하여 오브젝트 파일을 만들고 이후 링크 과정을 거쳐 바이너리를 생성하여 소프트웨어 제품으로 만들어 내는데 걸리는 시간이 점점 더 길어지고 있다. 이러한 시간지연은 소프트웨어 제품 개발에 있어서 큰 장애 요인이다.
종래의 컴파일 방식은 각각의 로컬 호스트에, 제작된 소프트웨어가 운용될 플랫폼에서 동작하는 오브젝트를 만들어내는 네이티브(native) 혹은 크로스(cross) 컴파일러를 설치하고 소소 파일을 구성하여 컴파일을 진행하는 방식이다. 이러한 방식은 소스 파일의 양이 적을 경우 간단하고 빠르게 컴파일을 진행할 수 있지만, 로컬 호스트에서만 컴파일을 진행해야 하기 때문에 소스 파일의 양이 상당히 커질 경우 그에 비례하여 컴파일을 진행하는데 걸리는 시간이 길어지게 된다. 컴파일 과정은 기계적인 과정이므로 컴파일 과정을 수행하는 지식 근로자는 시간을 과도하게 낭비하게 되며, 또한 큰 비용이 소요되는 문제점이 있다.
전술한 방식에서 조금 진보된 방식으로는 소스 파일을 전처리하고, 전처리된 파일을 리모트 호스트에 분배하여 컴파일을 진행하는 방식이다. 이 방식은 간단한 소스 파일들을 처리하기에는 문제가 없으나, 복잡하고 양이 많은 소스 파일들을 컴파일하는데 문제가 있다. 전처리를 하는 과정이 로컬 호스트에서 이루어지므로 오버헤드가 상당히 크며, 전처리된 파일의 크기가 소스 파일의 수 배~수십 배로 커지게 되고, 리모트 호스트의 수에 비례하여 네트워크 입출력 데이터가 증가하여 컴파일에 걸리는 시간이 로컬 호스트에서만 컴파일하는 것보다 느려지는 문제점이 있다.
본 발명은 상기 문제점을 해결하기 위하여 제안된 것으로, 대용량의 컴파일 작업을 다수의 호스트에 지능적으로 할당하고 소스 파일들을 P2P(Peer To Peer) 방식으로 분배하여 컴파일 과정을 동시에 진행시킴으로써, 최대의 효율로 최단 시간내에 컴파일 작업을 수행할 수 있는 하이브리드 P2P 네트워크 지능형 분산 컴파일러 시스템 및 그 방법과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는데 그 목적이 있다.
본 발명의 다른 목적 및 장점들은 하기의 설명에 의해서 이해될 수 있으며, 본 발명의 실시예에 의해 보다 분명하게 알게 될 것이다. 또한, 본 발명의 목적 및 장점들은 특허 청구 범위에 나타낸 수단 및 그 조합에 의해 실현될 수 있음을 쉽게 알 수 있을 것이다.
상기 목적을 달성하기 위한 본 발명은, P2P(Peer To Peer) 네트워크 지능형 분산 컴파일러 시스템으로서, 다수의 호스트와 네트워크 연결되어 유휴 호스트의 접속 정보 리스트를 관리하는 관리 서버; 상기 다수의 호스트 중 사용자의 분산 컴파일 작업 요청을 수신한 임의의 호스트로서, 상기 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하며, 상기 유휴 호스트 접속 정보 리스트를 토대로 상기 컴파일 작업 집합을 할당하여 P2P 방식으로 전송하는 로컬 호스트; 및 상기 다수의 호스트 중 상기 로컬 호스트를 제외한 나머지 호스트로서, 상기 로컬 호스트로부터 수신한 컴파일 작업 집합에 대해 컴파일을 수행하고 그에 따른 결과물을 상기 로컬 호스트로 전송하는 리모트 호스트를 포함하는 것을 특징으로 한다.
또한, 본 발명은, P2P 네트워크 지능형 분산 컴파일 방법으로서, 임의의 한 호스트(이하, '로컬 호스트'라 한다)가 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하는 컴파일 작업 집합 분석단계; 관리 서버로부터 이용 가능한 호스트(이하, '리모트 호스트'라 한다)의 접속 정보 리스트를 수신하고, 수신된 접속 정보 리스트를 바탕으로 리모트 호스트들과 P2P 네트워크 연결을 설정하는 네트워크 설정단계; 각 호스트에 상기 컴파일 작업 집합을 할당하는 컴파일 작업 집합 할당단계; 할당된 컴파일 작업 집합을 P2P 방식으로 리모트 호스트에 전송하는 P2P 전송단계; 및 리모트 호스트로부터 컴파일 결과를 수신하는 컴파일 결과 수신단계를 포함하는 것을 특징으로 한다.
또한, 본 발명은, P2P 네트워크 지능형 분산 컴파일 시스템에, 임의의 한 호스트(이하, '로컬 호스트'라 한다)가 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하는 컴파일 작업 집합 분석기능; 관리 서버로부터 이용 가능한 호스트(이하, '리모트 호스트'라 한다)의 접속 정보 리스트를 수신하고, 수신된 접속 정보 리스트를 바탕으로 리모트 호스트들과 P2P 네트워크 연결을 설정하는 네트워크 설정기능; 각 호스트에 상기 컴파일 작업 집합을 할당하는 컴파일 작업 집합 할당기능; 할당된 컴파일 작업 집합을 P2P 방식으로 리모트 호스트에 전송하는 P2P 전송기능; 및 리모트 호스트로부터 컴파일 결과를 수신하는 컴파일 결과 수신기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
상술한 목적, 특징 및 장점은 첨부된 도면과 관련한 다음의 상세한 설명을 통하여 보다 분명해 질 것이며, 그에 따라 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 것이다. 또한, 본 발명을 설명함에 있어서 본 발명과 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에 그 상세한 설명을 생략하기로 한다. 이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 일실시예를 상세히 설명하기로 한다.
도 1은 본 발명에 따른 분산 컴파일러 시스템의 일실시예 네트워크 구성도이다.
먼저, 각각의 호스트(101, 102, 103)에는 에이전트 소프트웨어가 설치된다. 그리고, 특정 호스트(104)에는 각각의 호스트에 설치된 에이전트들을 관리하고 조정하기 위한 관리 서버 소프트웨어가 설치된다. 각 에이전트들은 관리 서버와 네트워크 연결을 설정한다.
네트워크 설정 후, 사용자가 임의의 호스트에서 분산 컴파일 작업 요청을 하면 그 임의의 호스트(102, 이하 "로컬 호스트"라 한다)는 컴파일 작업 집합 분석을 수행한다. 컴파일 작업 집합 분석 후, 로컬 호스트(102)는 컴파일 작업의 개수에 따라 관리 서버(104)에 적당한 대수의 호스트(이하 "리모트 호스트"라 한다)를 요청하고, 관리 서버(104)는 이용 가능한 리모트 호스트(101, 103)의 접속 정보 리스트를 로컬 호스트로 전송한다. 본 실시예에서는 이용 가능한 리모트 호스트로 두개의 호스트만을 도시하였으나, 이제 한정되지 않음은 자명하다.
즉, 관리 서버(104)는 네트워크 상에 존재하는 각 호스트의 CPU 사용률, 메모리 사용률, 유휴 저장 장치 크기 등에 대한 정보를 갖고 있어, 그 정보를 이용하여 로컬 호스트(102)가 접속할 수 있는 최적의 유휴 호스트의 접속 정보 리스트를 만들어 로컬 호스트(102)에 전송한다.
관리 서버(104)로부터 접속 정보 리스트를 수신한 로컬 호스트(102)는 상기 접속 정보 리스트를 바탕으로 리모트 호스트들(101, 103)과의 네트워크를 설정한다. 그리고, 로컬 호스트(102)는 정교한 분배 알고리즘에 따라 각 호스트(리모트 호스트, 로컬 호스트 포함)에 컴파일 작업 집합을 할당하고, 할당된 컴파일 작업 집합에 포함된 파일들을 P2P 방식으로 각 호스트(101, 103)에 전송한다. 이에 대한 상세한 설명은 후술한다.
리모트 호스트(101, 103)는 P2P 방식으로 로컬 호스트(102)로부터 전송된 컴파일 작업 집합에 대해 컴파일을 수행하고 그에 따른 결과물을 로컬 호스트(102)로 전송한다. 동시에 로컬 호스트(102)도 할당된 컴파일 작업 집합에 대해 컴파일을 수행한다. 각 호스트(리모트 호스트, 로컬 호스트 포함)에서 컴파일 작업과 파일 송수신 작업은 중첩되어 일어나므로 컴파일 작업 집합에 포함된 파일 집합이 모두 준비되지 않은 초기 시간을 제외하고 파일 송수신 시간은 전체 분산 컴파일 시간에 큰 영향을 미치지 않는다. 모든 컴파일 작업이 완료되면 분산 컴파일 작업은 종료된다.
도 2는 도 1의 로컬 호스트(102)에서의 컴파일 작업 집합 분석 과정을 설명하는 일실시예 도면이다.
소스 파일 내용을 분석하면 소스 파일이 정상적으로 컴파일되어 오브젝트 파일을 만들어내기 위해 필요한 리소스 파일(소스 파일, 텍스트 파일, 데이터 파일 등)들을 분석할 수 있고, 이러한 파일들은 서로 의존관계를 갖고 있다. 전체 소스 파일에 대해 의존관계를 분석하여 결과적으로 전체 파일의 의존관계 맵을 만든다.
컴파일 대상 소스 파일과 의존관계 연결 링크(Link)가 있는 모든 파일들의 묶음을 컴파일 작업 집합(Compile Working Set, 이하 'CWS'라 한다)이라 정의하고, CWS에 포함되는 파일들의 개수를 CWS.count라고 정의하며, CWS에 포함되는 파일들의 크기의 합을 CWS.size라고 정의한다.
로컬 호스트(102)는 모든 소스 파일을 갖고 있으므로 문제가 없으나, 리모트 호스트(101, 103)에서 컴파일이 정상적으로 수행되기 위해서는 CWS에 포함된 모든 파일이 리모트 호스트(101, 103)에 준비되어야 한다. 그러므로, 로컬 호스트(102)는 CWS 내의 모든 파일들을 리모트 호스트(101, 103)에 전송해야 한다.
컴파일 작업 집합을 분석하기 위해서는 컴파일 명령 행 옵션과 소스 파일들이 필요하다. 명령 행 옵션 중에서 리소스 파일 검색 패스 옵션(/I, -I 등), 사용자 정의 값 옵션(-D, /D 등), 소스 지정 옵션이 사용된다. 컴파일러는 리소스 파일 검색 패스 옵션을 이용하여 소스 파일의 위치를 찾아낸다. 사용자 정의 값 옵션은 소스 파일내에 정의되어 있는 심볼(symbol) 값을 대체하게 된다. 지정된 소스 파일에서 #include<expr> 구문과 패턴이 부합하는 부분들을 파싱해낸다. <expr> 구문은 상수 값일 수도 있고, 매크로 심볼일 수도 있다. 심볼일 경우 사용자 정의 값 옵션에 의해 주어진 값으로 변경된다. <expr> 구문은 결과적으로 리소스 파일 검색 패스 상에 존재하는 파일로 귀결된다. 위 파일들이 해당 소스 파일을 컴파일하는데 필요한 리소스 파일의 일부가 된다. 리소스 파일 또한 내부적으로 다른 리소스 파일을 필요로 할 수 있으므로 동일한 과정으로 모든 리소스 파일을 분석한다. 소스 파일을 컴파일 하는데 필요로 하는 모든 리소스 파일을 재귀적인 방식을 통해서 알아낸다.
예를 들어, 로컬 호스트(102)에서 사용자의 요청에 의해 A.c(201), B.c(202), C.c(203), D.c(204) 파일에 대한 컴파일 요청이 되었고, 컴파일 작업 집합 분석 절차에 의해 도 2에 도시된 바와 같은 형태의 의존관계 구조가 분석되었다고 가정한다. 따라서, 의존관계 맵 데이터는 다음과 같다.
A.c(201) : E.h(205), F.h(206), G.h(207)
B.c(202) : F.h(206), G.h(207)
C.c(203) : H.h(208)
D.c(204) :
E.h(205) : I.h(209)
F.h(206) :
G.h(207) : J.h(210)
H.h(208) :
I.h(209) : K.h(211)
J.h(210) : K.h(211)
K.h(211) :
의존관계 맵에 따라 A.c(201) 파일이 컴파일되어 A.o(212)를 생성하기 위해서는 E.h(205), F.h(206), G.h(207), I.h(209), J.h(210), K.h(211) 파일이 필요하며, 소스 파일과 리소스 파일을 모두 합친 A.c(201), E.h(205), F.h(206), G.h(207), I.h(209), J.h(210), K.h(211) 파일이 A.o를 만들기 위한 컴파일 작업 집합(CWS)이 된다. 또한, B.c(202) 파일이 컴파일되어 B.o(213)를 생성하기 위해서는 F.h(206), G.h(207), J.h(210), K.h(211) 파일이 필요하며, 소스 파일과 리소스 파일을 모두 합친 B.c(202), F.h(206), G.h(207), J.h(210), K.h(211) 파일이 B.o(213)를 만들기 위한 컴파일 작업 집합(CWS)이 된다. 또한, C.c(203) 파일이 컴파일되어 C.o(214)를 생성하기 위해서는 H.h(208) 파일이 필요하며, 소스 파일과 리소스 파일을 모두 합친 C.c(203), H.h(208) 파일이 C.o(214)를 만들기 위한 컴파일 작업 집합(CWS)이 된다. 또한, D.c(204) 파일이 컴파일되어 D.o(215)를 만들기 위한 컴파일 작업 집합(CWS)은 D.c(204)이다.
이하, 도 1의 로컬 호스트(102)에서의 컴파일 작업 집합 분배 알고리즘의 일실시예를 설명한다.
로컬 호스트(102)의 사용자가 요청한 컴파일 작업이 N 개라고 가정하면, 로컬 호스트(102)에서 N개의 CWS가 만들어진다. 그리고, 로컬 호스트(102)가 관리 서버(104)로부터 M-1 개의 리모트 호스트 정보를 포함하는 접속 정보 리스트를 획득하였다고 가정하면, 총 M 개의 호스트(로컬 호스트 포함)에서 컴파일이 이루어진다. 따라서, N 개의 CWS를 M 개의 호스트에 적절하게 분배하는 알고리즘이 필요하다. 그러나, 분배 알고리즘이 과도하게 복잡하면 분배 과정이 지나치게 오래 걸려 분산 컴파일의 시간적인 장점이 줄어들기 때문에 간단하면서도 효과적인 알고리즘을 사용한다.
N 개의 CWS는 파일의 내용과, 크기, 개수에서 각각 차이가 있으므로 이러한 조건들을 토대로 최단시간 내에 모든 컴파일 작업이 완료되도록 분배 알고리즘을 적용한다. 또한, 각 호스트들은 성능 차이가 있으므로 우수한 성능을 가진 호스트 는 할당된 작업을 미리 끝마치게 된다. 할당된 작업을 모두 끝마친 호스트에는 전체 호스트에서 아직 처리되지 않은 CWS들이 재분배된다. CWS 재분배를 통해 분산 컴파일 작업이 모두 끝날 때까지 어느 하나의 호스트도 대기하지 않도록 한다.
개별 호스트가 할당 받은 전체 CWS를 컴파일 작업 집합 다발(Compile Working Set Bunch, 이하 "CWSB"라 한다)이라고 정의한다. M 개의 호스트에 CWS를 분배하면 M 개의 CWSB가 만들어진다. M 개의 호스트에 할당된 CWSB를 각각 CWSB-1, CWSB-2,....CWSB-M이라고 정의한다. 따라서, 임의의 K 번째 호스트에 할당된 CWSB는 CWSB-K 이다. 또한, CWSB 내의 CWS 파일들에 대해 합집합을 수행하여 획득된 파일 집합은 로컬 호스트(102)가 리모트 호스트로 전송해야 할 전체 파일 목록이고, 그 전체 파일 목록을 CWSB(U)(Compile Working Set Bunch Union)라고 정의한다. 이 때, CWSB(U).size를 CWSB(U)에 속한 파일들의 크기의 합이라고 정의하고, CWSB(U).count를 CWSB(U)에 속한 파일들의 개수라고 정의한다.
컴파일 작업 집합 파일 크기 동등화 알고리즘
M 개의 호스트에 각각 할당된 CWSB-K(U).size가 비슷한 크기가 되도록 N 개의 CWS를 할당하는 방법이다. 이진 구조로 이루어진 파일들을 컴파일할 때 바람직한 방법이다. 이진 구조로 이루어진 파일들(이미지, 데이터 파일 등)은 파일 크기에 따라 컴파일 시간이 비례하므로, CWSB(U).size가 비슷하도록 각 호스트에 N 개의 CWS를 할당한다.
컴파일 작업 집합 파일 개수 정렬 알고리즘
CWS.count가 큰 CWS 간에 교집합을 하면 중복되는 파일이 존재할 가능성이 커진다. CWS 간에 중복되는 파일이 많아질수록 CWSB(U).count와 CWSB(U).size는 줄어들게 되므로 리모트 호스트에 전송해야 할 파일은 줄어든다. 따라서, 효과적인 네트워크 입출력이 가능해진다. N 개의 CWS들을 CWS.count를 기준으로 정렬하고, 정렬된 순서대로 순차적으로 M 개의 호스트에 할당한다.
컴파일 작업 집합 네트워크 입출력 최소화 알고리즘
N 개의 CWS를 CWS.size를 기준으로 내림 차순 정렬하여 N/M(정수값) 개의 가장 파일 크기가 큰 CWS를 로컬 호스트에 할당하고, 나머지 CWS들을 나머지 M-1 개의 리모트 호스트에 상기 "컴파일 작업 집합 파일 개수 정렬 알고리즘"을 이용하여 할당한다. 로컬 호스트에 할당된 컴파일 작업은 파일 전송이 필요치 않으므로 전체적인 네트워크 입출력이 작아지게 된다.
이하, 도 1의 로컬 호스트(102)에서 리모트 호스트(101, 103)로의 P2P 파일 전송 방법을 설명한다.
리모트 호스트(101, 103)에서 컴파일이 진행되려면 리모트 호스트(101, 103)는 컴파일하려는 CWS 파일들을 모두 전송받아야 한다. 그러나, 로컬 호스트(102)가 모든 리모트 호스트(101, 103)에 CWS 파일들을 직접 전송하는 방식을 사용하면, 네트워크 입출력이 로컬 호스트(102)에 집중되어 로컬 호스트(102)가 병목 지점으로 작용하게 되고, 또한 리모트 호스트가 많아질수록 로컬 호스트(102)의 네트워크 입출력이 증가하여 결국 분산 컴파일에 걸리는 시간이 증가한다.
예를 들어, "가"는 로컬 호스트이고, "가" 로컬 호스트는 "나" 리모트 호스 트에 A, B, C 파일을 전송해야 하고 "다" 리모트 호스트에 A, B, C, D, E 파일을 전송해야 한다고 가정하면, 로컬 호스트에서 리모트 호스트에 직접 파일을 전송해야 하므로 "가" 호스트는 "나" 호스트에 A, B, C 파일을 전송하고 "다" 호스트에 A, B, C, D, E 파일을 전송해야 한다. "가" 호스트는 총 A, B, C, A, B, C, D, E 8개의 파일을 전송하는데, A, B, C 파일은 동일한 파일임에도 불구하고 중복해서 "나", "다" 호스트에 전송한다. 즉, 동일한 파일을 중복하여 전송하여 그만큼의 시간지연이 발생하고, 또한 로컬 호스트에서 네트워크 입출력 양이 증가하여 전체적인 분산 컴파일 성능이 저하될 수 있다.
본 발명에서는 P2P를 이용한 파일 전송 방식을 이용하여 위 문제점을 해결한다.
상술한 바와 같이, 로컬 호스트(102)가 N 개의 CWS에 대한 컴파일 작업 요청을 사용자로부터 수신하면, 로컬 호스트(102)는 관리 서버(104)로부터 네트워크 상에 이용 가능한 M-1 개의 리모트 호스트 접속 정보 리스트를 수신하여 리모트 호스트들과 P2P 네트워크 연결을 설정한다. 이후, 로컬 호스트(102)는 상술한 컴파일 작업 집합 분배 알고리즘을 이용하여 M 개의 호스트(로컬 호스트 포함)에 대해 N 개의 CWS를 할당하여 M 개의 CWSB를 만든다.
이후, 로컬 호스트(102)는 각 호스트에 할당된 CWSB(U) 내의 파일 집합을 검사한다. 그리고, 로컬 호스트(102)는 전체 리모트 호스트로 전송할 CWSB(U) 내의 각 파일에 대해 그 파일을 전송받아야 하는 호스트를 매핑시켜 호스트 리스트를 작성한다. 로컬 호스트(102)는 하나의 리모트 호스트에 각각의 파일과 그 파일을 전 송받아야 하는 호스트 리스트를 함께 전송한다. 이를 수신한 리모트 호스트는 전송받은 파일을 저장하고 호스트 리스트에서 자신의 주소를 삭제하고 나머지 호스트 중의 하나의 호스트에 그 파일과 호스트 리스트를 다시 전송한다. 이러한 방식으로 모든 리모트 호스트에 파일을 전송한다.
예를 들어, "가"는 로컬 호스트이고, "가" 로컬 호스트는 "나" 리모트 호스트에 A, B, C 파일을 전송해야 하고 "다" 리모트 호스트에 A, B, C, D, E 파일을 전송해야 한다고 가정하고, 본 발명에 따라 로컬 호스트가 P2P 방식으로 파일을 전송하는 방법을 설명하면 다음과 같다.
로컬 호스트는 "나", "다" 리모트 호스트에 할당한 CWSB를 검사하여 A(나, 다), B(나, 다), C(나, 다), D(다), E(다) 호스트 리스트를 만든다. 로컬 호스트는 "나" 리모트 호스트에 A 파일과 "나, 다" 호스트 리스트를 같이 전송한다. A 파일과 "나, 다" 호스트 리스트를 수신한 "나" 리모트 호스트는 A 파일을 저장하고 "나, 다" 호스트 리스트에서 "나"를 삭제한다.
그리고, "나" 리모트 호스트는 "다" 리모트 호스트에 A 파일과 "다" 호스트 리스트를 전송한다. A 파일과 "다" 호스트 리스트를 수신한 "다" 리모트 호스트는 A 파일을 저장하고 "다" 호스트 리스트에서 "다"를 삭제한다. "다" 호스트 리스트에서 "다"를 삭제하면 더이상 전달해야 할 호스트 리스트가 없으므로 "다" 리모트 호스트는 파일 전송을 종료한다.
이와 같은 방식으로 B, C, D, E 파일에 대해서도 P2P 전송을 하여 모든 호스트에 파일을 전송한다. 로컬 호스트 입장에서 로컬 호스트는 총 A, B, C, D, E 5개 의 파일만을 전송하고, 중복된 파일 전송도 일어나지 않는다. 로컬 호스트가 각각의 리모트 호스트에 파일을 직접 전송하는 방식에 비하여 효율이 우수하다. CWSB의 구성에 따라 이러한 효과는 파일 직접 전송 방식에 비해 몇 배가 될 수 있다.
한편, 소스 파일 전처리 방식과 비교하면 다음과 같은 이점이 있다. 소스 파일 전처리 방식을 본 발명에 따른 컴파일 작업 직합 분석으로 설명하면, 1개의 CWS를 컴파일하기 위해서 CWS내의 모든 파일을 전처리 과정을 통해 하나의 파일로 만들고, 이렇게 전처리된 파일을 리모트 호스트에 전송하며, 컴파일된 결과를 받아오게 된다. 따라서 동일한 파일을 개별 리모트 호스트에 중복해서 전송하게 된다. 특히, CWS.count가 클수록 전처리 방식의 파일 전송은 중복되고 네트워크 입출력에 컴파일 성능이 제한되어 일반 컴파일보다도 컴파일이 오래 걸린다. 본 발명에 따른 컴파일 작업 집합 분석과 P2P 파일 전송 방법을 이용하면 중복된 파일 전송이 생기지 않는다. 실제적인 검증을 통하여 전처리 방식과 본 발명에 따른 컴파일 방법에서 발생하는 네트워크 입출력 양을 비교하면 100배 정도의 차이를 나타낸다.
이하, 도 1의 리모트 호스트(102)에서의 소스 파일 캐쉬 관리 방법을 설명한다.
컴파일 과정은 반복된다. 따라서 분산 컴파일 과정도 반복된다. 매 과정마다 필요한 소스 파일들은 리모트 호스트(101, 103)에 준비되어야 한다. 그러나, 매 과정마다 동일한 소스 파일을 중복해서 전송하는 것은 네트워크 입출력 오버헤드를 크게 한다. 따라서, 본 발명에서는 소스 파일 캐쉬 관리 기술을 통해서 동일한 파 일을 중복해서 전송하는 것을 방지하고 변경된 소스 파일이나 부재한 파일만을 전송한다.
먼저, 소스 파일을 전송하려는 로컬 호스트(102)는 전송하려는 소스 파일의 정보를 리모트 호스트(101, 103)에 전송한다. 이 정보를 전달받은 리모트 호스트(101, 103)는 호스트 내의 소스 파일 캐쉬 관리자에서 소스 파일을 검색하여 동일한 내용의 소스 파일이 있는지 검사한다. 로컬 호스트(102)로부터 전달받은 소스 파일 정보에 해당하는 소스 파일이 존재하지 않거나 내용이 다르면 리모트 호스트(101, 103)는 로컬 호스트(102)로 파일 전송을 요청한다. 파일 전송 요청을 전달받은 로컬 호스트(102)는 리모트 호스트(101, 103)에 실제로 파일을 전송한다.
동일한 소스 파일인지의 여부를 판단하는 정보로서 파일의 이름, 파일의 크기, 파일의 마지막 수정 시간, 파일 내용의 MD4 해쉬 값을 이용한다. 이러한 정보들이 모두 동일하면 동일한 소스 파일로 판단한다. MD4 해쉬 값을 구하는데 약간의 오버헤드가 발생하므로 필요에 따라 MD4 해쉬 값은 옵션사항으로 생략할 수 있다.
이하, 도 1의 관리 서버(104)에서의 오브젝트 파일 캐쉬 관리 방법을 설명한다.
컴파일 과정의 입력 값은 컴파일 명령 행과 CWS이다. 컴파일 과정의 출력 값은 오브젝트 파일과 컴파일러 출력 메시지(컴파일러 에러/경고 등)이다. 컴파일러에 동일한 입력 값을 주면 동일한 출력 결과 값이 나온다. 따라서, 컴파일 입력 값과 출력 값 사이의 관계를 관리하면 입력 값이 주어졌을 때 출력 값을 예상할 수 있다. 또한, 입력 값에 대한 출력 값을 캐쉬 관리하면 실제로 컴파일을 하지 않더라도 컴파일을 요청한 사용자에게 컴파일 결과로 캐쉬된 오브젝트 파일과 컴파일러 출력 메시지를 응답할 수 있다.
각 호스트(로컬 호스트와 리모트 호스트 포함)는 주어진 컴파일 명령 행을 사용하여 CWS를 컴파일하고 그 결과 값인 오브젝트 파일과 컴파일러 출력 메시지를 생성한다. 이 때, 리모트 호스트(101, 103)는 로컬 호스트(102)로 오브젝트 결과물을 되돌려주고, 동시에 로컬 호스트(102) 및 리모트 호스트(101, 103)는 오브젝트 캐쉬 키를 생성하여 그 오브젝트 캐쉬 키와 오브젝트 파일 및 컴파일러 출력 메시지를 관리 서버(104)로 전달한다. 관리 서버(104)는 전달받은 오브젝트 캐쉬 키와 오브젝트 파일 및 컴파일러 출력 메시지를 오브젝트 캐쉬 관리자에 저장한다.
캐쉬 관리를 위한 키 값은 다음과 같은 방법으로 생성한다. 컴파일러의 입력 값인 컴파일 명령 행과 CWS에 대한 정보가 필요하다. CWS에 대한 정보는 각 파일의 이름, 크기, 마지막 수정 시간이다. 각 호스트는 특정한 메모리 버퍼에 먼저 컴파일 명령 행 정보를 기록하고 그 뒤에 CWS에 포함된 각 파일의 파일 이름, 크기, 마지막 수정 시간 등을 파일 이름 순서대로 차례로 기록한다. 이와 같이 생성된 데이터를 MD4 해쉬를 이용하여 64byte 키로 만들어 낸다. 동일한 키 값을 갖는 CWS 컴파일 요청은 동일한 결과를 만들어낸다.
로컬 호스트(102)는 사용자가 캐쉬 검색 옵션을 사용하여 분산 컴파일을 요청하면, 먼저 관리 서버(104)로 컴파일하려는 CWS들의 오브젝트 캐쉬 키 리스트를 전달한다. 오브젝트 캐쉬 키 리스트를 전달받은 관리 서버(104)는 오브젝트 캐쉬 관리자를 검색하여 해당하는 오브젝트 캐쉬 키가 존재하는지 조사한다. 해당하는 오브젝트 캐쉬 키가 존재할 경우 관리 서버(104)는 해당하는 오브젝트 파일과 컴파일러 출력 메시지를 로컬 호스트(102)로 전송한다. 로컬 호스트(102)는 캐쉬된 오브젝트 파일과 컴파일러 출력 메시지를 전달받아 해당 CWS의 컴파일 결과로 저장한다. 캐쉬 검색을 통해서 결과를 획득하지 못한 잔여 CWS들에 대한 처리는 일반적인 분산 컴파일 과정으로 처리된다.
이하, 도 1의 리모트 호스트(101, 103)에서의 가상 컴파일러 환경 구축 방법을 설명한다.
분산 컴파일을 위해서는 로컬 호스트(102) 뿐만 아니라 리모트 호스트(101, 103)에서도 컴파일 과정이 동일하게 수행되어야 한다. 이를 위해, 로컬 및 리모트 호스트에 동일한 네이티브 컴파일러가 설치되어야 한다. 하지만, 가상 컴파일러 환경 구축 기술을 통해서 네이티브 컴파일러가 설치되어 있지 않는 리모트 호스트(101, 103)에서도 컴파일 작업을 수행할 수 있다.
네이티브 컴파일러가 설치되어 있지 않은 리모트 호스트의 경우 분산 컴파일 작업 이전에 로컬 호스트(102)로부터 네이티브 컴파일러 실행 관련 파일을 전송받는다. 로컬 호스트(102)로부터 전송받은 네이티브 컴파일러 실행 관련 파일이 리모트 호스트에서 정상적으로 실행되기 위해서는, 네이티브 컴파일러 실행 관련 파일이 실행될 때 참조하게 되는 외부적인 환경(예를 들면, 운영체제(OS) 환경)이 리모트 호스트와 로컬호스트(102)에서 동일해야 한다.
일반적으로 네이티브 컴파일러는 외부 환경과 접촉하기 위해 운영체제(OS)에서 제공하는 API들을 호출해야 한다. API들을 호출함으로써 네이티브 컴파일러는 자신이 실행될 수 있는 환경인지를 점검하게 된다. 그러나, 본 실시예의 리모트 호스트에는 네이티브 컴파일러가 정상적으로 설치된 것이 아니기 때문에, 보통의 API 호출을 수행하는 경우 리모트 호스트의 네이티브 컴파일러 실행 관련 파일은 자신이 정상적으로 실행될 수 없는 환경이라고 판단하게 된다.
따라서, 리모트 호스트의 네이티브 컴파일러 실행 관련 파일이 API 호출을 수행하는 경우 자신이 정상적으로 실행될 수 있는 환경이라고 판단하도록 해야 한다. 이를 위해 리모트 호스트의 네이티브 컴파일러 실행 관련 파일이 호출하는 API들을 훅킹하고, 훅킹된 API들을 네트워크 연결을 통해 로컬 호스트(102)의 API 호출 대리자에게 전달한다. 로컬 호스트(102)의 API 호출 대리자는 리모트 호스트에서 발생된 API 호출을 대신 호출하고, 그 실행 결과를 네트워크를 통해 리모트 호스트로 전송한다. 리모트 호스트의 네이티브 컴파일러 실행 관련 파일은 상기 대리 호출 실행 결과를 기초로 자신이 정상적으로 실행될 수 있는 환경이라고 판단하여 정상적인 컴파일을 수행한다. 즉, 리모트 호스트에 로컬 호스트와 동일한 가상의 컴파일러 환경이 구축된다.
도 3은 본 발명에 따른 하이브리드 P2P 네트워크 지능형 분산 컴파일 방법을 설명하는 일실시예 흐름도이다.
도 3에 도시된 바와 같이, 먼저, 임의의 한 호스트(이하 "로컬 호스트"라 한 다)는 사용자로부터 컴파일 요청을 수신하면(301) 그 컴파일 요청이 분산 컴파일 요청인지 판단한다(302).
판단 결과 분산 컴파일 요청이 아닌 경우, 로컬 호스트는 자체적으로 컴파일을 수행하고(303), 판단 결과 분산 컴파일 요청인 경우, 로컬 호스트는 관리 서버와 네트워크 연결을 시도한다(304).
관리 서버와 네트워크 연결이 안되는 경우 로컬 호스트는 자체적으로 컴파일을 수행하고(303), 관리 서버와 네트워크 연결이 이루어진 경우 로컬 호스트는 컴파일 작업 집합 분석을 수행한다(305). 즉, 전체 소스 파일에 대해서 의존관계를 분석하여 전체 파일의 의존관계 맵을 생성한다. 컴파일 대상 소스 파일과 의존관계 연결 링크(Link)가 있는 모든 파일들의 묶음을 컴파일 작업 집합(Compile Working Set, 이하 'CWS'라 한다)이라 정의하고, CWS에 포함되는 파일들의 개수를 CWS.count라고 정의하며, CWS에 포함되는 파일들의 크기의 합을 CWS.size라고 정의한다.
관리 서버와 네트워크 연결 후, 로컬 호스트는 컴파일 작업의 개수에 따라 관리 서버에 적당한 대수의 호스트(이하 "리모트 호스트"라 한다)를 요청하고, 관리 서버로부터 이용 가능한 리모트 호스트의 접속 정보 리스트를 획득한다(306).
이어서, 로컬 호스트는 상기 접속 정보 리스트를 바탕으로 리모트 호스트들과의 P2P 네트워크 연결을 설정한다(307). 그리고, 로컬 호스트는 정교한 분해 알고리즘에 따라 각 호스트(리모트 호스트, 로컬 호스트 포함)에 컴파일 작업 집합(CWS)을 할당한다(308). 컴파일 작업 집합 분배는 상술한 컴파일 작업 집합 파일 크기 동등화 알고리즘 또는 컴파일 작업 집합 파일 개수 정렬 알고리즘 또는 컴파일 작업 집합 네트워크 입출력 최소화 알고리즘을 이용할 수 있으나 이에 한정되지 않는다. 컴파일 작업 집합 분배 알고리즘을 이용하여 M 개의 호스트(로컬 호스트 포함)에 대해 N 개의 CWS를 할당하여 M 개의 CWSB를 만든다.
컴파일 작업 집합(CWS)을 할당한 후, 로컬 호스트는 P2P 방식으로 컴파일 작업 집합을 각 리모트 호스트로 전송한다(309). 즉, 로컬 호스트는 각 호스트에 할당된 CWSB(U) 내의 파일 집합을 검사한다. 그리고, 로컬 호스트는 전체 리모트 호스트로 전송할 CWSB(U) 내의 각 파일에 대해 그 파일을 전송받아야 하는 호스트를 매핑시켜 호스트 리스트를 작성한다. 로컬 호스트는 하나의 리모트 호스트에 각각의 파일과 그 파일을 전송받아야 하는 호스트 리스트를 함께 전송한다. 이를 수신한 리모트 호스트는 전송받은 파일을 저장하고 상기 호스트 리스트에서 자신의 주소를 삭제하고 나머지 호스트 중의 하나의 호스트에 그 파일과 호스트 리스트를 전송한다. 이러한 방식으로 모든 리모트 호스트에 파일을 전송한다.
이어서, 로컬 호스트 및 P2P 방식으로 컴파일 작업 집합을 전달받은 리모트 호스트는 컴파일을 수행하고(310), 로컬 호스트는 리모트 호스트로부터 컴파일 결과를 수신한다(311).
이어서, 로컬 호스트는 컴파일 에러가 발생했는지 여부를 판단한다(312). 판단 결과, 컴파일 에러가 없으면 로컬 호스트는 모든 컴파일 작업이 완료되었는지 판단한다(313). 컴파일 작업이 모두 완료되지 않았으면, 로컬 호스트는 컴파일 작업 집합을 다시 할당하고(308), 컴파일 작업이 모두 완료되었으면 로컬 호스트는 컴파일을 종료한다.
한편, 리모트 호스트로부터 컴파일 결과를 수신하여 컴파일 에러가 발생했는지 여부를 판단한 결과 컴파일 에러가 존재하면, 로컬 호스트는 컴파일을 종료한다.
도 4는 본 발명에 따른 하이브리드 P2P 네트워크 지능형 분산 컴파일 방법을 설명하는 다른 일실시예 흐름도이다.
도 4는 로컬 호스트가 컴파일 작업 집합 분석을 수행하는 과정(305)과 관리 서버로부터 이용 가능한 리모트 호스트의 접속 정보 리스트를 획득하는 과정(306) 사이에 다음과 같은 과정을 포함한다.
먼저, 사용자가 캐쉬 검색 옵션을 사용하여 분산 컴파일을 요청하였는지 여부를 판단한다(401). 사용자가 캐쉬 검색 옵션을 사용하여 분산 컴파일 요청을 한 경우, 로컬 호스트는 관리 서버로 컴파일하려는 CWS들의 오브젝트 캐쉬 키 리스트를 전송하고(402), 관리 서버는 오브젝트 캐쉬 관리자를 검색하여 해당하는 오브젝트 캐쉬 키가 존재하는지 조사한다. 해당하는 오브젝트 캐쉬 키가 존재할 경우 관리 서버는 그에 해당하는 오브젝트 파일과 컴파일러 출력 메시지를 로컬 호스트로 전송한다(403).
관리 서버로부터 오브젝트 파일과 컴파일러 출력 메시지를 수신한 로컬 호스트는 모든 컴파일 작업이 완료되었는지 판단하고(404), 컴파일 작업이 완료되지 않은 경우 관리 서버로부터 이용 가능한 리모트 호스트의 접속 정보 리스트를 획득하 여 분산 컴파일 과정을 진행한다(306).
한편, 상술한 과정을 위해, 로컬 호스트 및 리모트 호스트는 본 발명에 따라 CWS를 컴파일한 후 오브젝트 캐쉬 키를 생성하고, 생성된 오브젝트 캐쉬 키와 오브젝트 파일 및 컴파일러 출력 메시지를 관리 서버로 전송한다. 관리 서버는 전달받은 오브젝트 캐쉬 키와 오브젝트 파일 및 컴파일 출력 메시지를 오브젝트 캐쉬 관리자에 저장한다(405).
오브젝트 캐쉬 키 생성은 다음의 방법을 이용한다. 컴파일러의 입력 값인 컴파일 명령 행과 CWS에 대한 정보가 필요하다. CWS에 대한 정보는 각 파일의 이름, 크기, 마지막 수정 시간이다. 각 호스트는 특정한 메모리 버퍼에 먼저 컴파일 명령 행 정보를 기록하고 그 뒤에 CWS에 포함된 각 파일의 파일 이름, 크기, 마지막 수정 시간 등을 파일 이름 순서대로 차례로 기록한다. 이와 같이 만들어진 데이터를 MD4 해쉬를 이용하여 64byte 키로 만들어 낸다.
또한, 도 4는 로컬 호스트가 정교한 분해 알고리즘에 따라 각 호스트(리모트 호스트, 로컬 호스트 포함)에 컴파일 작업 집합(CWS)을 할당하는 과정(308)과 해당하는 파일을 P2P 방식으로 리모트 호스트에 전송하는 과정(309) 사이에 다음과 같은 과정을 포함한다.
즉, 할당된 파일을 P2P 방식으로 리모트 호스트에 전송하기 전에 로컬 호스트는 리모트 호스트로 소스 파일의 정보를 전송한다(406). 리모트 호스트는 소스 파일 캐쉬 관리자에서 소스 파일을 검색하여 동일한 내용의 소스 파일이 있는지 검사하고, 해당하는 파일이 존재하지 않는 경우 로컬 호스트로 해당하는 파일의 전송 을 요청한다(407).
일반적인 컴파일러의 컴파일 과정은 순차적으로 진행된다. 하나의 소스파일을 컴파일하여 결과를 만들어내고 다음 소스 파일을 컴파일한다. 다수의 소스 파일을 컴파일할 때 하나의 소스 파일을 컴파일하는 동안 나머지 소스 파일은 컴파일을 위해 대기해야 하므로 전체 시간이 컴파일 작업의 크기에 비례하여 오래 걸린다. 본 발명에 따른 분산 컴파일 시스템을 이용하면 다수의 소스 파일을 동시에 컴파일하는 것이 가능하기 때문에 M 개의 호스트(M: 컴파일에 참여하는 총 호스트의 수, 로컬 호스트 포함)를 이용하면 컴파일 대기 시간이 1/M 으로 줄어든다. 분산 컴파일에 참여하는 호스트들은 성능이 다양할 것이므로 실제 성능은 1/M 이상 될 수 있다. 분산 컴파일에 참여하는 호스트가 늘어날수록, 또한 성능이 우수한 호스트가 참여할수록 전체 컴파일 시간은 그에 반비례하여 짧아진다.
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 형태로 기록매체(씨디롬, 램, 롬, 플로피 디스크, 하드 디스크, 광자기 디스크 등)에 저장될 수 있다. 이러한 과정은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있으므로 더 이상 상세히 설명하지 않기로 한다.
이상에서 설명한 본 발명은, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로 전술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니다.
상기와 같은 본 발명은, 대용량의 컴파일 작업을 다수의 호스트에 지능적으로 분배함으로써, 최대의 효율로 최단 시간 내에 컴파일 작업을 처리할 수 있는 효과가 있다.

Claims (18)

  1. P2P(Peer To Peer) 네트워크 지능형 분산 컴파일러 시스템으로서,
    다수의 호스트와 네트워크 연결되어 유휴 호스트의 접속 정보 리스트를 관리하는 관리 서버;
    상기 다수의 호스트 중 사용자의 분산 컴파일 작업 요청을 수신한 임의의 호스트로서, 상기 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하며, 상기 유휴 호스트 접속 정보 리스트를 토대로 상기 컴파일 작업 집합을 할당하여 P2P 방식으로 전송하는 로컬 호스트; 및
    상기 다수의 호스트 중 상기 로컬 호스트를 제외한 나머지 호스트로서, 상기 로컬 호스트로부터 수신한 컴파일 작업 집합에 대해 컴파일을 수행하고 그에 따른 결과물을 상기 로컬 호스트로 전송하는 리모트 호스트
    를 포함하는 분산 컴파일러 시스템.
  2. 제 1 항에 있어서,
    상기 로컬 호스트는,
    각 호스트에 할당된 CWSB(U).size가 서로 비슷하도록 각 호스트에 컴파일 작업 집합을 할당하는 것을 특징으로 하는 분산 컴파일러 시스템.
    여기서, CWSB(U)는 개별 호스트에 할당한 컴파일 작업 집합들에 대해 합집합 을 수행하여 획득한 파일 집합이고, CWSB(U).size는 CWSB(U)에 속한 파일들의 크기의 합이다.
  3. 제 1 항에 있어서,
    상기 로컬 호스트는,
    컴파일 작업 집합에 포함된 파일들의 개수를 기준으로 컴파일 작업 집합을 호스트에 할당하는 것을 특징으로 하는 분산 컴파일러 시스템.
  4. 제 1 항에 있어서,
    상기 로컬 호스트는,
    컴파일 작업 집합에 포함된 파일들의 크기의 합을 기준으로 그 합이 큰 컴파일 작업 집합은 자신에게 분배하고, 나머지 컴파일 작업 집합은 컴파일 작업 집합에 포함된 파일들의 개수를 기준으로 리모트 호스트에 할당하는 것을 특징으로 하는 분산 컴파일러 시스템.
  5. 제 2 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 로컬 호스트는,
    각 리모트 호스트로 전송할 CWSB(U) 내의 각 파일에 대해 그 파일을 전송받아야 하는 리모트 호스트를 매핑시켜 호스트 리스트를 작성하고, 하나의 리모트 호스트에 각각의 파일과 각 파일에 대한 호스트 리스트를 함께 전송하는 것을 특징으로 하는 분산 컴파일러 시스템.
    여기서, CWSB(U)는 개별 호스트에 할당한 컴파일 작업 집합들에 대해 합집합을 수행하여 획득한 파일 집합이다.
  6. 제 5 항에 있어서,
    상기 리모트 호스트는,
    상기 로컬 호스트로부터 소스 파일의 정보를 수신하고 그 정보를 이용하여 호스트 내의 소스 파일 캐쉬 관리자를 검색하되, 해당하는 소스 파일이 없으면 상기 로컬 호스트로 파일 전송을 요청하는 것을 특징으로 하는 분산 컴파일러 시스템.
  7. 제 5 항에 있어서,
    상기 관리 서버는,
    상기 호스트로부터 오브젝트 캐쉬 키와 컴파일 결과 생성된 오브젝트 파일 및 컴파일러 출력 메시지를 수신하여 오브젝트 캐쉬 관리자에 저장하고,
    상기 로컬 호스트로부터 오브젝트 캐쉬 키 리스트를 수신시, 상기 오브젝트 캐쉬 관리자에서 해당하는 오브젝트 파일과 컴파일러 출력 메시지를 검색하여 상기 로컬 호스트에 전송하는 것을 특징으로 하는 분산 컴파일러 시스템.
  8. 제 7 항에 있어서,
    상기 호스트는,
    컴파일 명령 행 및 컴파일 작업 집합에 포함된 각 파일의 파일 이름, 파일 크기, 마지막 수정 시간에 대해 MD4 해쉬를 적용하여 오브젝트 캐쉬 키를 생성하는 것을 특징으로 하는 분산 컴파일러 시스템.
  9. 제 5 항에 있어서,
    상기 리모트 호스트는,
    상기 로컬 호스트로부터 수신된 컴파일러 실행 관련 파일을 실행시, API 호출을 후킹하여 가상의 컴파일러 환경을 구축하는 것을 특징으로 하는 분산 컴파일러 시스템.
  10. P2P 네트워크 지능형 분산 컴파일 방법으로서,
    임의의 한 호스트(이하, '로컬 호스트'라 한다)가 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하는 컴파일 작업 집합 분석단계;
    관리 서버로부터 이용 가능한 호스트(이하, '리모트 호스트'라 한다)의 접속 정보 리스트를 수신하고, 수신된 접속 정보 리스트를 바탕으로 리모트 호스트들과 P2P 네트워크 연결을 설정하는 네트워크 설정단계;
    각 호스트에 상기 컴파일 작업 집합을 할당하는 컴파일 작업 집합 할당단계;
    할당된 컴파일 작업 집합을 P2P 방식으로 리모트 호스트에 전송하는 P2P 전송단계; 및
    리모트 호스트로부터 컴파일 결과를 수신하는 컴파일 결과 수신단계
    를 포함하는 분산 컴파일 방법.
  11. 제 10 항에 있어서,
    상기 컴파일 작업 집합 할당단계는,
    각 호스트에 할당된 CWSB(U).size가 서로 비슷하도록 각 호스트에 컴파일 작업 집합을 할당하는 것을 특징으로 하는 분산 컴파일 방법.
    여기서, CWSB(U)는 개별 호스트에 할당된 컴파일 작업 집합들에 대해 합집합이 수행되어 획득된 파일 집합이고, CWSB(U).size는 CWSB(U)에 속한 파일들의 크기의 합이다.
  12. 제 10 항에 있어서,
    상기 컴파일 작업 집합 할당단계는,
    컴파일 작업 집합에 포함된 파일들의 개수를 기준으로 컴파일 작업 집합을 호스트에 할당하는 것을 특징으로 하는 분산 컴파일 방법.
  13. 제 10 항에 있어서,
    상기 컴파일 작업 집합 할당단계는,
    컴파일 작업 집합에 포함된 파일들의 크기의 합을 기준으로 그 합이 큰 컴파일 작업 집합은 로컬 호스트에 할당하고, 나머지 컴파일 작업 집합은 컴파일 작업 집합에 포함된 파일들의 개수를 기준으로 리모트 호스트에 할당하는 것을 특징으로 하는 분산 컴파일 방법.
  14. 제 11 항 내지 제 13 항 중 어느 한 항에 있어서,
    상기 P2P 전송단계는,
    각 리모트 호스트로 전송할 CWSB(U) 내의 각 파일에 대해 그 파일을 전송받아야 하는 호스트를 매핑시켜 호스트 리스트를 작성하고, 하나의 리모트 호스트에 각각의 파일과 각 파일에 대한 호스트 리스트를 함께 전송하는 것을 특징으로 하는 분산 컴파일 방법.
    여기서, CWSB(U)는 개별 호스트에 할당된 컴파일 작업 집합들에 대해 합집합이 수행되어 획득된 파일 집합이다.
  15. 제 14 항에 있어서,
    리모트 호스트가 상기 로컬 호스트로부터 소스 파일의 정보를 수신하고 그 정보를 이용하여 호스트 내의 소스 파일 캐쉬 관리자를 검색하되, 해당하는 소스 파일이 없으면 상기 로컬 호스트로 파일 전송을 요청하는 단계
    를 더 포함하는 것을 특징으로 하는 분산 컴파일 방법.
  16. 제 14 항에 있어서,
    상기 관리 서버가 각 호스트로부터 오브젝트 캐쉬 키와 컴파일 결과 생성된 오브젝트 파일 및 컴파일러 출력 메시지를 수신하여 오브젝트 캐쉬 관라자에 저장하는 단계; 및
    상기 관리 서버가 상기 로컬 호스트로부터 오브젝트 캐쉬 키 리스트를 수신하고, 그에 따라 상기 오브젝트 캐쉬 관리자에서 해당하는 오브젝트 파일과 컴파일러 출력 메시지를 검색하여 상기 로컬 호스트에 전송하는 단계
    를 더 포함하는 것을 특징으로 하는 분산 컴파일 방법.
  17. 제 14 항에 있어서,
    상기 리모트 호스트가 API 호출을 후킹하여 가상의 컴파일러 환경을 구축하는 단계
    를 더 포함하는 것을 특징으로 하는 분산 컴파일 방법.
  18. P2P 네트워크 지능형 분산 컴파일 시스템에,
    임의의 한 호스트(이하, '로컬 호스트'라 한다)가 사용자의 분산 컴파일 작업 요청에 따라 컴파일 대상 파일들의 의존관계 맵을 생성하고 그에 따라 컴파일 작업 집합을 생성하는 컴파일 작업 집합 분석기능;
    관리 서버로부터 이용 가능한 호스트(이하, '리모트 호스트'라 한다)의 접속 정보 리스트를 수신하고, 수신된 접속 정보 리스트를 바탕으로 리모트 호스트들과 P2P 네트워크 연결을 설정하는 네트워크 설정기능;
    각 호스트에 상기 컴파일 작업 집합을 할당하는 컴파일 작업 집합 할당기능;
    할당된 컴파일 작업 집합을 P2P 방식으로 리모트 호스트에 전송하는 P2P 전송기능; 및
    리모트 호스트로부터 컴파일 결과를 수신하는 컴파일 결과 수신기능
    을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020050049535A 2005-05-23 2005-06-10 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체 KR100738004B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050049535A KR100738004B1 (ko) 2005-05-23 2005-06-10 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR1020050043282 2005-05-23
KR20050043282 2005-05-23
KR1020050049535A KR100738004B1 (ko) 2005-05-23 2005-06-10 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체

Publications (2)

Publication Number Publication Date
KR20060121074A KR20060121074A (ko) 2006-11-28
KR100738004B1 true KR100738004B1 (ko) 2007-07-13

Family

ID=37707031

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050049535A KR100738004B1 (ko) 2005-05-23 2005-06-10 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체

Country Status (1)

Country Link
KR (1) KR100738004B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102163930B1 (ko) 2019-09-30 2020-10-12 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR102193822B1 (ko) 2020-09-24 2020-12-22 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR102227403B1 (ko) 2020-12-09 2021-03-12 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR20210038453A (ko) 2020-12-09 2021-04-07 넷마블 주식회사 분산 컴파일링을 검증하는 방법

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2720430T3 (es) 2007-02-09 2019-07-22 Metabasis Therapeutics Inc Antagonistas novedosos del receptor de glucagón
KR101522881B1 (ko) * 2008-06-12 2015-05-26 엘지전자 주식회사 분산 컴파일 시스템 및 방법
US8907103B2 (en) 2008-08-13 2014-12-09 Metabasis Therapeutics, Inc. Glucagon antagonists
CN112114816A (zh) * 2020-09-25 2020-12-22 统信软件技术有限公司 一种分布式编译系统和方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07114603A (ja) * 1993-10-20 1995-05-02 Hitachi Ltd 並列/分散環境下の予算編成システム
KR970029098A (ko) * 1995-11-21 1997-06-26 양승택 네트워크 파일 시스템 상에서의 이동통신 교환기 소프트웨어 컴파일 관리방법
JPH10333917A (ja) 1997-05-28 1998-12-18 Nec Software Ltd 分散コンパイル方式
KR20050013661A (ko) * 2005-01-17 2005-02-04 김준범 TCP/IP Socket 통신을 이용한 ARM 컴파일러 전용, 분산 컴파일 시스템

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07114603A (ja) * 1993-10-20 1995-05-02 Hitachi Ltd 並列/分散環境下の予算編成システム
KR970029098A (ko) * 1995-11-21 1997-06-26 양승택 네트워크 파일 시스템 상에서의 이동통신 교환기 소프트웨어 컴파일 관리방법
JPH10333917A (ja) 1997-05-28 1998-12-18 Nec Software Ltd 分散コンパイル方式
KR20050013661A (ko) * 2005-01-17 2005-02-04 김준범 TCP/IP Socket 통신을 이용한 ARM 컴파일러 전용, 분산 컴파일 시스템

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102163930B1 (ko) 2019-09-30 2020-10-12 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR102193822B1 (ko) 2020-09-24 2020-12-22 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR102227403B1 (ko) 2020-12-09 2021-03-12 넷마블 주식회사 블록체인 보상을 통한 분산 컴파일 시스템
KR20210038453A (ko) 2020-12-09 2021-04-07 넷마블 주식회사 분산 컴파일링을 검증하는 방법

Also Published As

Publication number Publication date
KR20060121074A (ko) 2006-11-28

Similar Documents

Publication Publication Date Title
KR100738004B1 (ko) 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체
KR100322716B1 (ko) 협력적 프록시 시스템의 개체 랜더링 분산 전개를 위한방법 및 장치
CN108510082A (zh) 对机器学习模型进行处理的方法及装置
US11250005B2 (en) Distributed metadata-based cluster computing
US7650609B2 (en) Multi-environment document management system access
US6470346B2 (en) Remote computation framework
US11194814B1 (en) Real-time streaming data ingestion into database tables
US20070011274A1 (en) Data transfer in a multi-environment document management system access
US20170228422A1 (en) Flexible task scheduler for multiple parallel processing of database data
CN113767377A (zh) 针对分布式存储系统中的变化检测的动态散列函数组合
US11809428B2 (en) Scalable query processing
US8027817B2 (en) Simulation management within a grid infrastructure
US11681583B2 (en) Cluster diagnostics data for distributed job execution
US20210034418A1 (en) Peer-to-peer distributed computing system for heterogeneous device types
US7210124B2 (en) Reformulating resources with nodes reachable from defined entry points
KR20190119487A (ko) 스몰 데이터 기계 학습을 위한 노드 관리 시스템
US11163768B1 (en) Checkpoints in batch file processing
US20040268213A1 (en) Classifying software and reformulating resources according to classifications
US20100169271A1 (en) File sharing method, computer system, and job scheduler
US20090063614A1 (en) Efficiently Distributing Class Files Over A Network Without Global File System Support
Kindberg et al. Adaptive parallelism under Equus
KR20110116772A (ko) 분산 빌드 시스템에서 소스코드 버전관리 시스템 및 참조 파일 전송 방법
KR20120031792A (ko) SaaS의 분산된 세션 관리 방법 및 그 관리 시스템
Sukhoroslov et al. Development of Data-Intensive Services with Everest.
JPH11249919A (ja) 手続き呼出しの処理方法およびスタブ生成方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
G170 Publication of correction
FPAY Annual fee payment

Payment date: 20120105

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee