KR20210096259A - 컴퓨팅 리소스 할당 - Google Patents

컴퓨팅 리소스 할당 Download PDF

Info

Publication number
KR20210096259A
KR20210096259A KR1020217021170A KR20217021170A KR20210096259A KR 20210096259 A KR20210096259 A KR 20210096259A KR 1020217021170 A KR1020217021170 A KR 1020217021170A KR 20217021170 A KR20217021170 A KR 20217021170A KR 20210096259 A KR20210096259 A KR 20210096259A
Authority
KR
South Korea
Prior art keywords
resources
node
resource
program
computing
Prior art date
Application number
KR1020217021170A
Other languages
English (en)
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
Priority claimed from GBGB1820024.6A external-priority patent/GB201820024D0/en
Application filed by 헤이디언 슈퍼컴퓨팅 엘티디 filed Critical 헤이디언 슈퍼컴퓨팅 엘티디
Publication of KR20210096259A publication Critical patent/KR20210096259A/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
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)
  • Stored Programmes (AREA)
  • Multi Processors (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

컴퓨팅 리소스를 할당하는 방법이 제공된다. 방법은 제1 세트의 컴퓨팅 리소스를 형성하는 제1 제한된 양의 컴퓨팅 리소스를 할당하는 단계; 컴퓨터 프로그램의 제1 프로세스에 상기 제1 세트의 컴퓨팅 리소스를 배타적으로 할당하는 단계; 추가 컴퓨팅 리소스에 대한 요청을 상기 제1 프로세스로부터 수신하는 단계; 상기 제1 프로세스로부터의 상기 요청에 응답하여, 제2 세트의 컴퓨팅 리소스를 형성하는 제2 제한된 양의 컴퓨팅 리소스를 할당하는 단계; 및 상기 제1 프로세스로부터 제2 프로세스를 스폰(spawn)하고 상기 제2 세트의 컴퓨팅 리소스를 상기 제2 프로세스에 배타적으로 할당하는 단계를 포함한다. 여기서 이 방법은 제1 프로세스, 제2 프로세스 또는 이 방법에 따라 생성된 임의의 다른 프로세스에 의해 무기한 반복될 수 있다. 이 방법에 따르면, 프로세스는 해당 프로세스(즉, 자체)에 할당된 컴퓨팅 리소스의 양을 제어하지 않고 대신 하위 프로세스에 할당된 컴퓨팅 리소스의 양을 제어하게 된다.

Description

컴퓨팅 리소스 할당
본 개시는 컴퓨팅 시스템 및 컴퓨팅 시스템에서 프로세스들에 리소스들을 할당하는 방법들에 관한 것이다.
분산형 컴퓨팅 시스템들(Distributed computing systems)은 네트워킹된 처리 장치(Networked processing devices)들의 그룹에 걸쳐 컴퓨팅 워크로드(computing workload)를 분산시킴으로써, 큰 및/또는 복잡한 컴퓨팅 문제들을 해결(tackle)하는데 사용될 수 있다. 이러한 시스템들은 또한 클라우드 서비스(cloud services)를 제공하는데 더욱더 많이 사용되고 있다. 분산형 컴퓨팅 시스템들은, 그들이 단일 컴퓨팅 장치 상에서 가능한 것보다 더 큰-스케일 문제들(예를 들어, 더 큰, 더 복잡한)에 대한 솔루션들을 허용하기 때문에 흥미롭다. 그러나, 분산형 컴퓨팅 시스템은 종종 단일-장치 솔루션보다 구축 및 유지가 훨씬 더 복잡하다.
분산형 컴퓨팅(distributed computing)에 대한 다수의 기존 접근법들이 있다. 분산 컴퓨팅에 대한 최근의 접근법은 Docker, Kubernetes, Spark, Akka, 및 TidalScale 과 같은 시스템들을 포함한다. 이러한 접근법들 각각은 개별 어플리케이션에 의해 이용되는 네트워킹된 컴퓨팅 장치들의 세트를 관리하는 방법을 제공한다. 이전의 모든 분산 컴퓨팅 시스템에서 공통점 중 하나는 튜링-컴플리트(Turing-complete)인 프로세스 모델을 제공한다는 것이다. 즉, 근본적으로 프로그램들은 각각의 프로세스가 개별적인 컴퓨팅 작업을 완료하기 위해 무한 양의 메모리(infinite amount of memory)에 액세스한다는 가정하에 설계된다. 이러한 시스템은 부가적인 리소스 온-디맨드(on-demand)를 요청하기 위한 실행 프로세스(running process)를 위한 설비를 제공하며, 따라서 시간 경과에 따른 프로세스에 의해 특징화 되는 리소스들의 세트를 제공한다. 이러한 시스템에서, 프로세스들은 그들의 컴퓨팅 작업들 또는 요구들로서 추가적인 리소스들(또는 더 이상 필요하지 않은 리소스들)을 요청하도록 구성된다. 표면적으로는 개발자가 프로그램의 리소스 사용량을 미리 계획할 필요가 없지만 현재 할당이 충분하지 않은 경우 프로그램의 다양한 프로세스에 더 많은 것을 요청하도록 지시할 수 있으므로 어플리케이션 개발이 더 간단해진다. 그러나 일반적으로 많은 프로세스가 주어진 노드에서 실행되므로 사용자 프로세스에서 요청한 총 리소스의 합계는 결국 해당 노드의 리소스를 초과할 수 있다. 이런 일이 발생하면 프로그램은 스스로 진행할 수 없거나 충돌할 수도 있다.
Docker는 컨테이너(container)로 불리는 소프트웨어 패키지를 실행한다. 컨테이너는 서로로부터 분리되고, 그들 자신의 툴, 라이브러리, 및 구성 파일을 포함한다. 격리(isolation)는 게스트 운영 체제없이 커널 수준에서 수행되며 가상 머신 프로비저닝(provisioning)의 경우와 마찬가지다. Docker Swarm 과 같은 스케줄링 및 클러스터링 기능들(clustering functionalities)은 분산형 컴퓨팅을 위한 Docker 컨테이너의 사용을 용이하게 한다. 기본적으로 컨테이너에는 리소스 제약이 없으며 호스트의 커널이 허용하는 한 메모리와 같은 주어진 리소스를 많이 사용할 수 있다. Docker는 malloc() 와 같은 메모리 할당 기능들(memory allocation functions)을 지원하며, 여기서 실행되는 프로세스는 요구에 따라 추가적인 리소스들을 획득할 수 있다. 그러나, 프로세스가 리소스들을 과사용하기 시작할 때, 호스트 커널은 메모리를 프리-업(free up)하기 위해 종료하기 시작한다. 따라서, Docker는 시스템 충돌(system crash)에 취약하다. 모든 프로세스는 키(key) 또는 언더피닝(underpinning)프로세스를 포함하여 종료(termination)될 수 있고, 이는 시스템 충돌(system crash)을 초래할 수 있다. 그럼에도 불구하고, 어플리케이션 프로세스가 종료되면 하나 이상의 Docker 인스턴스에서 실행중인 프로세스가 속한 특정 어플리케이션 (분산 여부에 관계없이)이 중단될 수 있다.
쿠버네티스(Kubernetes)는 Docker와 같은 컨테이너화된 어플리케이션의 배치, 스케일링 및 관리를 자동화하기 위한 컨테이너-조정 시스템(container-orchestration system)의 예이다. 쿠버네티스(Kubernetes)는 여러 컨테이너가 포함된 포드를 프로비저닝하여 작동한다. 포드 내의 컨테이너는 동일한 호스트 서버 상에 있도록 보장되며, 메모리와 같은 리소스를 공유하도록 허용된다. 각 포드에 대한 메모리 제약의 설정은 선택적이다. 하나의 서버에 다수의 포드를 제공하는 것이 가능하다.따라서, 쿠버네티스(kubernetes)는 Docker와 같은 컨테이너화 된 어플리케이션과 동일한 단점이 있다. 또한, 포드의 컨테이너 사이의 메모리의 공유는 결점(drawbacks)을 갖는다. 예를 들어, 리소스가 부족한 컨테이너(resource-hungry container)는 포드의 다른 컨테이너에 리소스가 부족하게 할 수 있다.
Hadoop, Spark 및 Akka와 같은 미들웨어 접근 방식(Middleware approaches)은 분산 컴퓨팅을 위한 고급 API (application programming interfaces)를 제공한다. 이러한 시스템을 통해 사용자는 컴퓨터 클러스터를 프로비저닝하고 일부 프로그래밍 모델을 통해 해당 클러스터에 컴퓨팅 문제를 분산할 수 있다. 하둡(Hadoop)은 HDFS (Hadoop Distributed File System) 파일 시스템에 저장된 데이터 전반에 걸쳐 맵/축소 추상화(map/reduce abstraction)를 제공한다. Spark는 RDD (Resilient Distributed Dataset) 및 Dataframe과 같은 향상된 데이터 구조를 통해 그룹별, 집합 차이 및 다양한 조인 작업과 같은 맵 및 축소를 넘어서는 추가 작업을 통해 하둡(Hadoop) 모델을 개선한다. Akka는 액터(actor)가 직접 주소를 지정하여 다른 액터에게 메시지를 보낼 수 있도록 위치 투명성(location transparency)을 갖춘 액터 모델을 구현한다. 액터는 Akka 클러스터의 여러 서버에 분산되어 있을 수 있다. Hadoop, Spark 및 Akka는 메모리를 공유하고 malloc() 과 같은 메모리 할당 기능을 사용할 수 있는 기존 시스템에서 실행되므로 기본 시스템과 동일한 문제가 발생한다.
TidalScale은 소프트웨어-정의 서버(software-defined servers)가 여러 하드웨어 서버에서 제공하는 리소스를 풀링하고, 사용자에게 단일 가상 머신(single virtual machine)을 제공하는 개념을 제공한다. 따라서, TidalScale 및 유사한 접근 방식은 많은 서버가 하나의 대형 서버로 나타나는 역-가상화 접근 방식(reverse-virtualisation approach)을 사용한다. 메모리와 같은 하드웨어 서버에서 제공하는 리소스는 시스템에서 실행되는 프로세스간에 공유되며 종종 동적으로 할당된다. 이는 프로세스가 예상할 때 메모리를 항상 사용할 수 있는 것은 아니므로 프로세스가 종료될 수 있기 때문에 문제가 된다. 또한, TidalScale은 잠금을 사용하는 멀티-스레딩 접근 방식(multi-threading approach)을 통해 프로그램이 확장되는 분산 셰어-메모리 모델(shared-memory model)을 사용하기 때문에 어플리케이션 확장이 제대로 이루어지지 않는다. 잠금 경합(Lock contention)은 시간이 지남에 따라 확장되어 디버그하기 어려운 극적인 성능 병목 현상(performance bottlenecks)과 안정성 문제를 초래한다.
이 요약은 아래의 자세한 설명에서 추가로 설명되는 개념 선택을 소개하기 위해 제공된다. 이 요약은 청구 범위의 핵심 기능이나 필수 기능을 식별하기 위한 것이 아니며 청구 범위를 제한하는 데 사용되지도 않는다.
리소스 할당을 컴퓨팅하는 방법(a method of computing resource allocation)이 제공된다. 방법은 제1 세트의 컴퓨팅 리소스(first set of computing resources)를 형성하는 제1 제한된 양의 컴퓨팅 리소스(first bounded amount of computing resources)를 할당하는 단계; 상기 제1 세트의 컴퓨팅 리소스를 컴퓨터 프로그램의 제1 프로세스에 배타적(exclusively)으로 할당(allocate)하는 단계; 추가 컴퓨팅 리소스(additional computing resources)에 대한 요청을 상기 제1 프로세스로부터 수신하는 단계; 상기 제1 프로세스로부터의 상기 요청에 응답하여, 제2 세트의 컴퓨팅 리소스를 형성하는 제2 제한된 양의 컴퓨팅 리소스를 할당하는 단계; 및 상기 제1 프로세스로부터 제2 프로세스를 스폰(spawn)하고 상기 제2 세트의 컴퓨팅 리소스를 상기 제2 프로세스에 배타적으로 할당하는 단계를 포함한다.
이 방법은 제1 프로세스, 제2 프로세스 및/또는 이 방법에 따라 생성된 다른 프로세스에 의해 무한 반복될 수 있다. 이러한 방식으로 임의의 프로세스 트리(arbitrary tree of processes)가 형성될 수 있다.
이 방법을 따르면 프로세스는 해당 프로세스(즉, 자체)에 할당된 컴퓨팅 리소스의 양을 제어하지 않고 대신 하위 프로세스(child processes)에 할당된 컴퓨팅 리소스의 양을 제어한다.
일부 예에서, 제1 세트의 컴퓨팅 리소스 및 제2 세트의 컴퓨팅 리소스는 컴퓨팅 시스템의 제1 노드에 의해 제공된다.
일부 예에서, 컴퓨팅 리소스의 제1 세트 및 제2 세트는 컴퓨팅 시스템의 제1 노드 및 제2 노드에 의해 각각 제공된다.
일부 예에서, 제1 세트의 컴퓨팅 리소스는 제1 제한된 양의 컴퓨팅 리소스를 제1 프로세스에 보장하기 위해 제1 제한된 양의 물리적 리소스(physical resources)에 의해 지원(back)된다. 일부 예에서, 제2 세트의 컴퓨팅 리소스는 제2 제한된 양의 물리적 리소스에 의해 제2 제한된 양의 컴퓨팅 리소스를 제2 프로세스에 보장한다.
일부 예에서, 제2 세트의 컴퓨팅 리소스는 제1 프로세스로부터 격리(isolate)된다.
일부 예에서, 제1 프로세스로부터의 추가 컴퓨팅 리소스에 대한 요청은 제2 제한된 양의 컴퓨팅 리소스의(에 대한) 지시(indication)를 포함한다.
일부 예에서, 방법은 제2 프로세스에 대한 참조를 가진(with a reference to) 제1 프로세스를 제공하는 단계를 더 포함한다.
일부 예에서, 방법은 제1 프로세스 및 제2 프로세스 사이의 통신을 위한 채널을 할당하는 단계를 더 포함한다.
일부 예에서, 제1 제한된 양 및 제2 제한된 양은 동일하다.
일부 예에서, 제2 제한된 양의 컴퓨팅 리소스를 할당하는 것은, 제2 세트의 컴퓨팅 리소스를 제공하기 위해, 노드의 프로비저닝(provisioning)을 개시(initiating)하는 것을 포함한다.
컴퓨팅 리소스를 획득하는 방법에 있어서, 컴퓨터 프로그램의 제1 프로세스에 의해, 요청할 컴퓨팅 리소스의 양을 결정하는 단계; 및 상기 결정에 응답하여, 상기 제1 프로세스로부터 제2 프로세스를 스폰(spawn)하도록 요청하는 단계를 포함하고, 상기 요청은 상기 제2 프로세스에 할당될 상기 컴퓨팅 리소스의 양을 포함하는, 방법이 제공된다.
일부 예에서, 방법은 제1 프로세스에 의해 제2 프로세스에 대한 참조(reference)를 수신하는 단계를 더 포함한다.
일부 예에서, 방법은 제2 프로세스에 대한 참조를 사용하여 생성된 제1 프로세스에서 제2 프로세스로의 채널을 통해 제1 프로세스에 의해 제2 프로세스와 통신하는 단계를 더 포함한다.
일부 예에서, 방법은 상기 제1 프로세스에 의해 요청할 제3 양의 컴퓨팅 리소스(third amount of computing resources to request)를 결정하는 단계; 상기 결정에 응답하여, 상기 제1 프로세스로부터 제3 프로세스를 스폰하도록 요청하는 단계, 상기 요청은 상기 제3 프로세스에 할당될 상기 컴퓨팅 리소스의 양을 포함하고; 상기 제1 프로세스가 상기 제3 프로세스에 대한 참조를 수신하는 단계; 상기 제1 프로세스에 의해 상기 제2 프로세스에 채널을 통해 상기 제3 프로세스에 대한 참조를 상기 제1 프로세스에서 상기 제2 프로세스로 전송하는 단계; 및 상기 제1 프로세스에 의해 전송된 상기 제3 프로세스에 대한 상기 참조를 사용하여 생성된 상기 제2 프로세스로부터 상기 제3 프로세스로의 채널을 통해 상기 제2 프로세스에 의해 상기 제3 프로세스와 통신하는 단계를 포함한다.
일부 예에서, 채널은 프로세스 간 통신, IPC, 채널이다. 일부 예에서 채널은 네트워크 채널(network channel)이다.
일부 예에서, 제1 프로세스로부터의 요청은 컴퓨팅 리소스가 제1 노드에 의해 제공되어야 함을 나타내며, 제1 노드는 제1 프로세스를 실행하는데 사용되는 처리 리소스(processing resources)를 제공한다.
일부 예에서, 컴퓨팅 리소스가 제1 노드에 의해 제공되어야 한다는 것을 나타내는 제1 프로세스로부터의 요청에 응답하여, 컴퓨팅 리소스의 제2 세트가 제1 노드로부터 할당된다.
일부 예에서, 컴퓨팅 리소스는 메모리 리소스(memory resources)를 포함한다. 일부 예에서, 컴퓨팅 리소스는 처리 리소스(processing resources)를 포함한다. 일부 예에서, 컴퓨팅 리소스는 통신 리소스(communication resources)를 포함한다. 일부 예에서, 컴퓨팅 리소스는 스토리지 리소스(storage resources)를 포함한다.
하나 이상의 컴퓨터에 의해 실행될 때 하나 이상의 컴퓨터로 하여금 여기에 설명된 임의의 동작을 수행하게 하는 명령어들을 포함하는 컴퓨터 프로그램이 제공된다.  또한 컴퓨터 프로그램을 포함하는 컴퓨터-판독 가능 매체가 제공된다.  또한 컴퓨터 프로그램을 전달하는 데이터 캐리어 신호(data carrier signal)가 제공된다.
여기에 설명된 동작을 수행하도록 구성된 컴퓨터 시스템이 제공된다.
일부 예에서, 컴퓨터 시스템은 컴퓨터-판독 가능 매체 및 그 위에 저장된 컴퓨터 프로그램을 실행하도록 구성된 하나 이상의 프로세서를 포함한다.  
일부 예에서, 컴퓨터 시스템은 여기에 설명된 동작 중 임의의 것을 수행하도록 구성된 회로를 포함한다.
복수의 프로세스를 포함하는 프로그램을 실행하기 위한 컴퓨팅 시스템에 있어, 상기 시스템은 각각 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 기여하는 복수의 상호 연결된 노드, 상기 풀에서 상기 프로그램의 각 프로세스로 할당하도록 구성되고, 이산 처리 리소스, 및 미리 결정된 유한 크기의 이산 메모리 리소스, 및 선택적으로, 다른 이산 리소스 요청(예. 디스크, 네트워크 대역폭, GPU) 포함하며 상기 이산 처리 리소스 및 상기 이산 메모리 리소스 및 다른 이산 리소스는 동일한 노드에 있고, 상기 시스템은 상기 프로그램의 다른 프로세스에 다른 노드에 있는 리소스를 할당하도록 동작할 수 있는, 시스템이 제공된다.
컴퓨팅 시스템에서 실행되는 프로그램에 리소스를 할당하는 방법에 있어, 상기 시스템은 각각 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 기여하는 복수의 상호 연결된 노드를 포함하고, 상기 프로그램은 복수의 프로세스로 구성되며, 방법은 상기 이산 자원의 풀로부터 상기 프로그램의 제1 프로세스, 제1 이산 처리 리소스 및 제1 미리 결정된 유한 크기의 제1 이산 메모리 리소스에 할당하는 단계; 이산 리소스 풀로부터 프로그램의 제2 프로세스, 제2 이산 처리 리소스 및 제2 미리 결정된 유한 크기의 제2 이산 메모리 리소스를 할당하는 단계; 선택적으로, 제1 프로세스와 제2 프로세스 사이의 통신을 가능하게 하는 데 사용되는 제2 프로세스에 대한 참조를 제1 프로세스에 전송하는 단계를 포함하고, 상기 제1 이산 처리 리소스 및 상기 제1 이산 메모리 리소스는 제1 노드에 있고, 상기 제2 이산 처리 리소스 및 상기 제2 이산 메모리 리소스는 상기 복수의 상호 연결된 노드 중 제2 노드에 있는, 방법이 제공된다. 이 방법은 원래 프로그램의 임의의 프로세스에 의해 반복될 수 있으며 프로세스 참조는 통신 채널을 통해 임의의 프로세스에 의해 전송될 수 있으므로 임의의 프로세스 통신 토폴로지를 생성할 수 있다.
도 1은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템을 나타내는 개략도이다.
도 2는 여기에 설명된 원리에 따른 분산 시스템의 논리적 구조를 나타내는 개략도이다
도 3은 여기에 설명된 원리에 따라 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다.
도 4는 종래의 방식으로 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다.
도 5는 이산 추상 기계를 사용하여 프로그램을 실행하는 방법을 보여주는 흐름도이다.
도 6은 이산 추상 기계에 의해 실행되는 프로그램에 추가 리소스를 할당하는 방법을 보여주는 흐름도이다.
도 7은 이산 추상 기계에 의해 실행되는 프로그램에 추가 리소스를 할당하는 방법을 보여주는 흐름도이다.
다음 설명은 당업자가 본 발명을 만들고 사용할 수 있도록 예로서 제시된다. 본 발명은 여기에 설명된 실시 예에 제한되지 않으며 개시된 실시 예에 대한 다양한 변형이 당업자에게 명백 할 것이다. 실시 예는 단지 예로서 설명된다.
도 1은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템 (100)을 도시하는 개략도이다. 시스템 (100)은 복수의 노드 (101)를 포함한다. 각 노드 (101)는 물리적 서버, 가상화 된 클라우드 서버 인스턴스, 사물 인터넷 (IoT) 장치 또는 랩톱 컴퓨터와 같은 임의의 종류의 컴퓨팅 장치 일 수 있다. 하나 이상의 노드가 데이터 센터의 서버에 제공될 수 있다. 컴퓨팅 시스템의 노드 (101)는 예를 들어 서버 또는 다른 컴퓨터 시스템; 또는 블레이드 인클로저(blade enclosure)의 블레이드 서버; 또는 시스템의 관점에서 볼 때 기본적으로 물리적 서버로 작동하는 가상 머신 중 하나 이상을 포함할 수 있다. 노드는 클라우드 기반 플랫폼을 통해 사용할 수 있다. 컴퓨팅 시스템은 임의의 수의 노드를 포함할 수 있다. 일부 예에서, 컴퓨팅 시스템은 노드의 적어도 일부가 네트워크 원격 엔드 포인트(remote endpoints of a network)사이의 데이터 링크에 의해 분리되는 분산 컴퓨팅 시스템 일 수 있다.
각 노드 (101)는 프로세서 (103), 메모리 (104) 및 하나 이상의 입력 및 출력 (I/O)인터페이스 (105)와 같은 다수의 하드웨어 (106) 장치를 포함한다. 각각의 노드 (101)는 본 명세서에 설명된 방식으로 프로세스가 실행될 수 있는 소프트웨어 환경 (107)에 하드웨어의 추상화를 제공하기위한 하드웨어 관리자(hardware manager)(108)를 포함한다. 노드 (101a)에서, 하드웨어 관리자 (108)는 소프트웨어 환경 (107)에 제공된다. 예를 들어, 하드웨어 관리자는 로컬 커널(local kernel) 일 수 있다. 노드 (101b)에서, 하드웨어 관리자 (108)는 하드웨어 (106)에 제공된다. 보다 일반적으로, 각 노드의 하드웨어 관리자는 프로그래밍 가능한 프로세서(programmable processor)에서, 고정-기능 프로세서(fixed-function processor)에서, 또는 가상화된 인스턴스(virtualised instance)를 사용하는 경우 하이퍼 바이저(hypervisor) 또는 호스트 운영 시스템(host operating system)에서 하나 이상을 포함하여 하드웨어와 소프트웨어의 임의의 조합으로 제공될 수 있다.
각각의 노드 (101)는 임의의 종류의 물리적 및/또는 논리적 아키텍처를 가질 수 있는 컴퓨팅 장치이다. 다른 노드는 다른 물리적 및/또는 논리적 아키텍처를 가질 수 있다. 예를 들어 일부 노드는 Intel x64 머신이고 다른 노드는 ARM 머신일 수 있다. 하드웨어 관리자 (108)는 기본 하드웨어에 관계없이 프로그램의 프로세스가 컴퓨팅 시스템 (100)의 임의의 노드에서 실행될 수 있도록 기본 하드웨어의 공통 논리적 추상화(common logical abstraction)를 제공하도록 배열된다. 서로 다른 노드는 해당 노드의 물리적 아키텍처에 적합한 하드웨어 관리자의 서로 다른 구성을 가질 수 있다 (예를 들어, 서로 다른 아키텍처를 가진 노드에는 로컬 프로세서의 명령 집합, I/O 인터페이스의 칩셋 등에 따라 서로 다른 로우 레벨 드라이버(low-level drivers )가 필요할 수 있음.). 예를 들어, 주어진 노드의 하드웨어 관리자는 시스템의 각 노드에서 공통 소프트웨어 환경을 제공하기 위해 하드웨어가 다른 노드가 다른 커널 구성을 갖는 해당 노드의 하드웨어에 적합한 Linux 커널일 수 있다.
컴퓨팅 시스템의 노드 (101)는 네트워크 (102)를 통해 서로 통신할 수 있다. 네트워크 (102)는 하나 이상의 상이한 유형의 상호 접속을 포함할 수 있다. 네트워크에는 원격 노드 간 네트워크 데이터 링크(예: 서로 다른 데이터 센터에 있는 노드)와 로컬 노드 간 로컬 데이터 링크(예: 동일한 데이터 센터에 있는 노드)가 모두 포함될 수 있다. 예를 들어, 일부 노드는 인터넷, LAN (Local Area Network) 또는 WAN (Wide Area Network)과 같은 데이터 네트워크를 통해 연결될 수 있다. 로컬 데이터 링크는 데이터 네트워크를 통과하지 않는 두 노드 간의 연결로 간주될 수 있다. 네트워크의 특정 세부 사항은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템에 중요하지 않으며, 네트워크는 단순히 서로 다른 노드가 서로 통신할 수 있는 통신 매체를 제공한다. 임의의 두 노드 사이의 경로는 하나 이상의 서로 다른 유형의 상호 연결을 포함할 수 있다.
도 2는 복수의 노드를 포함하고 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템 (100)과 같은 컴퓨팅 시스템의 논리 아키텍처를 나타내는 개략도이다. 도 2에서, 컴퓨팅 시스템의 개별 노드 (예를 들어, 컴퓨팅 노드 (101))는 도시되지 않았다. 도 2는 시스템 (100)의 노드 (101)에 의해 집합적으로 제공되는 리소스의 추상 단위의 관점에서 컴퓨팅 시스템을 도시한다. 구체적으로, 물리적 노드 (101)는 시스템 (100)에 제공하는 리소스 (예를 들어, PRU (230), MRU (231), 데이터 스토리지 (232), 네트워크 리소스 (233))와 관련하여 이 다이어그램에서 표현된다. 이러한 이산 리소스가 이산 컴퓨트 노드 (101)에서 물리적으로 제공되지만, 시스템의 논리적 동작에 관한 한, 노드 경계는 중요도가 낮다. 여기에 설명된 방법은 어플리케이션 개발자가 물리적 노드의 제약을 무시할 수 있도록 프로그램을 설계할 수 있도록 한다.
도 2는 스케줄러 (또는 '관리자' 또는 '리소스 관리자') (205), (컴퓨팅) 리소스 풀 (225) 및 한 쌍의 실행 컨텍스트(execution context)(222)를 포함하는 이산 추상 기계(221) (DAM)를 도시한다. 이산 추상 기계(Discrete Abstract Machine)는 복수의 프로그램을 실행하도록 작동할 수 있는 컴퓨팅 시스템이다. DAM은 DAM에서 실행되는 각 프로그램에 대한 실행 컨텍스트를 포함할 수 있다. 즉, 각 프로그램은 자체 실행 컨텍스트에서 실행되는 것으로 간주될 수 있다. 시스템의 노드 (예를 들어, 컴퓨팅 시스템 (100))는 각각 리소스를 리소스 풀 (225)에 기여하고 실행 컨텍스트를 제공하며 스케줄러 (205)를 지원한다. 따라서 DAM은 포함하는 복수의 노드에 의해 집합적으로 제공된다. 리소스 풀 (225)은 아래에 자세히 설명되어 있는 처리 리소스 유닛(PRU) (230) (또는 '유한 추상 머신', 또는 단순히 '처리 리소스') 및 메모리 리소스 유닛(MRU) (231) (또는 '컴퓨팅 리소스 유닛', 또는 단순히 '메모리 리소스')을 포함한다. 리소스 풀 (225)은 데이터 스토리지 (232) (또는 '스토리지 리소스') 및/또는 네트워크 리소스 (233) (또는 '통신 리소스')와 같은 임의의 다른 리소스를 포함할 수 있다. 컴퓨팅 시스템은 복수의 프로그램들을 실행하도록 구성되며, 각 프로그램은 하나 이상의 프로세스 (228)를 포함한다. 주어진 프로그램에 대한 실행 컨텍스트는 해당 프로그램의 PRU를 지원하는 시스템의 노드에서 제공된 복수의 소프트웨어 환경 (107)을 포함한다.
프로세스 (228)는 프로그램의 임의의 다른 실행 가능한 요소와 독립적으로 실행될 수 있는 프로그램의 임의의 실행 가능한 요소이다. 프로그램의 각 프로세스는 동일하거나 다른 작업을 수행할 수 있다. 일반적으로 프로그램은 복수의 다른 유형의 프로세스로 구성된다. 예를 들어, 기상 모델링 프로그램(weather modelling program)은 들어오는 데이터 세트를 처리하는 제1 유형의 제1 프로세스 세트(예: 대기압 데이터, 구름 덮개의 위성 이미지, 강우량 측정 등)와 미래 기상 조건의 예측을 제공하기 위해 미래로 모델을 추정하는 제2 프로세스 세트로 구성되도록 작성될 수 있다. 제1 프로세스 세트 및 제2 프로세스 세트에 의해 수행되는 데이터 처리를 관리하기 위해 다른 프로세스가 제공될 수 있다.
스케줄러는 여기에 설명된 방식으로 컴퓨터 시스템의 프로세스에 PRU를 할당하도록 구성된다. 리소스 풀 (225)은 (아직) 어떤 프로세스에도 할당되지 않은 시스템에 커밋된 노드의 리소스를 나타낼 수 있다. 컴퓨팅 시스템은 DAM에 리소스를 제공하기 위해 이용 가능하지만 아직 DAM에 통합되지 않은 노드인 복수의 커밋되지 않은(uncommitted) 노드 (220)를 포함할 수 있다. 커밋되지 않은 노드는 DAM에서 실행되는 프로그램에 사용할 수 있는 리소스 풀 (225)을 확장하기 위해 DAM에 통합될 수 있는 잠재 리소스(latent resources)를 나타낸다. 예를 들어, 현재의 클라우드 컴퓨팅 플랫폼은 온-디맨드 방식(on-demand manner)으로 서버 인스턴스를 제공하고, 클라우드 환경에서 실행될 때 스케줄러 (205)는 필요에 따라 추가 가상 서버를 요청할 수 있다.
각각의 PRU (230)는 이산 논리 처리 리소스(logical processing resource)이다. 처리 리소스는 임의의 적절한 방식으로, 예를 들어 단위 시간당 특정 수의 작업을 수행할 수 있는 능력, 논리적 또는 물리적 처리 유닛의 수 (예: 전체 또는 부분 프로세서/프로세서 코어 또는 가상화된 등가물), 또는 일부 정의된 메트릭에 따른 처리 능력의 단위 수로 정량화될 수 있다. PRU는 리소스 풀 (225)에서 이용 가능한 처리 리소스의 이산 논리 부분(discrete logical portion)을 나타낸다. 주어진 PRU의 처리 리소스는 하나 이상의 PRU를 제공하는 컴퓨팅 시스템의 각 노드와 함께 특정 노드에 로컬이다. 일부 예에서, PRU는 노드의 (물리적) 처리 코어의 논리적 표현이다.
프로세스에 사용할 수 있는 처리 리소스는 프로세스가 임의의 양의 처리 리소스를 받을 수 없다는 점에서 이산적이다. 프로세스는 단일 처리 리소스 단위 (PRU) 만 수신할 수 있다. 프로세스는 PRU가 나타내는 처리 리소스의 양을 수정할 수 없는 상태에서 처리 리소스의 단위로서 PRU를 수신할 수 있다. 일부 예에서, 상이한 프로세스는 상이한 크기의 PRU를 지정할 수 있다.
PRU는 중앙 처리 장치 (CPU), 그래픽 처리 장치 (GPU), 벡터 프로세서, FPGA (Field-Programmable Gate Array), 또는 텐서 처리 장치 (TPU) 중 하나 이상에서 제공하는 처리 리소스와 같은 모든 종류의 기본 처리 리소스를 나타낼 수 있다.
주어진 PRU가 나타내는 처리 리소스는 해당 PRU의 소유권이 할당된 프로세스에만 해당되며, 이러한 처리 리소스는 다른 프로세스에서 사용할 수 없다. 주어진 노드는 노드의 이용 가능한 처리 리소스의 1/N을 나타내는 각각의 PRU와 함께 풀 (225)에 다수의 PRU, N을 제공할 수 있다. 노드의 사용 가능한 처리 리소스는 하드웨어 관리자의 처리 요구 사항을 고려한 후 남은 처리 리소스일 수 있다.
노드의 하나의 PRU에서 프로세스의 실행은 해당 노드의 아키텍처에 적절한 임의의 적절한 방식으로 동일한 노드의 다른 PRU에서 다른 프로세스의 실행으로부터 격리(isolate)될 수 있다. 예를 들어, 하나 이상의 PRU가 프로세서 또는 프로세서 코어에 제공될 수 있는 경우, 프로세서의 명령어 세트는 보호 모드 또는 기타 격리 메커니즘의 사용을 통해 이러한 격리를 허용할 수 있다. 노드의 프로세스 격리는 해당 노드의 로컬 아키텍처에 따라 해당 노드의 하드웨어 관리자에 의해 관리될 수 있다. 일부 예들에서, 프로세스는 (예를 들어, 뮤텍스(mutex) 또는 세마포어 동시성 의미 체계(semaphore concurrency semantics)를 자발적으로 따름으로써) 그들 자신의 격리를 제공하기 위해 협력적으로 행동하고, 그러한 메커니즘은 더 낮은 수준 (예를 들어, 하드웨어 또는 운영 체제 수준에서)에서 요구되지 않는다.
각각의 MRU (231)는 이산 메모리 리소스이다. 메모리 리소스는 일반적으로 바이트 단위로 표현되지만, 일반적으로, 메모리 리소스는 적절한 메트릭에 따라 표현될 수도 있다. MRU는 리소스 풀 (225)에서 이용 가능한 메모리의 논리적 부분이다. 주어진 MRU의 메모리 리소스는 특정 노드에 로컬이며 컴퓨팅 시스템의 각 노드는 하나 이상의 MRU를 제공한다. 일부 예에서, MRU는 (물리적) 메모리의 연속 블록(contiguous block of (physical) memory)의 논리적 표현이다.
MRU는 프로세스에서 사용할 수 있는 메모리의 경계가 있는 분리된 부분을 나타낸다. 프로세스에 사용할 수 있는 메모리 리소스는 프로세스가 임의의 양의 메모리 리소스를 받을 수 없다는 점에서 이산적이다. 프로세스는 이산 장치 (MRU)로만 메모리 리소스를 수신할 수 있다. 프로세스는 MRU가 나타내는 메모리 리소스의 크기를 수정할 수 없는 메모리 리소스의 단위로서 MRU를 수신할 수 있다. 프로세스는 하나 이상의 MRU를 수신할 수 있다. 일부 예에서, 상이한 프로세스는 상이한 크기의 MRU를 지정할 수 있다.
각 MRU는 할당된 프로세스에서만 사용할 수 있으며 다른 프로세스에서는 사용할 수 없다. 즉, MRU가 나타내는 메모리 리소스는 다른 프로세스의 MRU가 나타내는 메모리 리소스과 공유되지 않는다. 이러한 방식으로, 프로세스는 서로 메모리를 공유하는 것이 금지될 수 있다. MRU의 크기는 시스템에서 새 하위 프로세스가 생성될(또는 '스폰됨', '시작됨'또는 '인스턴스화 됨') 때 상위 프로세스에 의해, 예를 들어 프로세스 실행 요청에 대한 응답으로서 지정될 수 있다. 일부 예에서, 프로세스는 다른 프로세스의 실행을 유발할 수 있다. 각 프로세스는 다른 MRU 크기를 지정할 수 있다.
MRU는 DAM에서 실행되는 주어진 프로세스에 사용할 수 있는 메모리 리소스의 제한된(bounded) (또는 '유한한(finite)') 크기를 나타낸다. 메모리 리소스가 제한되어 있기 때문에 프로세스가 할당된 메모리 리소스를 초과할 수 없으므로 할당된 메모리 리소스가 보장될 수 있다. 반대로, 프로세스가 기존 리소스 할당을 초과 (또는 증가) 할 수 있는 환경에서는 할당된 리소스를 보장할 수 없다. 서로 다른 프로세스에는 서로 다른 고정 (또는 '불변') 크기의 메모리 리소스 (MRU)가 할당될 수 있다. 즉, 프로세스가 더 많은 메모리를 요청하더라도 할당된 메모리의 양을 변경할 수 없다(그러나 아래에서 자세히 설명하는 것처럼, 새 프로세스를 스폰할 수 있음). 각 노드의 이용 가능한 메모리 리소스는 적절한 크기의 MRU로서 DAM에서 실행되는 프로그램에 할당하기 위해 리소스 풀 (225)에 이용 가능하게 될 수 있다. 주어진 노드에서 사용 가능한 메모리 리소스는 하드웨어 관리자의 메모리 요구 사항을 고려한 후 해당 노드의 총 메모리 리소스 일 수 있다.
프로그램은 임의의 프로세스 배열을 포함할 수 있다. 예를 들어, 제1 또는 '루트' 프로세스가 처음에 시작되도록 프로그램이 설계되었다. 그 후 루트 프로세스는 프로그램의 다양한 기능을 집합적으로 수행하는 (예를 들어, 날씨 예측을 위한 모델을 생성하기 위해 다양한 소스로부터 데이터를 처리하는) 상이한 유형의 프로세스 세트의 실행을 야기하도록 실행 요청을 발행할 수 있다. 이러한 실행 요청은 스케줄러 (205)에 의해 수신될 수 있고 아래에 설명된 방식으로 처리될 수 있다. 일부 예들에서, 프로세스는 적절한 실행 요청 (예를 들어, 스폰 요청)을 발행함으로써 하위 프로세스의 실행을 유발할 수 있다. 프로세스 토폴로지의 예는 다음과 같다.
프로세스의 실행을 지원하기 위한 다른 이산 리소스도 리소스 풀 (225)에 기여할 수 있다. 이러한 리소스의 예에는 데이터 스토리지 (232) (예: 클라우드-기반 스토리지 서비스에 의해 제공될 수 있는 배타적 데이터 스토리지의 보장된 양) 및 네트워크 리소스 (233) (예: 클라우드 서비스에 연결된 네트워크와 같은 네트워크 링크를 통한 보장된 대역폭)가 포함된다. 컴퓨팅 시스템의 각 노드는 상기 다른 유형의 리소스 중 하나 이상을 제공할 수 있다. 예를 들어, 하나 이상의 노드가 네트워크 리소스를 제공할 수 있는 반면 다른 노드는 디스크 형태로 스토리지 리소스를 제공할 수 있다. 리소스가 노드에 의해 제공되는 것으로 설명되지만, 이러한 리소스는 노드 외부의 다른 리소스에 의해 지원되거나 지원될 수 있음을 이해해야 한다. 예를 들어, 네트워크 리소스는 네트워크 카드에 대한 액세스를 나타낼 수 있으며, 해당 네트워크 리소스는 인터넷 연결과 같은 네트워크의 데이터 링크에서 대역폭에 의해 지원되거나 지원될 수 있다.
가용 리소스 풀 (225)은 리소스 수요의 변화에 응답하여 크기 (223)로 확장될 수 있다. 풀의 리소스는 커밋되지 않은 노드 (220)를 시스템에 추가함으로써, 즉 '노드 커밋'을 통해 증가할 수 있다. 예를 들어, 스케줄러는 새 클라우드 서버 인스턴스를 프로비저닝하여 (클라우드 공급자의 어플리케이션 프로그래밍 인터페이스, API를 사용하여) 새 노드 역할을 하고 이 새 노드 (및 해당 리소스)를 리소스 풀 (225)에 추가할 수 있다.
시스템의 리소스는 컴퓨팅 시스템의 노드에 의해 제공된다. 컴퓨팅 시스템은 DAM의 일부가 아닌 커밋되지 않은 노드 (220)의 세트를 포함할 수 있다. 리소스 풀 (225)은 커밋되지 않은 노드를 DAM에 추가함으로써 확장될 수 있으며, 따라서 이들 노드의 리소스 풀에 추가된다. 노드의 모든 리소스들이 해제되면, 노드는 커밋되지 않은 노드 세트 (220)로 복귀 될 수 있다. 노드는 커밋되지 않은 노드 집합에서 제거되거나 (예: 유지 관리 또는 업그레이드를 위해) 집합에 추가될 수 있다(예: 대규모 작업에 더 많은 총 리소스를 제공하기 위해). 일부 예들에서, 스케줄러 (205)는 노드 역할을 하는 커밋된 클라우드 인스턴스가 사용되지 않은 때를 인식하고, 리소스 풀 (225)에서 그 노드 (및 그 리소스)를 제거하도록 선택할 수 있으며, 그 노드를 '언커밋(uncommit)' 할 수 있다(예를 들어, 디 프로비저닝 클라우드 공급자의 API를 사용하는 클라우드 인스턴스).
스케줄러 (205)는 리소스 풀로부터 리소스를 할당하고 이들 리소스의 소유권을 새로 생성된 프로세스에 할당하는 역할을 한다. 스케줄러는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합으로 임의의 수의 구성 요소를 포함할 수 있다. 스케줄러는 시스템의 임의의 수의 노드에서 실행될 수 있으며 자체적으로 하나 이상의 프로세스로 구성된 하나 이상의 프로그램을 포함할 수 있다. 스케줄러의 구성 요소는 시스템의 각 노드에 제공될 수 있다. 일부 예들에서, 스케줄러는 각각의 하드웨어 관리자 (108)의 로컬 스케줄러 및 DAM의 맥락에서 (예를 들어, 시스템의 하나 이상의 노드에서) 실행되는 글로벌 스케줄러를 포함한다. 노드의 로컬 스케줄러는 해당 노드의 프로세스로부터의 리소스에 대한 요청에 응답할 수 있다(예를 들어, 추가 리소스로 프로세스의 새로운 인스턴스를 실행하기 위한 요청). 로컬 스케줄러가 그 노드에서 그러한 요청을 만족시킬 수 있다면(예를 들어, 그 노드에 의해 제공되는 PRU 및 MRU들을 할당함으로써), 로컬 스케줄러는 그 노드로부터 분리된 리소스를 우선적으로 할당할 수 있다; 로컬 스케줄러가 이러한 요청을 충족할 수 없는 경우 로컬 스케줄러는 글로벌 스케줄러를 호출하여 글로벌 스케줄러가 시스템의 다른 노드에서 이산 리소스를 할당하도록 할 수 있다.
각 프로그램은 스케줄러에 대해 하나 이상의 실행 파라미터를 식별할 수 있다. 실행 파라미터는 리소스 사양을 포함할 수 있다. 예를 들어, 프로그램은 첫 번째 프로세스가 한 CPU의 컴퓨팅 리소스, 1GB의 메모리 리소스 또는 둘 모두를 수신하도록 지정할 수 있다. 프로그램의 실행 파라미터는 DAM에서 프로그램의 인스턴스화 시 스케줄러에 의해 수신될 수 있다. 실행 파라미터는 프로그램의 컴파일 및/또는 시작/해석 시 프로그램에 대해 정의될 수 있다. 프로그램의 실행 파라미터는 컴퓨팅 시스템에 대해 미리 정의된 범위 내에 있도록 제한될 수 있다.
각 프로그램은 하나 이상의 프로세스들로 구성된다. 프로세스가 작동하는 명령은 프로그램 명령의 적절한 서브-셋(sub-set)일 수 있다. 각 프로세스는 독립적인 컴퓨팅 리소스 세트 (예: PRU 및 MRU)에서 작동할 수 있다. 각 프로세스는 동시에 실행될 수 있으며, 일부 프로세스는 동일한 노드에서 실행되고 다른 프로세스는 (a) 다른 노드에서 실행된다. 프로그램은 실행될 때 프로그램 전체를 집합적으로 실행하는 복수의 프로세스를 포함한다.
실행될 각 프로세스에는 PRU와 리소스 풀에서 하나 이상의 MRU가 할당된다. 각 프로세스에는 서로 로컬 즉, 동일한 노드에 있는 PRU 및 MRU가 할당된다. 각 PRU는 하나의 프로세스만 실행한다. 각 PRU는 하나 이상의 (로컬) MRU에서 작동할 수 있다. 프로세스에 할당된 MRU는 프로세스가 속한 프로그램에 의해 정의된 크기의 적어도 하나의 이산 메모리 리소스를 포함한다.
채널 (227)은 프로세스가 통신할 수 있도록 프로세스 사이에 제공된다. 채널은 제1 프로세스에서 제1 프로세스가 참조를 갖는 시스템의 다른 프로세스로 생성될 수 있다. 일부 예에서, 스케줄러 (205)는 성공적인 프로세스 생성 (예를 들어, 성공적인 스폰 요청)의 경우에 상위로부터 하위 프로세스로의 채널을 자동으로 열 수 있다. 다른 예에서, 채널은 관련된 프로세스에 의해 명시적으로 생성된다
프로그램의 상이한 프로세스는 컴퓨팅 시스템의 상이한 노드로부터 리소스 할당될 수 있어서, 단일 프로그램이 컴퓨팅 시스템의 복수의 노드에서 컨텍스트 (222)에서 실행될 수 있다.
예를 들어, 도 2는 실행 컨텍스트 (222)에서 실행되는 3개의 프로세스 (228)를 포함하는 프로그램을 도시한다. 프로세스0, 프로세스1 및 프로세스2. 세 가지 프로세스 각각에는 컴퓨팅 리소스가 할당되었다. 각각 PRU0, PRU1 및 PRU2. 프로세스0 및 프로세스 1은 채널 (227)을 통해 통신한다. 프로세스1과 프로세스2도 채널 (227)을 통해 통신한다. 도 2에는 표시되지 않았지만 프로세스0과 프로세스2가 서로 통신할 수 있는 채널이 형성될 수도 있다. 프로세스0, 프로세스1 및 프로세스2는 컴퓨팅 시스템의 동일한 노드에 있을 수도 있고 다른 노드에 있을 수도 있다. 채널 (227)은 상이한 노드상의 프로세스 사이의 통신을 허용할 수 있다. 예를 들어, 채널 (227)은 네트워크를 통한 프로세스 간의 통신을 허용할 수 있다.
채널 (227)은 둘 이상의 프로세스 사이의 임의의 유형의 논리적 통신 링크일 수 있다. 채널은 버퍼링되지 않은 바이트 스트림 일 수 있다. 리소스가 할당된 모든 프로세스가 시스템의 다른 활성 프로세스에 대한 채널을 개방(또는 '생성' 또는 '형성') 할 수 있다.
도 2에 도시된 실행 컨텍스트 (222)에서, 프로세스0 은 2개의 MRU들에서 동작한다. 프로세스0의 처리 리소스(PRU0)는 논리 버스(logical bus)(226)을 통해 관련된 MRU와 상호 작용한다. 논리 버스는 연결된 PRU에 의해 연결된 MRU에 대한 액세스 및 읽기/쓰기 작업을 지원한다. 도 2에 더 자세히 설명된 것처럼, 프로세스 1 및 프로세스 2는 각각 하나 및 두 개의 MRU에서 작동한다. 각각의 프로세스의 PRU는 전술한 바와 같이 논리 버스 (226)를 통해 각각의 메모리 리소스과 상호 작용한다. 버스는 PRU와 해당 PRU와 관련된 MRU 간의 논리적 통신 링크일 수 있다. 논리 버스는 동일한 노드에 있는 PRU와 MRU를 연결할 수 있다.
MRU가 나타내는 이산 메모리 리소스(discrete memory resources)는 프로세스에 할당된 메모리 리소스를 초과할 수 없도록 제한(bounded)(또는 '유한한(finite)')된다. 예를 들어, MRU는 프로세스에 의해 사용되는 메모리가 해당 MRU의 미리 정의된 크기로 표시되는 상한보다 더 커질 수 없도록 제한될 수 있다. 주어진 프로세스에 대해 각 리소스의 경계는 해당 프로세스의 실행 파라미터에 따라 설정될 수 있다. 경계(들)는 예를 들어 리소스 유형에 따라 절대 용어(absolute terms) 또는 상대 용어(relative terms)로 정의될 수 있다. 예를 들어, 메모리 리소스에 대한 경계는 절대 용어(absolute terms) (예를 들어, 3기가 바이트)으로 정의될 수 있는 반면, 처리 리소스에 대한 경계는 상대 용어(relative terms)(예를 들어, 단일 프로세서 코어의 백분율)로 정의될 수 있다. 각 리소스 할당에 설정된 경계는 프로세스에 의해 정의될 수 있다. 예를 들어 경계는 프로세스의 실행 파라미터로 정의될 수 있다.
처리 리소스 바운드(processing resource bound)는 노드에서 사용할 수 있는 처리 리소스를 기준으로 나타낼 수 있다. 사용 가능한 프로세서 리소스는 노드의 열 스로틀링(thermal throttling)과 같은 절대적인 의미에서 시간이 지남에 따라 달라질 수 있다. 일부 예에서, 경계는 그 노드에 이용 가능한 단일 프로세서의 N% 점유율로 표현될 수 있으며, 여기서 N은 0보다 크고 100보다 크지 않아야 한다. 일부 예에서, 경계는 다수의 프로세서 코어(예를 들어, 단일 처리 코어)로 표현될 수 있다. 주어진 프로세스에 대해 각 리소스의 경계는 해당 프로세스의 실행 파라미터에 따라 설정될 수 있다. 경계는 절대 용어 또는 상대 용어로 정의될 수 있다. 각 리소스 할당에 설정된 경계는 프로세스에 의해 정의될 수 있다. 예를 들어 경계는 프로세스의 실행 파라미터로 정의될 수 있다.
일부 예에서, PRU가 한정된 기간 동안 프로세스에 할당되도록 배열하는 것이 유용할 수 있다. 기간은 프로세스의 실행 파라미터에서 설정할 수 있다. 유한 기간이 만료되면, PRU 및 해당 PRU와 관련된 모든 MRU가 할당 해제되고 리소스 풀로 반환될 수 있다. 스케줄러는 그러한 리소스 할당 해제를 수행하도록 구성될 수 있다.
PRU가 서로 통신할 수 있게 하는 이산 채널 (227)은 또한 이산 리소스일 수 있다. 채널은 채널이 나타내는 대역폭 리소스의 양에 대한 상한을 가질 수 있다. 예를 들어, 노드 간의 절대 대역폭 리소스(absolute bandwidth resource)는 트래픽 및 네트워크 가용성으로 인해 시간이 지남에 따라 달라질 수 있다. 일 예에서, 경계는 이용 가능한 대역폭 리소스의 1/N 점유율로 표현될 수 있다.
여기에 설명된 경계 (또는 '유한') 메모리 리소스는 프로세스 간에 공유되지 않을 수 있다. 이러한 방식으로 프로세스는 메모리 리소스를 독점적으로 사용할 수 있다. 예를 들어, 이산 메모리 리소스는 물리적 메모리에서 보장될 수 있다. 즉, 노드의 각 MRU는 해당 MRU의 크기와 동일한 크기의 물리적 메모리에 의해 지원될 수 있다. 이러한 방식으로 리소스를 할당하면 DAM에 의한 프로그램의 예측 가능한 실행이 유리하게 이어진다. DAM에서 실행되는 프로세스는 할당된 리소스의 양과 가용성을 확인할 수 있다.
프로그램은 추가 프로세스를 생성하고 이러한 새 프로세스에 할당할 이산 리소스의 추가 단위를 요청하여 성장할 수 있다. 그러나 프로그램은 기존 프로세스에 할당된 리소스의 크기를 늘려서 성장하지 못할 수 있다. 따라서 여기에 설명된 프로세스에는 '고정'('fixed') 또는 '불변'('immutable') 리소스가 할당된다. 일부 예에서, 프로세스는 예를 들어 생성 요청을 생성함으로써 하나 이상의 하위 프로세스를 생성할 수 있다. 이 요청에 응답하여, 컴퓨팅 시스템 (예를 들어, 그것의 스케줄러)에 의해 여기에 설명된 방식으로 하위 프로세스가 인스턴스되고 이산 리소스가 할당될 수 있다. 이러한 방식으로 프로그램의 크기가 커질 수 있다. 결과적으로 프로세스는 해당 프로세스에 할당된 컴퓨팅 리소스의 양을 제어하지 않고 대신 하위 프로세스에 할당된 컴퓨팅 리소스의 양을 제어한다.
하위 프로세스는 "상위"프로세스의 사본일 수 있다. 하위 프로세스는 동일한 작업을 수행하지만 다른 데이터를 처리하도록 배열될 수 있다. 예를 들어, 대규모 컴퓨팅에서는, 여러 에이전트 프로세스가 각각 대규모 데이터 세트에 대해 사전 정의된 작업 세트를 병렬로 수행하도록 배열하는 것이 유리할 수 있다. 하위 프로세스는 상위 프로세스에 "종속"하는 방식으로 진행할 필요가 없으며, 일부 예에서는 "상위"프로세스의 동작을 지시할 수 있다.
하위 프로세스에는 최소한 컴퓨팅 및 메모리 리소스를 포함하여 인스턴스화 (또는 '시작')시 이산 리소스의 소유권이 할당된다. 하위 프로세스에는 상위 프로세스와 통신하기 위한 채널이 할당될 수 있다. 하위 프로세스에 할당된 PRU 및 MRU는 상위 프로세스에 할당된 PRU 및 MRU와 분리된다. 즉, 하위 프로세스는 상위 프로세스의 이산 리소스에 액세스 할 수 없으며 그 반대의 경우도 마찬가지이다. 하위 프로세스에 할당된 이산 리소스는 상위 프로세스에 할당된 이산 리소스와 동일한 노드 또는 다른 노드에 있을 수 있다.
여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템에서, 프로세스는 종종 할당된 이산 리소스가 위치해야 하는 위치를 지정하지 않을 수 있다. 이러한 의미에서 리소스 요청은 DAM(예: 스케줄러)에 이루어지며, 이에 대응하여 시스템 내 어디에서든 리소스를 할당할 수 있기 때문에 시스템은 확장에 구애받지 않는다. 따라서 시스템은 프로그램의 각 프로세스가 해당 프로그램의 다른 프로세스와 독립적으로 작동할 수 있다는 기대로 구성된다. 그럼에도 불구하고, 프로그램 프로세스의 이산 리소스 사이의 거리 (예를 들어, 통신 지연, 물리적 거리)를 최소화하기 위해 프로그램의 프로세스에 리소스를 할당하도록 스케줄러를 구성하는 것이 여전히 유리할 수 있다. 처리 엔티티의 분산 시스템의 성능을 최적화하기위한 임의의 적절한 접근법이 사용될 수 있다. 간단한 예로, 초기 시도는 요청 노드(요청 프로세스가 실행되는 노드/요청 프로세스에 할당된 PRU를 제공하는 노드)에 리소스를 할당한 다음 요청 노드에서 부족한 리소스를 사용할 수 있는 경우 다른 노드에 '폴백(fall back)'하는 것이다.
도 3은 여기에 설명된 원리에 따라 프로그램을 실행하는 예시적인 컴퓨팅 시스템 (300) (컴퓨팅 시스템 (100)의 예일 수 있음)을 나타내는 개략도이다. 컴퓨팅 시스템 (300)의 노드는 리소스 풀 (325)에 리소스를 제공한다. 리소스 풀 (325)은 PRU (330) 및 MRU (331)를 포함한다. 노드 (301)는 커밋되지 않은 노드일 수 있다. 리소스 풀 (325)의 리소스는 네트워크 (302)에 의해 상호 연결된다.
프로그램이 각각 PRU0 및 PRU1에서 실행되는 프로세스0 및 프로세스1이라고 하는 두 개의 프로세스 (328)를 포함하는 예를 고려하자. 이 예에서 PRU0 및 PRU1은 모두 노드 (301a)에 존재한다. 프로세스0 및 프로세스1은 채널 (327a)를 통해 통신할 수 있다. 3GB의 메모리가 프로세스0에 할당되고 2GB의 메모리가 프로세스1에 할당된다. 두 프로세스가 동시에 실행을 시작한다.
PRU1에서 실행되는 프로세스는 2개의 MRU를 필요로 하는 하위 프로세스를 생성하기 위해 스케줄러 (예를 들어, 도 2의 스케줄러 (205))에 요청을 발행할 수 있다. 요청은 노드 (301a)에서 로컬 스케줄러 (미도시)에 의해 수신된다. 이 경우, 2개의 MRU가 노드 (301a)에서 이용 가능하지 않으며, 따라서 로컬 스케줄러는 네트워크를 통해 임의의 적절한 방식으로 분배될 수 있는 글로벌 스케줄러 (도시되지 않음)까지 요청을 전달한다. 이에 응답하여, 글로벌 스케줄러는 하위 프로세스가 제2 노드 (301b)에서 인스턴스화 되도록 한다. 프로세스2 라고 하는 하위 프로세스는 노드 301b의 PRU2에 할당된다. 프로세스1 및 프로세스2는 채널 (327b)를 사용하여 네트워크를 통해 통신한다. 요청에 따라 두 개의 MRU가 프로세스2에 할당된다.
도 4는 종래의 방식으로 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다. 특히, 도 4는 노드 (401b)상의 메모리 가용성(availability of memory)을 개략적으로 도시한다.
프로그램 (450a) 및 (451a)는 노드 (401b)에서 메모리를 소비한다. 노드 (401b)는 메모리 공유를 지원할 수 있어, 노드에서 이용 가능한 임의의 할당되지 않은 메모리가 프로그램 (450a 또는 451a) 중 하나에 의해 요구에 따라 액세스 될 수 있다.
일 실시 예에서, 프로그램 (450a)은 기존 메모리 할당을 소진하고 추가 메모리를 요구한다. 예를 들어, 프로그램 (450a)은 malloc () 과 같은 메모리 할당 함수를 사용할 수 있다. 프로그램 (450a)은 예를 들어 로컬 또는 호스트 커널에 의해 추가 메모리 리소스가 할당되고 (450b)로 증가한다. 이 경우 추가 메모리 리소스가 이용 가능하기 때문에, 프로그램 (450b 및 451a) 둘 다 노드 (401b)에서 계속 공존할 수 있다. 기존 시스템은 종종 이 시나리오에 의존한다.
그러나, 예에서, 프로그램 (451a)은 일시적으로 유휴 상태 및/또는 동적으로 축소(dynamically shrunk) 될 수 있다. 프로그램 (451a)가 추가 메모리를 요구하여 이전 크기인 (451b)로 다시 확장하려고 하면, 이전에 사용 가능했던 메모리가 프로그램 (450b)로 액세스되고 있으므로 더 이상 액세스할 수 없음을 발견할 수 있다.
이 예에서 프로그램 (451a)는 필요한 메모리에 액세스 할 수 없기 때문에 충돌할 수 있다. 이러한 방식으로, 프로그램 (450a 내지 450b)의 성장은 간접적으로 프로그램 (451a)이 충돌하도록 만들었다. 이를 통해 시스템은 가상 메모리 관리와 관련된 오버 헤드 및 잠재적인 오류 모드 없이 프로그램을 위한 강력한 실행 환경을 제공할 수 있다.
다른 예에서, 프로그램 (450b)은 다시 그 메모리 할당을 소모하고 추가 메모리를 요구할 수 있다. 예를 들어, 프로그램 (450b)은 (450c)로 표현되는 메모리의 양을 요구할 수 있다. 프로그램 (450c) 및 (451a)는 동일한 인스턴스에서 동일한 메모리에 모두 액세스 할 수 없다. 프로그램 (450b)에 의한 소비를 위해 메모리를 해제하기 위해 로컬 또는 호스트 커널은 노드 (401b)에서 프로세스를 무작위로 종료하기 시작할 수 있다. 이로 인해 프로그램 (450b) 또는 (451a)가 종료될 수 있다.
대조적으로, 도 3의 예에서는 부족한 양의 리소스가 할당된 프로세스가 실패할 수 있다(예: 시스템에 대한 프로그램 입력이 사용자에 의해 잘못 작성되었기 때문). 그러나, 프로세스가 무제한의 추가 리소스를 단순히 할당할 수 없기 때문에 로컬 또는 호스트 커널이 다른 프로그램을 임의로 종료하도록 할 수는 없고, 이로 인해 일반적으로 시스템 충돌이 발생한다. 이것은 이 방법으로 실행되는 프로그램의 예측 가능성을 높여준다.
도 5는 여기에 설명된 원리에 따라 구성된 이산 추상 기계를 사용하여 프로그램을 실행하는 방법을 보여주는 흐름도이다. 프로그램은 복수의 프로세스를 포함한다. 실행될 프로그램은 프로그램의 제1 (또는 '루트') 프로세스를 위한 리소스 요구 사항과 함께 시스템에 입력 (530)된다. 이산 리소스는 여기에 설명된 방식으로 루트 프로세스에 대해 할당된다 (531). 프로세스는 DAM에 의해 제공되는 소프트웨어 환경의 요구 사항에 따라 인스턴스화 (또는 '초기화')되고 (532) 관련 리소스 (531에서 할당됨)가 프로세스에 배타적으로 할당된다. 프로그램을 수행하기 위해 프로세스는 (533)을 실행하고 프로세스에 의해 수행된 컴퓨팅 결과가 출력 (534)된다. 선택적으로, 실행중인 프로세스는 프로그램에 대한 추가 리소스 (531)를 요청(535)하여 하나 이상의 대응하는 하위 프로세스가 인스턴스화(532) 되도록 할 수 있다. 임의의 하위 프로세스는 차례로 추가 리소스 (531)를 요청 (535)하여 하나 이상의 추가 하위 프로세스가 인스턴스화 (532)되도록 할 수 있다.
도 6은 이산 추상 기계에 의해 실행되는 프로그램에 추가 리소스를 할당하는 방법을 보여주는 흐름도이다. 이전에 제한된 유한 리소스가 할당되었고 DAM에 의해 실행되고 있는 제1 프로세스는 추가 리소스에 대한 요청 (640)을 제출한다. 이산 리소스가 할당된다(641). 하위 프로세스는 인스턴스화 되고(또는 '초기화')(642), (641)에 할당된 리소스를 할당한다. 하위 프로세스는 제1 프로세스의 복사본/복제일 수 있다. 하위 프로세스가 실행된다(643). 선택적으로, 하위 프로세스 자체가 추가 리소스를 요청할 수 있으며(640) - 프로세스가 반복된다. 즉, DAM에 의해 실행되는 프로그램은 기존 프로세스에 의해 증가하여 추가 리소스를 받는 새 프로세스가 인스턴스화 될 수 있다. 이러한 방식으로 프로그램의 컴퓨팅 공간이 증가할 수 있다. 프로세스는 기존에 할당된 리소스의 크기를 늘려도 커지지 않는다.
도 7은 컴퓨팅 리소스를 획득 및/또는 할당하는 방법을 보여주는 흐름도이다. 이 그림에서, 해칭이 있는 텍스트 상자는 프로세스 간의 통신을 나타내고 해칭이 없는 텍스트 상자는 특정 프로세스에서 수행한 단계를 나타낸다. 도 7에 도시된 방법은 도 5 및 도 6의 방법의 예를 나타낼 수 있다.
단계 (710)에서 사용자는 컴퓨터 프로그램의 실행 (또는 '시작'또는 '배포')을 요청한다. 일 실시 예에서, 사용자의 요청은 스케줄러에 대한 초기 생성 요청이다.
일 실시 예에서, 요청은 컴퓨터 프로그램의 제1 (또는 '루트') 프로세스에 의해 요구되는 리소스를 지정하는 리소스 요구 사항 설명자 (또는 '리소스 사양')를 포함하고; 다른 예에서 리소스 요구 사항 설명자(resource requirement descriptor)는 컴퓨터 프로그램에서 지정(또는 '인코딩')된다. 일부 예들에서, 사용자의 요청에 포함된 리소스 요구 사항 설명자는 컴퓨터 프로그램에 지정된 리소스 요구 사항 설명자를 완전히 또는 부분적으로 재정의할 수 있다.
리소스 요구 사항 설명자는 리소스 유형 및 해당 값 집합으로 구성되어, 각 종류의 리소스가 얼마나 필요한지 나타낸다. 리소스 유형에 따라 값은 절대 용어 또는 백분율 용어로 지정될 수 있으며 단위를 지정하거나 지정하지 않을 수 있다.
일부 예에서 설명자는 JSON (JavaScript Object Notation) 형식일 수 있다. 예를 들어 설명자는 프로세스에 중앙 처리 장치 (단일 코어의 60 %), 1,000MB의 메모리, 12GB의 디스크 공간, 다운로드 초당 60 킬로 비트/초 업로드 당 20 킬로 비트의 최소 네트워크 대역폭이 필요함을 나타내며{"cpu": 0.60, "mem": 1000, "disk": "12GB", "net": "60/20" 형식일 수 있다.
단계 (720)에서, 제1 세트의 컴퓨팅 리소스를 형성하는 제1 제한된 양의 컴퓨팅 리소스가 스케줄러에 의해 할당(또는 '이어 마킹')된다. 일부 예에서, 스케줄러는 위에서 설명된 리소스 풀로부터 컴퓨팅 리소스를 할당한다. 일부 예에서, 전술한 바와 같이, 스케줄러는 사용자 요청을 만족시키기 위해 새로운 클라우드 서버를 인스턴스화 할 수 있다. 일부 예에서, 할당할 컴퓨팅 리소스의 제1 제한된 양은 단계 (710)의 요청에서 리소스 요구 사항 설명자에 기초하여 결정되거나 컴퓨터 프로그램에 지정된다.
본 개시에서 컴퓨팅 리소스의 '양'은 단일 수량을 의미하지 않을 수 있으며, 따라서 위의 예시적인 설명자에서 알 수 있는 바와 같이 컴퓨팅 리소스의 각 유형에 대한 수량을 포함할 수 있음을 이해해야 한다. 여기에 설명된 방법은 임의의 리소스 유형 할당을 지원할 수 있지만 프로세스 실행에 필요한 기본 리소스인 처리 (CPU) 및 메모리 리소스에 중점을 둔다. 중요하지만 보조 리소스 유형에는 디스크 공간과 네트워크 대역폭이 포함된다. 추가 리소스 유형에는 다음이 포함될 수 있다. GPU, TPU 또는 FPGA 리소스 도메인 또는 어플리케이션 특정 입력/출력 장치 (예: 특정 센서 또는 액추에이터); 등.
일반적으로, 스케줄러 (205)는 할당된 리소스 (들)에 대한 프로세스 액세스를 제공하는 데 필요한 임의의 저수준 동작을 수행하기 위해 하드웨어 관리자 (108)에 의존할 수 있다. 노드에서 실행되는 모든 소프트웨어는 이러한 하드웨어 관리자를 사용하여 기본 물리적 리소스 (즉, 로컬 CPU, 메모리, 디스크, 네트워크 등)에 액세스 해야 하며 스케줄러도 예외는 아니다. 전술한 바와 같이, 이러한 하드웨어 관리자는 하드웨어 또는 소프트웨어로 구현될 수 있다.
단계 730에서, 제1 세트의 컴퓨팅 리소스는 스케줄러 (예를 들어, 전술 한 스케줄러 (205))에 의해 컴퓨터 프로그램의 제1 프로세스에 배타적으로 할당된다. 제1 세트의 컴퓨팅 리소스는 제1 제한된 양의 컴퓨팅 리소스를 제1 프로세스에 보장하기 위해 제1 제한된 양의 물리적 리소스에 의해 지원(back)될 수 있다. 일부 예에서, 제1 제한된 양은 제1 프로세스에 이용 가능한 컴퓨팅 리소스의 상한을 나타낸다.
일 예에서, 스케줄러 (205)는 자신의 제어 하에 있는 물리적 리소스(즉 로컬 CPU, 메모리, 디스크, 네트워크 등)가 어떤 프로세스에 할당되었는지(위에서 설명한 하드웨어 관리자를 통해)기록하기 위해 부기(bookkeeping)를 수행하고 리소스가 할당되거나 포기될 때마다 이러한 레코드를 업데이트하는 방법으로 리소스를 할당할 수 있다. 따라서 스케줄러는 둘 이상의 프로세스에 동일한 물리적 리소스를 할당하지 않는다. 즉, 모든 물리적 자원은 정확히 하나의 리소스 단위 (또는 '추상 컨테이너', 예: PRU, MRU)에 매핑되고 각 리소스 단위는 정확히 하나의 프로세스에 할당된다.
단계 (740)에서, 제1 프로세스는 추가 컴퓨팅 리소스가 필요하다고 결정한다. 일부 예에서, 제1 프로세스는 추가적으로 또는 대안적으로 요청할 컴퓨팅 리소스의 양을 결정한다. 일부 예에서, 제1 프로세스는 필요한 (추가) 컴퓨팅 리소스를 설명하는 또 다른 설명자를 형성한다.
단계 750에서, 제1 프로세스는 추가 컴퓨팅 리소스에 대한 요청을 스케줄러로 전송한다. 일부 예에서, 요청은 생성 요청을 포함한다. 일부 예에서, 요청 (또는 생성 요청)은 제2 (하위) 프로세스에 할당될 컴퓨팅 리소스의 양을 포함하거나 필요한 컴퓨팅 리소스를 설명하는 설명자를 포함한다. 일부 예에서는 요청이 할당된 컴퓨팅 리소스를 제1 프로세스를 실행하는 데 사용되는 처리 리소스를 제공하는 노드와 동일한 노드에서 제공해야 한다고 지정한다. 즉, 컴퓨팅 리소스가 로컬이 되어야 한다.
일부 예에서, 컴퓨팅 리소스의 양 또는 필요한 컴퓨팅 리소스를 설명하는 설명자에 추가하여, 제1 프로세스로부터의 요청은 이러한 새로운 리소스에 대한 다른 추가 제약을 포함할 수 있다. 예를 들어, 프로그램은 제2 프로세스에 대한 리소스가 제1 프로세스에 대한 리소스를 제공하는 노드에 대한 네트워크 대기 시간이 임의의 기간보다 짧은 노드에 의해 제공되도록 요구할 수 있다. 또한 리소스에 대한 이러한 제약은 '엄격'하거나 (스케줄러가 이러한 추가 제약을 충족하거나 할당에 실패해야 함) '완화될' 수 있다(스케줄러는 가능한 경우 이러한 추가 제약 조건을 충족하려고 노력해야 하지만, 제약 조건을 충족할 수 없는 경우 사용 가능한 리소스를 자유롭게 반환할 수 있다.). 할당 실패의 경우, 실패한 스폰을 요청한 프로세스가 진행 방법을 결정한다(예: 다른 제약 조건으로 스폰을 재시도하고 실패를 컨트롤러 프로세스에 전달).
단계 (760)에서, 단계 (750)의 요청에 응답하여, 스케줄러는 단계 (720)과 동일한 방식으로 제2 세트의 컴퓨팅 리소스를 형성하는 제2 제한된 양의 컴퓨팅 리소스를 할당한다. 일부 예에서, 컴퓨팅 리소스의 제2 제한된 양은 단계 (750)의 요청에 지정된 양, 예를 들어 그 안에 포함된 설명자에 기초한다. 일부 예에서, 제2 제한 금액은 제1 제한 금액과 동일하지만 그럴 필요는 없다.
다른 예에서, 단계 (750)의 요청이 컴퓨팅 리소스의 양을 지정하지 않으면, 스케줄러는 그 요청에 응답하여 미리 결정된 양의 컴퓨팅 리소스를 할당한다.
단계 (770)에서 스케줄러는 제1 프로세스로부터 새로운 제2 프로세스를 스폰(또는 '생성')한다. 본 명세서에 설명된 방법에 따라 새로운 프로세스를 생성하기 위해, 스케줄러는 먼저 일부 노드 N에서 새로운 프로세스 (단계 760에서 설명됨)에 대한 리소스를 할당해야 한다. 스케줄러는 노드 N의 하드웨어 관리자와 통신하여 새 프로세스를 포함할 실행 컨텍스트 (세부 정보/내용이 노드 N의 기본 하드웨어 아키텍처에 따라 다를 수 있음)를 생성하도록 지시한다. 그런 다음 이 실행 컨텍스트에 할당된 리소스의 소유권을 할당(다시, 하드웨어 관리자를 통해)하고 프로그램의 이진 코드를 노드 N으로 전송하며(복사본이 아직 로컬에 없는 경우) 프로세스 자체를 시작하고 지정된 진입점에서 실행을 시작할 수 있다.
단계 (780)에서, 제1 프로세스는 단계 (750)의 요청에 대한 응답을 수신한다. 일부 예에서, 응답은 성공한 스폰의 통지 또는 실패 원인을 나타내는 오류를 포함한다. 일부 예에서, 응답은 프로세스 식별자 (PID)와 같은 새로운 프로세스에 대한 참조를 포함한다.
단계 790에서, 스케줄러는 제2 세트의 컴퓨팅 리소스를 제2 프로세스에 배타적으로 할당한다. 전술한 바와 같이, 제2 세트의 컴퓨팅 리소스는 제1 프로세스로부터 분리될 수 있다. 제2 세트의 컴퓨팅 리소스는 제2 제한된 양의 물리적 리소스에 의해 제2 제한된 양의 컴퓨팅 리소스를 제2 프로세스에 보장할 수 있다. 제1 세트의 컴퓨팅 리소스 및 제2 세트의 컴퓨팅 리소스는 단일 노드 또는 2 개의 노드에 의해 제공될 수 있다. 리소스가 두 개의 노드에 의해 제공되는 경우, 이러한 노드는 '로컬' 또는 '병렬'(예: 동일한 LAN 또는 동일한 데이터 센터에 있음)이거나 서로 원격 (예: WAN에 의해 연결됨) 일 수 있다.
일부 예에서, 스케줄러는 위에서 상세히 설명된 바와 같이 제1 프로세스 및 제2 프로세스와 같은 프로세스 간의 통신을 위해 하나 이상의 '채널'을 할당한다. 관련 컴퓨팅 리소스를 제공하는 노드의 위치(예: 컴퓨팅 리소스의 제1 세트 및 제2 세트를 제공하는 노드의 위치)에 따라, 하나 이상의 채널은 도 3의 채널 327a 및/또는 도 3의 채널 327b와 같은 네트워크 채널로서 프로세스-간 통신(inter-process communication)(IPC) 채널을 포함할 수 있다.
시스템의 모든 활성 프로세스는 '프로세스 식별자'(또는 PID)를 참조로 사용하여 시스템의 다른 활성 프로세스에 대한 채널을 열 수 있다. 일부 예에서, 스케줄러는 PID를 해당 프로세스가 실행되는 노드에 매핑하여 이를 수행할 수 있다. 이런 방식으로, 사용자 프로세스가 PID P를 사용하여 프로세스에 대한 채널을 열도록 요청하면 스케줄러는 어떤 노드 프로세스 P가 실행되는지 조회한 다음 노드의 알려진 세부 정보 (예: 인터넷 프로토콜)를 사용하여 통신 채널을 열 수 있다(예를 들어 인터넷 프로토콜 (IP) 주소, 포트 번호). 또는 스케줄러는 채널을 여는 데 필요한 중요한 네트워크 세부 사항이 PID 자체에 인코딩 되도록 프로세스 참조 (즉, PID)를 구성할 수 있다. 예를 들어 PID는 32비트의 IPv4 네트워크 주소와 16비트의 IPv4 포트 번호로 구성된 48비트 식별자가 될 수 있다. 어떤 경우든, PID는 설정된 통신 채널을 통해 다른 프로세스와 공유될 수 있다. 예를 들어, 프로세스 A는 두 하위 프로세스 B와 C를 스폰 할 수 있다. 그런 다음 프로세스 A는 두 하위 프로세스 모두에 채널을 열고 각각의 프로세스에 대한 참조를 보낼 수 있다. 그런 다음 프로세스 B 또는 C는 상위 A로부터 수신된 참조를 통해 다른 쪽에 대한 직접 통신 채널을 열 수 있다.
여기에 설명된 리소스를 획득하는 프로세스는 다른 프로세스와 공유하는 채널의 기본 전송 세부 사항을 인식하지 못할 수 있다. 즉, 프로세스 A와 프로세스 B 사이에 채널이 있는 경우 이 두 프로세스는 채널이 로컬 IPC 인지, 근거리 네트워크 링크인지, 광역 네트워크 링크 또는 기타 전송 메커니즘을 통해 구현되는지 여부를 알 필요가 없다.
일부 예에서, 스케줄러는 제2 프로세스를 생성 (또는 '인스턴스화')한다. 그런 다음 제2 프로세스가 실행된다. 일부 예에서 제2 프로세스는 제1 프로세스의 '작업자 작업'에 지나지 않는다. 이러한 역할에서, 제2 프로세스는 종료하기 전에 제1 프로세스를 대신하여 일부 단기 작업을 수행하고, 채널을 통해 제1 프로세스에 성공 또는 실패 상태를 (아마도) 시그널링 할 수 있다. 다른 예에서, 제2 프로세스는 예를 들어 일부 장기 실행 작업을 관리하는 것과 같이 제1 프로세스와 독립적으로 작동한다. 이러한 역할에서 제2 프로세스는 여러 서브-작업(sub-tasks)을 실행해야 할 수 있으며 자체 하위 작업을 여러 개 스폰해야 한다. 이러한 장기 실행 서비스를 수행하는 프로세스는 일반적으로 명시적인 성공/실패 상태를 원래 상위 프로세스에 전달할 필요가 없으며 실제로 상위 프로세스보다 오래 지속될 수 있다.
일부 예에서, 제2 프로세스가 (740) 단계와 (750) 단계를 여러 번 수행하여 적어도 제3 컴퓨팅 리소스 세트가 할당되고, 제3 프로세스가 스폰되며, 제3 컴퓨팅 리소스 세트가 제3 프로세스에만 독점적으로 할당될 수 있다.
이러한 방식으로, 제2 프로세스는 자체 리소스 할당을 늘릴 필요없이 해당 프로세스에 할당된 제한된 리소스 집합을 초과하는 컴퓨팅 문제를 해결할 수 있다.  제3 프로세스는 제2 프로세스 뿐만 아니라 컴퓨터 프로그램의 임의의 다른 프로세스 (예를 들어, 제1 프로세스)와 통신할 수 있으므로 임의의 프로세스 통신 토폴로지를 생성할 수 있다.
유사하게, 일부 예에서, 단계 (780) 이후에, 제1 프로세스는 단계 (740) 및 (750)을 임의의 횟수로 다시 한번 수행할 수 있으며, 그 결과 적어도 제4 세트의 컴퓨팅 리소스가 할당되고, 제4 프로세스가 스폰되고, 상기 제4 프로세스에 상기 제4 세트의 컴퓨팅 리소스가 독점적으로 할당된다.  제4 프로세스는 제1 프로세스 뿐만 아니라 컴퓨터 프로그램의 임의의 다른 프로세스 (예를 들어, 제2 프로세스) 와도 통신할 수 있다.
이 예에서, 여기에 설명된 방법은 트리의 각 프로세스가 최대 2 개의 하위 (왼쪽 및 오른쪽이라고 함)를 가질 수 있는 '트리' 프로세스 토폴로지를 구성하는 데 사용될 수 있다. P1 이라는 제1 프로세스는, P1 이라는 트리의 '베이스'를 스폰하는 것으로 시작된다. 제1 프로세스 P0는 P2 및 P3 이라는 프로세스 쌍을 스폰하여 P1의 하위로 작동한다. 제1 프로세스 P0은 프로세스 참조 (P2, P3)를 P1으로 보낸 다음 수신된 프로세스 참조를 사용하여 왼쪽 하위 (P2)과 오른쪽 하위 (P3)에 대한 통신 채널을 연다. 그런 다음 P1은 두 개의 추가 하위 (P4 및 P5라고 함)를 생성하고 해당 참조를 왼쪽 하위(즉, P2)에 보내면 왼쪽 하위 (P2)는 이러한 프로세스를 자신의 왼쪽 및 오른쪽 하위로 취급한다. (즉, 각각에 대한 통신 채널을 열어). 특히 그런 다음 P1은 이 동일한 프로세스를 반복하여, 두 개의 최신 프로세스 (예: P6 및 P7)를 오른쪽 하위 (즉, P3)의 하위로 전달할 수 있다. 이런 식으로, 우리는 기본 (P1), 직접 하위 (P2 및 P3 ) 및 하위의 하위 (P2의 왼쪽 및 오른쪽 하위인 P4 및 P5, 그리고 P3의 왼쪽 및 오른쪽 하위인 P6 및 P7 의 세 가지 수준의 트리를 구성 했다. 트리는 이러한 방식으로 계속 성장할 수 있으며, P1은 필요할 때 하위에 더 많은 수준을 추가한다.
추가 예에서, 여기에 설명된 방법은 노드 세트가 링을 형성하도록 각 프로세스가 왼쪽 및 오른쪽 이웃을 갖는 '링'프로세스 토폴로지를 구성하는 데 사용될 수 있다.  특히, PM이라고 하는 제1 프로세스는 여러 프로세스 P0, P1, ??, PN-1을 스폰하여 시작한다. PM 이 그들의 생성에 받은 프로세스 참조를 저장하고, 그 인덱스와 함께 각각의 전체 목록을 보낸다 (예를 들어, P4는 {4, P 0... P N-1}을 받을 것이다) 그러면 각 프로세스 Pi는 왼쪽 (즉, (i-1) % N) 및 오른쪽 (즉, (i + 1) % N) 이웃의 인덱스를 결정하고 왼쪽 이웃 (P(i- 1) % N )을 사용하여 채널을 통해 연결한 다음 자신의 오른쪽 이웃 (P(i + 1) % N )에 대한 연결을 연다. 여기서 %는 모듈로 연산을 나타낸다. 예외는 P0으로, 먼저 오른쪽 이웃 (P1)에 연결한 다음 왼쪽 이웃 (PN-1)에서 연결을 대기하여 연결을 시작한다. 이러한 방식으로 많은 프로세스가 통신링 토폴로지(communicating ring)로 형성될 수 있다.
도 5 내지 도 7의 단계들 중 임의의 단계는 생략, 결합, 위에서 설명된 것과 다른 순서로 수행 및/또는 동시에 수행될 수 있음을 이해할 것이다. 더욱이, 도 7과 관련하여 위에서 설명된 특징은 특히 도 1 내지 도 6과 관련하여 설명된 특징을 포함하여 여기에 설명된 다른 특징과 결합될 수 있다는 것을 이해할 것이다. 여기에 설명된 예의 특징은 달리 표시되지 않는 한 모두 결합될 수 있다.
여기에 설명된 시스템은 빅 데이터 문제와 같은 크고/또는 매우 복잡한 컴퓨팅 문제를 해결하는 데 사용될 수 있다.
튜링-완료(Turing-completeness)는 종종 빅 데이터 문제와 같은 대규모 컴퓨팅 문제를 해결하기위한 요구 사항으로 인식된다. 튜링-완료의 기본 요구 사항은 모든 프로세스가 임의의 양의 메모리로 확장할 수 있다는 픽션(fiction)이다. 이는 임의의 큰 프로그램을 처리하기 위해서는 임의의 큰 메모리 리소스에 대한 접근이 필요하다고 가정하기 때문이다. 기존 시스템에서 임의 메모리의 픽션은 프로그램이 성장함에 따라 동적으로 메모리를 할당하고 프로그램이 메모리를 공유할 수 있도록 함으로써 달성된다. 따라서 기존 시스템에서는 메모리 제한을 적용하거나 메모리 공유를 방지하는 것을 기피한다.
대조적으로, 본 발명자들은 임의의 메모리의 픽션을 달성하기 위해 컴퓨팅 시스템의 각 개별 노드가 튜링-완료일 필요가 없다는 것을 깨달았다. 대신 각 노드가 제공하는 리소스는 리소스의 추상 단위로 처리될 수 있다. PRU (Processor Resource Unit)는 이산 메모리 리소스 (MRU)에서 작동하는 이산 처리 리소스이다. 따라서 각 개별 노드 또는 프로세스는 리소스의 제한된 특성으로 인해 튜링이 완료된 것으로 간주할 수 없다. 그러나 이산 추상 기계(Discrete Abstract Machine)가 많은 수의 노드에서 임의의 수의 이산 리소스를 풀링할 수 있다는 점을 기반으로 이산 추상 기계는 전체적으로 튜링-완료된 것으로 간주할 수 있다. 즉, 여기에 설명된 시스템의 각 개별 프로세스는 완전한 튜링 머신이 아니다. 그러나 여기에 설명된 시스템의 모든 인스턴스는 해당 인스턴스가 임의의 크기로 증가할 수 있기 때문에 튜링 머신으로 동작한다(따라서 이 시스템은 튜링-완료이다).
도 1 내지 도 3의 분산 시스템은 다수의 기능 블록을 포함하는 것으로 도시되어 있다. 이것은 회로도일 뿐이며 이러한 실체들의 서로 다른 논리 요소 간의 엄격한 구분을 정의하기 위한 것이 아니다. 각 기능 블록은 임의의 적절한 방식으로 제공될 수 있다.
일반적으로, 위에서 설명된 기능, 방법, 기술 또는 구성 요소 중 임의의 것은 소프트웨어, 펌웨어, 하드웨어 (예를 들어, 고정 논리 회로) 또는 이들의 임의의 조합으로 구현될 수 있다. 용어 "모듈", "기능", "구성 요소", "요소", "유닛", "블록"및 "로직"은 일반적으로 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 나타내기 위해 본 명세서에서 사용될 수 있다. 소프트웨어 구현의 경우 모듈, 기능, 구성 요소, 요소, 단위, 블록 또는 논리는 프로세서에서 실행될 때 지정된 작업을 수행하는 프로그램 코드를 나타낸다. 본 명세서에 설명된 알고리즘 및 방법은 프로세서(들)로 하여금 알고리즘/방법을 수행하게 하는 코드를 실행하는 하나 이상의 프로세서에 의해 수행될 수 있다. 컴퓨터-판독 가능 저장 매체의 예로는 RAM(Random Access Memory), ROM(Read-only Memory), 광 디스크, 플래시 메모리 및 기타 명령이나 기타 데이터를 저장하는 데 자기, 광학 및 기타 기술을 사용할 수 있으며 시스템에서 액세스할 수 있는 기타 메모리 장치가 있다.
여기에 사용된 컴퓨터 프로그램 코드 및 컴퓨터 판독 가능 명령어라는 용어는 기계 언어, 해석 언어 또는 스크립팅 언어로 표현된 코드를 포함하여 프로세서에 대한 모든 종류의 실행 가능한 코드를 의미한다. 실행 가능한 코드에는 C, Java 또는 OpenCL과 같은 프로그래밍 언어 코드로 표현된 이진 코드, 기계 코드, 바이트 코드 및 코드가 포함된다. 실행 코드는 예를 들어 가상 시스템이나 다른 소프트웨어 환경에서 적절하게 실행, 처리, 해석, 컴파일, 실행되면 실행 코드가 지원되는 컴퓨터 시스템의 프로세서가 코드에 지정된 작업을 수행하는 모든 종류의 소프트웨어, 펌웨어, 스크립트, 모듈 또는 라이브러리가 될 수 있다.
프로세서, 컴퓨터 또는 컴퓨터 시스템은 명령을 실행할 수 있는 처리 능력을 가진 모든 종류의 장치, 기계 또는 전용 회로 또는 그 일부일 수 있다. 프로세서는 CPU, GPU, 시스템-온-칩(System-on-chip), 상태 머신(state machine), 미디어 프로세서(media processor), ASIC(application-specific integrated circuit), 프로그래밍 가능 논리 어레이(programmable logic array), 프로그래머블 게이트 어레이 (FPGA) 등 등 모든 종류의 범용 또는 전용 프로세서 일 수 있다. 컴퓨터 또는 컴퓨터 시스템은 하나 이상의 프로세서를 포함할 수 있다. 여기에 설명된 방법은 프로그램 가능한 장치가 아닌 전용 회로/하드웨어를 사용하여 구현될 수도 있다.
하나 이상의 컴퓨터에 의해 실행될 때 하나 이상의 컴퓨터가 여기에 설명된 방법 중 임의의 것을 수행하게 하는 명령어를 포함하는 컴퓨터 프로그램이 제공된다. 컴퓨터 프로그램을 포함하는 컴퓨터-판독 가능 매체가 제공되며, 매체는 비-일시적 일 수 있다. 또한 컴퓨터 프로그램을 전달하는 데이터 캐리어 신호(data carrier signal)가 제공된다.
여기에 설명된 방법 중 임의의 것을 수행하도록 구성된 컴퓨터 시스템이 제공된다. 컴퓨터 시스템은 하나 이상의 컴퓨터를 포함할 수 있다. 일부 예에서, 컴퓨터 시스템은 전술한 바와 같은 컴퓨터-판독 가능 매체, 및 그 위에 저장된 컴퓨터 프로그램을 실행하도록 구성된 하나 이상의 프로세서를 포함한다. 다른 예에서, 컴퓨터 시스템은 여기에 설명된 방법 중 임의의 것을 수행하도록 구성된 회로를 포함한다.
본 출원인은 본 명세서에 기술된 각각의 개별적인 특징 및 이러한 특징 또는 조합이 일반적인 일반의 관점에서 전체로서 본 명세서에 기초하여 수행될 수 있는 한, 이러한 특징 또는 특징의 조합이 본 명세서에 개시된 임의의 문제를 해결하는지 여부에 관계없이 이러한 특징 또는 조합이 둘 이상의 그러한 특징의 임의의 조합을 분리하여 개시한다. 전술한 설명을 고려하여, 본 발명의 범위 내에서 다양한 수정이 이루어질 수 있다는 것이 당업자에게 명백할 것이다.
위의 설명, 첨부된 청구 범위, 및 도 1 내지 도 7은 함께 완전한 어플리케이션을 형성한다.  본 출원은 위에서 논의한 개념과 기능 중 일부를 도입 한 영국 출원 번호 1820024.6.에서 우선권을 주장한다  영국 출원 번호 1820024.6 의 주제는 아래 설명, 아래 번호가 매겨진 항목 및 도 8 내지 도 12에 명시되어 있으며, 함께 또 다른 완전한 출원 신청을 할 수 있다.  아래 설명의 주제, 아래 번호가 매겨진 항목 및 도 8 내지 도 12의 내용은 본 출원을 제출한 후 삭제하기 위한 것이다. 그러나 해당 주제에 대한 분할 출원은 미래에 필요할 수 있다.  유사하게, 이러한 분할 출원이 제출된 경우, 상기 설명, 첨부된 청구 범위 및 도 1 내지 도 7을 분할 출원에서 삭제하고자 한다.
이산 추상 기계 (DISCRETE ABSTRACT MACHINE_
본 개시는 컴퓨팅 시스템 및 컴퓨팅 시스템에서 프로세스에 리소스를 할당하는 방법에 관한 것이다.
발명의 배경이 되는 기술
분산 컴퓨팅 시스템은 네트워크로 연결된 처리 장치 그룹에 컴퓨팅을 분산하여 크거나/또는 복잡한 컴퓨팅 문제를 해결하는 데 사용될 수 있다. 이러한 시스템은 클라우드 서비스(cloud services)를 제공하는데도 점점 더 많이 사용되고 있다.
분산 컴퓨팅에 대한 많은 이전 접근 방식이 있다. 분산 컴퓨팅에 대한 최근 접근 방식에는 Docker, Kubernetes, Spark, Akka 및 TidalScale과 같은 시스템이 포함된다.
Docker는 컨테이너(containers)라는 소프트웨어 패키지를 실행한다. 컨테이너는 서로 격리(isolated)되며 자체 툴, 라이브러리 및 구성 파일을 포함한다. 격리(isolation)는 게스트 운영 체제없이 커널 수준에서 수행되며 가상 머신 프로비저닝(provisioning of virtual machines)의 경우와 마찬가지이다. Docker Swarm과 같은 스케줄링 및 클러스터링 기능(Scheduling and clustering functionalities)은 분산 컴퓨팅을 위한 Docker 컨테이너 사용을 용이하게 한다. 기본적으로, 컨테이너에는 리소스 제약이 없으며 호스트의 커널이 허용하는 한 메모리와 같은 주어진 리소스를 많이 사용할 수 있다. Docker는 malloc() 과 같은 메모리 할당 함수를 지원한다. 이 함수는 실행중인 프로세스가 요청 시 추가 리소스를 얻을 수 있다. Docker는 시스템 충돌에 취약하다. 프로세스가 리소스를 과도하게 사용하기 시작하면 호스트 커널이 프로세스를 종료하여 메모리를 확보하기 시작하기 때문이다. 모든 프로세스는 종료될 수 있다 - 핵심 또는 기반 프로세스(key or underpinning processes)를 포함하여 종료되면 시스템 충돌이 발생할 수 있다. 어쨌든 어플리케이션 프로세스가 종료되면 하나 이상의 Docker 인스턴스에서 실행되는 프로세스가 속한 특정 어플리케이션 (분산 여부에 관계없이)이 중단될 수 있다.
쿠버네티스(Kubernetes)는 Docker와 같은 컨테이너화 된 어플리케이션의 배포, 확장 및 관리를 자동화하기위한 컨테이너 오케스트레이션 시스템의 예이다. 쿠버네티스((Kubernetes)는 여러 컨테이너가 포함된 포드(pods)를 프로비저닝하여 작동한다. 포드의 컨테이너는 동일한 호스트 서버(host server)에 있어야 하며 메모리와 같은 리소스를 공유할 수 있다. 각 포드에 대한 메모리 제약 조건 설정은 선택 사항이다. 하나의 서버에 여러 포드를 프로비저닝 할 수 있다. 따라서 쿠버네티스(Kubernetes)는 Docker와 같은 컨테이너화 된 어플리케이션과 동일한 단점이 있다. 또한 포드의 컨테이너 간 메모리 공유 에는 단점이 있다. 예를 들어, 리소스가 부족한 컨테이너(resource-hungry container)는 포드의 다른 컨테이너에 리소스가 부족하게 할 수 있다.
Hadoop, Spark 및 Akka와 같은 미들웨어 접근 방식(Middleware approaches)은 분산 컴퓨팅을 위한 고급 API (application programming interfaces)를 제공한다. 이러한 시스템을 통해 사용자는 컴퓨터 클러스터를 프로비저닝하고 일부 프로그래밍 모델을 통해 해당 클러스터에 컴퓨팅 문제를 분산할 수 있다. 하둡(Hadoop)은 HDFS 파일 시스템에 저장된 데이터 전반에 걸쳐 맵/감소 추상화(map/reduce abstraction)를 제공한다. Spark는 RDD 및 Dataframe과 같은 개선된 데이터 구조를 통해 Hadoop 모델에 대한 개선 사항을 제공하며 그룹 별, 집합 차이 및 다양한 조인 작업과 같은 맵 및 축소를 넘어 추가 작업을 수행한다. Akka는 액터(actor)가 직접 주소를 지정하여 다른 액터에게 메시지를 보낼 수 있도록 위치 투명성(location transparency)을 갖춘 액터 모델을 구현한다. 액터는 Akka 클러스터의 여러 서버에 분산되어 있을 수 있다. Hadoop, Spark 및 Akka는 메모리를 공유하고 malloc () 과 같은 메모리 할당 기능을 사용할 수 있는 기존 시스템에서 실행되므로 기본 시스템과 동일한 문제가 발생한다.
TidalScale은 소프트웨어-정의 서버(software-defined servers)가 여러 하드웨어 서버에서 제공하는 리소스를 풀링하고, 사용자에게 단일 가상 머신(single virtual machine)을 제공하는 개념을 제공한다. 따라서 TidalScale 및 유사한 접근 방식은 많은 서버가 하나의 큰 서버로 나타나는 역 가상화 접근 방식을 사용한다. 메모리와 같은 하드웨어 서버에서 제공하는 리소스는 시스템에서 실행되는 프로세스 간에 공유되며 종종 동적으로 할당된다. 이는 프로세스가 예상할 때 메모리를 항상 사용할 수 있는 것은 아니므로 프로세스가 종료될 수 있기 때문에 문제가 된다. 또한, 잠금을 사용하는 다중 스레딩을 통해 프로그램이 확장되는 분산 공유-메모리 모델이기 때문에 어플리케이션 확장이 제대로 이루어지지 않는다. 잠금 경합은 시간이 지남에 따라 확장되며 그 결과 극적인 성능 병목 현상, 안정성 문제가 발생하고 디버깅이 어렵다.
발명의 요약
이 요약은 아래의 자세한 설명에서 추가로 설명되는 개념 선택을 소개하기 위해 제공된다. 이 요약은 청구 범위의 핵심 기능이나 필수 기능을 식별하기 위한 것이 아니며 청구 범위를 제한하는 데 사용되지도 않는다.
복수의 프로세스를 포함하는 프로그램을 실행하기 위한 컴퓨팅 시스템에 있어, 상기 시스템은 각각 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 기여하는 복수의 상호 연결된 노드를 포함하며, 시스템은 풀에서 프로그램의 각 프로세스로 할당하도록 구성되고, 이산 처리 리소스, 및 미리 결정된 유한 크기의 이산 메모리 리소스; 상기 이산 처리 리소스 및 상기 이산 메모리 리소스는 동일한 노드에 있고, 시스템은 상기 프로그램의 다른 프로세스에 다른 노드에 있는 리소스를 할당하도록 동작할 수 있는, 시스템이 제공된다.
컴퓨팅 시스템에서 실행되는 프로그램에 리소스를 할당하는 방법에 있어, 상기 시스템은 각각 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 기여하는 복수의 상호 연결된 노드를 포함하고, 상기 프로그램은 복수의 프로세스로 구성되며, 방법은 상기 이산 자원의 풀로부터 상기 프로그램의 제1 프로세스, 제1 이산 처리 리소스 및 제1 미리 결정된 유한 크기의 제1 이산 메모리 리소스에 할당하는 단계; 이산 리소스 풀로부터 프로그램의 제2 프로세스, 제2 이산 처리 리소스 및 제2 미리 결정된 유한 크기의 제2 이산 메모리 리소스를 할당하는 단계; 상기 제1 프로세스와 상기 제2 프로세스 사이의 통신을 가능하게 하기 위해 상기 제1 프로세스와 상기 제2 프로세스에 채널을 할당하는 단계를 포함하고, 상기 제1 이산 처리 리소스 및 상기 제1 이산 메모리 리소스는 제1 노드에 있고, 상기 제2 이산 처리 리소스 및 상기 제2 이산 메모리 리소스는 상기 복수의 상호 연결된 노드 중 제2 노드에 있는, 방법이 제공된다.
도면의 간단한 설명
도 8은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템을 나타내는 개략도이다.
도 9는 여기에 설명된 원리에 따른 분산 시스템의 논리적 구조를 나타내는 개략도이다.
도 10a은 여기에 설명된 원리에 따라 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다.
도 10b는 종래의 방식으로 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다.
도 11은 이산 추상 기계를 사용하여 프로그램을 실행하는 방법을 보여주는 흐름도이다.
도 12는 이산 추상 기계에 의해 실행되는 프로그램에 추가 리소스를 할당하는 방법을 보여주는 흐름도이다.
상세 설명
다음 설명은 당업자가 본 발명을 만들고 사용할 수 있도록 예로서 제시된다. 본 발명은 여기에 설명된 실시 예에 제한되지 않으며 개시된 실시 예에 대한 다양한 변형이 당업자에게 명백 할 것이다. 실시 예는 단지 예로서 설명된다.
도 8은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템 (100)을 도시하는 개략도이다. 시스템 (100)은 복수의 노드 (101)를 포함한다. 각 노드 (101)는 서버 또는 서버의 처리 요소와 같은 임의의 종류의 컴퓨팅 장치일 수있다. 하나 이상의 노드가 데이터 센터의 서버에 제공될 수 있다. 컴퓨팅 시스템의 노드 (101)는 예를 들어 서버 또는 다른 컴퓨터 시스템, 블레이드 서버의 블레이드, 프로세서, 멀티 코어 프로세서의 처리 코어, 가상 머신 중 하나 이상을 포함할 수 있다. 노드는 클라우드 기반 플랫폼을 통해 사용할 수 있다. 컴퓨팅 시스템은 임의의 수의 노드를 포함할 수 있다. 일부 예에서, 컴퓨팅 시스템은 적어도 일부 노드가 네트워크의 원격 엔드 포인트(remote endpoints) 사이의 데이터 링크에 의해 분리되는 분산 컴퓨팅 시스템일 수 있다.
각 노드 (101)는 임의의 종류의 물리적 및/또는 논리적 아키텍처를 가질 수 있는 처리 장치이다. 다른 노드는 다른 물리적 및/또는 논리적 아키텍처를 가질 수 있다. 예를 들어 일부 노드는 Intel x64 시스템이고 다른 노드는 ARM 시스템 일 수 있다. 하드웨어 관리자는 서브-프로그램(sub-program)이 컴퓨팅 시스템의 임의의 노드에서 실행될 수 있도록 기본 하드웨어의 공통 논리적 추상화(common logical abstraction)를 제공하도록 배열된다. 다른 노드는 해당 노드의 물리적 아키텍처에 적합한 하드웨어 관리자의 다른 구성을 가질 수 있다(예: 다른 아키텍처를 가진 노드는 로컬 프로세서의 명령어 세트, I/O 인터페이스의 칩셋에 따라 다른 저수준 드라이버가 필요할 수 있음).
각각의 노드 (101)는 프로세서 (103), 메모리 (104) 및 입출력 (I/O) 인터페이스 (105)를 포함한다. 도 8에서, 노드 (101a 및 101b)는 하드웨어의 프로세서, 메모리 및 I/O 인터페이스를 포함하는 것으로 도시되어 있지만 보다 일반적으로 각 노드는 임의의 종류의 물리적 또는 가상화된 컴퓨터일 수 있다. 각각의 노드 (101)는 본 명세서에 설명된 방식으로 프로세스가 실행될 수 있는 소프트웨어 환경 (107)에 하드웨어의 추상화를 제공하기위한 하드웨어 관리자(hardware manager)(108)를 포함한다. 노드 (101a)에서 하드웨어 관리자 (108)는 소프트웨어 환경 (107)에 제공된다. 예를 들어, 하드웨어 관리자는 로컬 커널(local kernel) 일 수 있다. 노드 (101b)에서 하드웨어 관리자 (108)는 하드웨어 (106)에 제공된다. 보다 일반적으로, 각 노드의 하드웨어 관리자는 펌웨어, 프로그래밍 가능한 프로세서, 고정-기능(fixed-function) 프로세서, 운영 체제의 가상화 된 인스턴스에서 중에서 하나 이상을 포함하여 하드웨어와 소프트웨어의 임의의 조합으로 제공될 수 있다.
컴퓨팅 시스템의 노드 (101)는 네트워크 (102)를 통해 서로 통신할 수 있다. 네트워크 (102)는 하나 이상의 상이한 유형의 상호 접속을 포함할 수 있다. 네트워크는 원격 노드 사이의 데이터 링크 (예: 동일한 물리적 처리 장치에 위치하지 않은 노드)와 로컬 노드 사이의 데이터 링크 (예: 동일한 물리적 처리 장치에 있는 노드)를 모두 포함할 수 있다. 예를 들어, 일부 노드는 인터넷, LAN(Local Area Network) 또는 WAN(Wide Area Network)과 같은 데이터 네트워크를 통해 연결되고, 일부 노드는 로컬 데이터 연결(예: 서버의 프로세서를 연결하는 데이터 버스 또는 블레이드 서버 백본 연결)을 통해 연결될 수 있다. 로컬 데이터 연결은 데이터 네트워크 링크를 통과하지 않는 두 노드 간의 연결로 간주될 수 있다. 네트워크의 특정 세부 사항은 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템에 중요하지 않으며 단순히 서로 다른 노드가 서로 통신할 수 있는 통신 매체를 제공한다. 예를 들어, 일부 노드는 특정 서버에서 서로 로컬일 수 있고 다른 노드는 서로 원격 일 수 있다(예: 데이터 센터 또는 다른 데이터 센터의 다른 서버). 임의의 두 노드 사이의 경로는 하나 이상의 서로 다른 유형의 상호 연결을 포함할 수 있다.
도 9는 복수의 노드를 포함하고 여기에 설명된 원리에 따라 구성된 컴퓨팅 시스템의 논리 아키텍처를 나타내는 개략도이다. 도 9에서는 컴퓨팅 시스템의 개별 노드가 표시되지 않았다. 도 9는 시스템의 노드에 의해 집합적으로 제공되는 리소스의 추상 단위 측면에서 컴퓨팅 시스템을 묘사한다.
도 9는 스케줄러 (205), 리소스 풀 (225) 및 실행 컨텍스트 (222)를 포함하는 이산 추상 기계(221)(DAM)를 도시한다. 일반적으로 DAM에는 DAM에서 실행되는 각 프로그램에 대한 실행 컨텍스트가 포함된다. 이산 추상 기계(DAM)는 자체 실행 컨텍스트 (222)에서 각각 복수의 프로그램을 실행하도록 동작할 수 있는 컴퓨팅 시스템이다. 시스템의 노드 각각은 리소스 풀 (225)에 리소스를 기여하고 실행 컨텍스트 (222)를 제공하며 스케줄러 (205)를 지원한다. 따라서 이산 추상 기계는 그것이 포함하는 복수의 노드에 의해 집합적으로 제공된다. 리소스 풀 (225)은 유한 추상 머신 (228) (FAM) 및 컴퓨팅 리소스 유닛 (229) (CRU)을 포함하며, 이는 아래에서 더 자세히 설명된다. 리소스 풀 (225)은 데이터 저장소 (230) 및/또는 네트워크 리소스 (231)와 같은 임의의 다른 리소스를 포함할 수 있다. 컴퓨팅 시스템은 DAM (221)의 실행 컨텍스트 (222)에서 복수의 프로그램을 실행하도록 구성되며, 각 프로그램은 하나 이상의 서브-프로그램을 포함한다. 실행 컨텍스트는 시스템의 노드에서 제공되는 복수의 소프트웨어 환경 (107)을 포함한다.
스케줄러는 여기에 설명된 방식으로 컴퓨터 시스템의 노드에 FAM을 할당하도록 구성된다. 리소스 풀 (225)은 FAM, CRU 또는 다른 리소스로서 커밋되지 않은 시스템 노드의 리소스를 나타낼 수 있다. 컴퓨팅 시스템은 DAM에 리소스를 제공하기 위해 이용 가능하지만 아직 DAM에 통합되지 않은 노드인 복수의 커밋되지 않은 노드 (220)를 포함할 수 있다. 커밋되지 않은 노드는 DAM에서 실행되는 프로그램에 사용할 수 있는 리소스 풀 (225)을 확장하기 위해 DAM에 통합될 수 있는 잠재 리소스를 나타낸다.
각 FAM (228)은 이산 논리적 처리 리소스이다. 처리 리소스는 임의의 적절한 방식으로, 예를 들어 단위 시간당 특정 수의 작업을 수행할 수 있는 능력, 논리적 또는 물리적 처리 유닛의 수 (예: 프로세서/프로세서 코어 또는 가상화 된 등가물), 또는 일부 정의된 메트릭에 따른 처리 능력의 단위 수로 표현될 수 있다. FAM은 리소스 풀 (225)에서 이용 가능한 처리 리소스의 이산 논리적 부분을 나타낸다. 주어진 FAM의 처리 리소스는 특정 노드에 국한되며, 컴퓨팅 시스템의 각 노드는 하나 이상의 FAM을 제공한다. 예에서, FAM은 노드의 처리 코어를 논리적으로 표현한 것이다.
FAM은 중앙 처리 장치 (CPU), 그래픽 처리 장치 (GPU), 벡터 프로세서 및 텐서 처리 장치 (TPU) 중 하나 이상에 의해 제공되는 처리 리소스와 같은 모든 종류의 처리 리소스를 나타낼 수 있다.
주어진 FAM이 나타내는 처리 리소스는 해당 FAM의 컨텍스트 내에서 실행되는 서브-프로그램에 배타적이다. 이러한 리소스는 다른 FAM의 컨텍스트에서 실행되는 서브프로그램에 사용할 수 없다. FAM의 처리 리소스는 FAM의 컨텍스트에서 실행되는 서브-프로그램에 사용 가능한 처리 리소스에 대한 최소 한계를 나타냄에서 보장될 수 있다. 예를 들어, 주어진 노드는 N 개의 FAM을 풀 (225)에 제공할 수 있으며, 각 FAM은 노드의 이용 가능한 처리 리소스의 1/N을 나타낸다. 노드의 사용 가능한 처리 리소스는 하드웨어 관리자의 처리 요구 사항을 고려한 후 남은 처리 리소스일 수 있다. 처리 리소스의 특성을 감안할 때, 추가 처리 리소스를 사용할 수 있는 경우 서브-프로그램은 최소 보장된 처리 리소스 이상을 활용할 수 있다. 예를 들어, 주어진 노드는 16개의 FAM들을 제공할 수 있지만 2개의 FAM들만 서브-프로그램에 할당된 경우 각 서브-프로그램은 노드에서 사용 가능한 처리 리소스의 1/16 이상을 활용할 수 있다.
노드의 하나의 FAM에서 서브-프로그램의 실행은 해당 노드의 아키텍처에 적절한 임의의 적절한 방식으로 동일한 노드의 다른 FAM에서 다른 서브-프로그램의 실행으로부터 격리될 수 있다. 예를 들어, 하나 이상의 FAM이 프로세서 또는 프로세서 코어에 제공될 수 있는 경우, 프로세서의 명령어 세트는 보호 모드 또는 기타 격리 메커니즘의 사용을 통해 이러한 격리를 허용한다. 노드의 서브 프로그램 격리는 해당 노드의 로컬 아키텍처에 따라 해당 노드의 하드웨어 관리자에 의해 관리될 수 있다.
각 CRU는 FAM에서 서브-프로그램의 실행을 지원하기위한 이산 메모리 리소스이다. 분산 처리 시스템의 각 노드는 하나 이상의 CRU를 제공할 수 있다. 메모리 리소스는 일반적으로 바이트 단위로 표현되지만 일반적으로 메모리 리소스는 적절한 메트릭에 따라 표현될 수 있다. CRU는 리소스 풀 (225)에서 이용 가능한 메모리의 논리적 부분이다. 주어진 CRU의 메모리 리소스는 특정 노드에 로컬이며, 분산 처리 시스템의 각 노드는 하나 이상의 CRU를 제공한다.
CRU는 FAM에서 사용할 수 있는 이산 메모리 부분을 나타낸다. 각 CRU는 할당된 서브-프로그램에서만 사용할 수 있으며 다른 서브-프로그램에서는 사용할 수 없다. 즉, 한 FAM의 CRU가 나타내는 메모리 리소스는 다른 FAM의 CRU가 나타내는 메모리 리소스과 공유되지 않는다. 이러한 방식으로 서브-프로그램은 서로 메모리를 공유하는 것이 금지된다. CRU의 크기는 시스템에서 생성되는 서브-프로그램의 서브-프로그램에 의해 지정될 수 있다 - 예를 들어, 프로그램의 기존 서브-프로그램의 실행 요청에 대한 응답으로. CRU 크기는 서브-프로그램에 할당된 모든 CRU에 대해 고정된다. 각 서브-프로그램은 다른 CRU 크기를 지정할 수 있다.
CRU는 DAM에서 실행되는 특정 프로그램에 대해 고정된 크기의 메모리 리소스를 나타내는 점에서 보장된다. 다른 프로그램에는 다른 고정 크기의 메모리 리소스가 할당될 수 있다. 예를 들어, 주어진 프로그램에 대해 각 이산 메모리 리소스는 1GB의 메모리가 될 수 있다. 다른 프로그램의 경우, 각 이산 메모리 리소스는 2GB 메모리일 수 있다. 각 노드의 이용 가능한 메모리 리소스는 적절한 크기의 CRU로서 DAM에서 실행되는 프로그램에 할당하기 위해 리소스 풀 (225)에 이용 가능하게 될 수 있다. 주어진 노드에서 사용 가능한 메모리 리소스는 하드웨어 관리자의 메모리 요구 사항을 고려한 후 해당 노드의 총 메모리 리소스 일 수 있다.
FAM에서 서브-프로그램의 실행을 지원하기 위한 다른 이산 리소스도 리소스 풀 (225)에 기여할 수 있다. 이러한 리소스의 예로는 데이터 스토리지 (230) (예: 클라우드 기반 스토리지 서비스에서 제공할 수 있는 것과 같은 배타적 데이터 스토리지의 보장 양)과 네트워크 리소스 (231)(예: 클라우드 서비스에 대한 네트워크 링크와 같은 네트워크 링크를 통한 보장 대역폭)이 있다.
분산 처리 시스템의 각 노드는 상기 다른 리소스 중 하나 이상을 제공할 수 있다. 예를 들어, 하나 이상의 노드가 디스크 형태로 스토리지 리소스를 제공할 수 있다. 대안적으로, 상기 리소스는 노드 자체 이외의 소스에 의해 제공될 수 있다. 예를 들어, 대역폭과 같은 리소스는 인터넷 연결과 같은 네트워크의 데이터 링크에 의해 제공될 수 있다.
이산 리소스 풀은 리소스 수요 변화에 따라 크기 (223)으로 확장될 수 있다. 풀의 리소스가 분리되어 있기 때문에, 사용 가능한 FAM 및/또는 CRU의 수를 늘림으로써 리소스 풀의 크기를 늘릴 수 있으며, 사용 가능한 FAM 및/또는 CRU의 수를 줄여 리소스 풀의 크기를 줄일 수 있다. 풀의 리소스는 커밋되지 않은 노드 (220)를 시스템에 추가함으로써 증가될 수 있다. 각 FAM 또는 CRU에 할당된 리소스는 변경되지 않는다; FAM 및/또는 CRU의 수가 리소스 풀의 크기에 영향을 미치기 위해 변경된다. 주어진 프로그램의 관점에서, FAM의 크기와 CRU의 크기는 고정되어 있다.
FAM 및 CRU가 나타내는 리소스는 컴퓨팅 시스템의 노드에서 제공된다. 컴퓨팅 시스템은 DAM의 일부가 아닌 커밋되지 않은 노드 (220)의 세트를 포함할 수 있다. 리소스 풀 (225)은 커밋되지 않은 노드를 DAM에 추가함으로써 확장될 수 있으므로, 이들 노드의 이산 리소스가 풀에 추가된다. 노드의 모든 리소스가 해제되었을 때, 노드는 커밋되지 않은 노드 (220)의 세트로 리턴될 수 있다.
스케줄러 (205)는 리소스 풀로부터 서브-프로그램에 리소스를 할당하는 역할을 한다. 스케줄러는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합으로 임의의 수의 구성 요소를 포함할 수 있다. 스케줄러는 시스템의 임의의 수의 노드에서 실행될 수 있으며 자체적으로 FAM 및 할당된 CRU에서 실행되는 서브-프로그램을 갖는 하나 이상의 프로그램을 포함할 수 있다. 스케줄러의 구성 요소는 시스템의 각 노드에 제공될 수 있다. 일부 예들에서, 스케줄러는 각각의 하드웨어 관리자 (108)의 로컬 스케줄러 및 DAM의 맥락에서 (예를 들어, 시스템의 하나 이상의 노드에서) 실행되는 글로벌 스케줄러를 포함한다. 노드의 로컬 스케줄러는 해당 노드에 있는 서브-프로그램의 리소스 요청에 응답할 수 있다 - 예를 들어, 추가 리소스에 대한 요청 또는 하위 프로그램의 새 인스턴스를 실행한다. 일부 아키텍처에서 하위 프로그램의 새 인스턴스를 실행하라는 요청은 spawn () 요청일 수 있다.
로컬 스케줄러가 그 노드에서 그러한 요청을 만족시킬 수 있다면(예를 들어, 그 노드에 의해 제공되는 FAM 및 CRU들을 할당함으로써), 로컬 스케줄러는 그 노드로부터 분리된 리소스를 우선적으로 할당할 수 있다. 로컬 스케줄러가 이러한 요청을 충족할 수 없는 경우, 로컬 스케줄러는 글로벌 스케줄러를 호출하여 글로벌 스케줄러가 시스템의 다른 노드에서 이산 리소스를 할당하도록 할 수 있다.
각 프로그램은 스케줄러에 대해 하나 이상의 실행 파라미터를 식별할 수 있다. 실행 파라미터는 이산 메모리 리소스의 필요한 크기의 사양을 포함할 수 있다. 예를 들어, 프로그램은 1GB 크기의 이산 메모리 리소스를 수신하도록 지정할 수 있다. 프로그램의 실행 파라미터는 DAM에서 프로그램을 초기화 할 때 스케줄러에 의해 수신될 수 있다. 실행 파라미터는 프로그램의 컴파일 및/또는 시작/해석시 프로그램에 대해 정의될 수 있다. 프로그램의 실행 파라미터는 컴퓨팅 시스템에 대해 미리 정의된 범위 내에 있도록 제한될 수 있다.
각 프로그램은 하나 이상의 서브-프로그램으로 구성된다. 프로세스는 프로그램의 임의의 다른 실행 가능한 요소와 독립적으로 실행될 수 있는 프로그램의 임의의 실행 가능한 부분일 수 있다. 프로세스는 실행 가능한 명령들의 이산 세트를 포함할 수 있다. 프로세스가 작동하는 명령은 프로그램 명령의 적절한 서브-셋(sub-set)일 수 있다. 각 프로세스는 서로 다른 FAM에서 동시에 실행될 수 있다. 프로그램은 실행될 때 프로그램 전체를 집합적으로 실행하는 복수의 프로세스를 포함한다. 본 명세서에 설명된 예에서, 프로세스는 프로세스의 예인 서브-프로그램으로 지칭된다.
실행될 각 서브-프로그램에는 FAM과 리소스 풀에서 하나 이상의 CRU가 할당된다. 각 서브-프로그램에는 동일한 노드에서 서로 로컬인 FAM 및 CRU가 할당된다. 각 FAM은 하나의 서브-프로그램만 실행한다. 각 FAM은 하나 이상의 CRU에서 작동할 수 있다. 서브-프로그램에 할당된 CRU는 서브-프로그램이 속한 프로그램에 의해 정의된 크기의 적어도 하나의 이산 메모리 리소스를 포함한다.
채널 (227)은 FAM이 통신할 수 있도록 FAM간에 제공된다. 각 FAM은 버스(226)를 통해 작동하는 CRU (들)와 상호 작용한다.
프로그램의 상이한 서브-프로그램은 컴퓨팅 시스템의 상이한 노드로부터 리소스이 할당될 수 있어서, 단일 프로그램이 컴퓨팅 시스템의 복수의 노드에서 컨텍스트 (222)에서 실행될 수 있다.
예로서, 도 9는 실행 컨텍스트 (222)에서 실행되는 3 개의 서브-프로그램을 포함하는 프로그램을 도시한다. 세 개의 서브-프로그램에 각각 FAM0, FAM1, FAM2의 FAM이 할당되었다. FAM0 및 FAM1은 채널 227을 통해 통신 중이다. FAM1 및 FAM2도 채널 227을 통해 통신 중이다. 도 9에는 표시되지 않았지만 FAM0과 FAM2가 통신할 수 있는 채널이 그들 사이에 형성될 수도 있다. FAM0, FAM1 및 FAM2는 컴퓨팅 시스템의 동일한 노드에 있을 수도 있고 다른 노드에 있을 수도 있다. 채널 (227)은 상이한 노드 상의 FAM 사이의 통신을 허용할 수 있다. 예를 들어, 채널 (227)은 네트워크를 통한 FAM 간의 통신을 허용할 수 있다.
채널 (227)은 둘 이상의 FAM 사이의 임의의 유형의 논리적 통신 링크일 수 있다. 채널은 버퍼링되지 않은 바이트 스트림 일 수 있다. 채널은 두 개 이상의 FAM을 연결하여 해당 FAM이 할당된 서브-프로그램이 해당 채널을 통해 데이터를 송수신할 수 있도록 한다. FAM이 할당된 모든 서브-프로그램이 시스템의 다른 FAM에 대한 채널을 호출할 수 있다.
도 9에 도시된 실행 컨텍스트 (222)에서, FAM0은 2 개의 CRU에서 동작한다. FAM0은 논리 버스 (227)를 통해 작동하는 CRU와 상호 작용한다. 논리 버스는 해당 CRU에 대한 액세스 및 읽기/쓰기 작업을 지원한다. FAM1 및 FAM2는 각각 하나 및 두개의 CRU에서 동작하며, 각각은 전술한 바와 같이 논리 버스 (226)를 통해 각각의 리소스와 상호 작용한다. 버스는 FAM과 해당 FAM과 관련된 CRU 간의 논리적 통신 링크 일 수 있다. 논리 버스는 동일한 노드에 있는 FAM과 CRU를 연결할 수 있다.
하위 프로그램에 할당된 이산 리소스 (FAM 및 CRU)가 제한된다. DAM은 제한된 양의 리소스를 초과할 수 없도록 각 이산 리소스에 경계를 적용하도록 구성될 수 있다. 주어진 프로그램에 대해, 각 리소스의 경계는 해당 프로그램의 실행 파라미터에 따라 설정될 수 있다. 경계는 절대 용어 또는 상대 용어로 정의될 수 있다. 각 리소스 할당에 대한 경계 설정은 프로그램에 의해 정의될 수 있다. 예를 들어, 경계는 프로그램의 실행 파라미터로 정의될 수 있다.
CRU는 이산 메모리 리소스이다. CRU는 CRU가 정의된 상한보다 커질 수 없도록 제한된다. 이산 메모리 리소스의 크기는 프로그램에 대해 미리 결정될 수 있다-예를 들어 프로그램의 실행 파라미터에 따라 다르다.
제한된 이산 처리 리소스인 FAM이 하위-프로그램에 할당된다. 일부 예에서, FAM은 FAM이 나타내는 노드에서 처리 리소스의 최소 보장 공유를 표현하는 하한을 가질 수 있다. 하한은 노드에서 사용 가능한 처리 리소스에 상대적으로 표현될 수 있다. 가용 프로세서 리소스는 예를 들어 노드의 로드 밸런싱 및/또는 열 스로틀링으로 인해 절대적인 의미에서 시간이 지남에 따라 달라질 수 있다. 일부 예에서, 하한은 그 노드에 이용 가능한 프로세서 리소스의 1/N 공정한 몫(fair share)으로 표현될 수 있으며, 여기서 N은 노드에서의 FAM의 수를 나타낼 수 있다. 시스템은 이러한 리소스를 서브-프로그램에 할당하기 전에 프로세서 리소스와 같은 리소스의 시간적 변동성을 평가할 수 있다.
FAM은 한정된 기간 동안 서브-프로그램에 할당될 수 있다. 기간은 프로그램의 실행 파라미터에 따라 설정될 수 있다. 유한 기간이 만료된 후 FAM 및 해당 FAM에서 액세스하는 모든 CRU는 할당 해제되고 리소스 풀로 반환될 수 있다.
FAM이 서로 통신할 수 있게 하는 이산 채널 (227)은 또한 이산 리소스일 수 있다. 채널은 채널이 나타내는 대역폭 리소스의 양에 대해 하한을 가질 수 있다. 예를 들어, 노드 간의 절대 대역폭 리소스는 트래픽 등으로 인해 시간이 지남에 따라 달라질 수 있다. 일 예에서, 경계는 이용 가능한 대역폭 리소스의 1/N 점유율로 표현될 수 있다.
여기에 설명된 한정된 유한 리소스는 서브-프로그램 간에 공유될 수 없다. 이러한 방식으로 서브-프로그램은 할당된 서브-프로그램에 의해 독점 사용이 보장된다. 예를 들어, 이산 메모리 리소스는 물리적 메모리에서 보장될 수 있다. 즉, 서브 프로그램에 할당된 FAM이 동작 할 수 있도록 물리적 메모리의 양을 따로 설정할 수 있다. 다른 FAM은 해당 양의 물리적 메모리에서 작동할 수 없다.
프로그램은 각 서브-프로그램에 할당된 리소스의 크기가 아니라 서브-프로그램의 수에 따라 증가할 수 있다. 즉, 컴퓨팅 시스템에 의해 제한된 유한 리소스를 할당 받은 서브-프로그램은 프로그램에 대한 추가 리소스를 요청할 수 있다. 이러한 요청은 스폰 요청일 수 있다. 이 요청에 응답하여 하위 서브-프로그램이 인스턴스화될 수 있다. 하위 서브-프로그램은 "상위" 서브-프로그램의 복사본일 수 있다. 그러나 일반적으로 하위 서브프로그램은 다른 데이터를 처리하도록 배열된다.
하위 서브-프로그램에는 추가 한정된 유한 리소스가 할당된다. 하위-프로그램에 할당된 제한된 이산 리소스에는 FAM과 하나 이상의 CRU가 포함된다. 하위 서브-프로그램에 할당된 FAM에는 상위 서브-프로그램에 할당된 FAM과 통신할 수 있는 채널이 할당된다. 하위 서브-프로그램에 할당된 FAM 및 CRU는 상위 서브-프로그램에 할당된 FAM 및 CRU와 격리된다. 즉, 하위 서브-프로그램은 상위 서브-프로그램의 이산 리소스에 액세스 할 수 없으며 그 반대의 경우도 마찬가지이다. 하위 서브-프로그램에 할당된 한정된 유한 리소스는 동일한 노드 또는 다른 노드에 위치할 수 있다. 일부 예에서, 서브-프로그램은 그것이 할당된 리소스를 소모하거나 예상할 때 프로그램에 대한 추가 리소스를 요청할 수 있다.
이러한 방식으로 리소스를 할당하면 DAM에 의한 프로그램의 예측 가능한 실행이 유리하게 이어진다. DAM에서 실행되는 서브-프로그램은 할당된 리소스의 양과 가용성을 확인할 수 있다.
도 10a는 여기에 설명된 시스템에 따라 프로그램을 실행하는 컴퓨팅 시스템 (300)을 도시하는 개략도이다.
컴퓨팅 시스템 (300)의 노드는 리소스 풀 (329)에 리소스를 제공한다. 리소스 풀은 FAM (328) 및 CRU (329)로 구성된다. 노드 (301)는 커밋되지 않은 노드일 수 있다. 리소스 풀은 네트워크 (302)에 존재하는 것으로 개략적으로 도시된다. 예를 들어, 프로그램이 시스템에 입력된다. 이 프로그램은 두 개의 서브-프로그램으로 구성된다. 각 서브-프로그램에는 리소스 풀 (각각 FAM0 및 FAM1)에서 FAM이 할당된다. 이 예에서, FAM0 및 FAM1은 모두 노드 (301a)에 존재한다. FAM0 및 FAM1은 채널 (327a)를 통해 통신할 수 있다. 3개의 CRU가 FAM0에 할당되며, 이는 버스 (326a)를 통해 액세스한다. 2개의 CRU가 FAM1에 할당되며, 이는 버스 (326b)를 통해 액세스한다. 두 개의 서브 프로그램이 동시에 실행되기 시작한다.
FAM1이 할당된 서브-프로그램은 추가 리소스를 요청한다. 요청은 네트워크를 통해 스케줄러 (표시되지 않음)로 라우팅된다. 여기에 설명된 시스템에 따르면, FAM1은 단순히 할당된 추가 CRU가 아니다. 대신 새 서브-프로그램이 인스턴스화된다. 새로운 서브-프로그램은 노드 (301b)의 FAM2에 할당된다. FAM1 및 FAM2는 채널 (327b)를 사용하여 네트워크를 통해 통신한다. 2개의 CRU가 버스 (326c)를 통해 액세스하는 FAM2에 할당된다.
도 10b는 종래의 방식으로 프로그램을 실행하는 분산 시스템을 나타내는 개략도이다. 특히, 도 10b는 노드 (301b)상의 메모리 가용성(availability of memory)을 개략적으로 도시한다.
프로그램 (350a) 및 (351)은 노드 (301b)에서 메모리를 소비한다. 노드 (301b)는 메모리 공유를 지원할 수 있어, 노드에서 이용 가능한 임의의 할당되지 않은 메모리가 프로그램 (350a 또는 351) 중 하나에 의해 요구에 따라 액세스 될 수 있다.
예에서, 프로그램 (350a)은 원래 메모리 할당을 소진하고 추가 메모리를 요구한다. 예를 들어, 프로그램 (350a)은 malloc () 과 같은 메모리 할당 함수를 사용할 수 있다. 프로그램 (350a)는 예를 들어 로컬 또는 호스트 커널에 의해 추가 메모리 리소스가 할당되고 (350b)로 증가한다. 이 경우 추가 메모리 리소스가 이용 가능하기 때문에, 두 프로그램 (350b 및 351) 모두 노드 (301b)에서 계속 공존할 수 있다. 기존 시스템은 종종 이 시나리오에 의존한다.
그러나, 예에서, 프로그램 (351)은 일시적으로 유휴 상태일 수 있고/있거나 동적으로 축소될 수 있다. 프로그램 (351)이 추가 메모리를 요구하여 다시 확장하려고 하면, 이전에 사용 가능했던 메모리가 프로그램 (350b)로 액세스되고 있으므로 더 이상 액세스할 수 없음을 발견할 수 있다. 이 예에서 프로그램 (351)은 필요한 메모리에 액세스 할 수 없기 때문에 충돌할 수 있다. 이러한 방식으로, 프로그램 (350a 내지 350b)의 성장은 간접적으로 프로그램 (351a)이 충돌하도록 만들었다.
다른 예에서, 프로그램 (350b)은 다시 그 메모리 할당을 소모하고 추가 메모리를 요구할 수 있다. 예를 들어, 프로그램 (350b)은 (350c)로 표현되는 메모리의 양을 요구할 수 있다. 프로그램 (350c) 및 (351)은 동일한 인스턴스에서 동일한 메모리에 모두 액세스 할 수 없다. 프로그램 (350b)에 의한 소비를 위해 메모리를 해제하기 위해 로컬 또는 호스트 커널은 노드 (301b)에서 프로세스를 무작위로 종료하기 시작할 수 있다. 이로 인해 프로그램 350b 또는 351이 종료될 수 있다.
반대로, 도 8 내지 도 10a를 참조하여 본 명세서에서 설명된 시스템에 따르면, 리소스의 양이 충분하지 않은 (예를 들어, 시스템에 입력된 프로그램이 사용자에 의해 잘못 쓰여 졌기 때문에) 서브-프로그램이 실패할 수 있다. 그러나 서브-프로그램은 단순히 무제한의 추가 리소스를 할당할 수 없기 때문에 로컬 또는 호스트 커널이 다른 프로그램을 무작위로 종료하도록 할 수 없다. 이로 인해 일반적으로 시스템 충돌이 발생한다.
도 11은 이산 추상 기계를 사용하여 프로그램을 실행하는 방법을 보여주는 흐름도이다. 실행될 프로그램은 시스템에 입력 (430)된다. 프로그램은 복수의 서브-프로그램을 포함한다. 서브-프로그램은 인스턴스화된다(431). 제한된 유한 리소스는 서브-프로그램에 할당된다 (432). 서브-프로그램은 실행된다(433). 컴퓨팅 결과는 출력 (434)이다. 선택적으로, 실행중인 서브-프로그램은 추가 리소스를 요청(435)할 수 있다. 이에 대한 응답으로 하위 서브-프로그램이 초기화된다 (431). 하위 서브 프로그램에는 제한된 유한 리소스에 할당되고(432), 실행된다(433). 컴퓨팅 결과는 출력 (434)이다.
도 12는 이산 추상 기계에 의해 실행되는 프로그램에 추가 리소스를 할당하는 방법을 보여주는 흐름도이다. 이전에 제한된 유한 리소스를 할당하고 DAM에 의해 실행중인 제1 서브-프로그램은 추가 리소스에 대한 요청 (540)을 제출한다. 하위 서브-프로그램이 초기화된다(541). 하위 서브-프로그램은 제1 서브-프로그램의 카피/클론일 수 있다. 제한된 유한 리소스(finite resources)가 하위 서브-프로그램(542)에 할당된다. 하위 서브-프로그램이 실행된다(543). 선택적으로, 하위 서브-프로그램 자체가 추가 리소스를 요청(540)할 수 있으며 프로세스가 반복된다. 즉, DAM에 의해 실행되는 프로그램은 추가 리소스를 요청하고 해당 리소스가 할당된 새 서브프로그램을 인스턴스화하여 성장한다. 프로그램은 malloc ()과 같은 메모리 할당 명령을 사용하는 것과 같이 규제되지 않은 방식으로 단순히 더 많은 리소스를 요구하여 성장하지 않는다.
여기에 설명된 시스템은 빅 데이터 문제와 같은 크고/또는 매우 복잡한 컴퓨팅 문제를 해결하는 데 사용될 수 있다.
튜링-완료는 종종 빅 데이터 문제와 같은 대규모 컴퓨팅 문제를 해결하기위한 요구 사항으로 인식된다. 튜링-완료의 기본 요구 사항은 모든 프로세스가 임의의 양의 메모리로 확장할 수 있다는 픽션(fiction)이다. 이는, 임의의 큰 프로그램(arbitrarily large program)을 처리하기 위해서는 임의의 큰 메모리 리소스에 대한 접근이 필요하다고 가정하기 때문이다. 기존 시스템에서 임의 메모리의 픽션은 프로그램이 성장함에 따라 동적으로 메모리를 할당하고 프로그램이 메모리를 공유할 수 있도록 함으로써 달성된다. 따라서 기존 시스템에서는 메모리 제한을 적용하거나 메모리 공유를 방지하는 것을 기피한다.
대조적으로, 본 발명자들은 임의의 메모리의 픽션을 달성하기 위해 컴퓨팅 시스템의 각 개별 노드가 튜링-완료일 필요가 없다는 것을 깨달았다. 대신 각 노드가 제공하는 리소스는 리소스의 추상 단위로 처리될 수 있다. FAM (Finite Abstract Machine)은 이산적이고, 경계 지어진, 메모리 리소스 (CRU)에서 작동하는 이산 처리 리소스이다. 따라서 각 개별 FAM은 튜링 완료로 간주될 수 없다. 그러나 이산 추상 기계(Discrete Abstract Machine)는 컴퓨팅 시스템의 노드에서 풀링하고 임의의 수의 FAM 및 CRU를 할당할 수 있다고 가정할 수 있다. 따라서 DAM은 전체적으로 튜링 완료된 것으로 간주할 수 있다.
도 8 내지 도 10a의 분산 시스템은 다수의 기능 블록을 포함하는 것으로 도시되어 있다. 이것은 회로도일 뿐이며 이러한 실체들의 서로 다른 논리 요소 간의 엄격한 구분을 정의하기 위한 것이 아니다. 각 기능 블록은 임의의 적절한 방식으로 제공될 수 있다.
일반적으로, 위에서 설명된 기능, 방법, 기술 또는 구성 요소 중 임의의 것은 소프트웨어, 펌웨어, 하드웨어 (예를 들어, 고정 논리 회로) 또는 이들의 임의의 조합으로 구현될 수 있다. 용어 "모듈", "기능", "구성 요소", "요소", "유닛", "블록"및 "로직"은 일반적으로 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 나타내기 위해 본 명세서에서 사용될 수 있다. 소프트웨어 구현의 경우 모듈, 기능, 구성 요소, 요소, 단위, 블록 또는 논리는 프로세서에서 실행될 때 지정된 작업을 수행하는 프로그램 코드를 나타낸다. 본 명세서에 설명된 알고리즘 및 방법은 프로세서(들)로 하여금 알고리즘/방법을 수행하게 하는 코드를 실행하는 하나 이상의 프로세서에 의해 수행될 수 있다. 컴퓨터-판독 가능 저장 매체의 예로는 RAM(Random Access Memory), ROM(Read-only Memory), 광 디스크, 플래시 메모리 및 기타 명령이나 기타 데이터를 저장하는 데 자기, 광학 및 기타 기술을 사용할 수 있으며 시스템에서 액세스할 수 있는 기타 메모리 장치가 있다.
여기에 사용된 컴퓨터 프로그램 코드 및 컴퓨터 판독 가능 명령어라는 용어는 기계 언어, 해석 언어 또는 스크립팅 언어로 표현된 코드를 포함하여 프로세서에 대한 모든 종류의 실행 가능한 코드를 의미한다. 실행 가능한 코드에는 C, Java 또는 OpenCL과 같은 프로그래밍 언어 코드로 표현된 이진 코드, 기계 코드, 바이트 코드 및 코드가 포함된다. 실행 코드는 예를 들어 가상 시스템이나 다른 소프트웨어 환경에서 적절하게 실행, 처리, 해석, 컴파일, 실행되면 실행 코드가 지원되는 컴퓨터 시스템의 프로세서가 코드에 지정된 작업을 수행하는 모든 종류의 소프트웨어, 펌웨어, 스크립트, 모듈 또는 라이브러리가 될 수 있다.
프로세서, 컴퓨터 또는 컴퓨터 시스템은 명령을 실행할 수 있는 처리 능력을 가진 모든 종류의 장치, 기계 또는 전용 회로 또는 그 일부일 수 있다. 프로세서는 CPU, GPU, 시스템-온-칩(System-on-chip), 상태 머신(state machine), 미디어 프로세서(media processor), ASIC(application-specific integrated circuit), 프로그래밍 가능 논리 어레이(programmable logic array), 프로그래머블 게이트 어레이 (FPGA) 등 모든 종류의 범용 또는 전용 프로세서 일 수 있다. 컴퓨터 또는 컴퓨터 시스템은 하나 이상의 프로세서를 포함할 수 있다.
본 출원인은 본 명세서에 기술된 각각의 개별적인 특징 및 이러한 특징 또는 조합이 일반적인 일반의 관점에서 전체로서 본 명세서에 기초하여 수행될 수 있는 한, 이러한 특징 또는 특징의 조합이 본 명세서에 개시된 임의의 문제를 해결하는지 여부에 관계없이 이러한 특징 또는 조합이 둘 이상의 그러한 특징의 임의의 조합을 분리하여 개시한다. 전술한 설명을 고려하여, 본 발명의 범위 내에서 다양한 수정이 이루어질 수 있다는 것이 당업자에게 명백할 것이다.
본 개시 내용의 예는 아래 번호가 매겨진 항에서 설명된다.
1.복수의 프로세스를 포함하는 프로그램을 실행하기 위한 컴퓨팅 시스템에 있어, 상기 시스템은 각각 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 기여하는 복수의 상호 연결된 노드, 상기 풀에서 상기 프로그램의 각 프로세스로 할당하도록 구성되고, 이산 처리 리소스, 및 미리 결정된 유한 크기의 이산 메모리 리소스를 포함하며 상기 이산 처리 리소스 및 상기 이산 메모리 리소스는 동일한 노드에 있고, 상기 시스템은 상기 프로그램의 다른 프로세스에 다른 노드에 있는 리소스를 할당하도록 동작할 수 있는, 시스템. 
2.제1항에 있어서, 상기 컴퓨팅 시스템은 각각 복수의 프로세스를 포함하는 복수의 프로그램을 실행하기 위한 것인, 시스템. 
3. 제1항 또는 제2항에 있어서, 상기 이산 메모리 리소스는 다른 프로세스에 대해 상기 이산 메모리 리소스에 액세스 할 수 없도록 해당 노드에서 다른 프로세스의 임의의 다른 이산 메모리 리소스로부터 격리되는, 시스템. 
4.임의의 선행 항에 있어서, 상기 이산 메모리 리소스는 상기 노드에서 미리 결정된 유한 크기의 메모리를 독점적으로 사용하도록 상기 프로세스가 보장되도록 상기 미리 결정된 유한 크기와 동일한 크기의 상기 노드에서 물리적 메모리에 의해 백업된, 시스템. 
5.임의의 선행 항에 있어서, 상기 이산 메모리 리소스는 상기 미리 결정된 유한 크기가 상기 프로세스에 이용 가능한 상기 메모리에 대한 상한을 나타내는 크기로 제한된, 시스템. 
6.임의의 선행 항에 있어서, 상기 미리 결정된 유한 크기는 상기 프로그램의 각 프로세스가 상기 동일한 미리 결정된 유한 크기의 이산 메모리 리소스를 수신하도록 상기 프로그램에 대해 고정된, 시스템. 
7.임의의 선행 항에 있어서, 상기 시스템은 상기 처리 시스템에서 상기 프로세스의 인스턴스화에 대해 상기 미리 결정된 유한 크기를 지정하는 하나 이상의 파라미터를 수신하도록 구성된, 시스템. 
8.임의의 선행 항에 있어서, 상기 이산 프로세서 리소스는 상기 노드에서 상기 프로세스에 이용 가능한 상기 처리 리소스에 대한 최소 경계를 나타내는, 시스템. 
9. 제8항에 있어서, 상기 최소 경계는 상기 노드에서 이용 가능한 상기 처리 리소스의 최소 비율인, 시스템. 
10. 제9항에 있어서, 상기 최소 비율은 다수의 물리적 또는 가상 프로세서 코어, 프로세서 사이클의 비율, 및 프로세서 시간의 비율 중 하나 이상을 나타내는, 시스템. 
11.임의의 선행 항에 있어서, 상기 이산 프로세서 리소스는 상기 노드에서 물리적 처리 리소스에 의해 지원되고, 상기 프로세스는 상기 노드에서 상기 처리 리소스의 최소 비율이 보장된, 시스템 
12.임의의 선행 항에 있어서, 상기 프로세스는 상기 이산 프로세서 리소스를 상기 이산 메모리 리소스에 연결하는 논리 데이터 버스를 통해 상기 이산 메모리 리소스에 액세스하도록 배열된, 시스템. 
13.임의의 선행 항에 있어서, 상기 프로세스에는 하나 이상의 다른 프로세스와 통신하기위한 채널이 할당되고, 상기 채널은 상기 프로세스의 상기 이산 처리 리소스와 이들 하나 이상의 다른 프로세스의 상기 이산 처리 리소스 사이의 논리적 링크를 나타내는, 시스템. 
14. 제13항에 있어서, 상기 채널은 버퍼 되지 않은 바이트 스트림(unbuffered byte stream)인, 시스템. 
15. 제13항또는 제14항에 있어서, 상기 리소스 풀은 이산 통신 리소스를 포함하고, 각각의 통신 리소스는 두 개 이상의 프로세스가 통신하는 채널을 제공하기 위해 두 개 이상의 프로세스에 할당하기 위한 것인, 시스템. 
16.임의의 선행 항에 있어서, 상기 복수의 노드는 네트워크를 통해 분산되고, 상기 복수의 노드의 노드 중 적어도 일부는 서로 원격인, 시스템. 
17.임의의 선행 항에 있어서, 상기 복수의 노드 중 적어도 일부는 상기 동일한 데이터 처리 시스템에서 다른 노드에 로컬인, 시스템. 
18.임의의 선행 항에 있어서, 하나 이상의 미 확약 노드 및 하나 이상의 미 확약 노드를 상기 자원 풀에 추가함으로써 상기 자원 풀을 확장하도록 구성되는 시스템을 더 포함하는, 시스템. 
19. 제18항에 있어서, 각각의 미 확약 노드는 리소스 풀에 어떠한 이산 리소스도 제공하지 않는, 시스템. 
20. 제18항또는 제19항에 있어서, 상기 시스템은 복수의 프로그램을 지원하고, 상기 컴퓨팅 시스템에서 실행중인 상기 복수의 프로그램으로부터의 이산 리소스에 대한 증가된 수요에 응답하여 상기 하나 이상의 미 확약 노드가 상기 리소스 풀에 리소스를 기여하게 하도록 구성된, 시스템. 
21. 제18항 내지 제20항 중 어느 하나에 있어서, 상기 시스템은 상기 컴퓨팅 시스템에서 실행되는 상기 복수의 프로그램으로부터의 이산 리소스에 대한 감소된 수요에 응답하여 이산 리소스를 상기 하나 이상의 미 확약 노드로 반환하도록 구성된, 시스템. 
22.임의의 선행 항에 있어서, 상기 시스템은 제1 사전 정의된 임계값 아래로 떨어지는 이산 처리 리소스의 전체성; 제2 사전 정의된 임계 값 아래로 떨어지는 이산 메모리 리소스의 총 크기; 사전 정의된 제3 임계값 아래로 떨어지는 상기 리소스 풀에 기여하는 상기 노드의 수 중 하나 이상에 응답하여 상기 리소스 풀을 확장하도록 구성된, 시스템. 
23.임의의 선행 항에 있어서, 상기 프로세스로부터의 메모리에 대한 요청에 응답하여, 상기 이산 리소스의 풀로부터 상기 프로세스에 추가의 이산 메모리 리소스를 할당하도록 구성된 스케줄러를 더 포함하는, 시스템.
24.임의의 선행 항에 있어서, 상기 프로세스로부터의 실행 요청에 응답하여
상기 컴퓨팅 시스템에서 제2 프로세스를 실행;
제2 이산 처리 리소스 및 제2 미리 결정된 유한 크기의 제2 이산 메모리 리소스를 포함하는 풀로부터 제2 프로세스 이산 리소스를 제2 프로세스에 할당; 및
상기 프로세스와 상기 복사된 프로세스 간의 통신이 가능하도록 상기 프로세스와 제2 프로세스에 대한 채널을 할당하도록 구성된 스케줄러를 더 포함하는, 시스템.
25.제24항에 있어서, 상기 제2 프로세스는 상기 프로세스의 사본이고, 상기 제2 미리 결정된 유한 크기는 상기 미리 결정된 유한 크기와 동일한, 시스템. 
26. 제24항 또는 제25항에 있어서, 상기 이산 메모리 리소스 및 상기 제2 이산 메모리 리소스는 상기 프로세스 및 상기 제2 프로세스가 그들에게 할당된 상기 채널을 통해서만 통신하도록 구성되도록 서로 격리된, 시스템. 
27.임의의 선행 항에 있어서, 상기 컴퓨팅 시스템은 분산 컴퓨팅 시스템인, 시스템. 
28.컴퓨팅 시스템에서 실행되는 프로그램에 리소스를 할당하는 방법에 있어서, 상기 시스템은 이산 처리 리소스 및 이산 메모리 리소스를 포함하는 이산 리소스 풀에 각각 기여하는 복수의 상호 연결된 노드를 포함하고, 프로그램은 복수의 프로세스를 포함하며, 
상기 이산 리소스의 풀로부터 프로그램의 제1 프로세스, 제1 이산 처리 리소스 및 제1 미리 결정된 유한 크기의 제1 이산 메모리 리소스에 할당하는 단계;
상기 이산 리소스 풀로부터 프로그램의 제2 프로세스, 제2 이산 처리 리소스 및 제2 미리 결정된 유한 크기의 제2 이산 메모리 리소스를 할당하는 단계; 및
상기 제1 프로세스 및 상기 제2 프로세스 간의 통신을 가능하게 하기 위해 상기 제1 프로세스 및 상기 제2 프로세스에 채널을 할당하는 단계를 포함하고;
상기 제1 이산 처리 리소스 및 상기 제1 이산 메모리 리소스는 제1 노드에 있고, 상기 제2 이산 처리 리소스 및 상기 제2 이산 메모리 리소스는 상기 복수의 상호 연결된 노드 중 제2 노드에 있는, 방법.

Claims (15)

  1. 컴퓨팅 리소스 할당 방법에 있어서,
    제1 세트의 컴퓨팅 리소스를 형성하는 제1 제한된 양의 컴퓨팅 리소스를 할당하는 단계;
    상기 제1 세트의 컴퓨팅 리소스를 컴퓨터 프로그램의 제1 프로세스에 배타적으로 할당하는 단계;
    추가 컴퓨팅 리소스에 대한 요청을 상기 제1 프로세스로부터 수신하는 단계;
    상기 제1 프로세스로부터의 상기 요청에 응답하여, 제2 세트의 컴퓨팅 리소스를 형성하는 제2 제한된 양의 컴퓨팅 리소스를 할당하는 단계; 및
    상기 제1 프로세스로부터 제2 프로세스를 스폰(spawn)하고, 상기 제2 세트의 컴퓨팅 리소스를 상기 제2 프로세스에 배타적으로 할당하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 제1 세트의 컴퓨팅 리소스 및 상기 제2 세트의 컴퓨팅 리소스는,
    컴퓨팅 시스템의 제1 노드에 의해 제공되거나, 또는
    상기 제1 세트의 컴퓨팅 리소스 및 상기 제2 세트의 컴퓨팅 리소스는,
    컴퓨팅 시스템의 제1 노드 및 제2 노드에 의해 각각 제공되는,
    방법.
  3. 제1항에 있어서,
    상기 제1 세트의 컴퓨팅 리소스는,
    상기 제1 제한된 양의 컴퓨팅 리소스를 상기 제1 프로세스에 보장하기 위하여, 상기 제1 제한된 양의 물리적 리소스에 의해 지원되거나,
    상기 제2 세트의 컴퓨팅 리소스는,
    상기 제1 프로세스로부터 격리되거나,
    상기 제1 프로세스로부터의 추가 컴퓨팅 리소스에 대한 상기 요청은,
    상기 제2 제한된 양의 컴퓨팅 리소스의 지시를 포함하거나,
    상기 제1 제한된 양 및 상기 제2 제한된 양은,
    동일하거나,
    상기 제2 제한된 양의 컴퓨팅 리소스를 할당하는 단계는,
    상기 제2 세트의 컴퓨팅 리소스를 제공하기 위해, 노드의 프로비저닝을 개시하는 단계를 포함하거나, 또는
    상기 방법은,
    상기 제2 프로세스에 대한 참조를 가진 상기 제1 프로세스를 제공하는 단계
    를 더 포함하는 것
    중 적어도 하나인 ,방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 제1 프로세스와 상기 제2 프로세스 간의 통신을 위한 채널을 할당하는 단계
    를 더 포함하는, 방법.
  5. 컴퓨팅 리소스를 획득하는 방법에 있어서,
    컴퓨터 프로그램의 제1 프로세스에 의해, 요청할 컴퓨팅 리소스의 양을 결정하는 단계; 및
    상기 결정에 응답하여, 상기 제1 프로세스로부터 제2 프로세스를 스폰하도록 요청하는 단계
    를 포함하고,
    상기 요청은,
    상기 제2 프로세스에 할당될 상기 컴퓨팅 리소스의 양을 포함하는,
    방법.
  6. 제5항에 있어서,
    상기 제1 프로세스에 의해, 상기 제2 프로세스에 대한 참조를 수신하는 단계
    를 더 포함하는, 방법.
  7. 제6항에 있어서,
    상기 제2 프로세스에 대한 상기 참조를 사용하여 생성된 상기 제1 프로세스로부터 상기 제2 프로세스로의 채널을 통해, 상기 제1 프로세스에 의해, 상기 제2 프로세스와 통신하는 단계
    를 더 포함하는, 방법.
  8. 제7항에 있어서,
    상기 제1 프로세스에 의해, 요청할 제3 양의 컴퓨팅 리소스를 결정하는 단계;
    상기 결정에 응답하여, 상기 제1 프로세스로부터 제3 프로세스를 스폰하도록 요청하는 단계 - 상기 요청은, 상기 제3 프로세스에 할당될 컴퓨팅 리소스의 양을 포함함 -;
    상기 제1 프로세스가 상기 제3 프로세스에 대한 참조를 수신하는 단계;
    상기 제1 프로세스로부터 상기 제2 프로세스로의 상기 채널을 통해, 상기 제3 프로세스에 대한 상기 참조를, 상기 제1 프로세스에 의해, 상기 제2 프로세스로 전송하는 단계; 및
    상기 제1 프로세스에 의해 전송된 상기 제3 프로세스에 대한 상기 참조를 사용하여 생성된 상기 제2 프로세스로부터 상기 제3 프로세스로의 채널을 통해, 상기 제2 프로세스에 의해, 상기 제3 프로세스와 통신하는 단계
    를 더 포함하는, 방법.
  9. 제4항 또는 제7항에 있어서,
    상기 채널은, 프로세스-간 통신(IPC) 채널이거나, 또는
    상기 채널은, 네트워크 채널인,
    방법.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 제1 프로세스로부터의 상기 요청은,
    상기 컴퓨팅 리소스가 제1 노드에 의해 제공되어야 함을 나타내며,
    상기 제1 노드는,
    상기 제1 프로세스를 실행하는 데 사용되는 처리 리소스를 제공하는,
    방법.
  11. 제10항에 있어서,
    제1항 내지 제4항 중 어느 한 항에있어서,
    상기 컴퓨팅 리소스가 상기 제1 노드에 의해 제공되어야 함을 나타내는 상기 제1 프로세스로부터의 상기 요청에 응답하여,
    상기 제2 세트의 컴퓨팅 리소스가 상기 제1 노드로부터 할당되는,
    방법.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    상기 컴퓨팅 리소스는,
    메모리 리소스, 처리 리소스, 통신 리소스 및/또는 스토리지 리소스을 포함하는,
    방법.
  13. 컴퓨터 프로그램에 있어서,
    하나 이상의 컴퓨터들에 의해 실행될 때,
    상기 하나 이상의 컴퓨터들로 하여금 제1항 내지 제12항 중 어느 한 항의 방법을 수행하게 하는 명령어들을 포함하는,
    컴퓨터 프로그램.
  14. 제1항 내지 제12항 중 어느 한 항의 방법을 수행하도록 구성된, 컴퓨터 시스템.
  15. 제14항에 있어서,
    상기 컴퓨터 시스템은,
    제13항의 상기 컴퓨터 프로그램 및 컴퓨터 프로그램을 실행하도록 구성된 하나 이상의 프로세서들을 포함하는 컴퓨터-판독 가능 매체
    를 포함하거나; 또는
    상기 컴퓨터 시스템은,
    제1항 내지 제12항 중 어느 한 항의 방법을 수행하도록 구성된 회로
    를 포함하는, 컴퓨터 시스템.
KR1020217021170A 2018-12-07 2019-12-09 컴퓨팅 리소스 할당 KR20210096259A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GBGB1820024.6A GB201820024D0 (en) 2018-12-07 2018-12-07 Discrete abstract machine
GB1820024.6 2018-12-07
EP19188929.4 2019-07-29
EP19188929 2019-07-29
PCT/EP2019/084254 WO2020115330A1 (en) 2018-12-07 2019-12-09 Computing resource allocation

Publications (1)

Publication Number Publication Date
KR20210096259A true KR20210096259A (ko) 2021-08-04

Family

ID=68766788

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217021170A KR20210096259A (ko) 2018-12-07 2019-12-09 컴퓨팅 리소스 할당

Country Status (5)

Country Link
US (1) US20220019475A1 (ko)
EP (2) EP3877853B1 (ko)
KR (1) KR20210096259A (ko)
CA (1) CA3122173A1 (ko)
WO (1) WO2020115330A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023023555A1 (en) * 2021-08-19 2023-02-23 Pepperdata, Inc. Systems, methods, and devices for capacity optimization in a cluster system

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3811210B1 (en) * 2018-06-20 2024-05-01 Telefonaktiebolaget Lm Ericsson (Publ) Method and supporting node for supporting process scheduling in a cloud system
US11789428B2 (en) 2021-06-16 2023-10-17 Fisher-Rosemount Systems, Inc. I/O server services for selecting and utilizing active controller outputs from containerized controller services in a process control environment
US11726933B2 (en) 2021-06-16 2023-08-15 Fisher-Rosemount Systems, Inc. I/O server services configured to facilitate control in a process control environment by containerized controller services
US20220404799A1 (en) * 2021-06-16 2022-12-22 Fisher-Rosemount Systems, Inc. Software defined process control system and methods for industrial process plants
US11960588B2 (en) 2021-06-16 2024-04-16 Fisher-Rosemount Systems, Inc Security services in a software defined control system

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8209703B2 (en) * 2006-12-08 2012-06-26 SAP France S.A. Apparatus and method for dataflow execution in a distributed environment using directed acyclic graph and prioritization of sub-dataflow tasks
US9081627B1 (en) * 2007-07-31 2015-07-14 Hewlett-Packard Development Company, L.P. Workload management with resource transfer sequence planned as a function of ranking of resource allocations
WO2018192543A1 (en) * 2017-04-19 2018-10-25 Huawei Technologies Co., Ltd. System and method for low latency node local scheduling in distributed resource management
JP7011162B2 (ja) * 2018-02-05 2022-01-26 富士通株式会社 性能調整プログラム、および性能調整方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023023555A1 (en) * 2021-08-19 2023-02-23 Pepperdata, Inc. Systems, methods, and devices for capacity optimization in a cluster system

Also Published As

Publication number Publication date
EP4273700A3 (en) 2024-01-17
EP4273700A2 (en) 2023-11-08
EP3877853B1 (en) 2023-08-09
CA3122173A1 (en) 2020-06-11
US20220019475A1 (en) 2022-01-20
EP3877853A1 (en) 2021-09-15
WO2020115330A1 (en) 2020-06-11

Similar Documents

Publication Publication Date Title
EP3877853B1 (en) Computing resource allocation
US10855537B2 (en) Methods and apparatus for template driven infrastructure in virtualized server systems
CN108737468B (zh) 云平台服务集群、构建方法及装置
US20200142753A1 (en) Dynamic reallocation of resources in accelerator-as-a-service computing environment
US9766945B2 (en) Virtual resource scheduling for containers with migration
EP3347816B1 (en) Extension of resource constraints for service-defined containers
US10387179B1 (en) Environment aware scheduling
US8756597B2 (en) Extending functionality of legacy services in computing system environment
US20210011768A1 (en) Thread associated memory allocation and memory architecture aware allocation
CN103797462A (zh) 一种创建虚拟机的方法和装置
US9882775B1 (en) Dependent network resources
WO2022132233A1 (en) Multi-tenant control plane management on computing platform
KR102318533B1 (ko) Gpu기반 임베디드 에지 서버 구성과 신경망 서비스 활용 방법 및 시스템
CN110166507B (zh) 多资源调度方法和装置
KR102230901B1 (ko) 클라우드 자원 관리를 위한 비율방식의 QoS 지원 방법 및 장치
WO2019055601A1 (en) SYSTEMS AND METHODS FOR CALCULATING AN INFRASTRUCTURE RESOURCE ALLOCATION
CN115280285A (zh) 由独立操作的多个调度器在公共资源集上调度工作负载
US11561843B2 (en) Automated performance tuning using workload profiling in a distributed computing environment
US11057263B2 (en) Methods and subsystems that efficiently distribute VM images in distributed computing systems
US11226851B1 (en) Execution of multipath operation triggered by container application
KR20190109795A (ko) 유휴 컴퓨팅 자원을 이용한 클러스터 구축 장치 및 방법, 상기 방법을 수행하기 위한 저장 매체
Melekhova et al. Cloud and Grid Part I: Difference and Convergence
EP4260185A1 (en) System and method for performing workloads using composed systems
WO2023274014A1 (zh) 容器集群的存储资源管理方法、装置及系统
US20230106318A1 (en) Automated methods and systems that provide resource recommendations for virtual machines

Legal Events

Date Code Title Description
A201 Request for examination