KR101159386B1 - 고성능 연산(hpc) 시스템에서의 온디맨드 인스턴스화 - Google Patents

고성능 연산(hpc) 시스템에서의 온디맨드 인스턴스화 Download PDF

Info

Publication number
KR101159386B1
KR101159386B1 KR1020067021323A KR20067021323A KR101159386B1 KR 101159386 B1 KR101159386 B1 KR 101159386B1 KR 1020067021323 A KR1020067021323 A KR 1020067021323A KR 20067021323 A KR20067021323 A KR 20067021323A KR 101159386 B1 KR101159386 B1 KR 101159386B1
Authority
KR
South Korea
Prior art keywords
nodes
service
node
cluster
host
Prior art date
Application number
KR1020067021323A
Other languages
English (en)
Other versions
KR20070085089A (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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=34966364&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR101159386(B1) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 레이던 컴퍼니 filed Critical 레이던 컴퍼니
Publication of KR20070085089A publication Critical patent/KR20070085089A/ko
Application granted granted Critical
Publication of KR101159386B1 publication Critical patent/KR101159386B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1006Server selection for load balancing with static server selection, e.g. the same server being selected for a specific client
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1008Server selection for load balancing based on parameters of servers, e.g. available memory or workload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1023Server selection for load balancing based on a hash applied to IP addresses or costs

Abstract

일 실시예에서, 고성능 연산(HPC) 시스템에서의 온디맨드 인스턴스화를 위한 방법은, 제1 포트 번호 및 제1 호스트 명을 특정하는 클라이언트로부터의 접속 요청을 수신하는 단계 - 상기 제1 포트 번호 및 제1 호스트 명은 노드들의 클러스터를 포함하는 HPC 서버에 대하여 외부적으로 통지됨 - , 상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버의 서비스를 식별하는 단계, 상기 식별된 서비스가 이용 가능한지를 판정하는 단계, 및, 만일 상기 식별된 서비스가 이용 가능하다면, 상기 클러스터 내의 하나 또는 그 이상의 노드들에서 상기 식별된 서비스를 제공하는 호스트를 인스턴스화하는 단계를 포함한다.
HPC, 온디맨드 인스턴스화

Description

고성능 연산(HPC) 시스템에서의 온디맨드 인스턴스화{ON-DEMAND INSTANTIATION IN A HIGH-PERFORMANCE COMPUTING(HPC) SYSTEM}
<기술 분야>
본 발명은 일반적으로 데이터 처리에 관한 것으로, 특히, HPC 시스템에서의 온디맨드 인스턴스화(on-demand instantiation)에 관한 것이다.
<배경 기술>
고성능 연산(HPC)은 종종 과학자와 엔지니어들이 복잡한 물리 또는 알고리즘 현상을 모델링하고, 시뮬레이팅하고, 분석하기 위해 이용하는 연산 시스템으로 특징지워진다. 현재, HPC 기계들은 통상적으로 노드로 참조되는 하나 이상의 프로세서들의 다수의 HPC 클러스터를 사용하여 설계되어 있다. 대부분의 대규모 과학 및 엔지니어링 응용 분야의 경우, 성능은 주로 개별 노드들의 속도가 아닌, 병렬 확장성(scalability)에 의해 결정되므로, 확장성이 종종 이런 고성능 클러스터를 구축하거나 구입에 있어 제한적인 요소가 되고 있다. 확장성은 일반적으로 i) 하드웨어; ii) 메모리, 입력/출력(I/O), 및 통신 대역폭; iii) 소프트웨어; iv) 아키텍처; 및 vi) 용도에 기초하는 것으로 고려된다. 대부분의 종래의 HPC 환경에서의 처리, 메모리, 및 I/O 대역폭은 명목상 양호하게 균형을 이루지 않으므로, 확장성이 용이하지 않다. 다수의 HPC 환경은 하이-엔드 데이터 처리 요건들을 만족시킬 I/O 대역폭을 갖지 않거나, 너무 많은 불필요한 부품들이 설치된 블레이드(blades) 를 갖고 구축되어 있어, 시스템의 신뢰성을 심하게 떨어뜨리는 경향이 있다. 따라서, 대부분의 HPC 환경은 제품 기반 환경에서 효율적인 동작을 위한 강성의 클러스터 관리 소프트웨어를 제공하지 못할 수 있다.
<개요>
본 발명은 HPC 시스템에 연관된 단점, 문제점, 및 이 둘 모두를 경감 또는 제거시킬 수 있다.
본 발명의 일 실시예에서, 고성능 연산(HPC) 시스템에서 온디맨드 인스턴스화를 위한 방법은 노드 클러스터를 포함하는 HPC 서버에 대해 외부적으로 광고된 제1 호스트 명 및 제1 포트 번호를 지정하는 클라이언트로부터 접속 요청을 수신하는 단계, 제1 포트 번호 및 제1 호스트 명에 대응하는 HPC 서버에서 서비스를 식별하는 단계, 식별된 서비스가 이용가능한지를 판단하는 단계, 및 식별된 서비스가 이용가능하면, 클러스터 내의 하나 이상의 노드에서 식별된 서비스를 제공하는 호스트의 인스턴스화하는 단계를 포함한다.
본 발명의 특정 실시예들은 하나 이상의 기술적인 이점들을 제공할 수 있다. 일례로서, 본 발명의 특정 실시예들은 클라이언트들이 HPC 서버에서 서비스를 요청하는 것을 가능케한다. 본 발명의 특정 실시예들에서, HPC 서버에서의 서비스는 단지 서비스를 액세스하려는 클라이언트로부터의 요청이 그 서비스로의 액세스에 대한 하나 이상의 기준을 만족시키는 경우에만 클라이언트에게 이용가능하다. 본 발명의 특정 실시예에서는 가상 클러스터에서의 높은 호스트 가용성을 제공한다. 본 발명의 특정 실시예들은 인터넷 서비스 요청을 동적으로 모니터링하여 이런 요 청들을 요청된 서비스를 제공하는 호스트와 매핑시켜 이 호스트를 인스턴스화한다. 본 발명의 특정 실시예들은 상술된 이점 전부, 또는 일부를 제공하거나, 또는 전혀 제공하지 않을 수 있다. 본 발명의 특정 실시예들은 하나 이상의 다른 기술적 이점들을 제공할 수 있으며, 이들 중 하나 이상은 당업자라면 도면, 상세한 설명 및 특허청구범위의 기재로부터 쉽사리 이해할 수 있을 것이다.
도 1은 본 발명의 일 실시예에 따른 일례의 고성능 연산(HPC) 시스템을 도시한다.
도 2는 도 1에 도시된 HPC 시스템에서의 일례의 노드를 도시한다.
도 3은 한 노드에서의 일례의 중앙 처리 장치(CPU)를 도시한다.
도 4는 일례의 노드쌍을 도시한다.
도 5a 내지 도 5d는 도 1의 시스템에서의 격자(grid)의 각종 실시예 및 그 용도를 도시한다.
도 6a 및 도 6b는 도 1의 시스템에 따른 그래픽 사용자 인터페이스의 각종 실시예를 도시한다.
도 7은 도 1의 시스템에 따른 클러스터 관리 소프트웨어의 일 실시예를 도시한다.
도 8은 y 차원으로 폴드된 일례의 1차원 요청을 도시한다.
도 9는 내부 루프로서 y축을 이용하여 구성된 두 개의 자유 메쉬를 도시한다.
도 10은 내부 루프로서 x축을 이용하여 구성된 두 개의 자유 메쉬를 도시한다.
도 11은 도 1에 도시된 HPC 시스템의 일례의 인터페이스를 도시한다.
도 12는 도 1의 고성능 연산 시스템에 따른 일괄 작업을 제출하기 위한 방법을 예시하는 흐름도이다.
도 13은 도 1의 고성능 연산 시스템에 따른 격자의 동적 백필링을 위한 방법을 예시하는 흐름도이다.
도 14는 도 1의 고성능 연산 시스템에 따른 노드 장애를 동적으로 관리하기 위한 방법을 예시하는 흐름도이다.
도 15는 도 1에 도시된 HPC 시스템에서 온디맨드 인스턴스화를 위한 일례의 방법을 도시한다.
본 발명의 특징 및 이점들을 완전히 이해하기 위해, 첨부된 도면에 관련하여 기술한 이하의 상세한 설명을 참조하기로 한다.
도 1은 HPC 기술을 이용하여 소프트웨어 애플리케이션 및 프로세스, 예컨대, 대기, 날씨, 또는 충돌 시뮬레이션을 실행하기 위한 HPC 시스템(100)을 예시하는 블록도이다. 시스템(100)은 여러 연산 노드(115)에 처리 성능과 거의 유사한 I/O 성능이 동적으로 할당된 HPC 기능을 사용자에게 제공한다. 일반적으로, 이들 노드들(115)은 무엇보다도 I/O 성능이 향상되고 구조 레이턴시(fabric latency)가 감소되기 때문에 쉽사리 확장가능하다. 예를 들어, 분산형 아키텍처에서 노드(115)의 확장성은 Amdahl의 법칙을 수정하여 표현될 수 있다. 즉,
S(N) = 1/((FP/N)+FS) × (1-Fc × (1-RR/L))
여기서, S(N)은 N개 프로세서에 대한 속도 증가, FP는 병렬 코드부, FS는 비병렬 코드부, Fc는 통신 전용 처리부, 및 RR/L은 원격/지역 메모리 대역폭의 비이다. 따라서, HPC 시스템(100)이 처리 성능과 거의 동일한 또는 거의 유사한 I/O 성능을 제공함으로써, HPC 시스템(100)은 HPC 용도의 전체 효율을 증가시켜 시스템 관리가 보다 용이해진다.
HPC 시스템(100)은 (과학자와 기술자와 같은) 사용자들이 HPC 서버(102) 상에서의 처리를 위해 작업(150)을 제출할 수 있는 분산 클라이언트/서버 시스템이다. 예를 들어, 시스템(100)은 네트워크(106)를 통해 하나 이상의 관리 워크스테이션 또는 로컬 클라이언트(120)에 접속되는 HPC 서버(102)를 포함할 수 있다. 그러나 시스템(100)은 자립형 연산 환경 또는 임의의 다른 적합한 환경일 수 있다. 간단히, 시스템(100)은 매우 확장성 있는 노드(115)를 포함하는 임의의 HPC 연산 환경일 수 있고, 사용자들이 작업(150)을 제출할 수 있고, 작업(150)을 위해 확장가능한 노드(115)를 동적으로 할당하고, 이 할당된 노드(115)를 이용하여 자동으로 작업(150)을 실행한다. 작업(150)은 HPC 기술을 이용하여 처리되고 임의의 apt 사용자에 의해 제출되도록 동작가능한 임의의 배치 또는 온라인 작업일 수 있다. 예를 들어, 작업(150)은 시뮬레이션, 모델 또는 임의의 기타 고성능 요건에 대한 요청일 수 있다. 작업(150)은 또한 클러스터화된 데이터베이스, 온라인 트랜잭션 처리 시스템, 또는 클러스터화된 애플리케이션 서버와 같은 데이터 센터 애플리케이션을 실행하기 위한 요청일 수 있다. 본 명세서에서 사용되는 "동적으로(dynamically)"라는 용어는 일반적으로, 일부 처리가 하나 이상의 변수에 기초하여 적어도 일부분 실행시에 결정된다는 것을 의미한다. 본 명세서에서 사용되는 "자동으로(automatically)"라는 용어는 일반적으로, 적절한 처리가 HPC 시스템(100)의 적어도 일부에 의해 사실상 수행된다는 것을 의미한다. "자동으로"라는 용어가 본 개시의 범위를 벗어나지 않고 시스템(100)과의 임의의 적합한 사용자 또는 관리자 상호작용을 또한 고려한다는 것을 이해해야 한다.
HPC 서버(102)는 복수의 균형화된 노드(115)와 클러스터 관리 엔진(130)을 이용하여 작업(150)을 처리하도록 동작가능한 임의의 로컬 또는 원격 컴퓨터를 포함한다. 일반적으로, HPC 서버(102)는 블레이드(blade) 서버 또는 기타 분산 서버와 같은 분산 컴퓨터를 포함한다. 그러나 서버(102)의 구성은 복수의 노드(115)를 포함한다. 노드(115)는 예를 들어, 블레이드, 범용 퍼스널 컴퓨터(PC), 매킨토시, 워크스테이션, 유닉스 기반 컴퓨터 또는 임의의 기타 적합한 장치와 같은 임의의 컴퓨터 또는 처리 장치를 포함한다. 일반적으로, 도 1은 본 개시에서 사용될 수 있는 컴퓨터의 단지 일례를 제공한다. 예를 들어, 도 1이 본 개시와 함께 사용될 수 있는 하나의 서버(102)를 도시하지만, 시스템(100)은 서버 외의 다른 컴퓨터뿐만 아니라 서버 풀을 이용하여 구현될 수 있다. 다시 말해, 본 개시는 범용 컴퓨터 외의 컴퓨터 뿐만 아니라 종래의 운영 체제(OS)가 없는 컴퓨터를 고려한다. 본 명세서에서 사용되는 바와 같이, 용어 "컴퓨터"는 퍼스널 컴퓨터, 워크스테이션, 네트워크 컴퓨터 또는 임의의 기타 적합한 처리 장치를 포함하도록 의도된다. HPC 서버(102) 또는 컴포넌트 노드(115)는 Linux, UNIX, 윈도우 서버, 또는 임의의 다른 적합한 OS를 포함하는 임의의 OS를 실행하도록 적용될 수 있다. 한 실시예에 따르면, HPC 서버(102)는 또한 원격 웹 서버를 포함하거나 또는 이것과 통신가능하게 결합될 수 있다. 따라서, 서버(102)는 HPC 작업(150)을 처리하기 위해 노드(115)를 동적으로 할당하기에 적합한 임의의 조합의 소프트웨어 및/또는 하드웨어를 갖는 임의의 컴퓨터를 포함할 수 있다.
높은 수준에서, HPC 서버(102)는 관리 노드(105), 복수의 노드(115)를 포함하는 격자(grid)(110), 및 클러스터 관리 엔진(130)을 포함한다. 보다 구체적으로는, 서버(102)는 이하의 컴포넌트 중 일부 또는 그 전부를 갖는 복수의 블레이드(노드(115))를 포함하는 표준 19'' 랙(rack)일 수 있다: 1) 듀얼-프로세서; 2) 크고, 고 대역폭의 메모리; 3) 듀얼 호스트 채널 어댑터(dual host channel adapter:HCAs); 4) 통합된 제조 스위칭; 5) FPGA 지원; 6) 중복(redundant) 전력 입력 또는 N+1 전력 공급. 이들 각종 컴포넌트는 고장(failure)이 노드 레벨에 한정되도록 한다. 그러나 HPC 서버(102)와 노드(115)가 이들 모든 컴포넌트를 포함하지 않을 수 있다는 것을 이해할 것이다.
관리 노드(105)는 관리자를 관리하거나 또는 이를 지원하는 데에 사실상 전용인 적어도 하나의 블레이드를 포함한다. 예를 들어, 관리 노드(105)는 (능동/수동 구성과 같이) 두 개의 블레이드 중 하나는 중복인 두 개의 블레이드를 포함할 수 있다. 한 실시예에서, 관리 노드(105)는 HPC 노드(115)와 동일한 유형의 블레이드 또는 연산 장치일 수 있다. 그러나, 관리 노드(105)는 그것이 적어도 부분적으로 격자(110)를 관리하도록 여전히 동작가능하기만 하면, 임의의 개수의 회로를 포함하고 임의의 적합한 방식으로 구현된 임의의 노드일 수 있다. 종종, 관리 노드(105)는 복수의 HPC 노드(115)와 물리적으로 또는 논리적으로 분리되거나, 격자(110)에 함께 나타내어진다. 도시된 실시예에서, 관리 노드(105)는 링크(108)를 통해 격자(110)에 통신가능하게 접속될 수 있다. "링크"라고 지칭하는 것은 임의의 적합한 통신 프로토콜을 구현하는 임의의 적합한 통신 통로(conduit)를 포함한다. 제한하지 않고 예로서, 링크는 하나 이상의 회로 보드의 하나 이상의 배선(wire), 하나 이상의 내부 또는 외부 버스, 하나 이상의 LAN, 하나 이상의 MAN(metropolitan area networks), 하나 이상의 WAN, 인터넷의 하나 이상의 부분 또는 적절한 경우 이러한 링크들의 둘 이상의 조합을 포함할 수 있다. 한 실시예에서, 링크(108)는 관리 노드(105)와 격자(110) 간에 기가비트 또는 10기가비트 이더넷 통신을 제공한다.
격자(110)는 처리 성능을 증가시키기 위해 상호접속된 노드(115)의 집합이다. 통상적으로, 격자(110)는 3D 원환(torus)이지만, 이것은 본 발명의 범위를 벗어나지 않고, 메쉬(mesh), 하이퍼큐브(hypercube), 또는 임의의 기타 형상 또는 구성일 수 있다. "원환"이라고 지칭하는 것은 적절한 경우 격자(110)의 일부 또는 전부를 포함할 수 있고, 적절한 경우, 그 반대일 수도 있다. 격자(110)의 노드들(115) 간의 링크는 직렬 또는 병렬 아날로그 링크, 디지털 링크 또는 예를 들어 섬유 또는 동과 같이 전기 또는 전자기 신호를 전달할 수 있는 임의의 기타 유형의 링크일 수 있다. 각 노드(115)는 집적 스위치로 구성된다. 이로 인해 노드(115)는 더 쉽게 3D 원환에 대한 기본 구조물이 될 수 있고, 다른 노드들(115) 간의 XYZ 거리를 최소화하는 것을 돕는다. 또한, 이것은 일부 실시예에서, 가장 긴 케이블이 5m보다 작으며, 최대 기가비트 속도인 더 큰 시스템에서 동 배선이 동작가능하게 할 수 있다. 간단히, 노드(115)는 가장 가까운 이웃 통신과 증가된 I/O 대역폭에 대해 일반적으로 최적화된다.
각 노드(115)는 클러스터 관리 엔진(130)과 통신가능하게 결합된 클러스터 에이전트(132)를 포함할 수 있다. 일반적으로, 에이전트(132)는 관리 노드(105) 및/또는 클러스터 관리 엔진(130)으로부터의 요청 또는 명령을 수신한다. 에이전트(132)는 노드(115)의 물리적 상태를 결정하고 "중추부(heartneat)"를 통해서와 같이 처리된 데이터를 관리 노드(105)로 전달하도록 동작하는 임의의 하드웨어, 소프트웨어, 펌웨어 또는 그 조합을 포함할 수 있다. 다른 실시예에서, 관리 노드(105)는 에이전트(132)를 주기적으로 폴링하여 관련 노드(115)의 상태를 결정한다. 에이전트(132)는 그것이 클러스터 관리 엔진(130)의 적어도 일부와 계속 호환가능하기만 하면, 예를 들어, C, C++, 어셈블러, 자바, 비주얼 베이직, 및 이들의 조합과 같은 임의의 적합한 컴퓨터 언어로 기술될 수 있다.
클러스터 관리 엔진(130)은, 노드들(115)을 동적으로 할당 및 관리하고 노드들(115)을 이용하여 작업(150)을 실행할 수 있는 임의의 하드웨어, 소프트웨어, 펌웨어 또는 그들의 조합을 포함할 수 있다. 예를 들어, 클러스터 관리 엔진(130)은 C, C++, 자바, 비주얼 베이직, 어셈블러, 임의의 적절한 버전의 4GL 등 또는 그들의 조합을 포함하는 임의의 적절한 컴퓨터 언어로 작성 또는 기술될 수 있다. 도 1에는 클러스터 관리 엔진(130)이 하나의 멀티태스크 모듈로 도시되어 있지만, 이 엔진에 의해 수행되는 특징 및 기능은, 예를 들어 물리 계층 모듈, 가상 계층 모듈, 작업 스케줄러 및 프리젠테이션 엔진(도 7에 더 상세하게 도시됨)과 같은 다수의 모듈에 의해 수행될 수 있음을 이해할 수 있을 것이다. 또한, 관리 노드(105)의 외부에 있는 것으로 도시되어 있지만, 관리 노드(105)는 일반적으로 클러스터 관리 엔진(130)에 관련된 하나 이상의 프로세스를 실행하며, 클러스터 관리 엔진(130)을 저장할 수 있다. 또한, 클러스터 관리 엔진(130)은 본 명세서의 범위로부터 벗어나지 않고서, 다른 소프트웨어 모듈의 자식 또는 서브모듈일 수 있다. 그러므로, 클러스터 관리 엔진(130)은 노드들(115) 및 작업들(150)을 지능적으로 관리하도록 동작할 수 있는 하나 이상의 소프트웨어 모듈을 포함한다. 특정 실시예에서, 클러스터 관리 엔진은 이하에 설명되는 바와 같이 노드들(115)을 작업들(150)에 할당하기 위한 스케줄러(515)를 포함한다. 이하에 더 상세하게 설명되는 바와 같이, 스케줄러(515)는 노드들(115)을 작업들(150)에 할당하기 위하여 스케줄링 알고리즘을 사용할 수 있다.
서버(102)는 클라이언트-서버 또는 기타 분산 환경에서 네트워크(106)를 통하여 클라이언트(120) 등의 다른 컴퓨터 시스템과 통신하기 위한 인터페이스(104)를 포함할 수 있다. 일부 실시예들에서, 서버(102)는 디스크 팜(disk farm)(140) 내의 저장을 위해, 네트워크(106)로부터 작업들(150) 또는 작업 정책(policy)들을 수신한다. 디스크 팜(140)은 노드들을 상호접속하는 동일한 광대역 인터페이스를 이용하여 계산 어레이에 직접 추가될 수 있다. 일반적으로, 인터페이스(104)는 네트워크(106)와 통신하도록 동작할 수 있으며 적절한 조합의 소프트웨어 및/또는 하드웨어로 인코딩된 로직을 포함한다. 더욱 상세하게는, 인터페이스(104)는 통신 네트워크(106)에 관련된 하나 이상의 통신 프로토콜을 지원하는 소프트웨어, 또는 물리 신호들을 통신하도록 동작할 수 있는 하드웨어를 포함할 수 있다.
네트워크(106)는 컴퓨터 서버(102)와, 클라이언트(120)와 같은 임의의 다른 컴퓨터 간의 무선 또는 유선 통신을 용이하게 한다. 실제로, 서버(102)와 클라이언트(120) 간에 존재하는 것으로 도시되어 있지만, 네트워크(106)는 본 명세서의 범위를 벗어나지 않고서 다양한 노드들(115) 사이에 존재할 수 있다. 즉, 네트워크(106)는 다양한 연산 컴포넌트들 간의 통신을 용이하게 하도록 동작할 수 있는 임의의 네트워크, 네트워크들 또는 서브네트워크를 포함한다. 네트워크(106)는 예를 들어, 인터넷 프로토콜(IP) 패킷, 프레임 중계 프레임, 비동기식 전송 모드(ATM) 셀, 음성, 비디오, 데이터 및 기타 적절한 정보를 네트워크 어드레스들 간에 전달한다. 네트워크(106)는 하나 이상의 근거리 네트워크(LAN), 전파 액세스 네트워크(RAN), 도시권 네트워크(MAN), 광역 네트워크(WAN), 인터넷으로서 알려져 있는 글로벌 컴퓨터 네트워크의 전부 또는 일부, 및/또는 하나 이상의 위치에 있는 임의의 다른 통신 시스템(들)을 포함할 수 있다. MAC는 적절한 경우에서 미디어 액세스 제어(media access control)을 나타낸다.
일반적으로, 디스크 팜(140)은 작업들(150), 프로파일, 부트 이미지 또는 기타 HPC 정보를 저장하기 위한 임의의 메모리, 데이터베이스 또는 저장 영역 네트워크(SAN)이다. 설명되는 실시예에서, 디스크 팜(140)은 하나 이상의 저장 클라이언트(142)를 포함한다. 디스크 팜(140)은 예를 들어 IB(InfiniBand), 기가비트 이더넷(GE) 또는 FC(FibreChannel)와 같은 다수의 통신 프로토콜 중 임의의 것에 따라 데이터 패킷을 처리하고 라우팅할 수 있다. 전형적으로, 데이터 패킷은 데이터를 디스크 팜(140) 내로 전송하기 위하여 사용된다. 데이터 패킷은 소스 식별자 및 목적지 식별자를 갖는 헤더를 포함할 수 있다. 소스 식별자, 예를 들어 소스 어드레스는 정보의 발신자를 나타내고, 목적지 식별자, 예를 들어 목적지 어드레스는 정보의 수신자를 나타낸다.
클라이언트(120)는 사용자에게 그래픽 사용자 인터페이스(GUI)(126)를 통한 작업 제출 화면 또는 관리를 제공하도록 동작할 수 있는 임의의 장치이다. 하이 레벨에서, 도시된 클라이언트(120)는 적어도 GUI(126)를 포함하며, 시스템(100)에 관련된 임의의 적절한 데이터를 수신, 송신, 처리 및 저장하도록 동작할 수 있는 전자 연산 장치를 포함한다. 임의의 개수의 클라이언트(120)가 서버(102)에 통신가능하게 연결될 수 있음을 알 수 있을 것이다. 또한, "클라이언트(120)" 및 "클라이언트(120)의 사용자"는 본 명세서의 범위를 벗어나지 않고서 적절하게 교환되어 사용될 수 있다. 또한, 설명의 편의를 위하여, 각 클라이언트는 한 사용자에 의해 사용되는 것과 관련하여 기술된다. 그러나, 본 명세서는, 많은 사용자들이 동일 GUI(126)를 이용하여 작업들(150)을 통신하기 위하여 하나의 컴퓨터를 사용할 수 있을 것으로 예상한다.
본 명세서에서 사용될 때, 클라이언트(120)는 퍼스널 컴퓨터, 터치 스크린 단말, 워크스테이션, 네트워크 컴퓨터, 키오스크, 무선 데이터 포트, 셀폰, PDA, 여타 장치들 내의 하나 이상의 프로세서, 또는 임의의 다른 적절한 처리 장치를 포함하도록 의도된 것이다. 예를 들어, 클라이언트(120)는 정보를 받아들일 수 있는 키패드, 터치 스크린, 마우스 또는 기타 장치와 같은 입력 장치와, 디지털 데이터, 시각적 정보 또는 GUI(126)를 포함하여 서버(102) 또는 클라이언트(120)의 동작에 관련된 정보를 전달하는 출력 장치를 포함한다. 입력 장치와 출력 장치 둘 다는, 관리 및 작업 제출 디스플레이, 즉 GUI(126)를 통해 클라이언트(120)의 사용자들로부터 입력을 수신하고 또한 그들에게 출력을 제공하기 위하여, 자기 컴퓨터 디스크, CD-ROM 또는 다른 적절한 매체와 같은 고정형 또는 분리가능형 저장 매체를 포함할 수 있다.
GUI(126)는 i) 클라이언트(120)의 사용자로 하여금 시스템(100)과 인터페이스하여 하나 이상의 작업(150)을 제출할 수 있도록 그리고/또는 ii) 임의의 적절한 관리 목적으로 클라이언트(120)를 이용하는 시스템 (또는 네트워크) 관리자로 하여금 시스템(100)과 인터페이스하도록 동작가능한 그래픽 사용자 인터페이스를 포함한다. 일반적으로, GUI(126)는 클라이언트(120의 사용자에게 효율적이면서 사용자 친화적이며 HPC 시스템(100)에 의해 제공되는 데이터 프리젠테이션을 제공한다. GUI(126)는 사용자에 의해 동작되는 양방향성 필드들, 풀다운 리스트들, 및 버튼들을 구비하는 복수의 맞춤형 프레임 또는 뷰를 포함할 수 있다. 일실시예에서, GUI(126)는 다양한 작업 파라미터 필드들을 나타내며 입력 장치들중 하나의 장치를 통해 클라이언트(120)의 사용자로부터 커맨드들을 수신하는 작업 제출 디스플레이를 나타낸다. GUI(126)는, 도 6A 및 6B에 도시한 바와 같이, 노드들(115)의 물리적 및 논리적 상태를, 다른 방법으로 또는 조합하여, 시스템 관리자에게 나타낼 수 있으며, 시스템 관리자로부터 다양한 커맨드들을 수신할 수 있다. 관리자 커맨드들은 노드들을 이용(불)가능 마킹 노드들, 유지 보수용 셧다운 노드들, 리부팅 노드들, 또는 다른 임의의 적절한 커맨드들을 포함할 수 있다. 게다가, 그래픽 사용자 인터페이스라는 용어는 단수 또는 복수로 사용되어 하나 이상의 그래픽 사용자 인터페이스 및 특정한 그래픽 사용자 인터페이스의 디스플레이들의 각각을 설명할 수 있다는 점을 이해해야 한다. 따라서, GUI(126)는 시스템(100)에서 정보를 처리하고 그 결과를 사용자에게 효율적으로 나타내는 일반적인 웹 브라우저와 같은 임의의 그래픽 사용자 인터페이스를 응시한다. 서버(102)는 웹 브라우저(예를 들어, 마이크로소프트사의 Internet Explorer 또는 Netscape Nagivator)를 통해 클라이언트(120)로부터의 데이터를 수용할 수 있으며 네트워크(106)를 이용하여 적절한 HTML 또는 XML 응답을 반환할 수 있다.
동작의 일 양태에 있어서, HPC 서버(102)를 먼저 초기화하거나 부팅한다. 이 프로세스 동안, 클러스터 관리 엔진(130)은 격자(110)에서 노드들(115)의 존재, 상태, 위치, 및/또는 다른 특징들을 판정한다. 상술한 바와 같이, 이것은 각 노드의 초기화에 따라 또는 관리 노드(105)에 의한 즉각적인 폴링에 따라 통신되는 하트비트에 기초할 수 있다. 다음으로, 클러스터 관리 엔진(130)은, 예를 들어, 소정의 정책(policy)에 기초하여 격자(110)의 다양한 부분들을 하나 이상의 가상 클러스터(220)에 동적으로 할당할 수 있다. 일실시예에서, 클러스터 관리 엔진(130)은 발생할 수 있는 장애에 대하여 노드들(115)을 연속적으로 모니터링하고, 노드들(115)중 하나의 노드에 장애가 발생하였다고 판정하면, 다양한 복구 기술들 중 임의의 기술을 이용하여 그 장애를 효율적으로 관리한다. 클러스터 관리 엔진(130)은 가상 클러스터(220)의 할당된 노드 각각에 대하여 고유의 실행 환경을 관리 및 제공할 수도 있다. 실행 환경은 호스트 명(name), IP 어드레스, OS, 구성 서비스, 로컬 및 공유 파일 시스템들, 및 한 세트의 인스톨된 애플리케이션 및 데이터로 이루어질 수 있다. 클러스터 관리 엔진(130)은, 우선 순위와 같이, 관련된 정책들에 따라 그리고 인터 클러스터 정책들에 따라 가상 클러스터(220)로부터 노드들을 동적으로 추가하거나 감할 수 있다.
사용자가 클라이언트(120)에 로그온하면, GUI(126)를 통해 사용자에게 작업 제출 스크린을 나타낼 수 있다. 사용자가 작업 파라미터들을 입력하고 작업(150)을 제출하게 되면, 클러스터 관리 엔진(130)은 작업 제출, 관련된 파라미터들, 및 작업(150), 사용자, 또는 사용자 그룹과 관련된 임의의 소정 정책들을 처리한다. 이후, 클러스터 관리 엔진(130)은 적어도 부분적으로는 이 정보에 기초하여 적절한 가상 클러스터(220)를 판정한다. 이후, 엔진(130)은 가상 클러스터(220)내에 작업 스페이스(230)를 동적으로 할당하고 HPC 기술들을 이용하여 할당된 노드들(115)에 걸쳐 작업(150)을 실행한다. 적어도 부분적으로는 증가된 I/O 성능에 기초하여, HPC 서버(102)는 작업(150) 처리를 보다 빠르게 완료할 수 있다. 완료되면, 클러스터 관리 엔진은 결과(160)를 사용자에게 전달한다.
도 2는 일예로 노드(115)(또는 블레이드)를 도시한다. 노드(115)는 하나 이상의 작업(150)의 쓰레드 또는 프로세스와 같이 일부 또는 전부를 처리하도록 임의의 방위에서 임의의 계산 장치를 포함한다. 한정되는 않는 일예로서, 노드(115)는 XEON 마더보드, OPTERON 마더보드, 또는 다른 계산 장치를 포함할 수 있다. 노드(115)는 격자(110)에서 노드들(115)에 걸쳐 스위칭 기능성들의 분배를 가능하게 하는 집적된 패브릭을 제공하는 아키텍쳐를 구비한다. 특정 실시예에서, 격자(110)에서 노드들(115)에 걸쳐 이러한 기능성을 분배함으로써 격자(110)에서 집중화된 스위칭을 방지할 수 있으며, 이것은 다시 격자(110)에서 장애 허용성을 증가할 수 있으며 격자(110)에서 노드들(115)간에 병렬 통신을 가능하게 한다.
노드들(115)은 2개의 CPU(164) 및 하나의 스위치(166)(또는 패브릭)를 포함한다. 노드(115)에 대한 참조는 적절하다면 2개의 CPU(164) 및 하나의 스위치(166)를 포함할 수 있다. 노드(115)에 대한 참조는 적절하다면 단지 하나의 CPU(164)를 포함할 수 있다. 스위치(166)는 집적 스위치일 수 있다. 특정 실시예에서, 스위치(166)는 24개의 포트를 구비한다. 스위치(166)상의 2개의 포트는 노드(115)와 입력 및 출력용으로 노드(115)를 관리 노드(105)와 결합할 수 있다. 또한, 스위치(166)상의 2개의 포트 각각은 격자(110)의 x축을 따라 노드(115)를 또다른 노드(115)와 결합할 수 있고, 스위치(166)상의 2개의 포트 각각은 노드들(115)을 격자(110)의 y축을 따라 또다른 노드(115)와 결합할 수 있으며, 스위치(166)상의 2개의 포트 각각은 격자(110)의 z축을 따라 노드(115)를 또다른 노드(115)와 결합하여 3D 메쉬, 3D 원환(torus), 또는 격자(110)에서의 다른 토폴로지의 구현을 용이하게 할 수 있다. 스위치(166)상의 추가 포트들은 격자(110에서 노드(115)를 다른 노드들(115)과 결합하여 격자(110)에서의 (3차원 초과를 포함하는 4D 원환 또는 전형적이지 않은 다른 토폴로지와 같은) 다차원성 토폴로지의 구현을 용이하게 할 수 있다. 특정 실시예에서, 스위치(166)상의 하나 이상의 포트는 격자(110)의 하나 이상의 대각선 축을 따라 노드(115)를 하나 이상의 다른 노드(115)와 결합할 수 있으며, 이것은 노드(115)와 그 노드(115)로부터 비교적 멀리 위치하는 하나 이상의 다른 노드(115) 간의 통신 점프 또는 홉을 줄일 수 있다. 제한되지 않는 일예로서, 스위치(166)상의 포트는 노드(115)로부터 수개의 3D 점프만큼 떨어져 있는 격자(110)의 북동측 축을 따라 노드(115)를 또 다른 노드(115)와 결합할 수 있다. 특정 실시예에서, 스위치(166)는 InfiniBand 스위치이다. 특정한 스위치(166)를 도시하고 설명하였지만, 본 발명은 임의의 적절한 스위치(166)를 고려한다.
링크(168a)는 CPU(164a)를 스위치(166)와 결합한다. 링크(168b)는 후술하는 바와 같이 CPU(164a)를 또다른 노드(115)의 또 다른 스위치(166)와 결합한다. 링크(168c)는 CPU(164b)를 스위치(166)와 결합한다. 링크(168d)는 후술하는 바와 같이 CPU(164b)를 다른 스위치(166)와 결합한다. 링크(168e 및 168f)는 추가로 후술하는 바와 같이 스위치(166)를 다른 노드(115)의 2개의 다른 CPU(164)와 결합한다. 특정 실시예에서, 링크(168)는 각 방향에서 초당 1기가바이트를 적절히 통신할 수 있는 InfiniBand 4X 링크를 포함한다. 특정 링크(168)를 도시 및 설명하였지만, 본 발명은 임의의 적절한 링크(168)를 고려한다. 링크(170)는 노드(115)에 대한 I/O 링크이다. 링크(170)는 각 방향에서 초당 1기가바이트를 적절히 통신할 수 있는 InfiniBand 4X를 포함할 수 있다. 특정 링크(170)를 도시 및 설명하였지만, 본 발명은 임의의 적절한 링크(170)를 고려한다. 링크(172)는 후술하는 바와 같이 스위치(166)를 다른 노드들(115)에서의 다른 스위치들(166)과 결합한다. 특정 실시예에서, 링크(172)는 각 방향에서 대략 초당 3기가바이트를 통신할 수 있는 인피니밴드(InfiniBand) 12X를 포함한다. 특정 링크(172)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 링크(172)를 고려한다.
도 3은 노드(115)에서의 예시적인 CPU(164)를 도시한다. 예시적인 CPU(164)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 CPU(164)를 고려한다. CPU(164)는 프로세서(174), 메모리 제어기 허브(MCH)(176), 메모리 유닛(178) 및 호스트 채널 어댑터(HCA)(180)를 포함한다. 프로세서(174)는 하드웨어, 소프트웨어 또는 내장된 로직 컴포넌트 또는 2개 또는 그 이상의 컴포넌트의 조합을 포함한다. 특정 실시예들에서, 프로세서(174)는 INTEL로부터의 NOCONA XEON 프로세서(174)이다. 특정 실시예들에서, 프로세서(174)는 대략 1메가바이트 캐쉬를 가지며 초당 대략 7.2기가 플롭할 수 있는 대략 3.6 기가 헤르쯔 프로세서이다. 특정 실시예들에서, 프로세서(174)는 하이퍼쓰레딩(HyperThreading)을 제공한다. 특정 실시예들에서, 프로세서(174)는 메모리 대역폭의 효과적인 이용을 제공하는 메모리 제어기를 포함한다. 특정 프로세서(174)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 프로세서(174)를 포함한다.
버스(182)는 프로세서(174)와 MCH(176)를 서로 결합한다. 특정 실시예들에서, 버스(182)는 대략 초당 6.4기가바이트를 통신할 수 있는 대략 800MHz 프런트 사이드 버스(FSB)이다. 특정 버스(182)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 버스(182)를 고려한다. MCH(176)은 하드웨어, 소프트웨어 또는 내장된 로직 컴포넌트, 또는 메모니 유닛(178)과 같은 HPC 시스템(100)의 하나 이상의 다른 컴포넌트와 프로세서(174)간의 통신을 활용하는 2개 이상의 컴포넌트의 조합을 포함한다. 특정 실시예들에서, MCH(176)은 프로세서(174)와 하나 이상의 메모리 유닛(178), 버스(182), 레벨 2(L2) 캐쉬 및 CPU(164)의 하나 이상의 다른 컴포넌트들 간의 통신을 제어하는 CPU(164)용 노쓰브리지(northbridge)이다. 특정 실시예들에서, MCH(176)는 LINDENHURST E7520 MCH(176)이다. 특정 실시예들에서, 메모리 유닛(178)은 8기가바이트의 RAM을 포함한다. 특정 실시예들에서, 메모리 유닛(178)은 MCH(176)에 개별적으로 결합된 DDR 메모리 디바이스를 포함한다. 제한하고자 한 것이 아니라 일례로서, 메모리 유닛(178)은 각각 대략 초당 채널당 3.2 기가바이트할 수 있는 2개의 DDR2-400 메모리 디바이스를 포함할 수도 있다. 특정 메모리 유닛(178)이 도시되고 기술되었지만, 본 발명은 임의의 적당한 메모리 유닛(178)을 고려한다.
특정 실시예들에서, 링크는 ICH에 결합된 베이직 I/O 시스템(BIOS)와 같은 HPC 시스템(100)의 하나 또는 그 이상의 컴포넌트, GbE(Gigabit Ethernet) 제어기 또는 ICH에 결합된 다른 이더넷 인터페이스 또는 둘 모두와 프로세서(174)간의 I/O을 활용하는 하나 이상의 하드웨어, 소프트웨어 또는 내장된 로직 컴포넌트를 포함하는 I/O 제어기 허브(ICH)에 MCH(176)를 결합시킨다. 특정 실시예들에서, ICH는 CPU(164)의 I/O 기능들을 제어하는 CPU(164)용 사우스브리지이다. ICH에 결합된 이더넷 인터페이스는 이더넷 인터페이스에 결합된 BMC(baseboard management controller)와 ICH간의 통신을 활용할 수도 있다. 특정 실시예들에서, HPC 시스템(100)의 다른 컴포넌트 또는 관리 노드(105)는 하나 이상의 BMC들을 포함한다. 특정 실시예들에서, 링크는 하나 이상의 GbE 관리 포트에 대한 액세스를 제공하는 스위치에 이더넷 인터페이스를 결합시킨다.
버스(184)는 MCH(176)와 HCA(180)을 서로 결합시킨다. 특정 실시예들에서, 버스(184)는 대략 초당 4기가바이트를 통신할 수 있는 PCI-Express 8X 버스(184)와 같은 PCI(peripheral component interconnect) 버스(184)이다. 특정 버스(184)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 버스(184)를 고려한다. HCA(180)는 하드웨어, 소프트웨어, 내장된 로직 컴포넌트 또는 CPU(164)에 채널기반 I/O를 제공하는 2개의 이상의 컴포넌트들의 조합을 포함한다. 특정 실시예들에서, HCA(180)는 MELLANOX InfiniBand HCA(180)이다. 특정 실시예들에서, HCA(180)는 초당 대략 2.65기가바이트의 대역폭을 제공하며, 노드(115)에서 스위치(166)에 PE(processing element)당 대략 1.85 기가바이트를 허용할 수도 있고 베이직 I/O 시스템(BIOS), 이더넷 인터페이스 또는 다른 I/O과 같은 I/O에 PE 당 대략 800메가바이트를 허용할 수도 있다. 특정 실시예들에서, HCA(180)는 초당 대략 13.6기가플롭용 초당 대략 3.7 기가바이트에 도달하는 스위치(166)에서의 대역폭, 플롭당 대략 0.27바이트용 기가플롭 당 대략 50메가바이트에 도달하는 스위치(166)에서의 I/O 레이트 또는 둘 모두를 허용한다. 특정 HCA(180)가 도시되고 기술되었지만, 본 발명은 임의의 적당한 HCA(180)을 고려한다. 각 링크(168)는 HCA(180)를 스위치(166)에 결합시킨다. 링크(168a)는 상술한 바와 같이, HCA(180)에 대해 1차 스위치(166)인 제1 스위치(166)에 HCA(180)를 결합시킨다. 특정 실시예들에서, HCA(180)를 포함하는 노드(115)는 제1 스위치(166)를 포함한다. 링크(168b)는 상술한 바와 같이, HCA(180)에 대한 2차 스위치인 제2 스위치(166)에 HCA(180)를 결합한다. 특정 실시예들에서, HCA(180)를 포함하지 않는 노드(115)는 상술한 바와 같이, 제2 스위치(166)를 포함한다.
도 4는 2개의 스위치(166)와 4개의 프로세서(174)를 포함하는 예시적인 노드 쌍(186)을 도시한다. 노드 쌍(186)에서의 스위치(166)는 노드 쌍(186)에서 내고장성(fault tolerance)를 증가시킬 수도 있는, 서로에 대한 리던던트이다. 만일 노드 쌍(186)에서 제1 스위치(166)이 적절하게 기능하지 않는다면, 노드 쌍(186)에서 제2 스위치(166)는 노드 쌍(186)에서 모든 4개의 CPU에 대한 스위칭을 제공할 수도 있다. 노드 쌍(186)에서, 스위치(166a)는 CPU(164a, 164b)에 대한 1차 스위치(166)이며 CPU(164c, 164d)에 대한 2차 스위치(166)이다. 스위치(166b)는 CPU(164c, 164d)에 대한 1차 스위치(166)이며 CPU(164a, 164b)에 대한 2차 스위치(166)이다. 만일 스위치(166a, 166b) 모두 적당하게 기능하지 않는다면, 스위치(166a)는 CPU(164a, 164b)에 대한 스위칭을 제공할 수도 있으며 스위치(166b)는 CPU(164c, 164d)에 대한 스위칭을 제공할 수도 있다. 만일 스위치(166a)가 적당하게 기능하지만, 스위치(166b)가 그러하지 않은 경우, 스위치(166a)는 CPU(164a, 164b, 164c, 164d)에 대한 스위칭을 제공할 수도 있다. 만일 스위치(166b)가 적당하게 기능하지만, 스위치(166a)가 그러하지 않은 경우, 스위치(166b)는 CPU(164a, 164b, 164c, 164d)에 대한 스위칭을 제공할 수도 있다.
링크(172)는 격자(110)에서 노드 쌍(186)에서의 각 노드(115)를 노드 쌍(186) 외곽에 있는 6개의 노드(115)를 결합한다. 제한하고자 한 것이 아니라 일례로서, 스위치(166a)에서의 링크(172a)는 격자(110)에서 노드(115a)를 노드(115a)의 북쪽에 있는 노드 쌍(186) 외곽의 제1 노드(115)에 결합시키고, 스위치(166a)에서의 링크(172b)는 격자(110)에서 노드(115a)를 노드(115a)의 남쪽에 있는 노드 쌍(186) 외곽의 제2 노드(115)에 결합시키고, 스위치(166a)에서의 링크(172c)는 격자(110)에서 노드(115a)를 노드(115a)의 동쪽에 있는 노드 쌍(186) 외곽의 제3 노드(115)에 결합시키고, 스위치(166a)에서의 링크(172d)는 격자(110)에서 노드(115a)를 노드(115a)의 서쪽에 있는 노드 쌍(186) 외곽의 제4 노드(115)에 결합시키고, 스위치(166a)에서의 링크(172e)는 격자(110)에서 노드(115a)를 노드(115a)의 상부에 있는 노드 쌍(186) 외곽의 제5 노드(115)에 결합시키며, 스위치(166a)에서의 링크(172f)는 격자(110)에서 노드(115a)를 노드(115a)의 하부에 있는 노드 쌍(186) 외곽의 제6 노드(115)에 결합시킨다. 특정 실시예들에서, 링크(172)는 서로 상이한 노드 쌍(186) 외곽에 있는 노드(115)의 세트들에 노드 쌍(186)내의 노드들(115a, 115b)를 결합한다. 제한하고자 한 것이 아니라 일례로서, 스위치(166a)에서의 링크들(172)은, 노드(115a)를, 노드 쌍(186) 외부에 있는 여섯 개의 제1 세트 노드(115)에 연결시킬 수 있고, 이 여섯 개의 제1 세트 노드는 노드 쌍(186) 외부의 제1 노드(115), 노드 쌍(186) 외부의 제2 노드(115), 노드 쌍(186) 외부의 제3 노드(115), 노드 쌍(186) 외부의 제4 노드(115), 노드 쌍(186) 외부의 제5 노드(115), 노드 쌍 외부의 제6 노드(115)를 포함한다. 스위치(166b)에서의 링크들(172)은, 노드(115b)를, 노드 쌍(186) 외부에 있는 여섯 개의 제2 세트 노드(115)에 연결시킬 수 있고, 이 여섯 개의 제2 세트 노드는 노드 쌍(186) 외부의 제7 노드(115), 노드 쌍(186) 외부의 제8 노드(115), 노드 쌍(186) 외부의 제9 노드(115), 노드 쌍(186) 외부의 제10 노드(115), 노드 쌍(186) 외부의 제11 노드(115), 노드 쌍 외부의 제12 노드(115)를 포함한다.
특정 실시예에서는, 링크(172)가, 격자(110)의 제1 에지에 인접한 제1 노드(115)를, 격자(110)의 제1 에지에 대향하는 제2 에지에 인접한 제2 노드(115)에 연결시킬 수 있다. 일례로는, 격자(110)의 좌측 에지에 인접한 제1 노드(115)와 격자(110)의 좌측 에지에 대향하는 격자(110) 우측 에지에 인접한 제2 노드(115)를 상정해 볼 수 있는데, 이러한 예에 한정되는 것은 아니다. 링크(172)는, 격자(110)에서 제1 노드(115)의 위치가 제2 노드(115)의 위치에 대해 상대적이지만, 제1 노드(115)가 제2 노드(115)의 동쪽에 있고, 제2 노드(115)가 제1 노드(115)의 서쪽에 있도록 하는 바와 같이, 제1 노드(115)와 제2 노드(115)를 서로 연결시킬 수 있다. 다른 예로는, 격자(110)의 앞쪽 에지에 인접한 제1 노드(115)와 격자(110)의 앞쪽 에지에 대향하는 격자(110) 뒤쪽 에지에 인접한 제2 노드(115)를 상정할 수 있다. 링크(172)는, 격자(110)에서 제1 노드(115)의 위치가 제2 노드(115)의 위치에 대해 상대적이지만, 제1 노드(115)가 제2 노드(115)의 남쪽에 있고, 제2 노드(115)가 제1 노드(115)의 북쪽에 있도록 하는 바와 같이, 제1 노드(115)와 제2 노드(115)를 서로 연결시킬 수 있다. 또 다른 예로는, 격자(110)의 위쪽 에지에 인접한 제1 노드(115)와 격자(110)의 위쪽 에지에 대향하는 격자(110) 아래쪽 에지에 인접한 제2 노드(115)를 상정할 수 있다. 링크(172)는, 격자(110)에서 제1 노드(115)의 위치가 제2 노드(115)의 위치에 대해 상대적이지만, 제1 노드(115)가 제2 노드(115)의 아래에 있고, 제2 노드(115)가 제1 노드(115)의 위에 있도록 하는 바와 같이, 제1 노드(115)와 제2 노드(115)를 서로 연결시킬 수 있다.
도 5a 내지 도 5d는 시스템(100) 내의 격자(110) 및 그 이용(usage) 또는 토폴로지(topology)에 대한 각종 실시예들을 도시하는 도면이다. 도 5a는 복수의 노드 타입을 이용한 격자(110)의 구성, 즉 3D 원환(3D Torus)을 도시한다. 예컨대, 도시된 노드 타입들은 외부 I/O 노드, 파일 시스템(FS) 서버, FS 메타데이터 서버, 데이터베이스 서버, 및 계산 노드이다. 도 5b는 격자(110)를 "폴딩(folding)"한 일례를 도시한다. 일반적으로, 폴딩에 의해서, 격자(110)의 한 물리적 에지는 그에 대응하는 축의 에지에 결합되어, 더욱 견고하거나(robust) 에지가 없는(edgeless) 토폴로지를 제공하게 된다. 본 실시예에서는, 노드들(115)이 랩 어라운드(wrap-around)되어, 노드 라인(216)에 의한 근사적인 심리스 토폴로지 커넥트(near seamless topology connet)를 제공한다. 노드 라인(216)은, 둘 이상의 노드(115)를 상호 연결하기 위한 임의의 통신 프로토콜을 구현하는 임의의 적절한 하드웨어일 수 있다. 예컨대, 노드 라인(216)은, 기가비트 이더넷을 구현하는 구리선이나 광섬유 케이블일 수 있다. 특정 실시예에서는, 노드 라인(216)이 상술한 바와 같은 하나 이상의 링크(172)를 포함한다.
도 5c는 하나의 가상 클러스터(220)가 내부에 배치된 격자(110)를 도시한다. 단 하나의 가상 클러스터(220)가 도시되어 있지만, 본 발명의 범위를 벗어나지 않는 범위 내이면, 격자(110) 내의 가상 클러스터(220)의 개수는 임의로 정할 수 있다(0개도 포함함). 가상 클러스터(220)는, 관련 작업(150)을 처리하기 위한 노드들(115)의 논리적 그룹(logical grouping)이다. 예를 들면, 가상 클러스터(220)는 리서치 그룹이나, 부서나, 연구실이나, 혹은 유사한 작업(150)을 담당하는 것으로 보이는 사용자들의 임의의 그룹에 관련된 것일 수 있다. 가상 클러스터(220)는 격자(110) 내에서 임의의 개수의 노드들(115)을 포함할 수 있고, 임의의 형상을 가질 수 있다. 사실상, 도시된 가상 클러스터(220)는 물리적으로 이웃한 복수 개의 노드들(115)을 포함하고 있지만, 클러스터(220)는, 작업(150)을 처리하도록 동작 가능하며 논리적으로 관계된 노드들(115)로 이루어진 분산 클러스터이어도 된다.
가상 클러스터(220)는 임의의 적절한 시기에 배치될 수 있다. 예를 들면, 클러스터(220)는, 예컨대 개시(startup) 파라미터에 기초하여 시스템(100) 초기화 시에 배치된다거나, 예컨대 변경된 서버(102)의 요구에 기초하여 동적으로 배치될 수 있다. 또한, 가상 클러스터(220)는, 변경되는 요청(request), 명령(demand), 및 상황에 즉시 대응하도록 그 형태와 크기를 상시 변경할 수 있다. 예를 들면, 가상 클러스터(220)는, 클러스터(22)로부터 미리 분리된 제2 노드(115)의 고장에 대응하여 자동으로 배치된 제1 노드(115)를 포함하도록 동적으로 변경될 수 있다. 특정 실시예에서는, 필요에 따라, 클러스터들(220)이 노드들(115)을 공유할 수도 있다. 다른 특정 실시예에서는, 스케줄러(515)가, 후술될 스케줄링 알고리즘에 따라서 하나 이상의 작업(150)에 하나 이상의 가상 클러스터(220)를 배치하여도 된다.
도 5d는 일례의 가상 클러스터(220) 내에 배치된 작업 스페이스(230a 및 230b)를 각각 도시한다. 일반적으로, 작업 스페이스(230)는, 수취한 작업(150)을 완료하기 위해 동적으로 배치된 가상 클럭스터(220) 내의 노드들(115)의 집합이다. 통상적으로는, 실행할 작업(150) 당 하나의 작업 스페이스(230)가 존재하거나, 그 역이 가능하고, 작업 스페이스(230)는 본 발명의 범위를 벗어나지 않는 범위이면 노드들(115)을 공유하여도 된다. 작업 스페이스(230)의 차원은, 사용자나 관리자에 의해 수동 입력되거나, 작업 파라미터, 정책, 및/또는 임의의 다른 적절한 특성에 기초하여 동적으로 결정될 수 있다. 특정 실시예에서는, 스케줄러(515)가, 후술될 스케줄링 알고리즘에 따라서 작업 스페이스(230)의 1 또는 그 이상의 차원을 결정하여도 된다.
도 6a 및 도 6b는 시스템(100)에 따른 관리 그래픽 사용자 인터페이스(400)의 다양한 실시예를 도시하고 있다. 흔히, 관리 GUI(400)는 GUI(126)를 이용하여 클라이언트(120)에 제공된다. 일반적으로, 관리 GUI(400)는 다양한 관리 인터렉티브 스크린 또는 디스플레이를 시스템 관리자, 및/또는 다양한 작업 의뢰 혹은 프로파일 스크린을 사용자에게 제공한다. 이러한 스크린 또는 디스플레이는 다양한 보기의 수집 정보로 어셈블링되는 그래픽 요소로 구성된다. 예컨대, GUI(400)는 (도 6a에 도시되어 있는) 격자(110)의 물리적 상태의 디스플레이, 또는 (도 6b에 도시되어 있는) 격자(110)에서의 노드(115)의 로직 할당 혹은 토폴로지를 제공할 수도 있다.
도 6a는 예시 디스플레이(400a)를 도시하고 있다. 디스플레이(400a)는 노드(115)를 효과적으로 관리하기 위해 관리자에게 제공되는 정보를 포함할 수 있다. 도시된 실시예는 격자(110)의 스크린샷 또는 로직 "화상"을 갖는 표준 웹 브라우저를 포함한다. 예컨대, 이 화상은 격자(110)의 물리적 상태 및 컴포넌트 노드(115)를 제공할 수 있다. 각 노드(115)는 각기 다양한 상태를 나타내는 색상들의 임의 넘버 중 하나일 수도 있다. 예를 들면, 실패 노드(115)가 적색일 수 있고, 이용 또는 할당 노드(115)가 흑색일 수 있으며, 비할당 노드(115)가 음영을 나타낼 수도 있다. 또한, 디스플레이(400a)는, 관리자가 노드(115) 중 하나 위로 포인터를 이동시켜, 그 다양한 물리적 특성을 보도록 할 수도 있다. 예컨대, 관리자에게는 "노드", "가용성", "프로세서 이용", "메모리 이용", "온도", "물리적 위치" 및 "어드레스"를 포함하는 정보가 제공될 수 있다. 물론, 이러한 정보들은 단지 예시적인 데이터 등으로, 임의의 적합한 물리적 또는 논리적 노드 정보가 관리자에게 표시될 수 있다. 또한, 디스플레이(400a)는, 관리자가 격자(110)의 보기를 회전시키거나, 임의의 다른 적절한 기능을 수행하게 할 수도 있다.
도 6b는 예시 디스플레이(400b)를 도시하고 있다. 디스플레이(400b)는 격자(100)의 논리 상태의 화상 혹은 보기를 제공한다. 도시된 실시예는 격자(110) 내에 할당된 가상 클러스터(220)를 제공한다. 디스플레이(400b)는 하나 이상의 작업(50)을 수행하기 위해 클러스터(220) 내에 할당되는 두 개의 예시 작업 스페이스(230)를 추가로 표시한다. 디스플레이(400b)는, 관리자가 그래픽 가상 클러스터(220) 위로 포인터를 이동시켜 (할당 혹은 비할당 등의) 여러 상태로 그룹화된 노드(115) 넘버를 보게 할 수도 있다. 또한, 관리자는 적합한 작업 정보가 제공되도록 작업 스페이스(230) 중 하나 위로 포인터를 이동시킬 수 있다. 예컨대, 관리자는 작업 명칭, 시작 시간, 노드 넘버, 추정 종료 시간, 프로세서 이용법, I/O 이용법 등을 볼 수 있다.
(이상에서, 예시 디스플레이(400a 및 400b)로 제각기 나타내지는) 관리 GUI(126)는 단지 예시적인 것으로, 도시되지 않은 추가의 관리 요소뿐만 아니라 도시된 그래픽 요소들의 전부 혹은 그 중 일부를 포함하거나, 또는 그 요소들 중 아무것도 포함하지 않을 수도 있다는 점을 알 것이다.
도 7은 시스템(100)에 따른 클러스터 관리 엔진(130)의 일 실시예를 도시하고 있다. 이 실시예에서, 클러스터 관리 엔진(130)은 다수의 서브 모듈 또는 컴포넌트, 즉 물리적 관리자(505), 가상 관리자(510), 스케줄러(515), 및 로컬 메모리 혹은 변수(520)를 포함한다.
물리적 관리자(505)는 다양한 노드(115)의 물리적 상태를 결정하고, 그 결정 상태에 따라 노드(115)를 효과적으로 관리하도록 동작할 수 있는 임의의 소프트웨어, 로직, 펌웨어 또는 그 밖의 모듈이다. 물리적 관리자는 이러한 데이터를 이용하여 노드(115)가 실패하였음을 효과적으로 결정하고 이에 응답한다. 일 실시예에서, 물리적 관리자(505)는 각기 하나의 노드(115)에 상주하는 복수의 에이전트(132)에 통신가능하게 접속된다. 상술한 바와 같이, 에이전트(132)는 적어도 물리적 정보를 수집하여 이를 관리자(505)에게 전달한다. 또한, 물리적 관리자(505)는 네트워크(106)를 통해 클라이언트(120)의 시스템 관리자에게 경고할 수도 있다.
가상 관리자(510)는 노드(115)의 논리 상태 및 가상 클러스터(220)를 관리하도록 동작할 수 있는 임의의 소프트웨어, 로직, 펌웨어 또는 그 밖의 모듈이다. 일반적으로, 가상 관리자(510)는 노드(115)의 논리 표현을 노드(115)의 물리적 상태와 링크시킨다. 이러한 링크에 따라, 가상 관리자(510)는 가상 클러스터(220)를 생성하고, 노드 실패 또는 증가된 HPC 프로세싱에 대한 (시스템 혹은 사용자의) 요청에 응답하는 식으로, 이러한 클러스터(220)에 대한 다양한 변화를 프로세싱할 수 있다. 또한, 가상 관리자(510)는 비할당 노드(115) 등의 가상 클러스터(220)의 상태를 스케줄러(515)에 전달하여 미실행 혹은 큐잉된 HPC 프로세스 및 작업(150)의 동적 백필링을 가능하게 할 수도 있다. 가상 관리자(510)는 특정한 노드(115)와의 작업(150) 호환성을 또한 결정하여, 이 정보를 스케줄러(515)에 전달할 수 있다. 어떤 실시예에서는, 가상 관리자(510)가 개별 가상 클러스터(220)를 나타내는 오브젝트일 수도 있다.
특정 실시예에서, 클러스터 관리 엔진(130)은 스케줄러(515)를 포함한다. 스케줄러(515)는 스케줄 알고리즘에 따라 노드(115)를 작업(150)에 할당하는 하드웨어, 소프트웨어 또는 내장형 로직 컴포넌트 또는 하나 이상의 그러한 컴포넌트들을 포함한다. 특정 실시예에서, 스케줄러(515)는 플러그인이다. 특정 실시예에서, 작업(150)을 수신하는 클러스터 관리 엔진(130)에 응답하여, 클러스터 관리 엔진(130)은 스케줄러(515)를 호출하여 하나 이상의 노드(515)를 작업(150)에 할당한다. 특정 실시예에서, 클러스터 관리 엔진(130)이 스케줄러(515)를 호출하여 하나 이상의 노드들(515)을 작업에 할당하는 때에, 클러스터 관리 엔진(130)은 스케줄러(515)에 작업(150)에의 할당을 위하여 이용가능한 격자(110) 내의 노드(115)를 식별시킨다. 한정을 위한 것이 아니라 예시적으로, 클러스터 관리 엔진(130)이 스케줄러(515)를 호출하여 하나 이상의 노드(115)를 작업(150)에 할당하는 때에, 클러스터 관리 엔진(130)은 스케줄러(515)에 작업(150)에의 할당에 이용가능한 격자(110) 내의 모든 노드(115)의 리스트를 전달할 수 있을 것이다. 특정 실시예에서, 클러스터 관리 엔진(130)은 작업에의 할당에 이용가능한 노드(115)의 수가 작업(150)에 요청된 노드(115)의 수 이상인 경우에만 스케줄러(515)를 호출하여 하나 이상의 노드(115)를 작업(150)에 할당한다.
전술한 바와 같이, 특정 실시예에서 격자(110)는 각기 4개의 CPU(164)에 결합된 스위치(166)의 3차원 원환이다. 스케줄러(515)는 격자(110)를 노드(115)의 원환으로서 논리적으로 구성한다. 크기 [x,y,z] 스위치(166)의 원환은 [4x,y,z], [x,4y,z], [x,y,4z], [2x,2y,z], [2x,y,2z] 및 [x,2y,2z]의 6개의 가능한 논리적 구성을 제공한다. 스케줄러(515)가 하나 이상의 노드(115)를 작업(150)에 할당하는 때에, 스케줄러(515)는 작업(150)에 가장 적합한 논리적 구성을 선택할 수 있을 것이다.
MPI(Message Passing Interface)는 작업(150)의 프로세스 사이의 통신을 위한 표준이다. 특정 실시예에서, 스케줄러(515)는 작업(150)에 할당된 각각의 노드(115)에 MPI 랭크를 할당한다. N개의 프로세스를 포함하는 작업(150)에 대하여, 스케줄러(150)는 0과 N-1 사이의 특유의 정수 랭크를 각 프로세스에 할당한다. 작업(150)의 제1 프로세스에 메시지를 전달하기 위하여, 작업(150)의 제2 프로세스는 제1 프로세스의 랭크를 특정할 수 있을 것이다. 유사하게, 작업(150)의 제1 프로세스로부터 메시지를 수신하기 위하여, 작업(150)의 제2 프로세스는 제1 프로세스의 랭크를 특정할 수 있을 것이다. 스케줄러(150)는 각기 브로드캐스트 그룹 내의 프로세스로부터 브로드캐스트 그룹 내의 모든 다른 프로세스에 메시지를 전달하는 것을 돕는 하나 이상의 브로드캐스트 그룹 또한 규정할 수 있을 것이다. 브로드캐스트 그룹 내의 제1 프로세스로부터 메시지를 수신하기 위하여, 브로드캐스트 그룹 내의 제2 프로세스는 브로드캐스트 그룹을 특정할 수 있을 것이다.
특정 실시예에서, 스케줄러(515)는 "공간적(spatial)", "컴팩트(compact)" 및 "임의(any)"의 3가지 타입의 요청을 처리한다. "요청"에 대한 참조는 적절하며, 반대의 경우에도 적절한 작업(150)을 포함한다. 사용자가 HPC 서버(102)에 작업을 의뢰하는 경우에, 사용자는 요청 타입을 특정할 수 있을 것이다. "공간적" 요청은 공간적으로 기술된 작업(150)을 포함한다. 기존 MPI 애플리케이션의 한 부류는 작업(150)의 프로세스 사이의 공간적 관계를 가정한다. 날씨 모델이 한 예이다. 날씨 모델을 포함하는 작업(150)을 처리하기 위하여, HPC 서버(102)는 지표면을 분할하고, 시간 구분을 이산 시간 간격으로 나누는 경도 및 위도(또는 유사한 좌표계)를 포함하는 2차원 격자를 이용할 수 있을 것이다. 작업(150)의 각각의 프로세스는 특정 지역에 대한 날씨를 모델링한다. 각각의 기간 단계의 개시시에, 프로세스는 경계치를 프로세스와 인접하는 각각의 4개의 다른 프로세스와 교환하며, 그 후에 특정 지역에 대한 날씨를 계산한다. 날씨 모델을 포함하는 작업(150)을 처리하기 위하여, HPC 서버(102)는 지표면을 분할하는 2차원 격자 대신에 경도, 위도 및 고도(또는 유사한 좌표계)를 포함하는 3차원 격자를 이용할 수 있을 것이다.
작업(150)의 프로세스들 사이의 공간적인 관계를 가정하는 MPI 애플리케이션에 대하여, 사용자는 작업(150)에 대한 노드(115)의 트리플릿(triplet) {Sx,Sy,Sz}을 요청할 수 있을 것이다. 모든 차원 S가 1보다 큰 경우에는 요청은 3차원 요청이다. 차원 S 중 하나가 1인 경우에는 요청은 2차원 요청이다. 차원 S 중 두 개가 1인 경우에는 요청은 1차원 요청이다. 노드(115)를 요청에 할당하기 위하여, 스케줄러(150)는 공간적인 좌표를 MPR 랭크에 [x,y,z]→x×Sy×Sz+y×Sz+z와 같이 맵핑할 수 있을 것이다. Sx, Sy 및 Sz는 요청의 크기를 나타내며, x는 0과 Sx 사이에 존재하는 값이며, y는 0과 Sy 사이에 존재하는 값이며, z는 0과 Sz 사이에 존재하는 값이다. 노드(115)를 2차원 요청에 할당하기 위하여, 스케줄러(150)는 공간적인 좌표를 MPI 랭크에 [x,y]→x×Sy+y와 같이 맵핑할 수 있을 것이다. 특정 실시예에서, 공간 좌표를 MPI 랭크에 매핑하기 위하여, 스케줄러(515)는 격자(110)의 z축을 따라 우선 증가한 다음 격자(110)의 y축을 따라 증가한 후 격자(110)의 x축을 따라 증가한다. 공간 좌표를 MPI 랭크에 매핑하는, 예를 들어 격자(110)의 x축을 따라 우선 증가한 다음 격자(110)의 y축을 따라 증가한 후 격자(110)의 z축을 따라 증가하는 스케줄러(515)에 관한 부정확한 가정을 수용하기 위하여, 클러스터 관리 엔진(30)은 요청된 작업(150)을 예를 들어 {Sz,Sy,Sx}로서 스케줄러(515)에 제공할 수도 있다.
"콤팩트" 요청은 공간적으로 기술되지 않은 작업(150)을 포함한다. 스케줄러(515)는 노드(115)를 콤팩트 요청에 할당하여, 콤팩트 요청에 할당된 노드(115)의 각 쌍 간의 최대 통신 거리(또는 홉 카운트)를 최소화할 수도 있다. "임의의" 요청은 프로세스 간 통신을 거의 또는 전혀 요구하지 않는 작업(150)을 포함한다. 스케줄러(150)는 임의의 요청을 만족시키도록 임의의 세트의 노드들(115)을 할당할 수 있다. 그와 같은 작업(150)은 격자(110)에서의 단편화로부터 발생하는 홀을 채울 기회를 스케줄러(515)에 제공한다.
사용자가 작업(150)을 HPC 서버(102)에 제출할 때, 사용자는 작업(150)에 대한 어그레시브 플래그를 또한 지정할 수도 있다. 특정 실시예에서, 어그레시브 플래그는 노드(115)를 작업(150)에 할당하기 위한 스케줄러(515)에 배당된 여유의 정도를 나타내는 0과 1 사이의 부동 소수점 수이다. 높은 수일수록 낮은 수보다 많은 여유를 스케줄러(515)에 제공한다. 사용자가 스페이스 요청을 HPC 서버(102)에 제출하고, 스페이스 요청에 대한 어그레시브 플래그를 0으로 설정하면, 스케줄러(515)는 노드(115)가 스페이스 요청을 수용할 수 있을 경우에만 작업(150)을 스케줄링한다. 특정 실시예에서, 사용자가 스페이스 요청을 HPC 서버(102)에 제출하고, 스페이스 요청에 대한 어그레시브 플래그를 0보다 큰 수로 설정하면, 스케줄러(515)는 스페이스 요청을 수용하고자 하지만, 스케줄러(515)가 스페이스 요청을 수용할 수 없을 경우에는 작업(150)을 콤팩트 요청으로서 스케줄링한다. 특정 실시예에서, 콤팩트 요청은 그 콤팩트 요청에 할당된 노드(115)의 쌍 간의 무제한 홉 카운트를 허용할 수도 있다. 스케줄러(150)는 그와 같은 요청을 항상 수용할 수 있는데, 이는, 전술한 바와 같이 클러스터 관리 엔진(130)은 할당에 이용가능한 노드(115)의 수가 요청된 노드(115)의 수 이상인 경우에만 스케줄러(515)를 호출하기 때문이다. 특정 실시예에서, 콤팩트 요청에 대한 어그레시브 플래그는 그 콤팩트 요청에 할당된 노드(115)의 쌍 간의 홉 카운트에 대한 제한을 나타낸다. 그와 같은 실시예에서, 홉 카운트에 대한 제한은
Figure 112006074056686-pct00001
과 동일할 수도 있는데, 여기서 a는 어그레시브 플래그이다.
특정 실시예에서, 클러스터 관리 엔진(130)이 스케줄러(515)를 호출하여 하나 이상의 노드(115)를 작업(150)에 할당할 때, 클러스터 관리 엔진(130)은 스케줄러(515)에 다음의 입력, 즉 요청된 노드(115)의 수, 요청 타입, 작업(150)의 크기, 작업(150)에 대한 어그레시브 플래그, 격자(110)의 스위칭 기반 크기(스케줄러(515)가 격자(110)의 노드 기반 크기를 결정하기 위해 나중에 조정함), 스위치(166) 당 노드(115)의 수(특정 실시예에서, 4와 동일함), 작업(150)에 할당가능한 노드(115)의 수, 작업(150)에 할당가능한 하나 이상의 노드(115)의 식별(예를 들어 작업(150)에 할당가능한 모든 노드(115)의 리스트)을 제공한다. 특정 실시예에서, RequestedNodes는 요청된 노드(115)의 수를 나타내고, RequestType은 요청 타입을 나타내며, RequestedSize(어레이를 포함함)는 작업(150)의 크기를 나타내며, AggressiveFlag는 작업(150)에 대한 어그레시브 플래그를 나타내며, TorusSize(어레이를 포함함)는 격자(110)의 스위치 기반 크기를 나타내며, NodesPerSwitch는 스위치(166) 당 노드(115)의 수를 나타내며, NumFreeNodes는 작업(150)에 할당가능한 노드(115)의 수를 나타내며, FreeNodeList(어레이를 포함함)는 작업(150)에 할당가능한 하나 이상의 노드(115)를 식별한다.
특정 실시예에서, 스케줄러(515)가 작업(150)을 스케줄링할 때(또는 스케줄링을 시도할 때), 스케줄러(515)는 다음의 출력, 즉 작업(150)에 할당된 노드(115)의 식별(예컨대, 작업(150)에 할당된 노드(115)의 리스트), 작업(150)에 할당된 각 노드의 MPI Rank, (1) 스케줄러(515)가 작업(150)을 스케줄링했고, (2) 스케줄러(515)가 작업(150)을 스케줄링하지 않았고, 또는 (3) 스케줄러(515)가 작업(150)을 결코 스케줄링할 수 없다는 점을 나타내는 반환 값을 제공한다.
특정 실시예에서, 노드(115)를 작업(150)에 할당하기 위하여, 스케줄러(515)는 작업(150)을 스케줄링하기 위한 변수를 먼저 초기화한 다음, 그 변수에 따라 작업(150)을 스케줄링한 후, 클러스터 관리 엔진(130)에서 처리하기 위한 스케줄(또는 결과)을 변환한다. 3개의 변수, 즉 SpatialAllowed, CompactAllowed 및 AnyAllowed는 허용된 타입의 스케줄링을 나타낸다. 스케줄러(515)는 다음의 예시적인 로직을 이용하여 spatialAllowed, CompactAllowed 및 AnyAllowed를 초기화할 수도 있다.
Figure 112006074056686-pct00002
If the NodesRequested=1
Figure 112006074056686-pct00003
SpatialAllowed=False
Figure 112006074056686-pct00004
CompactAllowed=False
Figure 112006074056686-pct00005
AnyAllowed=True
Figure 112006074056686-pct00006
Else If RequestedType=SPATIAL
Figure 112006074056686-pct00007
SpatialAllowed=True
Figure 112006074056686-pct00008
AnyAllowed=False
Figure 112006074056686-pct00009
If AggressiveFlag>0
Figure 112006074056686-pct00010
CompactAllowed=True
Figure 112006074056686-pct00011
Else
Figure 112006074056686-pct00012
CompactAllowed=False
Figure 112006074056686-pct00013
Else If RequestedType=Compact
Figure 112006074056686-pct00014
SpatialAllowed=False
Figure 112006074056686-pct00015
CompactAllowed=Ture
Figure 112006074056686-pct00016
AnyAllowed=False
Figure 112006074056686-pct00017
Else If RequestedType=Any
Figure 112010022803707-pct00018
SpatialAllowed=False
Figure 112006074056686-pct00019
CompactAllowed=False
Figure 112006074056686-pct00020
AnyAllowed=True
특정 실시예에서, 스케줄러(515)는 보다 작은 차원의 격자(110) 전에 보다 큰 차원의 격자(110)을 지시하도록 스위치 기반 크기의 격자(110)를 배향시킨다. (어레이를 포함하는) 원환맵(TorusMap)은 보다 작은 차원의 격자(110) 전에 보다 큰 차원의 격자(110)를 지시하도록 배향된 스위치 기반 크기의 격자(110)를 지시한다. 스케줄러(515)는 FreeNodeList에서 식별된 모든 노드들(115)에 원환맵을 적용한다. (어레이를 포함하는) 역 원환 맵(InverseTorusMap)은 원환 맵의 역이고, 스케줄러(515)는, 처리를 위해 노드들(115)의 리스트를 클러스터 관리 엔진(130)에 반환하기 전에, 작업(150)에 할당된 그 리스트에 역 원환맵을 적용한다. 비한정적인 예로서, 클러스터 관리 엔진(130)이 14×16×15의 스위치 기반 원환 크기를 스케줄러(515)에 전달하면, 스케줄러(515)는 원환맵을 {2,0,1}로 설정한다. 그러면, 스위치 기반 원환 크기는 16×15×14가 되고, 인덱스 {x,y,z}를 갖는 FreeNodeList에서의 노드(155)에 대하여, 스케줄러(515)가 원환맵을 적용한 후의 노드(155)의 인덱스는 {y,z,x}이다. 상기 예에 대한 역 원환맵은 {1,2,0}이다.
특정 실시예에서, NumMapDimensions는 스위치 기반 원환을 노드 기반 원환으로 변환할 때의 수정에 대한 차원의 넘버를 지시한다. MapDimsions[2] 및 MapMod[2]는 수정을 위해 차원의 인덱스와 수정을 위해 차원의 각각의 승수를 제공한다. 스케줄러(515)는 수정을 위해 차원들 중 하나의 차원에 4를 승산하거나 수정을 위채 차원들 중 두개의 차원 각각에 2를 승산할 수 있다. 스케줄러(515)는 어떤 승산을 적용할지를 판정한 후, 스위치에 관하여 초기에 설명한 바와 같이, 원환의 크기를 적절히 수정한다. 스케줄러(515)는 RequestType에 따라 어떤 승산을 적용할지를 판정한다.
특정 실시예에서, 스케줄러(515)는 하나 이상의 등비 변환을 요청에 적용하여 상기 요청을 만족시키는 메쉬들의 리스트를 생성한다. 메쉬는 격자(110)에 내장된 박스를 포함한다. 시작점 [Sx,Sy,Sz]과 종료점 [Ex,Ey,Ez]이 메쉬를 정의한다. 하나 이상의 차원에서 메쉬가 종료점보다 큰 시작점을 갖는다면 메쉬는 하나 이상의 차원에서 "랩(wrap)"한다. 비제한적인 예로서, 시작점 [3,7,5]과 종료점 [2,9,4]을 갖는 메쉬는 x 및 y 차원에서 랩한다. 격자(110)에 있는 점 [x,y,z]는, [Sx≤x≤Ex], [Sy≤y≤Ey]이고 [Sz≤z≤Ez]이면, 비래핑(nonwrapping) 메쉬에 있게 된다. 스케줄러(515)가 요청을 만족시키는 메쉬의 리스트를 생성한 후에, 스케줄러(515)는 요청에 할당하기 위해 이용가능한 노드들(155)의 세트에 관하여 스케줄링가능한 메쉬를 자신이 식별할 때까지 리스트를 통해 루프를 돌린다. 일반적으로, 3차원 요청은 그 요청을 만족시키는 6개의 메쉬로 귀착되는 경향이 있고, 2차원 요청은 그 요청을 만족시키는 수십개의 메쉬로 귀착되는 경향이 있으며, 일차원 요청은 그 요청을 만족시키는 수백개의 메쉬로 귀착되는 경향이 있다. 특정 실시예에서, 스케줄러(515)는 2차원 또는 3차원 요청에 대하여 노드 기반 원환을 설정하여 그 요청을 만족시키는 메쉬들의 넘버를 최대화한다.
일차원 요청을 스케줄링(하나 이상의 노드(115)를 일차원 요청에 할당)하기 위한 변수를 초기화하기 위해, 스케줄러(515)는 격자(110)에 있는 스위치(166)의 y축 및 z축을 2×2 구성의 노드(115)로 설정한다. 스케줄러(515)는 격자(110)에 있는 스위치(166)의 z축이 미사용 차원이 되도록 작업(150)을 매핑한다. 다음에, 스케줄러(515)는 z축을 따라 작업(150)을 y축으로 폴딩한다. 따라서, 특정 실시예에서, 다음을 일차원 요청에 적용한다:
NumMapDimensions=2
MapDimension[0]=1
MapDimension[1]=2
MapMod[0]=2
MapMod[1]=2
적절한 경우에, [n]은 0에서 1-n까지의 범위의 인덱스를 갖는 1차원 어레이를 나타낸다. 제한되지 않는 예로서, 적절한 경우에, a={4,6,2}는 a[0]=4, a[1]=6, 및 a[2]=2에 대응한다.
특정 실시예들에서, 스케줄러(515)는 또한 격자(110) 내의 스위치들(166)의 y축 및 z축을 노드들(115)의 2x2 구성으로 설정하여 2차원 요구를 스케줄링하기 위한 변수들을 초기화할 수 있다. 특정 실시예들에서, 스케줄러(515)는 2차원 요구들을 제3의 비사용 차원으로 폴드(fold)하여 스케줄링을 위한 보다 콤팩트한 형상을 발생한다. 많은 이러한 폴드들이 가능할 수 있기 때문에, 스케줄러(515)는 이러한 폴드들의 최대수를 발생하는 구성(이는 노드들(115)의 2x2 구성과는 다를 수 있음)을 선택할 수 있다. 스케줄러(515)는 2차원 요구에 대한 6가지 가능한 구성들의 각각을 체크하고 6가지 가능한 구성들의 각각에 대한 가능 폴드들의 수를 산출할 수 있다. 특정 실시예들에서, 스케줄러(515)는 가능한 폴드들의 최대수를 가능하게 하는 구성을 선택한다. 특정 실시예들에서, 2개의 1x4 구성들 사이의 결합 이벤트시, 스케줄러(515)는 우선 z축을 변형시키는 1x4 구성을 선택한 후 y축을 변형시키는 1x4 구성을 선택한다. 특정 실시예들에서, 1x4 구성 및 2x2 구성 사이의 결합 이벤트시, 스케줄러(515)는 2x2 구성을 선택한다. 특정 실시예에서, 2개 이상의 2x2 구성들 사이의 결합 이벤트시, 스케줄러(515)는 우선 y 및 z축들을 변형시키는 2x2 구성을 선택한 후, x 및 z 축들을 변형시키는 2x2 구성을 선택하고 나서, x 및 y 축들을 변형시키는 2x2 구성을 선택한다. 특정 실시예들에서, 3차원 요구는 폴드들을 허용하는 대신 서로에 대해 각각 고유한 6개의 방향들(회전들)을 허용하는 점을 제외하면, 스케줄러(515)가 2차원 요구를 스케줄링하기 위한 변수들을 초기화하는 것처럼 스케줄러(515)는 3차원 요구를 스케줄링하기 위한 변수들을 초기화할 것이다.
특정 실시예들에서, 콤팩트한 요구를 스케줄링하기 위한 변수들을 초기화하기 위해, 스케줄러(515)는 콤팩트한 요구의 z축에 4를 곱하여 1x4 구성을 발생한다. 1x4 구성을 사용하여 콤팩트한 요구를 처리하면 콤팩트한 요구에 할당된 스위치(166)에 결합된 모든 노드들(115)을 용이하게 사용할 수 있고, 따라서 격자(110) 내의 스위치 포인트들에서 절단(fragmentation)이 감소된다. 특정 실시예들에서, 스케줄러(515)는 임의의 요구를 스케줄링하기 위한 변수들을 마찬가지로 초기화한다.
파티션은 스케줄링에 이용가능한 격자(110) 내의 모든 노드들(115)을 포함하는 최소 메시이다. PartStart[3]은 파티션의 시작 좌표를 나타내고, PartEnd[3]은 파티션의 말단 좌표를 나타내고, PartSize[3]은 파티션의 사이즈를 나타내고, PartWraps[3]은 파티션이 래핑되었는지를 나타낸다. 스케줄러(515)는 요구를 만족시키는 노드들(115)에 대한 검색들의 길이들을 감소시키도록 파티션을 작성할 수 있다. 파티션은 격자(110)보다 훨씬 작을 수 있다. i=0, 1, 2인 경우, PartStart[i]는 (어레이를 포함하는 )FreeMesh 내의 모든 가능한 i 좌표들 중 최소를 포함하고 PartEnd[i]는 FreeMesh 내의 모든 가능한 i 좌표들 중 최대를 포함한다. PartSize[i]=PartEnd[i]-PartStart[i]+1이다. PartSize[i]가 TorusSize[i]와 동일하면, PartWraps[i]는 참이다. 스케줄러(515)는 (어레이를 포함하는) NodeInUse를 FreeMesh 내의 모든 노드들에 대해 NODE_NOT_IN_USE로 설정하고 모든 다른 노드들에 대해서는 NODE_IN_USE로 설정한다.
특정 실시예들에서, FreeY[i,j,k]는 라인 {i,j,k} 내지 {i,TorusSize[1]-1,k}에 따른 프리 노드들(155)의 수를 포함한다. FreeX[i,j,k]는 라인 {i,j,k} 내지 {TorusSize[0]-1,j,k}에 따른 프리 노드들(115)의 수를 포함한다. 스케줄러(515)는 후술하는 바와 같이 FreeY[i,j,k] 및 FreeX[i,j,k]를 사용하여 스캔 알고리즘을 실행한다. 특정 실시예들에서, 스케줄러(515)는 SpatialAllowed 또는 CompactAllowed가 참인 경우에만 FreeY[i,j,k] 및 FreeX[i,j,k]를 작성한다.
SpatialAllowed가 참이면, 스케줄러(515)는 요구를 스케줄링하기 위한 다양한 구조들을 시도한다. 사이즈 S={Sx,Sy,Sz}의 스페이스 작업은 6개까지의 고유 방향들:{Sx,Sy,Sz}, {Sx,Sz,Sy}, {Sy,Sx,Sz}, {Sy,Sz,Sx}, {Sz,Sx,Sy}, 및 {Sz,Sy,Sx}를 가진다. 6개의 방향들은 스케줄러(515)가 메시에 적용할 수 있는 4개의 고유한 90°회전들 및 2개의 고유한 180°회전들에 대응한다. 어느 2개의 차원들이 서로 동일하면, 단지 3개의 고유한 방향들이 이용가능하다. 스케줄러(515)는 메시를 스케줄링할 때 모든 가능한 방향들을 고려한다. 작업(150)이 2차원이면, 즉 작업(150)의 하나의 차원이 1이면, 스케줄러(515)는 보다 콤팩트한 3차원 메시를 발생하기 위해 아코디언형 방식으로, 작업(150)의 2개의 사용된 차원들 중 어느 하나, 즉 1보다 큰 작업(150)의 차원들을 작업(150)의 비사용 차원, 즉 1인 작업(150)의 차원에 폴드할 수 있다. 스케줄러(515)가 폴드의 길이의 정수배가 아닌 차원을 폴드하면, 최종 폴드는 모든 이전 폴드들보다 짧아질 것이고, 이에 따라 2차원 메시가 3차원 메시 상에 연결될 것이다. 작업(150)이 1차원이면, 스케줄러(515)는 폴드 작업(150)을 2개의 비사용 차원들 중 어느 하나에 폴드할 것이다. 그 후, 스케줄러(515)는 2개의 결과적인 차원들 중 어느 하나를 나머지 비사용 차원에 폴드할 수 있다. 메시의 결과적인 형상은 일반적으로 말하면 4개의 메시들의 연결일 것이다.
도 8은 y 차원으로 폴드된 1차원 요구의 예를 도시한다. 도 8에서, 스케줄러(515)는 4의 폴드 길이를 이용하여 1차원 요구, {1,1,11}를 y 차원으로 폴드하여 2차원 메시 {1,2,4}, 2차원 메시 상으로 연결된 1차원 메시 {1,1,3}를 발생한다. 스케줄러(515)는 제1 폴드를 0으로, 제2 폴드를 1로, 제3의 짧은 폴드를 2로 번호매김할 수 있다. 스케줄러(515)가 폴드를 따라 MPI Rank를 노드들(115)에 할당하는 경우, z값이 짝수번째 폴드들을 따라 증가하고 z값들이 홀수번째 폴드들을 따라 감소함에 따라 MPI Rank가 증분된다. 제한되지 않는 예로서, [0,0]에서의 노드(115)에 대한 MPI Rank는 0이 될 수 있고, [0,1]에서의 노드(115)에 대한 MPI Rank는 1이 될 수 있고, [0,2]에서의 노드(115)에 대한 MPI Rank는 2가 될 수 있고, [0,3]에서의 노드(115)에 대한 MPI Rank는 3이 될 수 있다. 계속해서, [1,3]에서의 노드(115)에 대한 MPI Rank는 4가 될 수 있고, [1,2]에서의 노드(115)에 대한 MPI Rank는 5가 될 수 있다. 연결은 z=0에서 시작하는데, 그 이유는 폴드가 짝수를 갖기 때문이다. 스케줄러(515)가 홀수개의 완전한 폴드들들 사용하여 요구를 폴드했다면, 대신에 연결은 z=3에서 시작해서 x=0을 향해 안쪽으로 계속될 것이다. 특정 실시예들에서, 스케줄러(515)는 아코디언형 폴드들만을 고려한다. 다른 유형의 폴드들이 존재한다. 제한되지 않는 예로서, 폴드는 계단 형상을 생성할 수 있다. 스케줄러(515)는 1차원 작업들(150) 상에서의 특정 폴드들을 금지할 수 있다. 상술한 바와 같이, 특정 실시예들에서, 스케줄러(515)는 1차원 작업(150)을 2번 폴드한다. 제2 폴드는 스케줄러(515)가 제1 폴드를 폴드한 차원을 폴드하거나 스케줄러(515)가 제1 폴드로 폴드된 차원을 폴드한다. 도 8에서, 스케줄러(515)는 z 차원을 폴드했고 y 차원으로 폴드했다. 제2 폴드가 스케줄러(515)가 제1 폴드를 폴드한 차원을 폴드하면, 스케줄러(515)는 총 4개의 메시들에 대해 3개까지의 연결들을 발생할 수 있다. 특정 실시예들에서, 스케줄러(515)는 2개 이하의 연결을 허용한다. 결과적으로, 스케줄러(515)가 1차원 작업(150)을 스케줄링하는 경우, 제1 폴드가 연결되면 제2 폴드는 스케줄러(515)가 제1 폴드를 폴드한 차원을 폴드하는 것으로 제한된다. 작업(150)의 크기가 폴드 길이의 정수배이면, 연결이 발생되지 않는다. 특정 실시예들에서, 이러한 제한은 스케줄러(515)가 2개 이하의 연결을 허용하는 것을 보장한다. 특정 실시예들에서, 스케줄러(515)는 처음에 요구를 만족시키는 모든 가능한 메시들을 작성한다. 요구가 1차원 또는 2차원이면, 스케줄러(515)는 각각의 가능한 아코디언형 폴드 및 그러한 각 폴드의 각각의 가능한 방향을 작성한다. 요구가 3차원이면, 스케줄러(515)는 요구의 각각의 가능한 방향을 작성한다. 특정 실시예들에서, 스케줄러(515)는 후술하는 바와 같이 Try Structures의 리스트를 이용하여 각각의 이러한 작성을 기록한다.
CompactAllowed가 참이면, 스케줄러(515)는 요구된 노드들(115)의 수를 포함하는 콤팩트 메시를 작성한다. 스케줄러(515)는 메시를 가장 적당하게 지정하고 (어레이를 포함하는) BestFit 내에 메시를 저장한다. 제한되지 않는 예로서, N이 노드들(115)의 요구된 수이고 Q가 정수로 잘라진 N의 3제곱근이라고 하자. 스케줄러는 처음에 BestFit를 {Q,Q,Q}로 설정한다. N=Q3이면, 스케줄러(515)가 작동된다. 아니면, 스케줄러(515)는 후술하는 바와 같이 BuildCompactFits 함수에 따라 BestFit의 하나 이상의 차원들을 증분시킬 것이다. 스케줄러(515)는 그 후 BestFit의 차원들보다 크거나 같은 차원들 또는 격자(110)의 차원들보다 작거나 같은 차원들을 가지는 모든 메시들을 작성하고 (어레이를 포함하는) Fit를 사용하여 메시들을 기록한다.
스케줄러(515)는 그 후 Fit로부터 원하지 않는 메시들을 제거한다. 상술한 바와 같이, 특정 실시예들에서는, 격자(110)는 각각이 4개의 CPU(164)에 결합된 스위치들(166)의 3차원 원환이다. 스케줄러(515)는 하나의 차원에서는 4의 인수 또는 2개의 차원에서는 2의 인수에 의해 원환을 변경하여 스위치(166) 당 4개의 CPU(164)를 포함하는 격자(110)를 설명한다. 가능성 스케줄러(515)를 증가시키는 것은 요구를 만족시킬 것이므로, 스위치(166)에서의 하나의 CPU(164)가 프로세스를 실행하면, 스위치(166)에서의 모든 CPU(164)는 프로세스를 실행하고, 스케줄러(515)는 곱셈 인수의 정수배인 하나 이상의 변경된 차원들 내의 크기들을 갖는 메시들만을 유지한다. 제한되지 않는 예로서, 스케줄러(515)가 y 차원에서 2, z 차원에서 2를 스위치들(166)의 원환에 곱했다면, 스케줄러(515)는 짝수 y 및 z 차원을 갖는 Fit 내의 메시들 만을 유지할 것이다.
이어서 스케줄러(515)는 나머지 메쉬들의 최대 홉 카운트들에 따라 피트(Fit)의 나머지 메쉬들을 소팅한다. 사이즈 {Sx, Sy, Sz}의 메쉬에서 임의의 2개의 노드들 간의 최대 거리는 (Sx+1)+(Sy-1)+(Sz-1)이다. 2개의 메쉬들이 서로 동일한 최대 홉 카운트들을 가지면, 스케줄러(515)는 다른 메쉬 앞에 큐브가 있도록 메쉬를 더 가깝게 둔다. 한정하지 않는 예로서, M1={4, 6, 16} 및 M2={8, 9, 9}는 동일한 최대 거리를 갖지만, 스케줄러(515)는 M1 앞에 M2를 둔다.
스케줄러(515)가 피트로부터 원하지 않는 메쉬들을 제거하지 않을지라도, 스케줄러(515)는 적어도 N 노드들(115)을 포함하는 모든 메쉬들을 발생하지 않을 것이다. 한정하지 않는 예로서, N이 27과 같고 BestFit이 {3, 3, 3}과 같다면, 피트는 메쉬 {1, 1, 27}을 포함하지 않을 것이다. 피트는 격자(110)와 동일한 메쉬를 포함할 것이고 N이 격자(110)에서 노드들(115)의 수 이하이면 클러스터 관리 엔진(130)은 스케줄러(515)를 호출하기 때문에, 메쉬 {1, 1, 27}은 메쉬들의 합리적인 수가 되지 않을 것이고 항상 요청을 만족하는 적어도 하나의 메쉬가 될 것이다.
AnyAllowed가 참이면, 하나 이상의 프리 메쉬들을 구성하기 위하여, 스케줄러(515)가 프리 노드(115)를 식별할 때까지 스케줄러(515)가 NodeInUse를 통해 x축을 외부 루프로서, y축을 다음으로, z축을 내부 루프로서 루핑한다. 프리 메쉬는 프리 노드들(115)만을 포함하는 메쉬를 포함하고, 프리 노드(115)는 작업(150)에 할당가능한 노드(115)를 포함한다. 스케줄러(515)는 NumFreeMeshes 및 FreeMesh[NumFreeMeshes]를 구성한다. NumFreeMeshes가 격자(110)에서 프리 메쉬들의 수를 나타내고, FreeMesh는 격자(110)에서 각 프리 메쉬에 대하여 격자(110)에서 하나 이상의 프리 메쉬들의 구성을 식별하는 리스트이다. 한정하지는 않지만 예로서, 노드(115)의 인덱스는 {i1, j1, k1}이다. 스케줄러(515)가 예를 들어 {i1, j1, k2}와 같이 논프리 노드(115)를 식별할 때까지 스케줄러(515)는 z 축을 증분할 수 있다. 스케줄러(515)는 FreeMesh.start[2]를 k1으로 FreeMesh.end[2]를 k2-1으로 설정할 수 있다. FreeMesh.start[2]는 z축을 따른 프리 메쉬의 시작 값에 대응하고, FreeMesh.end[2]는 프리 메쉬의 종료 값에 대응한다. 스케줄러(515)는 제1 값 j2를 식별하기 위하여 j1에서 시작하여 y축을 증분하여, 라인 {i1, j2, k1}에서 {i1, j1, k2-1}이 적어도 하나의 논프리 노드를 포함할 수 있다. 이어서 스케줄러(515)는 FreeMesh.start[1]을 j1으로 FreeMesh.end[2]를 j2-1로 설정한다. 이어서 스케줄러(515)는 제1 값 i2를 식별하기 위하여 i1에서 시작하여 x축을 증분하여, 평면 {i2, j1, k1}에서 {i2, j2-1, k2-1}가 적어도 하나의 논프리 노드를 포함한다. 그리고 스케줄러는 FreeMesh.start[0]을 i1으로 FreeMesh.end[0]을 i2-1로 설정한다. 스케줄러(515)가 격자(110)의 모든 노드들(115)을 커버할 때까지 상기 처리를 반복한다. 상기 처리는 프리 메쉬들의 고유한 세트를 가져오지 않는다. 2 이상의 프리 메쉬들이 서로 경계를 공유할 뿐이면, 상이한 순서의 루핑은 상이한 프리 메쉬들의 세트를 발생하는 경향이 있다. 노드들(115)에 의해 전체적으로 둘러싸인 프리 메쉬는 항상 고유하다. 도 9 및 도 10은 2차원 경우에서 y축을 내부 루프로 사용하는 것과 x축을 내부 루프로 사용하는 것 사이의 차이를 나타낸다. 도 9는 y축을 내부 로프로서 사용하여 구성되는 2개의 프리 메쉬들을 나타내고, 도 10은 x축을 내부 루프로서 사용하여 구성되는 2개의 프리 메쉬를 나타낸다. 도 9에서, 영역(530)은 사용되는 노드들(115)을 포함하고, 영역(532a)은 제1 프리 메쉬이고, 영역(532b)은 제2 프리 메쉬이다. 유사하게 도 10에서, 영역(530)은 사용되는 노드들(115)을 포함하고, 영역(532a)은 제1 프리 메쉬이고, 영역(532b)은 제2 프리 메쉬이다.
특정 실시예에서, 스케줄러(515)는 스페이스 요청들을 스케줄링하기 위하여 제1 스케줄링 알고리즘을 사용하고, 콤팩트 요청들을 스케줄링하기 위하여 제2 스케줄링 알고리즘을 사용하고, 임의의 요청들을 스케줄링하기 위하여 제3 스케줄링 알고리즘을 사용한다. 제1 및 제2 스케줄링 알고리즘은 서로 유사하지만, 서로 상대적으로 상이한 스캔 알고리즘을 사용한다. 스케줄러(515)가 작업(150)을 스케줄링하면, 스케줄러(515)는 MPI Rank에 따라 AssignedNodeList에서 작업(150)에 할당되는 노드들(150)을 리스트한다, 즉 AssignedNodeList[i]가 MPI Rank i를 갖는다.
사이즈 {Sx, Sy, Sz}를 갖는 스페이스 요청을 스케줄링하기 위하여, 스케줄러(515)는 스페이스 요청에 대하여 NodeInUse에서 시작점을 검색하기 위한 스캔 알고리즘을 사용한다. 다음의 예시의 로직은 예시의 스캔 알고리즘의 예시의 설명을 제공한다. PartStart는 시작점이고 PartEnd는 파티션의 종료점이고 Tx, Ty 및 Tz는 각각 x y, 및 z 차원들의 원환체(torus) 사이즈들이다.
Figure 112006074056686-pct00021
특정한 실시예에서, 콤팩트 요청에 이용가능한 스캔 알고리즘은 상기 Hit flag를 다음과 같은 최내 루프에서 증분된 카운트 값으로 교체한다.
Figure 112006074056686-pct00022
스케줄러(515)가 NodeInUse에서의 각 점을 Sx×Sy×Sz 배까지 상승시키기 때문에, 상기 로직은 상대적으로 불충분하다. 콤팩트 요청의 상기 스캔에서, z1에서 z1+1까지의 z 루프 증분으로서, i 및 j 내부 루프들은 변화하지 않고 k 루프는 종료점에서만 변화한다. 그 결과, {x y, z1}에서 {x+Sx, y+Sy-1, z1}의 2차원 메쉬는 이후의 계산에서 배제되고 스케줄러(515)는 {x, y, (z1+1)+Sz-1}에서 {x+Sx-1, y+Sy-1, (z1+1)+Sz-1}의 2차원 메쉬를 이후의 계산에 추가한다. i, j, 및 k 내부 루프들은 사이즈 {Sx, Sy, 1}의 z 축을 따라 2차원 메쉬들의 시퀀스에서 프리 노드들(115)을 카운팅한다. z 루프는 하나의 메쉬를 제거하고 다른 것을 추가한다. y 루프에서 유사한 결과가 y축을 따라 발생한다. FreeX 및 FreeY(이는 둘다 어레이들을 포함한다)는 처리 시간을 단축하는 것을 용이하게 한다. 특정 실시예에서, 스케줄러(515)는 콤팩트 요청을 스캐닝하기 위하여 다음의 알고리즘을 사용한다.
Figure 112006074056686-pct00023
2 차원 메쉬 카운트들을 저장하기 위하여 어레이 zPlane[TorusSize[2]]를 정의한다.
Figure 112006074056686-pct00024
다음과 같이 x, y, 및 z 루프의 종료점을 계산한다.
Figure 112006074056686-pct00025
i=0 내지 2에 대하여
Figure 112006074056686-pct00026
PartWraps[i]=True이면, end[i]=PartEnd[i]
Figure 112006074056686-pct00027
그렇지 않으면 end[i]=PartEnd[i]-Size[i]
Figure 112006074056686-pct00028
이제 x는 PartStart[0]에서 End[0] 등까지 루핑할 것이다.
Figure 112006074056686-pct00029
x 루프
Figure 112006074056686-pct00030
각 z=PartStart[2]에서 PartEnd[2]에 대하여, 메쉬 {x, PartStart[1], z}에서 {x+Sx-1, PartStart[1]+Sy-1, z}에 대한 zPlane을 재계산한다.
Figure 112006074056686-pct00031
특정 실시예에서, 스케줄러(515)는 여기서 3개의 루프를 사용할 것이다. 여기서 사용되는 FreeY는 루프의 수를 2로 감소시킨다: 하나의 루프는 x에 대한 것이고 다른 하나의 루프는 y에 대한 것이다. FreeY[x, PartStart[1], z]-FreeY[x, PartStart[1]+Sy, 2]는 함께 계산하여 라인 {x, PartStart[1], z]에서 {x, PartStart[1]+Sy-1, z]를 따라 프리 노드(115)의 수를 제공한다.
Figure 112006074056686-pct00032
이하의 y 루프에 대하여 NewX=True로 설정한다.
Figure 112006074056686-pct00033
y 루프
Figure 112006074056686-pct00034
NewX=True이면
Figure 112006074056686-pct00035
아무것도 하지 않는다.
Figure 112006074056686-pct00036
그렇지 않으면
Figure 112006074056686-pct00037
zPlane을 갱신한다.
Figure 112006074056686-pct00038
각 z=PartStart[2]에서 PartEnd[2]에 대하여,
Figure 112010022803707-pct00039
{x, y-1, z}에서 {x+Sx-1, y-1, z}의 라인 세그먼트의 프리 노드들(115)을 Zplane[z]로부터 감산한다
Figure 112006074056686-pct00040
x에 대한 루핑을 회피하기 위하여 FreeX[x, y-1, z]-FreeX[x+Sx, y-1, z]를 사용한다
Figure 112010022803707-pct00041
{x, y+Sy-1, z}에서 {x+Sx-1, y+Sy-1, z}의 라인 세그먼트의 프리 노드들(115)을 zPlane[z]에 가산한다
Figure 112006074056686-pct00042
x에 대한 루핑을 회피하기 위하여 FreeX[x, y+Sy-1, z]-FreeX[x+Sx, y+Sy-1, z]를 사용한다
Figure 112006074056686-pct00043
다음의 y 증분에 대하여 NewX=False를 설정한다
Figure 112006074056686-pct00044
이하의 z 루프에 대하여 NewY=True를 설정한다
Figure 112006074056686-pct00045
z 루프
Figure 112006074056686-pct00046
NewY=True이면
Figure 112010022803707-pct00047
z=PartStart[2]로부터 z=PartEnd[2]까지 zPlane을 합산하고 카운트의 결과를 기록한다
Figure 112006074056686-pct00048
그렇지 않으면
Figure 112006074056686-pct00049
카운트로부터 zPlane[z-1]을 감산한다
Figure 112006074056686-pct00050
zPlane[z+Sz-1]을 계산한다, 이는 {x, y, z+Sz-1}에서 {x+Sx-1, y+Sy-1, z+Sz-1}의 2 차원 메쉬의 프리 노드들(115)의 합이다. 상술한 바와 같이, 로프의 수를 2에서 1로 감소시키기 위하여 FreeX를 시용한다.
Figure 112006074056686-pct00051
카운트에 zPlane[z+Sz-1]을 가산한다
Figure 112006074056686-pct00052
Count≥RequestedNodes이면, True로 되돌아간다
특정 실시예들에서, 스케줄러(515)는 차원(dimension) 내의 구획 래핑(partition wrapping)을 다루기 위해서 이하의 변경들 중의 하나 또는 그 이상의 것을 적용한다. (1) 차원 내의 인덱스들이 어레이 경계들을 넘는다면, 스케줄러(515)는 임의의 어레이 레퍼런스 전에 인덱스들에게 모듈러스 함수(modulus function)를 적용한다. (2) 구획이 예를 들어 포인트 a로부터 포인트 b까지의 선분에 대한 프리 노드들(115)을 계산하기 위해 x 차원 또는 y 차원으로 래핑한다면, 스케줄러(515)는 두 개의 선분(하나는 포인트 a로부터 x 또는 y 차원에서의 구획의 종단까지이고 다른 하나는 구획의 시작점으로부터 포인트 b까지이다)에 대한 프리 노드들(115)을 계산한다.
특정 실시예들에서, 공간적 요구(spatial request)에 쓰일 수 있는 스캔 알고리즘은 콤팩트 요구(compact request)에 쓰일 수 있는 상기 스캔 알고리즘에 유사하다. 특정 실시예들에서, 공간적 요구에 쓰일 수 있는 스캔 알고리즘과 콤팩트 요구에 쓰일 수 있는 상기 스캔 알고리즘 간의 차이들은 이하의 것을 포함한다: (1) 스케줄러(515)가 특정 카운트를 갖는 메시(mesh) 내의 포인트를 식별하는 대신에, 스케줄러(515)가 모든 노드들(115)이 프리인 메시 내의 포인트를 찾는데, 이는 메모리 레퍼런스를 감축시키게 마련이다; (2) 앞서 설명한 대로 스케줄러(515)는, 베이스 메시(base mesh)에게까지 연쇄(concatenated)된 두 개의 추가 메시까지 갖는 베이스 메시를 산출하도록 폴드된 1차원 요구 또는 2차원 요구를 다룰 것이기 때문에, 하나 또는 그 이상의 연쇄된 메시를 다룰 필요가 있을 수 있다. 특정 실시예들에서, 스캔 알고리즘에 대한 이런 변경들은 일 또는 그 이상의 크기 오더로 16×16×16 구성을 스케줄링하는 스케줄러(515)와 관련된 최대 실행 시간을 감축시키게 마련이다.
공간적 요구를 스케줄링하기 위해, 스케줄러(515)는, 자신이 스케줄 가능한 Try 구조를 식별하기까지, 스캔 알고리즘을 Try 구조들의 리스트 내의 각각의 Try 구조에 적용시키는 스케줄링 알고리즘을 사용한다. 만일 리스트 내의 어떤 Try 구조도 스케줄링 가능하지 않고 공간적 요구 상의 어그레시브 플래그(aggressive flag)가 제로라면, 스케줄러(515)는 공간적 요구를 스케줄링하지 않고 클러스터 관리 엔진(130)으로 회귀할 것이다. 그렇지 않다면, 스케줄러(515)는 공간적 요구의 스케줄링을 시도하기 위해 콤팩트 스케줄링 알고리즘을 사용한다.
특정 실시예들에서, 공간적 알고리즘에 따라 요구를 스케줄링하는 것은 세 개의 변환까지 관련된다: 두 개의 폴드들과 하나의 회전, 스케줄러(515)는 Try 내의 이하의 필드들을 사용하여 변환들을 추적한다.
?Try.rMap 는 회전용의 매핑 함수이다. Try.rMap 는 포인트의 인덱스들을 매핑하는 세 개의 성분들을 갖는 어레이이다. 국한하기 위한 것이 아닌 예시적인 것으로서, Try.rMap = {1,0,2}라는 것은 인덱스 0은 1에 매핑되는 것을 취하고 인덱스 1은 0에 매핑되는 것을 취하고, 인덱스 2는 2에 매핑되는 것을 위하여 이 매핑 하에서 {x,y,z}는 {y,x,z}가 되도록 한다.
?Try.irMap 는 Try.rMap의 역이다.
?Try.NumFoldMaps는 Try 구조를 산출하는 폴드들의 수이다.
?Try.foldLength는 폴드들의 길이들을 나타내는 어레이이다.
?Try.foldFrom은 폴드된 차원의 인덱스를 나타내는 어레이이다. 국한하기 위한 것이 아닌 예시적인 것으로서, Try.foldFrom[i]=2 는 i 폴드가 z축으로 폴드 됐음을 나타낸다.
?Try.foldTo는 그 쪽으로 폴드되는 차원의 인덱스를 나타내는 어레이이다.
?Try.foldFix는 고정된 채로 남아 있는 차원의 인덱스를 나타내는 어레이이다.
특정한 실시예들에서, 스케줄러(515)는, 트라이 구조(Try structure)를 이용하여 격자(110) 내의 시작점에 작업(150)을 스케줄할 수 있는지 판단한 후에, MPI 랭크를 다음과 같이 할당한다.
ㆍ 스케줄러(515)는, 시작점에 역회전 맵(inverse rotation map)을 적용하여, 시작점을 사전 변환된 메쉬에 맵핑한다. 스케줄러(515)는 폴드(fold)를 구성하여 메쉬의 시작점이 고정되게 하여, 스케줄러(515)가 역폴드(inverse fold)를 적용할 필요가 없게 된다.
ㆍ 스케줄러(515)는 사전 변환된 메쉬를 둥글게 호를 만들어, MPI 랭크를 생성한다. 전술한 바와 같이, 특정한 실시예들에서는, x축이 바깥 루프이고, y축이 중간 루프, z축이 안쪽 루프이다.
ㆍ 스케줄러(515)는, 사전 변환된 메쉬에 변환을 적용한 오더 스케줄러(515)에 따라, 루프 내의 각 지점{x, y, z}에, 사전 변환된 메쉬에 적용된 변환을 적용한다. 즉, 스케줄러(515)는, 사전 변환된 메쉬에서, 0을 폴드하고, 그 다음은 1을 폴드하고, 그 다음은 지점을 회전시켜, 지점 {x', y', z'}을 얻는다. 그런 다음, 스케줄러(515)는 AssignedNodeList의 끝 부분에 노드 {x', y', z'}을 삽입한다.
특정한 실시예에서는, 컴팩트 스케줄링 알고리즘이 트라이 구조를 식별할 때까지, 트라이 구조 리스트 내의 각 메쉬에 스캔 알고리즘을 적용한다. 리스트 내의 다수의 메쉬들은 비교적 클 수 있다. 제한적이지 않은 예로서, 16×16×16개의 노드(115) 및 백개의 노드(115)에 대한 요청을 포함하는 원환에 대하여, 베스트핏(BestFit)={4, 4, 5}이어서, 트라이 구조 리스트 내에 2천개가 넘는 메쉬가 있게 된다. 트라이 구조 리스트에 대하여 바이너리 서치(binary search)를 적용하는 것이 바람직할 수 있지만, 트라이 구조의 바이너리 서치는 특정한 실시예에서는 유효하지 않을 수 있다. 조건 C를 포함하는 바이너리 서치는, (1) C가 엘리먼트 i에 대하여 참이면, C가 i보다 크거나 같은 모든 j에 대하여 참이고, (2) C가 엘리먼트 i에 대하여 거짓이면, C가 i보다 작거나 같은 모든 j에 대하여 거짓이지않으면, 유효하지 않을 수 있다. 특정한 실시예들에서는, 예를 들어 메쉬 M1={4, 4, 4}을 이용한 스캔이 요청을 만족시키기에 충분한 노드들을 발견하는 반면, 예를 들어, 메쉬 M2 ={2, 2, 10}를 이용한 스캔은, M2가 트라이 구조 리스트 내에서 M1의 위에 있음에도 불구하고, 요청을 만족시키기에 충분한 노드들을 찾지 못할 가능성이 존재하기 때문에, 트라이 구조 리스트의 바이너리 서치는 유효하지 않을 수 있다. 특정한 실시예들에서는, 최대 거리의 바이너리 서치가 유효하다. 스케줄러(515)가 최대 거리에 따라 트라이 구조 리스트 내의 메쉬들을 그룹화하고, 스케줄러(515)가, i보다 크거나 같은 모든 j에 대하여 최대 거리 i를 갖는 리스트 내의 메쉬에 대한 핏(fit)을 식별하면, 최대 거리 j를 갖는 리스트 내의 적어도 하나의 메쉬가 또한 피팅될 것이다. 리스트 내에 최대 거리 i를 갖는 피팅되는 메쉬가 없으면, 리스트 내에 i보다 작거나 같은 최대 거리를 갖는 어떠한 피팅되는 메쉬도 없을 것이다. 제한적이지 않은 예로서, {x, y, z}가 피팅되는 최대 거리 i를 갖는 메쉬라고 가정하자. 따라서, {x, y, z+1}은 최대 거리 i+1을 갖고, 이는 {x, y, z+1}이 {x, y, z}를 커버하기 때문에, {x, y, z+1}이 또한 효과가 있다. 인덕션은 i보다 크거나 같은 모든 j에 적용된다. 리스트 내에 최대 거리 i를 갖는 메쉬가 없으면, 최대 거리 i-1을 갖는 임의의 메쉬 {x, y, z}에 대하여, {x, y, z+1}은 최대 거리 i를 갖고 또한 피팅되지 않는다. {x, y, z+1}이 {x, y, z}를 커버하기 때문에, {x, y, z}도 피팅되지 않는다. 따라서, 스케줄러(515)는 초기화 동안 MaxDistance[NumMaxDistances,2]를 구축한다.
특정한 실시예에서, Fit에서 메쉬들의 2진 검색은 최적 피트(best fit)를 보장하지는 않지만, 합리적으로 양호한 최적 피트의 상한값(upper bound)을 제공한다. 특정한 실시예에서, Fit에서 메쉬들의 2진 검색은 능률적인데, 예컨대, 대략 1000개의 메쉬들에 대해 대략 10개의 스캔을 생성한다. 스케줄러(515)는 상한값을 사용하여 최장 길이에서의 2진 검색을 실행하거나 상한값으로부터 선형 검색 하향(linear search downward)을 실행한다. 특정한 실시예에서, 선형 검색 하향이 보다 능률적인 경향이 있다.
스케줄러(515)는 Fit에서 2진 검색을 실행하고 HighFit 및 HighStart[3]로 복귀한다. HighFit는 요청을 만족하는 Fit의 인덱스이고, HighStart는 격자(110)에서 피트(fit)의 시작점이다. 선형 검색 하향을 실행하기 위한 알고리즘은 HighFit 및 HighStart에서 시작한다. 특정한 실시예에서, 스케줄러(515)는 현재 HighFit 메쉬의 최대 거리의 감소를 나타낸다. 그 다음, 스케줄러(515)는 스케줄러(515)가 요청을 만족하는 메쉬를 식별할 때까지 최대 거리를 포함하는 모든 메쉬를 루프한다. 스케줄러(515)가 요청을 만족하는 메쉬를 식별한다면, 스케줄러(515)는 다시 최대 거리의 감소를 나타내는 HighFit로 메쉬를 설정하고, 그 프로세스를 반복한다. 스케줄러(515)가 그러한 메쉬가 없음을 식별한다면, 알고리즘은 종료하고 현재 HighFit는 최적 피트이다. 스케줄러(515)가 특정한 최대 거리에 대한 피트를 식별할 수 없다면, 그 다음에 스케줄러(515)는 더 짧은 최대 거리에 대한 피트를 식별할 수 없다.
스케줄러(515)는 Fit 메쉬를 루프하고 하나 이상의 노드(115)를 AssignedNodeList의 단부에 삽입한다. 3개 루프의 순서는 스케줄러(515)가 스위치계 원환(switch-based torus)을 노드계 원환으로 어떻게 매핑하는지에 의존한다. 스케줄러가 1차원에서 4×1 구성을 사용하여 스위치계 원환을 매핑했다면, 1차원은 내측 루프이다. 스케줄러(515)가 2차원에서 2×2 구성을 사용하여 스위치계 원환을 매핑했다면, 2차원은 최내측 루프이다.
임의의 요청을 스케줄링하기 위해, 스케줄러(515)는 FreeMesh를 루프하고 스케줄러(515)가 요청된 노드(115)의 Number를 임의의 요청에 할당할 때까지 임의의 요청을 채운다.
스케줄러(515)가 FreeMesh를 루프하고 있을 때 스케줄러(515)는 점증적으로 AssignedNodeList에 노드(115)를 삽입한다. 특정한 실시예에서, 스케줄러(515)는 다음과 같이 FreeMesh를 루프한다.
?z축은 최내측 루프이다. 스케줄러(515)가 스위치계 원환을 노드계 원환으로 변환할 때 스케줄러(515)는 팩터 4만큼 z축으로 연장한다. 최내측 루프로서 z축을 사용하면 스위치(116)에 결합된 CPU(164)의 단편화(fragmentation)를 피하기 쉽다.
?FreeMesh에서 남아있는 2개의 차원들 중 더 작은 것은 중간 루프이고, 남아있는 2개의 차원들 중 더 큰 것은 최외측 루프이다.
스케줄러(515)는 MPI Rank에 따르는 AssignedNodeList 내의 노드 기반 좌표들을 이용하여 선택된 노드들(115)을 리스트한다. AssignedNodeList[i,0]는 MPI Rank i의 노드(115)의 x 좌표이고, AssignedNodeList[i,1]은 MPI Rank i의 노드(115)의 y 좌표이며, AssignedNodeList[i,2]는 MPI Rank i의 노드(115)의 z 좌표이다. FreeNodeList는 스위치 기반 좌표들 내에서 스케줄러(515)에 전달된 이용 가능한 노드들(115)의 리스트이다. 특정한 실시에서, FreeNodeList 내에 mpiRank 필드를 설정하기 위하여, 스케줄러(515)는 다음의 예시적인 알고리즘을 이용한다:
ㆍ For i = 0 to NumFreeNodes - 1
o AssignedNodeList[i]를 스위치 기반 좌표들로 변환하고 그들을 To[4]에 부가함
o InverseTorusMap을 To의 처음 세개의 엘리먼트들에 적용함
o For j = 0 to NumFreeNodes - 1
ㆍ If To[k] = FreeNodeList[j].coordinate[k] for all k = 0, 1, 2, 3
ㆍ FreeNodeList[j].mpiRank = i
ㆍ Exit j loop
다음의 예시적인 로직은 스케줄러(515)의 특정한 실시들을 기술한다. 특정한 실시에서, 클러스터 관리 엔진(130)이 스케줄러(515)가 작업(150)을 스케줄하도록 콜(call)할 때, 클러스터 관리 엔진(130)은 다음의 입력 파라미터들에 대한 값들을 스케줄러(515)에 전달한다:
RequestedNodes: 요청된 노드들(115)의 수를 나타냄.
RequestType: 요청 유형을 나타냄. SPATIAL, COMPACT, 또는 ANY로 설정.
RequestSize: 요청 사이즈를 나타내는 세 개의 엘리먼트들을 갖는 어레이. SPATIAL 요청들에 대하여만 유효.
AggressiveFlag: 작업(150)에 노드들(115)을 할당하기 위하여 스케줄러(515)에 할당된 여유의 정도(degree of leeway)를 나타내는 0과 1 사이의 부동 소숫점.
TorusSize: 격자(110)의 스위치 기반 사이즈를 나타내는 세 개의 엘리먼트들을 갖는 어레이.
NodesPerSwitch: 격자(110) 내의 각각의 스위치(166)에 연결된 CPU들(164)의 수.
NumFreeNodes: FreeNodeList 내의 노드들(115)의 수.
FreeNodeList: 스케줄링에 이용 가능한 노드들(115)의 스위치 기반 좌표들을 나타내는 FreeNode 구조들의 리스트.
특정 실시에서, 스케줄러(515)는 스케줄러(515)가 작업(150)을 스케줄하는 시도 이후 다음 중 하나를 반환한다:
PQS_ASSIGNED: 스케줄러(515)가 스케줄된 작업(150)을 갖는 것을 나타냄.
PQS_NO_ASSIGNMENT_AT_SPECIFIED_TIME: 스케줄러(515)가 작업(150)을 스케줄링하지 않았음을 나타냄.
PQS_NO_ASSIGNMENT_FOR_JOB_CATEGORY: 격자(110)내의 모든 노드들(115)이 이용가능하다고 할지라도, 스케줄러(515)가 작업(150)을 스케줄링할 수 없음을 나타냄.
스케줄러(515)가 작업(150)을 스케줄링한다면, 스케줄러(515)는 프리노드 구조의 mpiRank 필드를 이에 따라 설정한다. 특정 실시예들에서, 클러스터 관리 엔진(130) 과 스케줄러(515) 사이의 래퍼(wrapper) 기능은 클러스터 관리 엔진(130)으로부터의 입력을 스케줄러(515)가 예측하는 포맷으로 변환하고, 스케줄러(515)로부터의 출력을 클러스터 관리 엔진(130)이 예측하는 포맷으로 변환한다.
특정 실시예들에서, 작업(150)이 이론적으로 스케줄가능한지 여부를 판정하는 setSchedulable 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00053
특정 실시예들에서, 스케줄러(515)가 랭크 작업 사이즈에 호출하는 Rank 는 이하의 예시적인 로직을 포함한다. Rank 으로의 입력은 3 개의 엘리먼트를 갖는 1차원 어레이,In[3] 을 포함한다. Rank 로부터의 출력은 사이즈, In 의 인덱스들의 증가를 나타내는 3 개의 엘리먼트를 갖는 1차원 어레이, Rank[3] 을 포함한다. In[Rank[0]≤In[Rank[1]≤In[Rank[2]. 특정 실시예들에서, Rank 는 버블(bubble) 알고리즘을 포함한다.
Figure 112006074056686-pct00054
특정 실시예들에서, 작업(150)이 이론적으로 스케줄가능한지 여부를 판정하는 setSchedulable 은 이하의 예시적인 로직을 포함한다.
Figure 112006074056686-pct00055
특정 실시예들에서, 허용된 스케줄링 타입들을 설정하는 initScheduler 는 이하의 예시적인 로직을 포함한다. 작업(150)이 하나의 노드(115)만을 요청한다면, initScheduler 는 원래의 요청에 상관없이 허용된 타입을 Any 로 설정한다:
Figure 112006074056686-pct00056
특정 실시예들에서, 스위치 기반 원환을 스페이스 요청에 대한 노드 기반 원환에 매핑하는 setTorusFor Spatial 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00057
특정 실시예들에서, 작업(150)의 2 개의 가장 큰 차원, jRank[2] 및 jRank[1] 에서 격자(110)와 2 팩터들을 곱하는 setTorusFor1D 는 이하의 예시적인 로직을 포함한다.
Figure 112006074056686-pct00058
특정 실시예들에서, setTorusFor2D 는 6개 방식 중 하나로 스위치 기반 원환을 노드 기반 원환에 매핑한다:
Figure 112006074056686-pct00059
T 는 TorusSize 다. 최초 3 개의 형태(configurations) 는 2×2 노드(115)로서 스위치(166)당 스케줄러(515) 형태 노드(115)에 기인한다. 최후의 3 개의 형태는 1×1 노드(115)로서 스위치(166)당 스케줄러(515) 형태 노드(115)에 기인한다. 특정 실시예들에서, setTorusFor2D 는 스케줄러(515)가 각각의 맵에 대하여 생성할 수 있는 Try 구조를 카운트하고, 가장 많은 수의 Try 구조를 생성할 수 있는 맵을 선택한다. 타이(tie)의 이벤트에서, setTorusFor2D 는 전술한 순서에 따라 맵을 선택한다. 스케줄러(515)는 이하를 포함하는 pSize[6,4] 를 구성한다:
pSizes[i,0]= 형태 i 에 대한 x 방향에서의 파티션(partition)의 사이즈.
pSizes[i,1]= 형태 i 에 대한 y 방향에서의 파티션의 사이즈.
pSizes[i,2]= 형태 i 에 대한 z 방향에서의 파티션의 사이즈.
pSizes[i,3]= 형태 i 에 대하여 생성될 수 있는 시도 회수.
특정 실시예들에서, setTorusFor2D 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00060
Figure 112006074056686-pct00061
Figure 112006074056686-pct00062
특정 실시예들에서, setTorusFor3D 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00063
Figure 112006074056686-pct00064
Figure 112006074056686-pct00065
특정 실시예들에서, 콤팩트 요청의 z 차원을 4×1 형태로 설정하는 setTorusForCompact 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00066
특정 실시예들에서, 임의의 요청의 z 차원을 4×1 형태로 설정하는 setTorusForAny 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00067
특정 실시예들에서, setPartition 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00068
특정 실시예들에서, FreeY 및 FreeX 를 구성하는 initScan 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00069
특정 실시예들에서, 요청에서 다수의 차원들을 결정하는 buildSpatialTries 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00070
특정 실시예들에서, 3 차원 요청에 대한 TryList 를 구축하고, 1차원 요청 또는 2차원 요청에서 각각의 폴드에 대한 Try 구성을 구축하는 build3Dtry 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00071
특정 실시예들에서, Try 구조 및 각각의 로테이션에 대한 인덱스 맵에 대하여 다수의 고유한 로테이션을 계산하는 setOrient 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00072
Figure 112006074056686-pct00073
Figure 112006074056686-pct00074
Figure 112006074056686-pct00075
특정 실시예들에서, build2Dtry 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00076
특정 실시예들에서, 2차원 메쉬의 모든 가능한 폴드들을 구축하는 build2Dfold 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00077
이하의 예시에 따라 구성된 어레이, t 는 결과적인 Try 의 메쉬 사이즈이다. 스케줄러(515)는 어레이에서 t 의 Rank, tRank 를 기록한다.
Figure 112006074056686-pct00078
Figure 112006074056686-pct00079
특정 실시예들에서, build1Try 는 1차원 요청의 폴드들의 리스트를 생성하고, 각각의 폴드에 대하여 build2DFold 를 호출하여 하나 이상의 추가적인 폴드들의 리스트를 생성한다. build1Try 는 이하의 예시적인 구조를 포함하는 OneDFoldList 내의 폴드들의 리스트를 기록한다:
Structure oneDFold
Fold Structure oneD
Fold Structure twoD[×]
integer NumTwoDFolds
integer twoDFoldSize[3]
End Structure
특정 실시예들에서, oneD 는 제 1 폴드를 포함한다. 특정 실시예들에서, twoD 는 제 1 폴드로부터 생성된 폴드들의 리스트를 포함한다. NumTwoDFolds 는 twoD 의 폴드들의 넘버를 나타낸다. 특정 실시예들에서, twoDFoldSize 는 buildd2Dfold 로 전달된 메쉬 사이즈를 나타낸다. 스케줄러(515)는 twoD 의 엘리먼트들에 대한 Try 구조를 생성하고 build3Dtry 를 호출하여 각각의 Try 구조의 모든 가능한 로테이션을 구축한다. 특정 실시예들에서, build1Try 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00080
Figure 112006074056686-pct00081
Figure 112006074056686-pct00082
Figure 112006074056686-pct00083
Figure 112006074056686-pct00084
특정 실시예들에서, BestFit[3] 을 구성하는 buildCompactFits 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00085
Figure 112006074056686-pct00086
Figure 112006074056686-pct00087
Figure 112006074056686-pct00088
특정 실시예들에서, buildFreeMeshes 함수는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00089
Figure 112006074056686-pct00090
Figure 112006074056686-pct00091
Figure 112006074056686-pct00092
Figure 112006074056686-pct00093
특정 실시예들에서, 스케줄러(515)가 성공적으로 작업(150)을 스케줄링한다면 트루(True)를 반환하는 ScheduleJob 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00094
특정 실시예들에서, scheduleSpatial 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00095
특정 실시예들에서, AssignedNodeList 를 구축하는 setSpatialNodeInUse 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00096
Figure 112006074056686-pct00097
특정 실시예들에서, scanSpatial 은 이하의 예시적인 로직을 포하한다:
Figure 112006074056686-pct00098
Figure 112006074056686-pct00099
Figure 112006074056686-pct00100
특정 실시예들에서, Fit 상의 이진(binary)검색을 실행하는 scheduleCompactFunction 은 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00101
특정 실시예들에서, setComPactNodeInUse 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00102
특정 실시예들에서, ScanCompact 는 이하의 예시적인 로직을 포함한다:
Figure 112006074056686-pct00103
Figure 112006074056686-pct00104
Figure 112006074056686-pct00105
특정 실시예들에서, scheduleAny 는 이하의 로직을 포함한다:
Figure 112006074056686-pct00106
특정 실시예들에서, setMpiRank 는 이하의 로직을 포함한다:
Figure 112006074056686-pct00107
특정 실시예들에서, 스케줄러(515)는 이하와 같이 규정되는 아래의 예시적인 구조를 이용하여 노드들(115)을 작업(150)에 할당한다. 전술한 바와 같이, 클러스터 관리 엔진(130)은 작업(150)에 따라 FreeNode 구조들의 리스트를 스케줄러(515)에 전달한다. 이러한 리스트는 스케줄링에 이용가능한 모든 노드들(115)을 포함한다. 리스트에서, 스위치 기반 자표는 리스트 내의 이용가능한 노드들(115)을 식별한다. 스케줄러(515)가 작업(150)을 스케줄링하면, 스케줄러(515)는 반환 전에 mpiRank 를 설정한다.
Figure 112006074056686-pct00108
특정 실시예들에서, 스케줄러(515)는 Fold 구조를 이용하여, 스케줄러(515)가 어떻게 1차원 및 2차원 스페이스 요청을 폴딩하는지를 기록한다.
Figure 112006074056686-pct00109
특정 실시예들에서, 스케줄러(515)는 Try 구조를 이용하여 스페이스 작업(150)을 스케줄링하는데 이용되는 메쉬들 상에 정보를 저장한다. Try 구조는 기본 메쉬 및 2차 연쇄 메쉬까지에 대한 정보를 포함한다.
Figure 112006074056686-pct00110
특정 실시예들에서, 스케줄러(515)는 FreeMesh 구조를 이용하여 스케줄링하는데 이용가능한 격자(110)내의 메쉬에 대한 정보를 저장한다. 스케줄러(515)는 FreeMesh 를 이용하여 "임의의" 요청들을 스케줄링한다.
Figure 112006074056686-pct00111
특정 실시예들에 있어서, 스케줄러(515)는 아래에 정의한 다음의 예시적인 변수들을 이용하여 노드(115)를 작업(150)에 할당한다.
- RequestedNodes: 작업(150) 요청 노드 수
- RequestType: 작업 요청 종류: SPATIAL, COMPACT, 또는 ANY
- OriginalSize[3]: RequestType = SPATIAL 인 경우, 작업(150)의 크기
- AggressiveFlag: 노드(115)를 작업(150)에 할당하기 위해서 스케줄러(515)에 주어진 여유도(a degree of leeway)를 나타내는 0과 1 사이의 부동 소수점 수
- JobMap[3]: RequestType = SPATIAL 인 경우, OriginalSize의 인덱스를 스케줄러(515)에 더 적합한 순서로 맵핑
- RequestedSize[3]: RequestType = SPATIAL 인 경우, 스케줄러(515)가 JobMap을 적용한 후의 작업(150)의 크기
- TorusSize[3] : CPU(164)에 있어서의 격자(110)의 크기
- NodesPerSwitch: 스위치(166) 당 노드(115) 수
- NumFreeNodes: 스케줄링에 이용 가능한 노드(115) 수
- FreeNodeList[NumFreeNodes]: 스케줄러(515)에 넘겨진 스케줄링에 이용 가능한 노드(115) 리스트
- SpatialAllowed: 스페이셜 스케줄링이 허용되면 참으로 설정
- CompactAllowed: 컴팩트 스케줄링이 허용되면 참으로 설정
- AnyAllowed: 애니 스케줄링이 허용되면 참으로 설정
- TorusMap[3]: 스위치 기반 원환으로부터의 인덱스를 스케줄러(515)에 더 적합한 순서로 맵핑
- InverseTorusMap[3]: TorusMap의 역; 클러스터 관리 엔진(130)으로 복귀하기 전에 모든 출력 노드(115)에 적용
- NumMapDimesions: 스위치 기반 원환에서 노드 기반 원환으로 갈 때 수정된 차원 수: 가능한 값은 1, 2
- MapDimensions[2]: 스위치 기반 원환에서 노드 기반 원환으로 갈 때 수정된 차원 인덱스
- MapMod[2]: 스위치 기반 원환에서 노드 기반 원환으로 갈 때 이용된 승수: 가능한 값은 NumMapDimesions = 1 의 경우 MapMod[0] = 4, MapMod[0] = 2, 및 NumMapDimesions = 2 의 경우 MapMode[l] = 2
- PartSize[3]: 파티션의 크기
- PartStart[3]: 파티션의 개시 좌표
- PartEnd[3]: 파티션의 종료 좌표
- PartWraps[3]: PartWraps[i] = 파티션이 차원 i에서 감싸면 참
- NodeInUse[TorusSize[O],TorusSize[1],TorusSize[2]]: NodeInUse[i,j,k]는
노드(115)의 상태를 나타냄; 가능한 값은 NODE_IN_USE (노드(115)가 다른 작업(150)에 할당), NODE_NOT_IN_USE (노드(115) 이용 가능), 및 NODE_ON_HOLD (노드(115)를 작업(150)에 할당할 때 이용되는 일시 상태)를 포함
- FreeY[TorusSize[0],TorusSize[l],TorusSize[2]]: FreeY[i,j,k]는 총괄적으로 라인 {i,j,k} 내지 {i,TorusSize[1]-1,k}에서 자유 노드(115) 수를 나타냄. 스캔 루틴은 FreeY를 이용
- FreeX[TorusSize[0],TorusSize[l],TorusSize[2]]: FreeX[i,j,k]는 총괄적으로 라인 {i,j,k} 내지 {TorusSize[0]-1,j,k}에서 자유 노드(115) 수를 나타냄. 스캔 루틴은 FreeX를 이용
- NumberOfTries: 스페이셜 요청으로 구성된 Try 구조 수
- TryList[NumberOfTries]: 스페이셜 요청으로 구성된 Try 구조 리스트
- NumberOfFits: 콤팩트 요청으로 구성된 메시 수
- Fit[NumberOfFits,3]: 콤팩트 요청으로 구성된 메시 리스트
- Fit[i,O] = x 차원에서 메시 i의 크기
- Fit[i,1] = y 차원에서 메시 i의 크기
- Fit[i,2] = z 차원에서 메시 i의 크기
- NumMaxDistances: Fit에서 고유 최대 거리 수
- MaxDistance[NumMaxDistances,2]: Fit에서 고유 최대 거리 리스트. any 0< i < NumMaxDistances 의 경우, MaxDistance[i,O] = 최대 거리의 제1 메시의 Fit로의 인덱스 = MaxDistance[I,1]
- NumFreeMeshes: 격자(110)에서 자유 메시 수. 자유 메시는 자유 노드(115)만을 포함하는 메시
- FreeMesh[NumFreeMeshes]: FreeMesh 구조 어레이
- AssignedNodeList[RequestedNodes,3]: MPI 랭크 순으로 작업(115)에 할당된 노드(115) 리스트
스루 스케줄러(515)와 같은 클러스터 관리 엔진(130)은 추가로 효율적인 체크 포인팅을 수행할 수 있다. 리스타트 덤프(restart dump)는 통상적으로 디스크에 기입된 데이터의 75 퍼센트 이상을 포함한다. 이 I/O는 처리가 플랫폼 고장에 영향을 받도록 행해지곤 한다. 이것에 기초하여, 파일 시스템의 I/O는 2개의 부분, 즉 생산적인 I/O와 방어적인 I/O로 분리될 수 있다. 생산적인 I/O는 사용자가 예컨대 시각화 덤프, 시간에 따른 키 피직스 변수의 추적 등의 사이언스를 행하기 위해서 필요로 하는 데이터의 기입이다. 방어적인 I/O는 상당한 기간에 걸쳐 실행된 큰 시뮬레이션을 관리하도록 수행된다. 따라서, I/O 대역폭의 증가는 체크 포인팅에 수반되는 시간 및 리스크를 상당히 감소시켜 준다.
엔진(130)으로 돌아가서, 로컬 메모리(520)는 시스템(100)의 복수의 특징들의 논리적인 설명들(또는 데이터 구조들)을 포함한다. 로컬 메모리(520)는 호환성 코드에 의해 정의되거나, 처리되거나, 검색되도록 동작가능한 임의의 물리적 또는 논리적 데이터 저장장치에 저장될 수 있다. 예를 들어, 로컬 메모리(520)는 하나 이상의 XML(eXtensible Markup Language) 테이블 또는 문서들을 포함할 수 있다. SQL 선언문 또는 스크립트, VSAM(Virtual Storage Access Method) 파일, 프랫 파일, 2진 데이터 파일, 비트리브(Btrieve) 파일, 데이터베이스 파일, 또는 CSV(comma-separated-value) 파일에 관련하여 각종 요소들을 설명할 수 있다. 각 요소가 변수, 테이블, 또는 임의의 다른 적절한 데이터 구조를 포함할 수 있음이 이해될 것이다. 로컬 메모리(520)는 또한 하나의 서버(102) 상에 또는 복수의 서버들 또는 노드들에 걸쳐 저장된 복수의 테이블들 또는 파일들을 포함할 수 있다. 또한, 엔진(130) 내부에 존재하는 것으로 도시되었지만, 로컬 메모리(520)의 일부 또는 전부가 본 발명의 범위로부터 벗어나지 않고, 내부 또는 외부에 존재할 수 있다.
도시된 로컬 메모리(520)는 물리적 리스트(521), 가상 리스트(522), 그룹 파일(523), 정책 테이블(524) 및 작업 큐(525)를 구비한다. 그러나, 도시되지는 않았지만, 로컬 메모리(520)는 본 발명의 범위로부터 벗어나지 않고, 작업 테이블 및 감사 로그를 포함하는 다른 데이터 구조들을 포함할 수 있다. 도시된 구조들로 돌아가서, 물리적 리스트(521)는 노드(115)에 대한 식별 및 물리적 관리 정보를 저장하도록 동작가능하다. 물리적 리스트(521)는 노드(115) 당 적어도 하나의 레코드를 포함하는 다차원 데이터 구조일 수 있다. 예를 들어, 물리적 레코드는 "노드", "가용성", "처리기 활용", "메모리 활용", "온도", "물리적 위치", "어드레스", "부트 이미지" 등과 같은 필드들을 포함할 수 있다. 각 레코드는 예의 필드들 중 아무것도 포함하지 않을 수도 있고 전부 또는 일부를 포함할 수도 있음을 이해해야 한다. 일실시예에서, 물리적인 레코드는 예를 들어, 가상 리스트(522)와 같은 또 다른 테이블에 포린 키(foreign key)를 제공할 수 있다.
가상 리스트(522)는 노드(115)에 대한 논리 또는 가상의 관리 정보를 저장하도록 동작가능하다. 가상 리스트(522)는 노드(115) 당 적어도 하나의 레코드를 포함하는 다차원 데이터 구조일 수 있다. 예를 들어, 가상 레코드는 "노드", "가용성", "작업", "가상 클러스터", "2차 노드", "논리적 위치", "호환성" 등과 같은 필드들을 포함할 수 있다. 각 레코드는 예의 필드들 중 아무것도 포함하지 않을 수도 있고 전부 또는 일부를 포함할 수도 있음을 이해해야 한다. 일실시예에서, 가상 레코드는 예를 들어, 그룹 파일(523)과 같은 또 다른 테이블로의 링크를 포함할 수 있다.
그룹 파일(523)은 억세스 제어 리스트들(또는 ACL들)과 같은 보안 정보 및 유저 그룹을 저장하도록 동작가능한 하나 이상의 테이블 또는 레코드를 포함한다. 예를 들어, 각 그룹 레코드는 유저에게 이용가능한 서비스들, 노드들(115) 또는 작업들의 리스트를 포함할 수 있다. 각 로직 그룹은 비즈니스 그룹 또는 유닛, 부문, 프로젝트, 보안 그룹 또는 작업들(150)을 제출하거나 시스템(100)의 적어도 일부를 관리할 수 있는 하나 이상의 유저들의 임의의 다른 콜렉션과 연관될 수 있다. 이러한 정보에 기초하여, 클러스터 관리 엔진(130)은 작업(150)을 제출한 유저가 유효한 유저인지, 그렇다면, 작업 실행을 위한 최적의 파라미터인지 결정할 수 있다. 또한, 그룹 테이블(523)은 특정 그룹의 도메인 내에 존재하는 노드들과 같은 가상 클러스터(220) 또는 하나 이상의 물리 노드들(115)과 각 사용자 그룹을 연관시킬 수 있다. 이는 각 그룹이 리소스들과 경합하지 않고도 개별 처리 스페이스를 갖도록 한다. 그러나, 상술된 바와 같이, 가상 클러스터(220)의 모양 및 크기는 동적일 수 있으며, 시간 또는 임의의 다른 파라미터 등 필요에 따라서 바뀔 수 있다.
정책 테이블(524)은 하나 이상의 정책들을 포함한다. 정책 테이블(524) 및 정책(524)은 교환가능하게 적절히 이용될 수 있음을 이해해야 한다. 정책(524)은 일반적으로 작업들(150) 및/또는 가상 클러스터(220)에 대한 처리 및 관리 정보를 저장한다. 예를 들어, 정책들(524)은, 문제 크기, 문제 실행 타임, 타임슬롯, 우선매수권, 노드(115) 또는 가상 클러스터(220)의 유저 할당 몫 등을 포함하는 임의의 수의 파라미터들 또는 변수들을 포함할 수 있다.
작업 큐(525)는 실행을 대기하고 있는 작업들(150)의 하나 이상의 스트림을 나타낸다. 일반적으로, 큐(525)는, 임의의 수(0을 포함함)의 작업들(150) 또는 그에 대한 참조를 저장하기 위한 버블 어레이, 데이터베이스 테이블 또는 포인터 어레이와 같은, 임의의 적절한 데이터 구조를 포함한다. 격자(110)와 연관된 하나의 큐(525) 또는 복수의 큐들(525)이 있을 수 있으며, 각 큐(525)는 격자(110) 내의 고유의 가상 클러스터들(220) 중 하나와 연관되어 있다.
동작의 일 양태에 있어서, 클러스터 관리 엔진(130)은, 계산들을 행하고 정보를 교환함으로써 협동적으로 문제를 해결하는 N개의 태스크로 이루어진 작업(150)을 수신한다. 클러스터 관리 엔진(130)은 N개의 노드를 배치하고, 임의의 적절한 기술을 이용하여 N개의 태스크 각각을 하나의 특정 노드(115)에 할당함으로써, 상기 문제점을 효과적으로 해결한다. 예를 들어, 클러스터 관리 엔진(130)은 사용자에 의해 공급되는 작업 태스크 배치 전략 등의 작업 파라미터들을 이용할 수 있다. 그러나, 클러스터 관리 엔진(130)은, 사용자에게 더 빠른 전환(turnaround)을 교대로 제공하고 시스템(100)에 대한 전체 스루풋을 향상시킬 가능성이 있는 서버(102)의 아키텍처의 이용을 시도한다.
일 실시예에 있어서, 클러스터 관리 엔진(130)은 이하의 예시적인 토폴로지들 중 어느 하나에 따라 노드들(115)을 선택하고 배치한다.
지정된 2D(x,y) 또는 3D(x,y,z) - 노드들(115)이 배치되고, 지정된 차원 순으로 태스크들이 정렬될 수 있으며, 이에 따라 효율적인 인접 통신을 유지할 수 있다. 지정된 토폴로지는, 물리적 통신 토폴로지가 작업(150)의 협동 태스크들이 이웃 태스크들과 빈번히 통신가능하게 하는 프라블럼(problem) 토폴로지와 매칭되는 것이 바람직한 다양한 작업들(150)을 관리한다. 예를 들어, 2×2×2 차원(2,2,2) 내의 8개의 태스크들의 요청은 입방체에 배치될 것이다. 최적화를 위해, 2D 배치들은 3 차원으로 "폴딩(foled)"되면서도, 효율적인 인접 통신을 유지한다. 클러스터 관리 엔진(130)은 지정된 차원 형태를 임의의 방향으로 자유롭게 배치할 수 있다. 예를 들어, 이용가능한 물리적 노드들 내에는 2×2×8 박스가 수직으로 또는 수평으로 배치될 수 있다.
최적화 입방체(Best Fit Cube) - 클러스터 관리 엔진(130)은 입방체 부피 내에 N개의 노드들(115)을 배치한다. 이 토폴로지는 2개의 임의의 노드들(115) 간의 거리를 최소화함으로써 데이터를 교환하는 태스크들과 임의의 다른 태스크들의 협동을 가능하게 하면서 작업들(150)을 효율적으로 조절한다.
최적화 구(Best Fit Sphere) - 클러스터 관리 엔진(130)은 구 부피 내에 N개의 노드들을 배치한다. 예를 들어, 제1 태스크는 중앙 노드(115) 주위의 노드들(115) 상에 배치된 나머지 태스크들에 의해 구의 중앙 노드(115) 내에 배치될 수 있다. 잔존하는 태스크들의 배치 순서는 일반적으로 중요한 것은 아니라는 것을 이해해야 한다. 이 토폴로지는 제1 태스크와 다른 모든 태스크들 간의 거리를 최소화할 수 있다. 이는 태스크들 2-N이 제1 태스크와 통신하지만, 상호간에는 통신하지 않는 대규모 클래스의 문제점들을 효율적으로 조절한다.
랜덤(Random) - 클러스터 관리 엔진(130)은 노드들(115)이 논리적으로 또는 물리적으로 배치되는 위치에 대한 고려를 줄여 N개의 노드들(115)을 배치한다. 일 실시예에 있어서, 이 토폴로지는 다른 작업들(150)에 영향을 거의 주지 않으면서 백필링(backfilling)을 위한 격자(110)의 적극적인 이용을 촉진한다.
전술한 토폴로지들 및 수반된 설명은 단지 예시적인 것일 뿐이며, 이용된 실제 토폴로지들 또는 그러한 토폴로지들을 배치하기 위한 기술들을 묘사한 것은 아니라는 것을 이해해야 한다.
클러스터 관리 엔진(130)은 작업(150) 파라미터 또는 방침(policy)(524) 파라미터로서 저장된 배치 가중치를 이용할 수 있다. 일 실시예에 있어서, 배치 가중치(placement weight)는 0과 1 사이의 변경치(modifier value)이며, 클러스터 관리 엔진(130)이 요청 태스크(또는 프로세스) 배치 전략에 따라 얼마나 적극적으로 노드들(115)의 배치를 시도하는지를 나타낸다. 본 예에서, 0의 값은 최적의 전략(또는 차원들)이 가능한 경우에만 노드들(115)을 배치하는 것을 나타내고, 1의 값은 충분히 자유롭거나 아니면 노드들(115)이 요청을 핸들링가능한 한 즉시 노드들(115)을 배치하는 것을 나타낸다. 전형적으로, 배치 가중치는 대형 작업들(150)의 단절을 방지하고 HPC 시스템(100)의 작업 스루풋을 보존하기 위해, 자원 보유(resource reservation) 등의 관리 정책들(524)을 무시하지 않는다.
전술한 예시 및 설명은 노드들(115) 및 작업들(150)을 효과적으로 관리하기 위한 논리적 스킴들을 구현하는 엔진(130)에 대한 예시적인 모듈 다이어그램을 제공한다. 그러나, 이 도면은 단지 예시적인 것일 뿐이며, 시스템(100)은 이들 알고리즘 및 그외 알고리즘을 구현하기 위한 논리적 구성요소들의 임의의 적절한 조합 및 구성을 이용하는 것을 고려하고 있다. 따라서, 이들 소프트웨어 모듈들은 노드들(115) 및 작업들(150)을 효과적으로 관리하기 위한 구성요소들의 임의의 적절한 조합 및 구성을 포함할 수 있다. 또한, 예시된 다양한 모듈들의 동작들은 적절히 조합 및/또는 분리될 수 있다.
도 11은 예시 인터페이스(104)를 도시한다. 인터페이스(104)는 하드웨어, 소프트웨어, 또는 임베드된 논리 구성 요소 또는 네트워크(106)와 HPC 서버(102) 사이에 인터페이스를 제공하는 그러한 구성 요소들의 둘 이상의 조합을 포함한다. 특성 실시예들에서, 인터페이스(104)는 인스턴스화 관리자(534) 및 인스턴스화 데이터(536)를 포함한다. 인스턴스화 관리자(534)는 하드웨어, 소프트웨어, 또는 임베드된 논리 구성 요소 또는 클라이언트들(120)로부터의 접속 요청들에 대응하여 노드들(115)에서 호스트들을 동적으로 인스턴스화하는 그러한 구성 요소들의 둘 또는 그 이상의 조합을 포함한다. 특정 실시예들에서, 클라이언트들(120)로부터의 접속 요청들은 전송 제어 프로토콜(TCP: Transmission Control Protocol) 접속 요청들이다. TCP 접속 요청들이 설명되었지만, 본 발명은 임의의 적절한 접속 요청들을 포함한다. 제한적이지 않은 예로서, 클라이언트들(120)로부터의 접속 요청들은 사용자 데이터그램 프로토콜(UDP: User Datagram Protocol) 또는 그외의 IP 기반 접속 요청들일 수 있다.
특정 실시예들에서, 인스턴스화 관리자(534)는 라우터, 또는 호스트 명(name)들 및 포트 번호들에 대한 HPC 서버(102)에 대하여 외부적으로 알려진 호스트 명들 및 포트 번호들을 HPC 서버(102) 내부의 호스트 명들 및 포트 번호들로 맵핑하는 라우터에 대한 인터페이스로서 작용한다. 인스턴스화 관리자(534)는 (예를 들어, 물리적 관리자(505), 가상 관리자(510), 또는 양쪽 모두와 같은) 클러스터 관리 엔진(130)의 하나 또는 그 이상의 구성 요소들과 반응하여, 특정 요구들에 따라 클라이언트(120)로부터의 접속 요청에 대응하여 하나 또는 그 이상의 노드들(115)에서 하나 또는 그 이상의 호스트들을 동적으로 인스턴스화한다.
인스턴스화 데이터(536)는 클라이언트들(120)로부터의 접속 요청들에 대응하여 노드들(115)에서 호스트들을 인스턴스화하기 위한 데이터를 포함한다. 특정 실시예들에서, 인스턴스화 데이터(536)는 HPC 서버(102)에 대하여 외부적으로 알려진 서비스들의 하나 또는 그 이상의 목록들을 포함한다. 서비스에 대한 참조는 어플리케이션을 적절하게 포함하고, 어플리케이션 또한 서비스에 대한 참조를 적절하게 포함한다. HPC 서버(102)에 대해 외부적으로 알려진 서비스들의 목록에 대한 참조는 라우팅 테이블을 적절하게 포함할 수 있고, 라우팅 테이블 또한 HPC 서버(102)에 대해 외부적으로 알려진 서비스들의 목록에 대한 참조를 적절하게 포함할 수 있다. 특정 실시예들에서, 인스턴스화 관리자(534)는 그러한 라우팅 테이블들을 설정하고 유지한다. 특정 실시예들에서, HPC 서버(102)에 대하여 외부적으로 알려진 서비스들의 목록으로의 입력은 (1) 서비스, (2) 그 서비스에 대응하는 HPC 서버(102)에 대하여 외부적으로 알려진 호스트 명들 및 포트 번호들, 및 (3) 인스턴스화되었을 때, 그 서비스를 제공하는 호스트에 대응하는 HPC 서버(102)의 내부 호스트 명 및 포트 번호를 명시한다. 그 입력은 또한 호스트가 이용가능해져야 할 때, 호스트의 인스턴스화가 발생해야 할 때, 호스트가 이용 불가능해져야 할 때를 관리하는 규칙들, 조건들, 또는 양쪽 모두를 명시할 수 있다. 제한적이지 않은 예로서, 호스트는 웹서버를 제공할 수 있다. 인스턴스화 관리자(534)가 작업 시간 동안 웹 서버에 대응하는 HTTP 포트에서 HTTP 요청을 받지 않는다면, 호스트는 업 무 시간 동안 인스턴스화 되지 않은 상태로 남아 있을 수 있고, 인스턴스화 되었다면 호스트가 사용했을 하나 또는 그 이상의 (격자(110) 내의 노드들(115)과 같은) 자원들은 다른 호스트들, 서비스들 또는 양쪽 모두에 대해 이용가능해질 수 있다. 클라이언트(120)의 사용자가 작업 시간 동안 웹 서버를 액세스하기 위하여 웹 브라우져를 사용한다면 인스턴스화 관리자(534)는 웹 서버를 클라이언트(120)에게 제공하도록 호스트를 인스턴스화 할 수 있다. 클라이언트(120)의 사용자가 작업 시간 외에 웹 서버를 액세스하기 위하여 웹 브라우저를 사용한다면 인스턴스화 관리자(534)는 호스트가 클라이언트(120)에게 웹 서버를 제공하는 것을 막기 위하여 웹 서버에 대응하는 HTTP 포트를 막는다.
특정 실시예에서, 인스턴트화 데이터(536)는 서비스를 제공하기 위해 노드(115)에서 호스트를 인스턴트화하는 하나 이상의 부트 이미지를 포함한다. 특정 실시예에서, 인스턴트화 데이터(536)는 또한 서비스를 제공하기 위해 노드(115)에서 호스트를 인스턴트화하는 하나 이상의 파일 시스템을 포함한다. 특정 실시예에서, 인스턴트화 데이터(536)는 또한 서비스를 제공하기 위해 노드(115)에서 호스트를 인스턴트화하는 하나 이상의 OS 구성을 포함한다. 일례로서, 제한적이지 않게, HPC 서버(102)에 대해 외적으로 광고된 포트 번호를 특정하는 클라이언트(120)로부터 접속 요청을 수신하는 인스턴트화 관리자(534)에 응답하여, 인스턴트화 관리자(534)는 노드(115)에서 서비스가 서비스용 호스트를 초기화하는 하나 이상의 파일 시스템 및 부트 이미지를 이용하여 격자(110)에서 이용가능한 노드(115)를 부팅시킨다. 인스턴트화 관리자(534)는 또한 IP 트래픽을 클라이언트(120)로부터 노드(115)로 라우팅하기 위해 하나 이상의 로컬 라우팅 테이블 및 하나 이상의 OS 구성을 업데이트한다. 특정 실시예에서, 클라이언트(120)로부터의 접속 요청에 응답하여 HPC 서버(102)와 관련된 시간 요건을 줄이고자, 인스턴트화 관리자(534)는 타겟 호스트의 IP/MAC 어드레스를 위장(spoof)하며, 타겟 호스트 대신에 TCP/IP 접속 시퀀스를 개시한다. 클라이언트(120)와 인스턴트화 관리자(534) 간의 TCP/IP 접속 시퀀스는 타겟 호스트가 부팅중에 일어난다. TCP/IP 접속 시퀀스가 설명된다 할지라도, 본 발명은 임의의 적당한 접속 시퀀스를 고려할 수 있다. 일례로서 제한적이지 않게, 인스턴트화 관리자(534)는 타겟 호스트 대신에 IP(UDP/IP) 또는 다른 IP 기초 접속 시퀀스를 통해 UDP(User Datagram Sequence)를 개시한다.
특정 실시예에서, 인스턴트화 관리자(534)는 HPC 서버(102)에서 각 호스트가 활성인지 불활성인지를 트랙킹한다. 특정 실시예에서, 인스턴트화 관리자(534)는 또한 HPC 서버(102)에서 각 호스트가 활성인지 불활성인지를 제어한다. 특정 실시예에서, 인스턴트화 관리자(534)는 서비스가 이용가능한지 판정한다. 인스턴트화 관리자(534)는, 서비스가 더 이상 이용가능하지 않다고 판정한 경우, 서비스를 제공하기 위해 호스트를 인스턴트화하고 이에 따라 하나 이상의 라우팅 테이블을 업데이트하는 하나 이상의 노드(115)를 셧다운(shut down), 아이들(idle), 또는 이용가능하지 않게 한다.
도 12는 본 발명의 일 실시예에 따르는, 작업 의뢰를 동적으로 처리하는 예시적인 방법(600)을 도시한 플로우챠트이다. 일반적으로, 도 12는 일괄 작업 의뢰를 수신하고, 노드(115)를 작업 스페이스(230)에 작업 파라미터 및 관련된 정책(524)에 기초하여 동적으로 할당하며, 할당된 스페이스를 이용하여 작업(150)을 실행하는 방법(600)을 기술한다. 다음 설명은 방법(600) 수행시 클러스터 관리 모듈(130)의 동작에 집중된다. 그러나, 시스템(100)은 기술된 기능 중 일부 또는 모두를 구현하는 논리 소자의 배열 및 이들의 적당한 배열을, 이 기능이 적당하게 유지되는 한, 이용한다.
방법(600)은 HPC 서버(102)가 사용자로부터 작업 의뢰(150)를 수신하는 단계 605에서 시작한다. 전술한 바와 같이, 일 실시예에서, 사용자는 클라이언트(120)를 이용하여 작업(15)을 의뢰한다. 다른 실시예에서, 사용자는 HPC 서버(102)를 직접 이용하여 작업(150)을 의뢰한다. 다음으로, 단계 610에서, 클러스터 관리 엔진(130)은 사용자에 기초하여 그룹(523)을 선택한다. 사용자가 검증될 때, 클러스터 관리 엔진(130)은 단계 615에서 사용자를 그룹 액세스 제어 리스트(ACL)와 비교한다. 그러나, 클러스터 관리 엔진(130)이 사용자를 검증하기 위해 적당한 보안 기술을 사용할 수 있음을 이해해야 한다. 결정된 그룹(523)에 기초하여, 클러스터 관리 엔진(130)은 사용자가 요청된 서비스에 대한 액세스를 가지는지 판정한다. 요청된 서비스 및 호스트명에 기초하여, 클러스터 관린 엔진(130)은 단계 620에서 가상 클러스터(220)를 선택한다. 전형적으로, 가상 클러스터(220)는 작업(150)의뢰 이전에 식별되고 할당된다. 그러나, 가상 클러스터(220)가 구축되지 않은 경우, 클러스터 관리 엔진(130)은 전술한 기술 중 어느 하나를 이용하여 가상 클러스터(220)를 자동으로 할당한다. 다음으로, 단계 625에서, 클러스터 관린 엔진(130)은 작업(150) 의뢰에 기초하여 정책(524)을 검색한다. 일 실시예에서, 클러스터 관리 엔진(130)은 사용자, 작업(150) 또는 임의의 다른 적당한 기준과 관련된 적당한 정책(524)을 결정한다. 클러스터 관리 엔진(130)은 그 후 결정하며, 결정되지 않으면 단계 630에서 작업(130)의 차원을 계산한다. 적당한 차원이 길이, 폭, 높이, 또는 임의의 다른 적당한 파라미터 또는 특성을 포함함을 이해해야 한다. 전술한 바와 같이, 이들 차원은 가상 클러스터(220) 내에서 작업 스페이스(또는 노드(115)의 서브셋)을 결정하는데 사용된다. 초기 파라미터가 구축된 후, 클러스터 관리 엔진(130)은 단계 635-665에서 HPC 서버(102) 상에서 작업(150)을 실행하길 시도한다.
결정 단계 635에서, 클러스터 관리 엔진(130)은 이미 구축된 파라미터를 이용하여 소정의 작업 스페이스(230)를 할당하는데 충분히 이용가능한 노드가 있는지 판정한다. 충분한 노드(115)가 없다면, 클러스터 관리 엔진(130)은 단계 640에서 가상 클러스터(220) 내에서 노드(115) 중 가장 빨리 이용가능한 서브셋(230)을 결정한다. 그 후, 클러스터 관리 엔진(130)은 서브셋(230)이 단계 645에서 이용가능할 때까지 작업(150)을 작업 큐(125)에 부가한다. 그 후 처리는 결정 단계 635로 복귀한다. 충분한 노드(115)가 이용가능할 때, 클러스터 관리 엔진(130)은 단계 650에서 이용가능한 노드(115)로부터 최적의 서브셋(230)을 동적으로 결정한다. 최적의 서브셋(230)이 가장 빠른 처리 시간, 가장 신뢰할만한 노드(115), 물리 또는 가상 로케이션, 또는 제1의 이용가능한 노드(115)를 포함하는, 임의의 적당한 기준을 이용하여 결정됨을 이해해야 한다. 단계 655에서, 클러스터 관리 엔진(130)은 선택된 가상 클러스터(220)로부터 결정된 서브셋(230)을 선택한다. 다음으로, 단계 660에서, 클러스터 관리 엔진(130)은 선택된 서브셋(230)을 이용하여 작업(150)에 대해 선택된 노드(115)를 할당한다. 일 실시예에 따르면, 클러스터 관리 엔진(130)은 가상 노드 리스트(522)에서의 노드(115)의 상태를 "비할당"에서 "할당"으로 변경한다. 서브셋(230)이 적당히 할당될 때, 클러스터 관리 엔진(130)은 작업 파라미터, 검색된 정책(524) 및 다른 임의의 적당한 파라미터에 기초한 할당된 스페이스를 이용하여 단계 665에서 작업(150)을 실행한다. 임의의 적당한 시간에, 클러스터 관리 엔진(130)은 통신하며, 통신하지 않으면 작업 결과(160)를 사용자에게 제시한다. 예컨대, 결과(160)는 포맷팅되며, GUI(126)를 통해 사용자에게 제시된다.
도 13은 본 발명의 일 실시예에 따르는, 격자(110) 내의 가상 클러스터(220)를 동적으로 백필링(backfilling)하는 예시적인 방법(700)을 도시한 플로우챠트이다. 고 레벨에서, 방법(700)은 가상 클러스터(220)에서 이용가능한 스페이스를 결정하며, 스페이스와 호환가능한 최적 작업(150)을 결정하고, 그리고 이용가능한 스페이스에서 결정된 작업(150)을 실행하는 것을 기술한다. 다음의 설명은 본 방법을 수행시 클러스터 관리 엔진(130)의 동작에 집중된다. 그러나, 이전 플로우챠트에서, 시스템(100)은 전술한 기능 중 일부 또는 모두를 구현하는 논리 소자의 배열 및 그 임의의 적당한 조합을 이용한다.
방법(700)은 클러스터 관리 엔진(130)이 작업 큐(525)를 소팅하는 단계 705에서 시작한다. 예시된 실시예에서, 클러스터 관리 엔진(130)은 큐(525)에 저장된 작업(150)의 우선 순위에 기초하여 큐(525)를 소팅한다. 그러나, 클러스터 관리 엔진(130)이 적당한 또는 최적의 작업(150)이 실행되도록 임의의 적당한 특성을 이용하여 큐(525)를 소팅함을 이해해야 한다. 다음으로, 단계 710에서, 클러스터 관리 엔진(130)은 가상 클러스터(220) 중 하나에서 이용가능한 노드(115)의 수를 결정한다. 물론, 클러스터 관리 엔진(130)은 또한 격자(110) 또는 어느 하나 이상의 가상 클러스터(220)에서 이용가능한 노드(115)의 수를 결정한다. 단계 715에서, 클러스터 관리 엔진(130)은 소팅된 작업 큐(525)로부터 제1 작업(150)을 선택한다. 다음으로, 클러스터 관리 엔진(130)은 720에서 선택된 작업(150)의 최적 형태(또는 다른 차원)를 동적으로 결정한다. 선택된 작업(150)의 최적 형태 또는 차원이 결정될 때, 클러스터 관리 엔진(130)은 단계 725-745에서 적당한 가상 클러스터(220) 내에서 작업(150)을 백필할 수 있는지 판정한다.
결정 단계 725에서, 클러스터 관리 엔진(130)은 선택된 작업(150)에 대해 이용가능한 충분한 노드(115)가 있는지 판정한다. 충분히 이용가능한 노드(115)가 있다면, 단계 730에서, 클러스터 관리 엔진(130)은 임의의 적당한 기술을 이용하여 선택된 작업(150)에 대한 노드(115)를 동적으로 할당한다. 예컨대, 클러스터 관리 엔진(130)은 도 6에 도시된 기술을 이용한다. 다음으로, 단계 735에서, 클러스터 관리 엔진(130)은 가상 클러스터(220)에서 이용가능한 노드의 수를 재계산한다. 단계 740에서, 클러스터 관리 엔진(130)은 할당된 노드(115) 상에서 작업(150)을 실행한다. 작업(150)이 실행될 때(또는 선택된 작업(150)에 대한 충분한 노드(115)가 없다면), 클러스터 관리 엔진(130)은 단계 525에서 소팅된 작업 큐 내의 다음 작업(150)을 선택하며, 단계 720으로 처리가 복귀된다. 비록 루프로 예시된다할지라도, 클러스터 관리 엔진(130)이 방법(700)에 예시된 기술을 임의의 적당한 시간에 초기화, 실행 및 종료함을 이해해야 한다.
도 14는 본 발명의 일 실시예에 따르는, 격자(110) 내의 노드(115)의 실패를 동적으로 관리하는 예시적인 방법(800)을 도시한 플로우챠트이다. 고 레벨에서, 방법(800)은 노드(115)가 실패했는지 결정하며, 작업 회복 및 관리를 자동으로 수행하고, 실패된 노드(115)를 대체하는 것을 기술한다. 다음 설명은 이 방법 수행시 클러스터 관리 모듈(130)의 동작에 집중된다. 그러나, 이전 플로우챠트에서와 같이, 시스템(100)은 기술된 기능 중 일부 또는 모두를 구현하는 논리 소자의 배열 및 임의의 적당한 조합을 이용한다.
방법(800)은 클러스터 관리 엔진(130)이, 노드가 실패했는지를 결정되는 단계 805에서 시작한다. 전술한 바와 같이, 클러스터 관리 엔진(130)은 노드(115)가 임의의 적당한 기술을 이용하여 실패했는지 결정한다. 예컨대, 클러스터 관리 엔진(130)은 노드(115)(또는 에이전트(132))를 여러번 풀(pull)하며, 노드(115)가 이로부터의 응답이 없음에 기초하여 실패됐는지 결정한다. 다른 예에서, 노드(115)에 존재하는 에이전트(132)는 "하트비트(heartbeat)"를 전달하며, 이런 "하트비트"의 결여는 노드(115)가 실패임을 나타낸다. 다음으로, 단계 810에서, 클러스터 관리 엔진(130)은 가상 클러스터(220)로부터 실패 노드(115)를 제거한다. 일 실시예에서, 클러스터 관리 엔진(130)은 가상 리스트(522) 내의 노드(115)의 상태를 "할당"에서 "실패"로 변경한다. 클러스터 관리 엔진(130)은 작업(150)이 결정 단계 815에서 실패 노드(115)와 관련되었다고 판정한다. 노드(115)와 관련된 작업(150)이 없다면, 처리는 종료된다. 전술한 바와 같이, 처리 종료 전에, 클러스터 관리 엔진(130)은 에러 메시지를 관리자에 전달하며, 대체 노드(115) 또는 임의의 다른 적당한 처리를 자동으로 결정한다. 실패 노드(115)와 관련된 작업(150)이 있다면, 클러스터 관리 엔진(130)은 단계 820에서 작업(150)과 관련된 다른 노드(115)를 결정한다. 다음으로, 단계 825에서, 클러스터 관리 엔진(130)은 모든 적당한 노드(115) 상에서 작업(150)을 파기한다. 예컨대, 클러스터 관리 엔진(130)은 파기 작업 커맨드를 실행하거나, 또는 작업(150)을 종료하기 위하여 임의의 다른 적당한 기술을 이용한다. 다음으로, 단계 830에서, 클러스터 관리 엔진(130)은 가상 리스트(522)를 이용하여 노드(115)를 할당해제한다. 예컨대, 클러스터 관리 엔진(130)은 가상 리스트(522) 내의 노드(115)의 상태를 "할당"에서 "이용가능함"으로 변경한다. 작업이 종료되고 모든 적당한 노드(115)가 할당해제될 때, 클러스터 관리 엔진(130)은 단계 835-850에서 이용가능한 노드(115)를 이용하여 작업(150)을 재실행한다.
단계 835에서, 클러스터 관리 엔진(130)은 단계 835에서 파기된 작업(150)에 대한 정책(524) 및 파라미터를 검색한다. 클러스터 관리 엔진(130)은 그 후 검색된 정책(524) 및 작업 파라미터에 기초하여, 단계 840에서 가상 클러스터(220) 내의 노드(115)의 최적 서브셋(230)을 결정한다. 노드(115)의 서브셋(230)이 결정될 때, 클러스터 관리 엔진(130)은 단계 845에서 노드(115)의 서브셋(230)을 동적으로 할당한다. 예컨대, 클러스터 관리 엔진(130)은 가상 리스트(522) 내의 노드(115)의 상태를 "비할당"에서 "할당"으로 변경한다. 노드(115)의 서브셋이, 작업(150)이 실행중인 노드의 원 서브셋과 다름을 이해해야 한다. 예컨대, 클러스터 관리 엔진(130)은 노드의 다른 서브셋이 이런 실행을 프롬프트하는 노드 실패에 기인하여 최적인지 결정한다. 다른 예에서, 클러스터 관리 엔진(130)은 제2 노드(115)가 실패 노드(115)를 대체하도록 동작가능한지 또한 새로운 서브셋(230)이 오래된 작업 스페이스(230)와 실질적으로 유사한지 결정한다. 할당된 서브셋(230)이 결정되고 할당될 때, 클러스터 관리 엔진(130)은 단계 850에서 작업(150)을 실행한다.
선행한 플로우챠트 및 첨부된 설명은 예시적인 방법(600, 700, 800)을 기술한다. 간단히 말하자면, 시스템(100)은 이들 및 다른 태스크를 수행하기 위한 임의의 적당한 기술을 이용한다. 이에 따라, 이런 플로우챠트 내의 많은 수의 단계는 동시에, 그리고/또는 도시된 것과는 다른 순서로 발생될 수 있다. 더욱이, 시스템(100)은 방법이 적당히 유지되는 한, 부가 단계, 보다 적은 수의 단계, 및/또는 다른 단계를 갖는 방법을 이용할 수 있다.
도 15는 HPC 시스템(100)에서 주문형 인스턴트화의 예시적인 방법을 도시한다. 이 방법은 인터페이스(104)가 HPC 서버(102)에 대해 외적으로 광고된 호스트명 및 호트 넘버를 특정하는 클라이언트(120)로부터 연결 요청을 수신하는 단계 900에서 시작한다. 단계 902에서, 연결 요청에 응답하여, 인스턴트화 관리자(534)는 HPC 서버(102)에 대해 외부로 광고된 서비스의 리스트를 제공하는 인스턴트화 데이터(536)를 액세스한다. 단계 904에서, 인스턴트화 관리자(534)는 연결 요청에서 특정된 포트 번호 및 호스트명에 대응하는 서비스를 식별하기 위해 서비스의 리스트를 이용한다. 단계 906에서, 인스턴트화 관리자(534)는 서비스의 리스트에 따라서, 식별된 서비스가 클라이언트(120)에 이용가능한지 판정한다. 전술한 바와 같이, 식별된 서비스가 클라이언트(120)에게 이용가능한지는, 연결 요청과 관련된 시간, 클라이언트(120)에서 사용자의 신원, 또는 다른 양상의 연결 요청에 달려있다. 단계 906에서, 식별된 서비스가 클라이언트(120)에게 이용가능하다면, 방법은 단계 908로 진행한다. 단계 908에서, 인스턴트화 관리자(534)는 식별된 서비스를 클라이언트(120)에 제공하기 위하여, 격자(110) 내의 하나 이상의 노드(115)에서 호스트를 인스턴트화하는 식별된 서비스에 대응하는 HPC 서버(102) 내부의 호스트명 및 포트 번호를 나타내는 인스턴트화 데이터(536)를 이용한다. 전술한 바와 같이, 인스턴트화 관리자(534)는 부트 이미지, 파일 시스템, 및 OS 구성을 포함하는 인스턴트화 데이터(536)를 또한 이용하여 방법이 종료되는 포인트인 노드(115)에서 호스트를 인스턴트화한다. 단계 906에서, 식별된 서비스가 클라이언트(120)에게 이용가능하지 않다면, 방법은 단계 910으로 진행한다. 단계 910에서, 인스턴트화 관리자(534)는 연결 요청에서 특정된 포트를 차단하여, 클라이언트(120)가 방법이 종료하는 지점인 식별된 서비스를 액세스하는 것을 방지한다. 비록, 도 15에 도시된 방법 내의 특정 단계가 특정 순서로 일어난다고 기술되어 있다 할지라도, 도 15에 도시된 방법 내의 임의의 적당한 단계는 임의의 적당한 순서로 발생할 수 있다.
본 발명이 임의의 실시예 및 일반적인 관련 방법으로 기술된다 할지라도, 이들 실시예 및 방법의 변형 및 수정은 당업자에게는 자명할 것이다. 이에 따라, 예시적인 실시예의 전술한 설명은 본 발명을 한정하거나 제한하지 않는다. 다른 변화, 대체 및 변형은 본 발명의 정신 및 범위를 벗어남이 없이 가능하다.

Claims (39)

  1. 고성능 연산(HPC: high-performance computing) 시스템에서의 온디맨드 인스턴스화(on-demand instantiation)를 위한 실행가능 코드를 포함하는 컴퓨터 판독가능 매체로서,
    상기 실행가능 코드는,
    HPC 서버에서, 클라이언트 단말기로부터 제1 포트 번호 및 제1 호스트 명(host name)을 특정하는 접속 요청을 수신하고 - 상기 제1 포트 번호 및 상기 제1 호스트 명은 상기 HPC 서버에 대하여 외부적으로 통지(advertise)되고, 상기 HPC 서버는 노드들의 클러스터(cluster of nodes)를 포함하며, 상기 통지는 상기 제1 포트 번호 및 상기 제1 호스트 명이 상기 클라이언트 단말기에 이용가능하게 함 -;
    상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하고;
    상기 식별된 서비스가 상기 클라이언트 단말기에 이용가능한지를 판정하며;
    상기 식별된 서비스가 이용가능한 경우에는, 상기 클러스터 내의 하나 이상의 노드들 중 임의의 노드에서 상기 HPC 서버에 의해 상기 식별된 서비스를 제공하는 호스트를 인스턴스화하도록 동작가능하고,
    상기 호스트는 상기 식별된 서비스를 포함하는 애플리케이션을 포함하는 컴퓨터 판독가능 매체.
  2. 제1항에 있어서,
    상기 접속 요청은 TCP(Transmission Control Protocol) 접속 요청 또는 UDP(User Datagram Protocol) 접속 요청인 컴퓨터 판독가능 매체.
  3. 제1항에 있어서,
    상기 실행가능 코드는,
    복수의 엔트리들을 포함하는 상기 HPC 서버에 위치된 서비스들의 리스트에 액세스하며 - 각각의 엔트리는, 서비스, 및 상기 서비스에 대응하는, 상기 HPC 서버에 대하여 외부적으로 통지된 포트 번호 및 호스트 명을 특정함 -;
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하도록 더 동작가능한 컴퓨터 판독가능 매체.
  4. 제1항에 있어서,
    상기 실행가능 코드는,
    복수의 엔트리들을 포함하는 상기 HPC 서버에 위치된 서비스들의 리스트에 액세스하며 - 각각의 엔트리는, 서비스, 및 상기 클러스터 내의 하나 이상의 노드들에서 실행되는 경우에 상기 서비스를 제공하는 호스트에 대응하는, 상기 HPC 서버 내부의 포트 번호 및 호스트 명을 특정함 -;
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 클러스터 내의 하나 이상의 노드들 중 임의의 노드에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하도록 더 동작가능한 컴퓨터 판독가능 매체.
  5. 제1항에 있어서,
    상기 실행가능 코드는,
    복수의 엔트리들을 포함하는 상기 HPC 서버에 위치된 서비스들의 리스트에 액세스하며 - 각각의 엔트리는, 서비스, 및 상기 서비스가 이용가능한지를 나타내는 하나 이상의 규칙들을 특정함 -;
    상기 서비스들의 리스트에 따라, 상기 식별된 서비스가 이용가능한지를 판정하도록 더 동작가능한 컴퓨터 판독가능 매체.
  6. 제5항에 있어서,
    상기 규칙들은, 상기 클라이언트 단말기로부터의 상기 접속 요청과 연관된 시간에 기초하여 상기 서비스가 이용가능한지를 나타내는 컴퓨터 판독가능 매체.
  7. 제1항에 있어서,
    상기 실행가능 코드는, 상기 식별된 서비스가 이용가능하지 않다고 판정하는 것에 응답하여, 상기 클라이언트 단말기가 상기 식별된 서비스에 액세스하는 것을 방지하기 위해서 상기 제1 포트 번호에 대응하는 상기 HPC 서버 상의 포트를 차단(block)하도록 더 동작가능한 컴퓨터 판독가능 매체.
  8. 제1항에 있어서,
    상기 실행가능 코드는,
    상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트에 대응하는 상기 HPC 서버에서의 부트 이미지(boot image), 파일 시스템 및 오퍼레이팅 시스템(OS) 구성 파일에 액세스하며;
    상기 부트 이미지, 상기 파일 시스템 및 상기 OS 구성 파일을 이용하여, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하도록 더 동작가능한 컴퓨터 판독가능 매체.
  9. 제1항에 있어서,
    상기 식별된 서비스는 웹 서버인 컴퓨터 판독가능 매체.
  10. 제1항에 있어서,
    상기 실행가능 코드는, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트의 어드레스를 위장(spoof)하며, 상기 호스트가 부팅 중인 동안에 상기 호스트를 대신하여 접속 시퀀스를 개시하도록 더 동작가능한 컴퓨터 판독가능 매체.
  11. 제10항에 있어서,
    상기 어드레스는 IP/MAC(Internet Protocol over Media Access Control) 어드레스이며,
    상기 접속 시퀀스는 TCP/IP(Transmission Control Protocol over IP) 접속 시퀀스 또는 UDP/IP(User Datagram Protocol(UDP) over IP) 접속 시퀀스인 컴퓨터 판독가능 매체.
  12. 제1항에 있어서,
    상기 노드들의 클러스터는 3차원 원환(torus)을 포함하는 토폴로지에 따라 서로 연결된 복수의 노드들을 포함하는 컴퓨터 판독가능 매체.
  13. 제1항에 있어서,
    상기 노드들의 클러스터 내의 하나의 노드는 2개의 스위치들에 연결된 중앙 처리 장치(CPU)인 컴퓨터 판독가능 매체.
  14. 고성능 연산(HPC) 시스템에서의 온디맨드 인스턴스화를 위한 방법으로서,
    HPC 서버에서, 클라이언트 단말기로부터 제1 포트 번호 및 제1 호스트 명을 특정하는 접속 요청을 수신하는 단계 - 상기 제1 포트 번호 및 상기 제1 호스트 명은 상기 HPC 서버에 대하여 외부적으로 통지되고, 상기 HPC 서버는 노드들의 클러스터를 포함하며, 상기 통지는 상기 제1 포트 번호 및 상기 제1 호스트 명이 상기 클라이언트 단말기에 이용가능하게 함 -;
    상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하는 단계;
    상기 식별된 서비스가 상기 클라이언트 단말기에 이용가능한지를 판정하는 단계; 및
    상기 식별된 서비스가 이용가능한 경우에는, 상기 클러스터 내의 하나 이상의 노드들 중 임의의 노드에서 상기 HPC 서버에 의해 상기 식별된 서비스를 제공하는 호스트를 인스턴스화하는 단계
    를 포함하고,
    상기 호스트는 상기 식별된 서비스를 포함하는 애플리케이션을 포함하는 방법.
  15. 제14항에 있어서,
    상기 접속 요청은 TCP(Transmission Control Protocol) 접속 요청 또는 UDP(User Datagram Protocol) 접속 요청인 방법.
  16. 제14항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 단계 - 각각의 엔트리는, 서비스, 및 상기 서비스에 대응하는, 상기 HPC 서버에 대하여 외부적으로 통지된 포트 번호 및 호스트 명을 특정함 -; 및
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하는 단계
    를 더 포함하는 방법.
  17. 제14항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 단계 - 각각의 엔트리는, 서비스, 및 상기 클러스터 내의 하나 이상의 노드들에서 실행되는 경우에 상기 서비스를 제공하는 호스트에 대응하는, 상기 HPC 서버 내부의 포트 번호 및 호스트 명을 특정함 -; 및
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하는 단계
    를 더 포함하는 방법.
  18. 제14항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 단계 - 각각의 엔트리는, 서비스, 및 상기 서비스가 이용가능한지를 나타내는 하나 이상의 규칙들을 특정함 -; 및
    상기 서비스들의 리스트에 따라, 상기 식별된 서비스가 이용가능한지를 판정하는 단계
    를 더 포함하는 방법.
  19. 제18항에 있어서,
    상기 규칙들은, 상기 클라이언트 단말기로부터의 상기 접속 요청과 연관된 시간에 기초하여 상기 서비스가 이용가능한지를 나타내는 방법.
  20. 제14항에 있어서,
    상기 식별된 서비스가 이용가능하지 않다고 판정하는 것에 응답하여, 상기 클라이언트 단말기가 상기 식별된 서비스에 액세스하는 것을 방지하기 위해서 상기 제1 포트 번호에 대응하는 상기 HPC 서버 상의 포트를 차단하는 단계를 더 포함하는 방법.
  21. 제14항에 있어서,
    상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트에 대응하는 상기 HPC 서버에서의 부트 이미지, 파일 시스템 및 오퍼레이팅 시스템(OS) 구성 파일에 액세스하는 단계; 및
    상기 부트 이미지, 상기 파일 시스템 및 상기 OS 구성 파일을 이용하여, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하는 단계
    를 더 포함하는 방법.
  22. 제14항에 있어서,
    상기 식별된 서비스는 웹 서버인 방법.
  23. 제14항에 있어서,
    상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트의 어드레스를 위장하며, 상기 호스트가 부팅 중인 동안에 상기 호스트를 대신하여 접속 시퀀스를 개시하는 단계를 더 포함하는 방법.
  24. 제23항에 있어서,
    상기 어드레스는 IP/MAC(Internet Protocol over Media Access Control) 어드레스이며,
    상기 접속 시퀀스는 TCP/IP(Transmission Control Protocol over IP) 접속 시퀀스 또는 UDP/IP(User Datagram Protocol(UDP) over IP) 접속 시퀀스인 방법.
  25. 제14항에 있어서,
    상기 노드들의 클러스터는 3차원 원환을 포함하는 토폴로지에 따라 서로 연결된 복수의 노드들을 포함하는 방법.
  26. 제14항에 있어서,
    상기 노드들의 클러스터 내의 하나의 노드는 2개의 스위치들에 연결된 중앙 처리 장치(CPU)인 방법.
  27. 고성능 연산(HPC) 시스템에서의 온디맨드 인스턴스화를 위한 시스템으로서,
    HPC 서버에서, 클라이언트 단말기로부터 제1 포트 번호 및 제1 호스트 명을 특정하는 접속 요청을 수신하는 수단 - 상기 제1 포트 번호 및 상기 제1 호스트 명은 상기 HPC 서버에 대하여 외부적으로 통지되고, 상기 HPC 서버는 노드들의 클러스터를 포함하며, 상기 통지는 상기 제1 포트 번호 및 상기 제1 호스트 명이 상기 클라이언트 단말기에 이용가능하게 함 -;
    상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하는 수단;
    상기 식별된 서비스가 상기 클라이언트 단말기에 이용가능한지를 판정하는 수단; 및
    상기 식별된 서비스가 이용가능한 경우에는, 상기 클러스터 내의 하나 이상의 노드들 중 임의의 노드에서 상기 HPC 서버에 의해 상기 식별된 서비스를 제공하는 호스트를 인스턴스화하는 수단
    을 포함하고,
    상기 호스트는 상기 식별된 서비스를 포함하는 애플리케이션을 포함하는 시스템.
  28. 제27항에 있어서,
    상기 접속 요청은 TCP(Transmission Control Protocol) 접속 요청 또는 UDP(User Datagram Protocol) 접속 요청인 시스템.
  29. 제27항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 수단 - 각각의 엔트리는, 서비스, 및 상기 서비스에 대응하는, 상기 HPC 서버에 대하여 외부적으로 통지된 포트 번호 및 호스트 명을 특정함 -; 및
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 제1 포트 번호 및 상기 제1 호스트 명에 대응하는 상기 HPC 서버에서의 서비스를 식별하는 수단
    을 더 포함하는 시스템.
  30. 제27항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 수단 - 각각의 엔트리는, 서비스, 및 상기 클러스터 내의 하나 이상의 노드들에서 실행되는 경우에 상기 서비스를 제공하는 호스트에 대응하는, 상기 HPC 서버 내부의 포트 번호 및 호스트 명을 특정함 -; 및
    상기 HPC 서버에서의 상기 서비스들의 리스트에 따라, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하는 수단
    을 더 포함하는 시스템.
  31. 제27항에 있어서,
    복수의 엔트리들을 포함하는 상기 HPC 서버에서의 서비스들의 리스트에 액세스하는 수단 - 각각의 엔트리는, 서비스, 및 상기 서비스가 이용가능한지를 나타내는 하나 이상의 규칙들을 특정함 -; 및
    상기 서비스들의 리스트에 따라, 상기 식별된 서비스가 이용가능한지를 판정하는 수단
    을 더 포함하는 시스템.
  32. 제31항에 있어서,
    상기 규칙들은, 상기 클라이언트 단말기로부터의 상기 접속 요청과 연관된 시간에 기초하여 상기 서비스가 이용가능한지를 나타내는 시스템.
  33. 제27항에 있어서,
    상기 식별된 서비스가 이용가능하지 않다고 판정하는 것에 응답하여, 상기 클라이언트 단말기가 상기 식별된 서비스에 액세스하는 것을 방지하기 위해서 상기 제1 포트 번호에 대응하는 상기 HPC 서버 상의 포트를 차단하는 수단을 더 포함하는 시스템.
  34. 제27항에 있어서,
    상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트에 대응하는 상기 HPC 서버에서의 부트 이미지, 파일 시스템 및 오퍼레이팅 시스템(OS) 구성 파일에 액세스하는 수단; 및
    상기 부트 이미지, 상기 파일 시스템 및 상기 OS 구성 파일을 이용하여, 상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트를 인스턴스화하는 수단
    을 더 포함하는 시스템.
  35. 제27항에 있어서,
    상기 식별된 서비스는 웹 서버인 시스템.
  36. 제27항에 있어서,
    상기 클러스터 내의 하나 이상의 노드들에서 상기 식별된 서비스를 제공하는 상기 호스트의 어드레스를 위장하는 수단; 및
    상기 호스트가 부팅 중인 동안에 상기 호스트를 대신하여 접속 시퀀스를 개시하는 수단
    을 더 포함하는 시스템.
  37. 제36항에 있어서,
    상기 어드레스는 IP/MAC(Internet Protocol over Media Access Control) 어드레스이며,
    상기 접속 시퀀스는 TCP/IP(Transmission Control Protocol over IP) 접속 시퀀스 또는 UDP/IP(User Datagram Protocol(UDP) over IP) 접속 시퀀스인 시스템.
  38. 제27항에 있어서,
    상기 노드들의 클러스터는 3차원 원환을 포함하는 토폴로지에 따라 서로 연결된 복수의 노드들을 포함하는 시스템.
  39. 제27항에 있어서,
    상기 노드들의 클러스터 내의 하나의 노드는 2개의 스위치들에 연결된 중앙 처리 장치(CPU)인 시스템.
KR1020067021323A 2004-11-17 2005-04-12 고성능 연산(hpc) 시스템에서의 온디맨드 인스턴스화 KR101159386B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/991,994 2004-11-17
US10/991,994 US8244882B2 (en) 2004-11-17 2004-11-17 On-demand instantiation in a high-performance computing (HPC) system
PCT/US2005/012489 WO2006055027A1 (en) 2004-11-17 2005-04-12 On-demand instantiation in a high-performance computing (hpc) system

Publications (2)

Publication Number Publication Date
KR20070085089A KR20070085089A (ko) 2007-08-27
KR101159386B1 true KR101159386B1 (ko) 2012-06-28

Family

ID=34966364

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067021323A KR101159386B1 (ko) 2004-11-17 2005-04-12 고성능 연산(hpc) 시스템에서의 온디맨드 인스턴스화

Country Status (10)

Country Link
US (1) US8244882B2 (ko)
EP (1) EP1662388B1 (ko)
JP (1) JP4451806B2 (ko)
KR (1) KR101159386B1 (ko)
CN (1) CN1777107B (ko)
CA (1) CA2503781C (ko)
IL (1) IL178610A (ko)
MY (1) MY151525A (ko)
TW (1) TWI285818B (ko)
WO (1) WO2006055027A1 (ko)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782654B2 (en) 2004-03-13 2014-07-15 Adaptive Computing Enterprises, Inc. Co-allocating a reservation spanning different compute resources types
US7490325B2 (en) 2004-03-13 2009-02-10 Cluster Resources, Inc. System and method for providing intelligent pre-staging of data in a compute environment
US7711977B2 (en) * 2004-04-15 2010-05-04 Raytheon Company System and method for detecting and managing HPC node failure
US8335909B2 (en) 2004-04-15 2012-12-18 Raytheon Company Coupling processors to each other for high performance computing (HPC)
US9178784B2 (en) 2004-04-15 2015-11-03 Raytheon Company System and method for cluster management based on HPC architecture
US8190714B2 (en) * 2004-04-15 2012-05-29 Raytheon Company System and method for computer cluster virtualization using dynamic boot images and virtual disk
US8336040B2 (en) 2004-04-15 2012-12-18 Raytheon Company System and method for topology-aware job scheduling and backfilling in an HPC environment
US20050235055A1 (en) * 2004-04-15 2005-10-20 Raytheon Company Graphical user interface for managing HPC clusters
US20070266388A1 (en) 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US8176490B1 (en) 2004-08-20 2012-05-08 Adaptive Computing Enterprises, Inc. System and method of interfacing a workload manager and scheduler with an identity manager
US8271980B2 (en) 2004-11-08 2012-09-18 Adaptive Computing Enterprises, Inc. System and method of providing system jobs within a compute environment
US7475274B2 (en) * 2004-11-17 2009-01-06 Raytheon Company Fault tolerance and recovery in a high-performance computing (HPC) system
US8244882B2 (en) 2004-11-17 2012-08-14 Raytheon Company On-demand instantiation in a high-performance computing (HPC) system
US7433931B2 (en) * 2004-11-17 2008-10-07 Raytheon Company Scheduling in a high-performance computing (HPC) system
JP4291281B2 (ja) * 2005-02-03 2009-07-08 富士通株式会社 情報処理システム、計算ノード、情報処理システムの制御方法
US7437595B2 (en) * 2005-02-07 2008-10-14 International Business Machines Corporation Row fault detection system
US8495411B2 (en) * 2005-02-07 2013-07-23 International Business Machines Corporation All row, planar fault detection system
US7451342B2 (en) * 2005-02-07 2008-11-11 International Business Machines Corporation Bisectional fault detection system
US7827435B2 (en) * 2005-02-15 2010-11-02 International Business Machines Corporation Method for using a priority queue to perform job scheduling on a cluster based on node rank and performance
US8930536B2 (en) 2005-03-16 2015-01-06 Adaptive Computing Enterprises, Inc. Virtual private cluster
US8863143B2 (en) 2006-03-16 2014-10-14 Adaptive Computing Enterprises, Inc. System and method for managing a hybrid compute environment
US9075657B2 (en) 2005-04-07 2015-07-07 Adaptive Computing Enterprises, Inc. On-demand access to compute resources
US9231886B2 (en) 2005-03-16 2016-01-05 Adaptive Computing Enterprises, Inc. Simple integration of an on-demand compute environment
US20110258320A1 (en) * 2005-04-07 2011-10-20 Adaptive Computing Enterprises, Inc. Elastic management of compute resources between a web server and an on-demand compute environment
US7478278B2 (en) * 2005-04-14 2009-01-13 International Business Machines Corporation Template based parallel checkpointing in a massively parallel computer system
WO2008111117A1 (ja) * 2007-03-09 2008-09-18 Fujitsu Limited 中継装置およびその制御方法、atm装置間通信支援システム、ならびにコンピュータプログラム
US8041773B2 (en) 2007-09-24 2011-10-18 The Research Foundation Of State University Of New York Automatic clustering for self-organizing grids
JP5355592B2 (ja) * 2008-01-31 2013-11-27 アダプティブ コンピューティング エンタープライジズ インク ハイブリッド型のコンピューティング環境を管理するためのシステムおよび方法
US8108466B2 (en) * 2008-05-01 2012-01-31 Microsoft Corporation Automated offloading of user-defined functions to a high performance computing system
JP5531420B2 (ja) * 2009-02-27 2014-06-25 日本電気株式会社 プロセス割当システム、プロセス割当方法、プロセス割当プログラム
US8411684B1 (en) * 2009-10-26 2013-04-02 Mcafee, Inc. System, method, and computer program product for determining a hop count between network devices utilizing a binary search
US11720290B2 (en) 2009-10-30 2023-08-08 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US10877695B2 (en) 2009-10-30 2020-12-29 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
JP5532849B2 (ja) * 2009-11-20 2014-06-25 富士通株式会社 コンピュータ、プロセス間通信プログラム、およびプロセス間通信方法
US9710595B2 (en) * 2010-02-24 2017-07-18 International Business Machines Corporation Multi-view user interface for server cabling display
US8402139B2 (en) * 2010-02-26 2013-03-19 Red Hat, Inc. Methods and systems for matching resource requests with cloud computing environments
TWI423039B (zh) * 2010-07-23 2014-01-11 Quanta Comp Inc 伺服器系統與其操作方法
WO2012151692A1 (en) * 2011-05-06 2012-11-15 Sierra Wireless, Inc. Method and apparatus for management of network communications
US8701107B2 (en) 2011-06-14 2014-04-15 Vmware, Inc. Decentralized management of virtualized hosts
US9026630B2 (en) * 2011-06-14 2015-05-05 Vmware, Inc. Managing resources in a distributed system using dynamic clusters
US8706869B2 (en) * 2011-06-14 2014-04-22 International Business Machines Corporation Distributed cloud placement software
US8856784B2 (en) 2011-06-14 2014-10-07 Vmware, Inc. Decentralized management of virtualized hosts
US9129124B2 (en) * 2012-04-12 2015-09-08 Hewlett-Packard Development Company, L.P. Dynamic provisioning of virtual systems
US9275007B2 (en) * 2013-03-12 2016-03-01 International Business Machines Corporation Identifying logical planes formed of compute nodes of a subcommunicator in a parallel computer
US9519518B2 (en) * 2013-05-15 2016-12-13 Citrix Systems, Inc. Systems and methods for deploying a spotted virtual server in a cluster system
US9390054B2 (en) * 2013-10-14 2016-07-12 International Business Machines Corporation Identifying a largest logical plane from a plurality of logical planes formed of compute nodes of a subcommunicator in a parallel computer
US10382527B2 (en) 2013-10-16 2019-08-13 International Business Machines Corporation Performing optimized collective operations in an irregular subcommunicator of compute nodes in a parallel computer
US9692649B2 (en) 2014-02-26 2017-06-27 International Business Machines Corporation Role assignment for servers in a high performance computing system based on measured performance characteristics
MY170681A (en) * 2014-06-19 2019-08-26 Mimos Berhad System and method for distributed secure data storage in torus network topology
JP6446989B2 (ja) * 2014-10-16 2019-01-09 富士通株式会社 計算機システム,処理方法及びジョブ処理プログラム
US10009248B2 (en) 2014-12-12 2018-06-26 International Business Machines Corporation System with on-demand state for applications
US10754494B2 (en) * 2015-06-23 2020-08-25 Dell Products, L.P. Method and control system providing one-click commissioning and push updates to distributed, large-scale information handling system (LIHS)
KR101995056B1 (ko) * 2015-12-30 2019-07-02 한국전자통신연구원 분산 파일 시스템 및 이의 운영방법
US9990230B1 (en) * 2016-02-24 2018-06-05 Databricks Inc. Scheduling a notebook execution
US10356008B2 (en) * 2017-06-28 2019-07-16 International Business Machines Corporation Large scale fabric attached architecture
US20200389352A1 (en) * 2019-06-04 2020-12-10 Microsoft Technology Licensing, Llc Automated upgrade of multiple hosts

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010000624A (ko) * 2000-10-10 2001-01-05 최은석 고성능 컴퓨터를 이용한 연산기능 제공방법

Family Cites Families (118)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4885770A (en) 1987-09-04 1989-12-05 Digital Equipment Corporation Boot system for distributed digital data processing system
US4868818A (en) 1987-10-29 1989-09-19 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Fault tolerant hypercube computer system architecture
US5020059A (en) 1989-03-31 1991-05-28 At&T Bell Laboratories Reconfigurable signal processor
US5396635A (en) 1990-06-01 1995-03-07 Vadem Corporation Power conservation apparatus having multiple power reduction levels dependent upon the activity of the computer system
US5301104A (en) 1990-08-07 1994-04-05 Honeywell Inc. Method for allocating processing elements interconnected in a hypercube topology
US5280607A (en) 1991-06-28 1994-01-18 International Business Machines Corporation Method and apparatus for tolerating faults in mesh architectures
CA2106280C (en) 1992-09-30 2000-01-18 Yennun Huang Apparatus and methods for fault-tolerant computing employing a daemon monitoring process and fault-tolerant library to provide varying degrees of fault tolerance
US5781715A (en) 1992-10-13 1998-07-14 International Business Machines Corporation Fault-tolerant bridge/router with a distributed switch-over mechanism
US5513313A (en) 1993-01-19 1996-04-30 International Business Machines Corporation Method for generating hierarchical fault-tolerant mesh architectures
US5450578A (en) 1993-12-23 1995-09-12 Unisys Corporation Method and apparatus for automatically routing around faults within an interconnect system
EP1046994A3 (en) 1994-03-22 2000-12-06 Hyperchip Inc. Efficient direct cell replacement fault tolerant architecture supporting completely integrated systems with means for direct communication with system operator
US6408402B1 (en) 1994-03-22 2002-06-18 Hyperchip Inc. Efficient direct replacement cell fault tolerant architecture
US5682491A (en) 1994-12-29 1997-10-28 International Business Machines Corporation Selective processing and routing of results among processors controlled by decoding instructions using mask value derived from instruction tag and processor identifier
US5603044A (en) 1995-02-08 1997-02-11 International Business Machines Corporation Interconnection network for a multi-nodal data processing system which exhibits incremental scalability
US5872928A (en) 1995-02-24 1999-02-16 Cabletron Systems, Inc. Method and apparatus for defining and enforcing policies for configuration management in communications networks
US5889953A (en) 1995-05-25 1999-03-30 Cabletron Systems, Inc. Policy management and conflict resolution in computer networks
US5805785A (en) 1996-02-27 1998-09-08 International Business Machines Corporation Method for monitoring and recovery of subsystems in a distributed/clustered system
US6006242A (en) 1996-04-05 1999-12-21 Bankers Systems, Inc. Apparatus and method for dynamically creating a document
US5805786A (en) 1996-07-23 1998-09-08 International Business Machines Corporation Recovery of a name server managing membership of a domain of processors in a distributed computing environment
US6393581B1 (en) 1996-08-29 2002-05-21 Cornell Research Foundation, Inc. Reliable time delay-constrained cluster computing
US5933631A (en) 1997-03-17 1999-08-03 International Business Machines Corporation Dynamic boot filesystem selection
US6029246A (en) 1997-03-31 2000-02-22 Symantec Corporation Network distributed system for updating locally secured objects in client machines
US5991877A (en) 1997-04-03 1999-11-23 Lockheed Martin Corporation Object-oriented trusted application framework
US6088330A (en) 1997-09-09 2000-07-11 Bruck; Joshua Reliable array of distributed computing nodes
US6167502A (en) 1997-10-10 2000-12-26 Billions Of Operations Per Second, Inc. Method and apparatus for manifold array processing
US6230252B1 (en) * 1997-11-17 2001-05-08 Silicon Graphics, Inc. Hybrid hypercube/torus architecture
US6633945B1 (en) 1997-12-07 2003-10-14 Conexant Systems, Inc. Fully connected cache coherent multiprocessing systems
US6477663B1 (en) 1998-04-09 2002-11-05 Compaq Computer Corporation Method and apparatus for providing process pair protection for complex applications
US6189100B1 (en) 1998-06-30 2001-02-13 Microsoft Corporation Ensuring the integrity of remote boot client data
US6195760B1 (en) 1998-07-20 2001-02-27 Lucent Technologies Inc Method and apparatus for providing failure detection and recovery with predetermined degree of replication for distributed applications in a network
US6466932B1 (en) 1998-08-14 2002-10-15 Microsoft Corporation System and method for implementing group policy
US6683696B1 (en) 1998-10-27 2004-01-27 Hewlett-Packard Development Company, L.P. Filter based data imaging method for an image forming device
US6158010A (en) 1998-10-28 2000-12-05 Crosslogix, Inc. System and method for maintaining security in a distributed computer network
US6691165B1 (en) 1998-11-10 2004-02-10 Rainfinity, Inc. Distributed server cluster for controlling network traffic
US6496941B1 (en) 1998-12-29 2002-12-17 At&T Corp. Network disaster recovery and analysis tool
US6480972B1 (en) 1999-02-24 2002-11-12 International Business Machines Corporation Data processing system and method for permitting a server to remotely perform diagnostics on a malfunctioning client computer system
US6453426B1 (en) 1999-03-26 2002-09-17 Microsoft Corporation Separately storing core boot data and cluster configuration data in a server cluster
US6408326B1 (en) 1999-04-20 2002-06-18 Microsoft Corporation Method and system for applying a policy to binary data
US6718486B1 (en) 2000-01-26 2004-04-06 David E. Lovejoy Fault monitor for restarting failed instances of the fault monitor
US6779016B1 (en) * 1999-08-23 2004-08-17 Terraspring, Inc. Extensible computing system
US6597956B1 (en) 1999-08-23 2003-07-22 Terraspring, Inc. Method and apparatus for controlling an extensible computing system
US6415323B1 (en) * 1999-09-03 2002-07-02 Fastforward Networks Proximity-based redirection system for robust and scalable service-node location in an internetwork
US6741983B1 (en) 1999-09-28 2004-05-25 John D. Birdwell Method of indexed storage and retrieval of multidimensional information
US6629266B1 (en) 1999-11-17 2003-09-30 International Business Machines Corporation Method and system for transparent symptom-based selective software rejuvenation
US6748437B1 (en) * 2000-01-10 2004-06-08 Sun Microsystems, Inc. Method for creating forwarding lists for cluster networking
US6714980B1 (en) * 2000-02-11 2004-03-30 Terraspring, Inc. Backup and restore of data associated with a host in a dynamically changing virtual server farm without involvement of a server that uses an associated storage device
EP1182822B1 (en) 2000-02-21 2013-02-13 Kabushiki Kaisha Toshiba Network Management Equipment
US6460149B1 (en) 2000-03-03 2002-10-01 International Business Machines Corporation Suicide among well-mannered cluster nodes experiencing heartbeat failure
EP1301865A4 (en) 2000-03-22 2009-04-01 Yotta Yotta Inc METHOD AND SYSTEM FOR PROVIDING MULTIMEDIA INFORMATION ON DEMAND THROUGH LONG DISTANCE NETWORKS
US6785713B1 (en) * 2000-05-08 2004-08-31 Citrix Systems, Inc. Method and apparatus for communicating among a network of servers utilizing a transport mechanism
US6658504B1 (en) 2000-05-16 2003-12-02 Eurologic Systems Storage apparatus
US20040034794A1 (en) 2000-05-28 2004-02-19 Yaron Mayer System and method for comprehensive general generic protection for computers against malicious programs that may steal information and/or cause damages
JP4292693B2 (ja) 2000-07-07 2009-07-08 株式会社日立製作所 計算機資源分割装置および資源分割方法
US7032119B2 (en) 2000-09-27 2006-04-18 Amphus, Inc. Dynamic power and workload management for multi-server system
JP2002108839A (ja) 2000-09-28 2002-04-12 Mitsubishi Electric Corp 通信ネットワークシステム、ジョブ割当方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US7428583B1 (en) 2000-10-31 2008-09-23 Intel Corporation Network policy distribution
US7055148B2 (en) 2000-12-07 2006-05-30 Hewlett-Packard Development Company, L.P. System and method for updating firmware
US6735660B1 (en) 2000-12-21 2004-05-11 International Business Machines Corporation Sideband signal transmission between host and input/output adapter
DE60237433D1 (de) * 2001-02-24 2010-10-07 Ibm Neuartiger massivparalleler supercomputer
US7107337B2 (en) 2001-06-07 2006-09-12 Emc Corporation Data storage system with integrated switching
US6952766B2 (en) 2001-03-15 2005-10-04 International Business Machines Corporation Automated node restart in clustered computer system
US7028228B1 (en) 2001-03-28 2006-04-11 The Shoregroup, Inc. Method and apparatus for identifying problems in computer networks
US6918051B2 (en) 2001-04-06 2005-07-12 International Business Machines Corporation Node shutdown in clustered computer system
US6820221B2 (en) 2001-04-13 2004-11-16 Hewlett-Packard Development Company, L.P. System and method for detecting process and network failures in a distributed system
US7231430B2 (en) 2001-04-20 2007-06-12 Egenera, Inc. Reconfigurable, virtual processing system, cluster, network and method
US6675264B2 (en) 2001-05-07 2004-01-06 International Business Machines Corporation Method and apparatus for improving write performance in a cluster-based file system
EP1402355B1 (en) * 2001-05-23 2018-08-29 Tekelec Global, Inc. Methods and systems for automatically configuring network monitoring system
US8010558B2 (en) 2001-06-05 2011-08-30 Silicon Graphics International Relocation of metadata server with outstanding DMAPI requests
US6950833B2 (en) 2001-06-05 2005-09-27 Silicon Graphics, Inc. Clustered filesystem
US6988193B2 (en) 2001-06-28 2006-01-17 International Business Machines Corporation System and method for creating a definition for a target device based on an architecture configuration of the target device at a boot server
US20030005039A1 (en) 2001-06-29 2003-01-02 International Business Machines Corporation End node partitioning using local identifiers
US8032625B2 (en) 2001-06-29 2011-10-04 International Business Machines Corporation Method and system for a network management framework with redundant failover methodology
GB0116310D0 (en) 2001-07-04 2001-08-29 New Transducers Ltd Contact sensitive device
US7065764B1 (en) 2001-07-20 2006-06-20 Netrendered, Inc. Dynamically allocated cluster system
US7016299B2 (en) 2001-07-27 2006-03-21 International Business Machines Corporation Network node failover using path rerouting by manager component or switch port remapping
EP1283464A1 (en) 2001-08-06 2003-02-12 Hewlett-Packard Company A boot process for a computer, a boot ROM and a computer having a boot ROM
US6922791B2 (en) 2001-08-09 2005-07-26 Dell Products L.P. Failover system and method for cluster environment
JP2003099412A (ja) 2001-09-21 2003-04-04 Hitachi Eng Co Ltd 超並列コンピュータ
US7027413B2 (en) * 2001-09-28 2006-04-11 Sun Microsystems, Inc. Discovery of nodes in an interconnection fabric
US7073053B1 (en) 2001-10-11 2006-07-04 Cisco Technology, Inc. Method and apparatus for a boot progression scheme for reliably initializing a system
GB2381713A (en) * 2001-11-01 2003-05-07 3Com Corp Failover mechanism involving blocking of access of a malfunctioning server and continuing monitoring to enable unblocking of access if server recovers
US6904482B2 (en) 2001-11-20 2005-06-07 Intel Corporation Common boot environment for a modular server system
EP1318453A1 (en) 2001-12-07 2003-06-11 Hewlett-Packard Company Scheduling system, method and apparatus for a cluster
CA2365729A1 (en) 2001-12-20 2003-06-20 Platform Computing (Barbados) Inc. Topology aware scheduling for a multiprocessor system
US7046687B1 (en) 2002-01-16 2006-05-16 Tau Networks Configurable virtual output queues in a scalable switching system
US6918063B2 (en) 2002-02-04 2005-07-12 International Business Machines Corporation System and method for fault tolerance in multi-node system
US7093004B2 (en) 2002-02-04 2006-08-15 Datasynapse, Inc. Using execution statistics to select tasks for redundant assignment in a distributed computing platform
US7640547B2 (en) 2002-02-08 2009-12-29 Jpmorgan Chase & Co. System and method for allocating computing resources of a distributed computing system
DE10214067B4 (de) 2002-03-28 2010-01-21 Advanced Micro Devices, Inc., Sunnyvale Integrierter Schaltkreischip mit Hochgeschwindigkeitsdatenschnittstelle sowie zugehöriges Southbridgebauelement und Verfahren
US7043539B1 (en) 2002-03-29 2006-05-09 Terraspring, Inc. Generating a description of a configuration for a virtual network system
US6996728B2 (en) * 2002-04-26 2006-02-07 Hewlett-Packard Development Company, L.P. Managing power consumption based on utilization statistics
US7139798B2 (en) 2002-05-17 2006-11-21 Groove Networks, Inc. Method and apparatus for connecting a secure peer-to-peer collaboration system to an external system
US7161904B2 (en) 2002-06-04 2007-01-09 Fortinet, Inc. System and method for hierarchical metering in a virtual router based network switch
JP3932994B2 (ja) * 2002-06-25 2007-06-20 株式会社日立製作所 サーバ引継システムおよびその方法
DE10234992A1 (de) 2002-07-31 2004-02-19 Advanced Micro Devices, Inc., Sunnyvale Retry-Mechanismus für blockierende Schnittstellen
US7765299B2 (en) 2002-09-16 2010-07-27 Hewlett-Packard Development Company, L.P. Dynamic adaptive server provisioning for blade architectures
US7127597B2 (en) 2002-09-24 2006-10-24 Novell, Inc. Mechanism for controlling boot decisions from a network policy directory based on client profile information
US20040210656A1 (en) 2003-04-16 2004-10-21 Silicon Graphics, Inc. Failsafe operation of storage area network
US7287179B2 (en) 2003-05-15 2007-10-23 International Business Machines Corporation Autonomic failover of grid-based services
US7007125B2 (en) 2003-06-24 2006-02-28 International Business Machines Corporation Pass through circuit for reduced memory latency in a multiprocessor system
US7379983B2 (en) 2003-06-25 2008-05-27 International Business Machines Corporation Merging scalable nodes into single-partition merged system using service processors of nodes
US7644153B2 (en) 2003-07-31 2010-01-05 Hewlett-Packard Development Company, L.P. Resource allocation management in interactive grid computing systems
WO2005036367A2 (en) 2003-10-08 2005-04-21 Unisys Corporation Virtual data center that allocates and manages system resources across multiple nodes
US7207039B2 (en) 2003-12-24 2007-04-17 Intel Corporation Secure booting and provisioning
US7685597B1 (en) 2004-02-20 2010-03-23 Sun Microsystems, Inc. System and method for management of characterized resources
US8484348B2 (en) * 2004-03-05 2013-07-09 Rockstar Consortium Us Lp Method and apparatus for facilitating fulfillment of web-service requests on a communication network
US20050256942A1 (en) * 2004-03-24 2005-11-17 Mccardle William M Cluster management system and method
US9178784B2 (en) 2004-04-15 2015-11-03 Raytheon Company System and method for cluster management based on HPC architecture
US20050235055A1 (en) * 2004-04-15 2005-10-20 Raytheon Company Graphical user interface for managing HPC clusters
US8335909B2 (en) 2004-04-15 2012-12-18 Raytheon Company Coupling processors to each other for high performance computing (HPC)
US7711977B2 (en) 2004-04-15 2010-05-04 Raytheon Company System and method for detecting and managing HPC node failure
US8190714B2 (en) 2004-04-15 2012-05-29 Raytheon Company System and method for computer cluster virtualization using dynamic boot images and virtual disk
US8336040B2 (en) 2004-04-15 2012-12-18 Raytheon Company System and method for topology-aware job scheduling and backfilling in an HPC environment
US20050256977A1 (en) * 2004-05-14 2005-11-17 Dehaemer Eric J Integrated circuit having processor and switch capabilities
US7475274B2 (en) 2004-11-17 2009-01-06 Raytheon Company Fault tolerance and recovery in a high-performance computing (HPC) system
US7433931B2 (en) 2004-11-17 2008-10-07 Raytheon Company Scheduling in a high-performance computing (HPC) system
US8244882B2 (en) 2004-11-17 2012-08-14 Raytheon Company On-demand instantiation in a high-performance computing (HPC) system
JP2007141305A (ja) 2005-11-16 2007-06-07 Hitachi Global Storage Technologies Netherlands Bv 磁気ディスク装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010000624A (ko) * 2000-10-10 2001-01-05 최은석 고성능 컴퓨터를 이용한 연산기능 제공방법

Also Published As

Publication number Publication date
KR20070085089A (ko) 2007-08-27
IL178610A (en) 2012-07-31
EP1662388A1 (en) 2006-05-31
US8244882B2 (en) 2012-08-14
CN1777107B (zh) 2013-07-17
WO2006055027A1 (en) 2006-05-26
JP2006146865A (ja) 2006-06-08
MY151525A (en) 2014-05-30
JP4451806B2 (ja) 2010-04-14
IL178610A0 (en) 2007-02-11
TWI285818B (en) 2007-08-21
CA2503781C (en) 2013-07-16
TW200619962A (en) 2006-06-16
US20060117208A1 (en) 2006-06-01
CN1777107A (zh) 2006-05-24
EP1662388B1 (en) 2018-01-10
CA2503781A1 (en) 2006-05-17

Similar Documents

Publication Publication Date Title
KR101159386B1 (ko) 고성능 연산(hpc) 시스템에서의 온디맨드 인스턴스화
KR101160721B1 (ko) 고성능 컴퓨팅(hpc) 시스템에서의 스케쥴링
US7475274B2 (en) Fault tolerance and recovery in a high-performance computing (HPC) system
KR101159377B1 (ko) 고성능 컴퓨팅 시스템 및 방법
US10621009B2 (en) System and method for topology-aware job scheduling and backfilling in an HPC environment
JP4986844B2 (ja) Hpcノード障害の検出及び管理を行うシステム及び方法
EP3314544A1 (en) Deep neural network partitioning on servers

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150519

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170522

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 8