KR102051282B1 - 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 - Google Patents

선택적 리소스 이동을 이용하는 네트워크 결합 메모리 Download PDF

Info

Publication number
KR102051282B1
KR102051282B1 KR1020187009083A KR20187009083A KR102051282B1 KR 102051282 B1 KR102051282 B1 KR 102051282B1 KR 1020187009083 A KR1020187009083 A KR 1020187009083A KR 20187009083 A KR20187009083 A KR 20187009083A KR 102051282 B1 KR102051282 B1 KR 102051282B1
Authority
KR
South Korea
Prior art keywords
memory
node
volatile memory
page
physical
Prior art date
Application number
KR1020187009083A
Other languages
English (en)
Other versions
KR20180057639A (ko
Inventor
이삭 알. 나시
데이비드 피. 리드
Original Assignee
타이들스케일, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 타이들스케일, 인코포레이티드 filed Critical 타이들스케일, 인코포레이티드
Publication of KR20180057639A publication Critical patent/KR20180057639A/ko
Application granted granted Critical
Publication of KR102051282B1 publication Critical patent/KR102051282B1/ko

Links

Images

Classifications

    • 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/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/2842
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/2885Hierarchically arranged intermediate devices, e.g. for hierarchical caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

네트워크 결합 메모리의 존재시 캐시 일관성을 유지하는 것이 개시된다. 컴퓨터 시스템은 복수의 물리 노드를 포함한다. 운영 체제는 복수의 물리 노드에 걸쳐 집합적으로 실행된다. 물리 노드는 네트워크 결합 메모리와 통신하도록 구성된다. 복수의 물리 노드에 포함된 제 1 물리 노드 상의 페이지에 대해 수행될 동작에 적어도 부분적으로 기초하여, 네트워크 결합 메모리는 메시지를 수신하도록 구성된다. 네트워크 결합 메모리는 수신된 메시지에 적어도 부분적으로 기초하여 조치를 수행하도록 구성된다.

Description

선택적 리소스 이동을 이용하는 네트워크 결합 메모리
다른 출원에 대한 상호 참조
본 출원은 모든 목적을 위해 본 명세서에 참조로써 통합되는 2015년 10월 1일자로 출원된, 발명의 명칭이 '선택적 리소스 이동을 이용하는 네트워크 결합 메모리(NETWORK ATTACHED MEMORY USING SELECTIVE RESOURCE MIGRATION)'인 미국 가 특허 출원 번호 제 62/236,076 호의 우선권을 주장한다.
플래시 메모리가 이용되는 통상적인 방법은 서버에서 디스크를 시뮬레이팅(simulating)하는 것이다. 추가적인 방식으로 플래시 메모리를 이용하는 것이 유익할 것이다. 불행하게도, 서버를 위한 기존의 시스템 소프트웨어 솔루션은 디스크 저장장치가 아닌 플래시 메모리를 이용하기 위한 메커니즘을 제공하지 않는다.
본 발명의 목적은 선택적 리소스 이동을 이용하는 네트워크 결합 메모리를 제공하는 것이다.
본 발명의 다양한 실시예는 다음의 상세한 설명 및 첨부된 도면에서 개시된다.
도 1은 컴퓨터 시스템의 일 실시예를 도시한 도면.
도 2는 컴퓨터 시스템의 물리 구조를 계층 구조(hierarchy)로 도시한 도면.
도 3a는 다수의 가상 머신(각각의 다수의 게스트 운영 체제를 가짐)이 단일의 물리 머신 상에서 실행되는 가상화된 컴퓨팅 환경을 묘사한 도면.
도 3b는 다수의 물리 머신이 집합적으로 단일 가상 운영 체제를 실행하는 가상화된 컴퓨팅 환경을 묘사한 도면.
도 4a는 소프트웨어 스택의 일례를 묘사한 도면.
도 4b는 소프트웨어 스택의 일례를 묘사한 도면.
도 5는 일 예시적인 시스템 상의 하드웨어의 운영 체제의 뷰의 일례를 묘사한 도면.
도 6a는 단일 노드 상의 하드웨어의 하이퍼스레드(hyperthread)의 뷰의 일례를 묘사한 도면.
도 6b는 일 예시적인 시스템 상의 하드웨어의 하이퍼커널(hyper-kernel)의 뷰의 일례를 묘사한 도면.
도 7은 기업형 슈퍼컴퓨터 시스템의 일례에 대한 하드웨어의 운영 체제의 뷰의 일례를 묘사한 도면.
도 8은 리소스를 선택적으로 이동시키기 위한 프로세스의 일 실시예를 도시한 도면.
도 9는 계층적 동적 스케줄링을 수행하기 위한 프로세스의 일 실시예를 도시한 도면.
도 10은 초기 메모리 할당 및 프로세서 할당의 일례를 도시한 도면.
도 11은 메모리 할당의 업데이트된 뷰 및 프로세서 할당의 변경되지 않은 뷰를 도시한 도면.
도 12는 메모리 할당 및 프로세서 할당의 업데이트된 뷰를 도시한 도면.
도 13a는 네트워크 결합 메모리가 선택적 리소스 이동에 이용되는 시스템의 일 예시적인 실시예를 도시한 도면.
도 13b는 네트워크 결합 메모리가 선택적인 리소스 이동에 이용되는 시스템의 일 예시적인 실시예를 도시한 도면.
도 14는 네트워크 결합 메모리 기기의 일 예시적인 실시예를 도시한 도면.
도 15는 페이지를 할당하는 일 실시예를 도시한 도면.
도 16은 캐시 일관성 프로토콜에 따른 노드 간 통신의 일 예시적인 실시예를 도시한 도면.
도 17은 네트워크 결합 메모리의 존재시 캐시 일관성을 유지하기 위한 프로세스의 일 실시예를 도시하는 흐름도.
도 18은 페이지들을 제로화(zeroing)하기 위한 프로세스의 일 실시예를 도시하는 흐름도.
본 발명은 프로세스; 디바이스; 시스템; 재료의 구성; 컴퓨터 판독가능한 저장 매체 상에 구현된 컴퓨터 프로그램 제품; 및/또는 프로세서에 결합된 메모리 상에 저장되고/되거나 그것에 의해 제공된 명령을 실행하도록 구성된 프로세서와 같은, 프로세서를 포함하는, 다수의 방식으로 구현될 수 있다. 본 명세서에서, 상기 구현들, 또는 본 발명이 취할 수 있는 임의의 다른 형태는 기술로서 언급될 수 있다. 일반적으로, 개시된 프로세스의 단계의 순서는 본 발명의 범위 내에서 변경될 수 있다. 달리 서술되지 않는다면, 동작을 수행하도록 구성되는 것으로서 설명된 프로세서 또는 메모리와 같은 구성요소는 주어진 시간에서 동작을 수행하도록 임시로 구성되는 일반 구성요소 또는 동작을 수행하기 위해 제작되는 특정 구성요소로서 구현될 수 있다. 본 명세서에서 이용되는 바와 같이, 용어('프로세서')는 컴퓨터 프로그램 명령과 같은, 데이터를 프로세싱하도록 구성된 하나 이상의 디바이스, 회로, 및/또는 프로세싱 코어를 언급한다.
본 발명의 하나 이상의 실시예의 상세한 설명은 본 발명의 원리를 도시하는 첨부된 도면과 함께 하기에 제공된다. 본 발명은 이러한 실시예와 관련되어 설명되지만, 본 발명은 임의의 실시예로 제한되지 않는다. 본 발명의 범위는 단지 청구항에 의해서만 제한되고 본 발명은 다수의 대안, 수정 및 등가물을 포함한다. 다수의 특정 상세는 본 발명의 철저한 이해를 제공하기 위해 다음의 설명에서 제시된다. 상기 상세는 예의 목적을 위해 제공되며 본 발명은 상기 특정 상세의 일부 또는 전부 없이 청구항에 따라 실시될 수 있다. 명료함을 위해, 본 발명에 관련된 기술 분야에서 공지되는 기술적 자료는 본 발명이 불필요하게 모호하게 되지 않도록 상세하게 설명되지 않았다.
도 1은 컴퓨터 시스템의 일 실시예를 도시한다. 시스템(100)은 또한 본 명세서에서 "기업형 슈퍼컴퓨터" 및 "메인프레임"으로서 언급된다. 도시된 예에서, 시스템(100)은 아주 근접하여 위치된(예로서, 동일한 랙 내에 위치된) 복수의 노드(예로서, 노드(102 내지 108))를 포함한다. 다른 실시예에서, 노드의 다수의 랙(예로서, 동일한 설비 내에 위치됨)이 시스템에서 이용될 수 있다. 게다가, 본 명세서에서 설명된 기술들은 또한, 분산 시스템과 결부하여 이용될 수 있다.
노드는 10 기가비트 이더넷, 직접 PCI 대 PCI, 및/또는 인피니밴드(InfiniBand)와 같은 고속 상호연결부(110)를 통해 상호연결된다. 각각의 노드는 일용품 서버클래스 하드웨어 구성요소(예로서, 주변 디바이스가 부착되거나 포함된 랙의 블레이드)를 포함한다. 도 1에 도시된 예에서, 각각의 노드는 다수의 물리 프로세서 칩을 포함한다. 각각의 물리 프로세서 칩(또한, "소켓"으로서 언급됨)은 다수의 코어가 포함되어 있으며, 각각의 코어는 다수의 하이퍼스레드를 갖는다.
도 2에 도시된 바와 같이, 시스템(100)의 물리 구조는 하이퍼스레드(230), 코어(210 내지 224), 물리 프로세서 칩(202 내지 208), 및 노드(102 내지 108)(노드(104, 106), 등은 도면에서 생략되고 타원으로 표시됨))의 (하부로부터) 계층 구조를 형성한다. 도 2에 묘사된 트리는 하드웨어 구성에 의해 정의된 고정된 크기이다.
하기에 더 상세히 설명될 바와 같이, 각각의 기업형 슈퍼컴퓨터(예로서, 시스템(100))는 운영 체제의 단일 인스턴스를 실행한다. 운영 체제 및 임의의 애플리케이션 둘 모두는 표준 상용 소프트웨어일 수 있으며 시스템(100) 상에서 실행할 수 있다. 본 명세서에서 설명된 예에서, 운영 체제는 리눅스이지만, 마이크로소프트 윈도우즈, 맥 OS X, 또는 FreeBSD와 같은 다른 운영 체제가 또한, 이용될 수 있다.
종래의 가상화된 컴퓨팅 환경에서, 다수의 가상 머신이 단일의 물리 머신 상에서 실행될 수 있다. 이 시나리오는 도 3a에 묘사된다. 특히, 3개의 가상 머신(302 내지 306)은 자체 호스트 운영 체제를 갖는 단일 물리 머신(308) 상에서 3개의 게스트 운영 체제를 실행하고 있다. 대조적으로, 본 명세서에서 설명된 기술을 이용하여, 도 3b에 묘사된 바와 같이, 다수의 물리 머신(354 내지 358)은 집합적으로 단일 가상 운영 체제(352)을 실행한다.
소프트웨어 스택의 하나의 예가 도 4a에 묘사된다. 이러한 스택은 전형적으로 전통적인 컴퓨팅 환경에서 이용될 수 있다. 도 4a에 도시된 스택에서, 애플리케이션(402)은 데이터베이스 엔진(404) 위에 위치하며, 결과적으로 그 아래에 하드웨어(408)가 놓이는 운영 체제(406)에 위치한다. 도 4b는 일부 실시예에서 이용되는 소프트웨어 스택을 묘사한다. 도 4a에 도시된 스택과 마찬가지로, 애플리케이션(452)은 데이터베이스 엔진(454) 위에 위치하고, 결과적으로 운영 체제(456) 상에 위치한다. 그러나, 운영 체제 아래와 하드웨어 위에는 실시간으로 실행되는 시스템을 관찰하고 그것이 작동하는 시스템의 요구 사항에 맞게 시스템 리소스를 최적화하는 소프트웨어의 계층(본 명세서에서 하이퍼커널로 언급됨)이 있다. 하이퍼커널은 일용품 서버의 세트의 RAM, 프로세서, 및 I/O(예를 들면, 저장장치, 네트워킹 리소스와 같은 입력 출력 리소스)를 개념적으로 통합하고, 그 통합된 세트를 운영 체제에 제공한다. 이러한 추상화로 인해, 운영 체제는 집성된 세트의 프로세서, 메모리, 및 I/O를 포함하는 단일 대형 컴퓨터에 대한 뷰를 갖게될 것이다. 하기에 더 상세하게 설명될 바와 같이, 하이퍼커널은 리소스의 이용을 최적화한다. 하이퍼커널은 또한, 네트워크 및 저장장치와 같은 다른 I/O 시스템 리소스를 최적화하는데 도움이 될 수 있다. 일부 실시예에서, 실행중인 소프트웨어의 관찰 및 프로파일에 기초하여, 전체 시스템 성능을 더 향상시킬 수 있는 시스템의 동적 성능에 관한 성능 표시자(힌트)가 상위 계층(예로서, 데이터베이스 관리 시스템)에 제공된다.
하이퍼커널은 모든 주요 마이크로프로세서, 메모리, 상호연결부, 영구 저장장치, 및 네트워킹 아키텍처로 복사(porting)될 수 있다. 게다가, 하드웨어 기술이 발전함에 따라(예로서, 새로운 프로세서, 새로운 메모리 기술, 새로운 상호연결부 등으로), 하이퍼커널은 산업 진화를 이용하기 위해 필요에 따라 수정될 수 있다.
도 4b에 도시된 바와 같이, 운영 체제(456)는 일련의 노드(458 내지 462)에 걸쳐 집합적으로 실행되고 있고, 그의 각각은 서버 하드웨어 상에서 실행되는 하이퍼커널을 갖는다. 구체적으로, 운영 체제는 하이퍼커널의 컬렉션에 의해 정의된 가상 환경에서 실행되고 있다. 하기에 더 상세하게 설명될 바와 같이, 운영 체제(456)에 대한 뷰는 그것이 개별적인 노드(458 내지 462)의 모든 하드웨어 리소스를 포함하는 단일 하드웨어 플랫폼에서 실행되고 있다는 것이다. 따라서 노드의 각각이 1TB의 RAM을 포함하면, 운영 체제는 그것이 3TB의 RAM을 포함하는 하드웨어 플랫폼에서 실행 중임을 알 수 있을 것이다. 프로세싱 전력, 및 I/O 리소스와 같은, 다른 리소스는 유사하게 운영 체제의 뷰에서 집합적으로 이용가능하게 될 수 있다.
도 5는 일 예시적인 시스템 상의 하드웨어의 운영 체제의 뷰의 일례를 묘사한다. 특히, 운영 체제(502)는 프로세서(504 내지 508) 및 물리 공유 메모리(510)의 위에서 실행된다. 전술한 바와 같이, 운영 체제는 도 1에 도시된 바와 같은 전통적인 컴퓨팅 시스템 또는 기업형 슈퍼컴퓨터 상에서 실행될 수 있다. 어느 경우든, 운영 체제의 뷰는 프로세서(504 내지 508) 및 물리 공유 메모리(510)에 액세스하는 것일 것이다.
도 6a는 단일 노드 상의 하드웨어의 하이퍼스레드의 뷰의 일례를 묘사한다. 이 예에서, 노드는 H1(602) 내지 H4(608)로 묘사된 4개의 하이퍼스레드를 갖는다. 각각의 하이퍼스레드는 물리 공유 메모리(612)의 모든 부분에 액세스할 수 있다. 물리 공유 메모리(612)는 선형이고, 위치(0 내지 최대 양, "max")로 라벨링된다. 노드는 또한 3개의 레벨의 캐시(610)를 포함한다.
도 6b는 일 예시적인 시스템 상의 하드웨어의 하이퍼커널의 뷰의 일례를 묘사한다. 이 예에서, 3개의 노드(652 내지 656)가 기업형 슈퍼컴퓨터에 포함된다. 3개의 노드의 각각은 4개의 하이퍼스레드, 물리 공유 메모리, 및 캐시를 갖는다(즉, 각각의 노드는 도 6a에 도시된 노드(600)의 일 실시예이다). 주어진 노드(예로서, 노드(652)) 상의 하이퍼스레드는 도 6a에 도시된 것과 동일한 뷰를 갖는다. 그러나, 하이퍼커널은 모든 노드 상의 모든 리소스를 알고 있다(즉, 하이퍼커널은 12개의 하이퍼스레드, 및 모든 물리 공유 메모리를 본다). 도 6b에 도시된 예에서, 주어진 하이퍼스레드(예로서, 하이퍼스레드(658), "H1 내지 4")는 그것의 노드 번호(예로서, "1")와 그 다음에 하이퍼스레드 번호(예로서, "4")로 라벨링된다.
도 7은 기업형 슈퍼컴퓨터 시스템의 일례에 대한 하드웨어의 운영 체제의 뷰의 일례를 묘사한다. 운영 체제는 도 7에 P1 내지 Pmax(702)로 묘사된 복수의 "가상화된 프로세서"를 본다. 가상화된 프로세서는 기업형 슈퍼컴퓨터에 포함된 모든 노드에 걸친 하이퍼스레드의 총 수에 대응한다. 따라서, 도 6b의 예를 이용하면, 총 12개의 하이퍼스레드가 3개의 노드에 걸쳐 존재하면, 총 12개의 가상화된 프로세서가 기업형 슈퍼컴퓨터 상에서 실행되는 운영 체제에서 보일 것이다. 운영 체제는 또한, 모든 노드에 걸쳐 물리 메모리의 총 양과 동일한 크기의 대용량이고, 물리적인, 선형 메모리로 보이는 "가상화된 물리 메모리"(704)를 본다.
하기에 더 상세하게 설명될 바와 같이, 하이퍼커널은 그것이 실행되고 있을 때, 그것의 시스템의 관찰에 기초하여 캐시 메모리 및 가상 프로세서 배치의 이용을 동적으로 최적화한다. "가상 프로세서"는 그것의 게스트 운영 체제에 알려진 컴퓨팅 엔진, 즉 일부 운영 체제 콘텍스트 또는 상태를 갖는 컴퓨팅 엔진이다. 하기에 더 상세하게 설명될 바와 같이, "섀도우 프로세서(shadow processor)"는 익명의 가상 프로세서, 즉 가상 프로세서였지만 현재 그것의 운영 체제 콘텍스트를 포기했고 하이퍼커널에만 알려진 콘텍스트를 갖는 것이다.
리소스 가상화
메모리 가상화
상술한 바와 같이, 물리 구성에서, 각각의 노드는 메모리에서의 위치를 표현하는 메모리 어드레스의 어레이를 갖는다. 이와 같이, (도 6b에 도시된 바와 같이) 3개의 노드를 갖는 물리 구성에서, 각각이 어드레스(0x123456)를 갖는 3개의 메모리 위치가 존재한다. 대조적으로, 가상 구성에서, 모든 메모리 어드레스는 고유하며 이 세 노드에 포함된 모든 메모리의 총합을 표현한다. 가상 구성에서 모든 메모리는 공유되며, 모든 메모리 캐시는 일관적이다. 일부 실시예에서, 메모리는 또한, 단조롭게 증가하는 메모리 어드레스를 갖는 일련의 연속 블록으로 세분된다. 본 명세서에서 설명된 예에서, 각각의 페이지는 4K 바이트의 메모리를 갖지만, 적용되는 바에 따라, 다른 세분된 부분이 또한 이용될 수 있다. 용어 "블록"은 메모리 위치의 인접 어레이를 설명하기 위해 본 명세서에서 이용된다. 일부 실시예에서, "블록"은 "페이지"이다.
프로세서 가상화
운영 체제에 의해 보여지는 가상 프로세서(예로서, 도 7의 가상 프로세서(706))는 물리 구성에서 하이퍼스레드 상에 구현되지만, 위치 독립적일 수 있다. 따라서, 운영 체제가 그것이 단일의 물리 서버 상에서 실행되는 500개의 프로세서를 갖는다고 생각할지라도, 실제로는 그것이 각각 100개의 프로세서로 구성된 5개의 노드를 가질 수 있다(또는, 도 6b에서 도시된 바와 같이, 운영 체제는 단일의 물리 서버 상에서 실행되는 12개의 프로세서를 갖는다고 생각할 것이다). 가상 프로세서 상에서 실행되는 계산은 계산이 실행되고 있을 때, 하이퍼스레드 상의 물리 구성에 의해, 또는 가상 프로세서가 실행되고 있지 않을 때(즉, 중단되거나 중단된 계산의 상태), "연속적으로" 설명된다.
본 명세서에서 이용된 바와 같이, "연속"은 가상 프로세서의 상태를 표현한다. 각각의 연속은:
Figure 112018031682160-pct00001
프로세서 상태(즉, 저장된 레지스터, 등)를 갖는다.
Figure 112018031682160-pct00002
실행을 위해 리프 노드(leaf nodes)에 지능적으로 연속을 할당하는 방법에 관한 정보로 스케줄러 객체를 가이드하는 성능 표시자의 세트를 갖는다.
Figure 112018031682160-pct00003
운영 체제가 생각하는 프로세서가 이 연속이 할당되는 물리 프로세서임을 나타내는 가상 프로세서 식별자를 갖는다.
Figure 112018031682160-pct00004
이 연속이 대기하고 있는(가능하게 빈) 사건을 갖는다.
Figure 112018031682160-pct00005
"사건을 대기 중" 또는 "준비됨"을 포함하는 상태를 갖는다.
I/O 가상화
I/O 시스템은 프로세서 및 메모리에 대한 유사한 패러다임을 관찰한다. 디바이스는 물리 구성의 물리 어드레스 및 가상 구성의 가상 어드레스를 갖는다. 계산을 이동시킬 때(하기에 더 상세하게 설명된), 예를 들면 I/O 연산과 연관된 메모리 버퍼가 존재하는 경우, 이용된 I/O 디바이스는 그들이 그들과 연관되는 메모리에 공동 위치되면 아마도 더 양호하게 수행할 것이고, 그에 따라 이동될 수 있다.
리소스
리소스 맵은 가상 구성과 물리 구성 간을 전환하기 위해 이용된다. 다음은 다양한 실시예에서 기업형 슈퍼컴퓨터에 의해 이용된 3개의 유형의 리소스 맵이다.
"물리적 리소스 맵"은 각각의 노드 상에서 이용가능한 물리 리소스를 설명하는 표이다. 그것은 예를 들면, 각각의 노드 상의 프로세서의 수 및 유형, 디바이스, 이용가능한 메모리 및 그 물리 어드레스의 범위 등을 포함한다. 일부 실시예에서, 이 표는 판독 전용이며 부팅시 고정된다.
"초기 가상 리소스 맵"은 운영 체제의 부팅 이전에 고정되고 운영 체제의 관점에서 이용가능한 가상 리소스를 설명한다. 구성은 운영 체제에 의해 판독가능하다. 일부 경우에서, 기본 하드웨어 리소스와 일 대 일로 일치하지 않는 시스템(운영 체제의 관점에서)을 구성하는 것이 바람직할 수 있다. 하나의 예로서, 운영 체제가 더 많은 메모리 및 더 적은 코어를 갖는 것이 바람직할 수 있다. 이것은 메모리 대 코어의 비를 변경함으로써, 즉 초기 가상 리소스 맵을 수정함으로써 달성될 수 있다.
"현재 리소스 맵"은 각각의 하이퍼커널 인스턴스에 의해 생성되고 유지된다. 이 맵은 각각의 노드의 관점에서 가상 리소스 맵과 물리 리소스 맵 간의 현재 맵핑을 설명한다. 가상 리소스 맵에서 각각의 엔트리에 대해, 현재 가상 리소스에 할당된 물리 리소스의 정의가 유지된다. 초기에(예로서, 부팅시), 현재 리소스 맵은 초기 가상 리소스 맵의 카피(copy)이다. 하이퍼커널은 그것이 리소스 부하의 특성을 관찰하고 물리 리소스의 가상 리소스로의 매핑을 동적으로 변경할 때(그 역도 마찬가지임) 시간에 걸쳐 현재 리소스 맵을 수정한다. 예를 들면, 가상화된 머신에서 이더넷 제어기(eth27)의 위치의 정의는 상이한 시간에 상이한 하드웨어 제어기를 참조할 수 있다. 현재 리소스 맵은 필요에 따라 가상 메모리 하위시스템과 같은, 가상 하드웨어 리소스 매핑을 동적으로 수정하기 위해 하이퍼커널에 의해 이용된다.
리소스 이동 개요
본 명세서에서 설명된 기술을 이용하여, 가상화된 리소스가 물리 위치 간에 이동 수 있다. 상기 설명된 바와 같이, 운영 체제에는 가상화된 시스템에 관한 정보가 제공되지만, 그 정보는 물리 시스템에 따를 필요가 없다.
다음의 예에서, 기업형 슈퍼컴퓨터가 단일 노드에 맞을 수 있는 것보다 큰, 대용량 메모리 내 데이터베이스를 보유하고 있다고 가정하자. 데이터베이스의 일부가 제 1 노드인 "노드1"에 있다. 상이한 노드("노드2") 상의 코어 중 하나가 노드1에 의해 소유되고 노드2 상의 캐시에 로컬로 상주하지 않는 데이터에 액세스하려고 시도한다고 가정하자. 노드2 상의 코어는 그것이 액세스할 수 있어야 한다(그러나 액세스할 수 없다)고 믿는 데이터에 액세스하려고 시도하기 때문에 메모리 액세스 위반을 수신할 것이다. 하기에 더 상세하게 설명될 바와 같이, 예외는 하이퍼커널에서 취급된다.
상황을 해결될 수 있는 하나의 방식은 메모리의 필요한 영역을 노드2로 이동시킨 다음, 제어를 다시 운영 체제로 리턴하는 것이다(결과적으로, 그것을 다시 데이터베이스 시스템으로 리턴시킨다). 소프트웨어는 그 다음, 의도된 대로 진행할 수 있다(즉, 액세스 위반이 전혀 발생하지 않은 것처럼).
많은 경우에, 상기 노드2에 의해 필요에 따라 메모리의 동일한 영역 블록에 또한 액세스하려고 시도하고 있는 다른 노드(예로서, "노드3")에 하나 이상의 다른 코어가 존재할 수 있다. 노드3은 동일한 데이터에 액세스하려고 시도할 수 있거나, 그것은 이동된 메모리에 포함된 상이한 데이터에 액세스하고 있을 수 있다(또한, "거짓 공유"로서 언급됨). 데이터는 노드3으로 이동될 수 있지만, 노드2 상의 코어가 두 번째 데이터 요청을 하면, 데이터는 다시 노드2로 이동되어야 할 것이고(즉, 잠재적으로 데이터를 반복적으로 앞뒤로 이동시킴), 그것은 느리고 낭비적일 수 있다. 코어 간에 데이터를 앞뒤로 이동시키는 것을 회피하는 하나의 방식은 코어 및 데이터의 연관 블록이 공동 위치되어야 한다는 것을 인식하는 것이다. 본 명세서에서 설명된 기술을 이용하여, 메모리 및 계산을 이동시킬 수 있어서 그들이 동일한 노드 상에 상주하게 한다. 이렇게 행하는 것은 데이터에 더 빨리 액세스할 가능성이 높아지고, 로컬 캐시에 저장된 데이터를 공유할 확률이 높아진다.
액세스 위반이 발생할 때, 하이퍼커널이 응답하는(시스템 의존적인 방식으로) 사건이 트리거링(triggering)된다. 이러한 사건을 취급할 수 있는 방법의 하나의 예는 패닉 루틴(panic routine)의 호출에 의한 것이다. 적용가능하다면, 다른 방식이 또한 이용될 수 있다. 하기에 더 상세하게 설명될 바와 같이, 하이퍼커널은 사건의 원인을 조사하고 사건을 취급하기 위한 적절한 전략(예로서, 저 레벨 트랜잭션(transaction)을 결정한다. 상기 설명된 바와 같이, 사건을 취급하는 하나의 방식은 하이퍼커널 가상화 메모리의 하나 이상의 블록이 하나의 노드의 메모리로부터 또 다른 노드의 메모리로 전송되는 것이다. 전송이 그 다음, 개시될 것이고 대응하는 리소스 맵이 업데이트될 것이다. 연속은 (하기에 논의된) 사건 표라고 하는 공유 메모리의 로컬 표에 위치하도록 구축되어 전송이 완료된 후 운영 체제에 제어가 리턴하는 것과 같이 다시 시작될 때 다음에 연속이 행해지도록 하는 것일 것이다. 가상 프로세서를 요청되는 메모리를 포함하는 노드로 이동시키거나 가상화된 메모리(및 그것의 가상화된 메모리 어드레스)를 하나의 노드로부터 또 다른 노드로 이동시키기 위한 결정이 또한 행해질 수 있다. 다양한 실시예에서, 하이퍼커널은 사건을 취급할 때 3가지 결정을 행한다: 어떤 (가상) 리소스가 이동해야 하는지, 그들이 이동할 시간, 및 그들이 이동해야 할 장소(물리적 위치의 관점에서).
타이들트리( TIDALTREE )
도 2에 묘사된 물리 계층 구조는 "스케줄러 객체"(즉, 데이터 구조)의 세트를 포함하는 유사한 소프트웨어 계층 구조를 갖고, 그의 각각은 하기에 설명된 특성의 세트를 갖는다. 스케줄러 객체는 트리의 각각의 노드가 스케줄러 객체인 메모리 내 트리 데이터 구조인 "타이들트리"를 형성한다. 각각의 스케줄러 객체는 슈퍼컴퓨터의 물리 구조의 요소에 대응하고(그러나, 그 역도 반드시 그러진 않음), 따라서 전체 머신에 대해 하나의 노드(예로서, 도 2에서 도시된 바와 같은 노드(100)), 시스템의 각각의 물리 노드에 대한 하나의 노드(예로서, 도 2에 도시된 바와 같은 노드(102)), 전체 머신을 포함하는 물리 노드 상의 각각의 멀티코어 소켓에 대한 하나의 노드(예로서, 도 2에 도시된 바와 같은 노드(202)), 각각의 소켓의 각각의 코어에 대한 하나의 노드(도 2에 도시된 바와 같은 노드(210)), 및 그 코어 상의 각각의 하이퍼스레드에 대한 하나의 노드(예로서, 도 2에 도시된 바와 같은 노드(232))가 존재한다.
각각의 스케줄러 객체(s)는:
Figure 112018031682160-pct00006
물리 구성요소(예로서, 랙, 블레이드, 소켓, 코어, 하이퍼스레드)와 연관된다.
Figure 112018031682160-pct00007
트리의 루트를 제외하고, 그 동작을 지시하는 것에 부분적으로 책임이 있는 부모 스케줄러 객체를 갖는다(하기에 더 상세하게 설명된 바와 같음).
Figure 112018031682160-pct00008
그의 각각의 스케줄러 객체인 자식의 세트를 갖는다. 이것은 리프(leaf)(예로서, 하이퍼스레드) 노드에 대한 널 세트(null set)이다. 하기에 더 상세하게 설명될 바와 같이, 스케줄러 객체(s)는 작업을 관리하고 그것을 그의 자식에게, 그리고 간접적으로 그의 손자, 등에게 할당할(또는 재할당할) 책임이 있다(즉, s에서 루팅된 하위 트리에 있는 모든 노드를 관리한다).
Figure 112018031682160-pct00009
연속의 세트인 작업 큐를 갖는다(전술한 바와 같음).
Figure 112018031682160-pct00010
I/O 디바이스의 (가능하게 빈) 세트가 또한, 작업을 관리하고 할당(또는 재할당)할 책임이 있는 상기 I/O 디바이스의 (가능하게 빈) 세트를 갖는다.
각각의 노드는 일부 형태의 캐시 메모리의 계층과 잠재적으로 연관될 수 있다. 캐시 계층 구조는 스케줄러 객체가 높을수록, 일반적으로 계산이 계층 구조의 대응하는 레벨에서 캐시를 효율적으로 활용하게 될 것이라는 점에서 트리의 계층 구조를 따른다. 물리 노드에 대응하는 스케줄러 객체의 캐시는 그 노드에 대응하는 메모리의 캐시일 수 있다. 물리 노드 상의 메모리는 가상 머신의 메모리의 캐시로서 간주될 수 있다.
리소스 이동 - 부가적인 정보
하이퍼커널은 가상 구성이 상주하는 가상 하드웨어의 일부를 시뮬레이팅한다. 그것은 변환된 물리 하드웨어 사건 뿐만 아니라, 다른 노드에서 실행중인 하이퍼커널 코드에 의해 생성된 노드 간 하이퍼커널 메시지의 수신과 같은, 소프트 사건을 필딩(fielding)하는 사건 중심 아키텍처이다.
상기 설명된 바와 같이, 하이퍼커널에 중요한 인터럽트 사건이 발생할 때, 하이퍼커널은 인터럽트에 응답하는 방법을 결정한다. 제어가 운영 체제로 리턴되기 전에 더 높은 우선 순위의 인터럽트가 인식되고 적절한 조치가 취해진다. 또한, 상기 설명된 바와 같이, 하이퍼커널은 3가지 별개의 결정을 할 수 있다: (1) 어떤 리소스가 특정 사건 시에 이동해야 하는지, (2) 그들이 이동할 시간, 및 (3) 그들 리소스가 이동해야 할 장소.
다음의 예에서, 가상 머신에서 스케줄러 객체("s")가 정상 상태(steady state)에 있다고 가정하자. 물리 노드에 대응하는 각각의 스케줄러 객체는 그것에 할당된 물리 프로세서 소켓의 세트를 갖는다. 이들 소켓의 하이퍼스레드는 이용 중이거나 이용 중이 아닐 수 있다. 물리 노드는 또한, 일부 고정된 양의 메인 메모리 및 일부 네트워크 디바이스를 포함하는 I/O 디바이스의 세트를 갖는다. 스케줄러 객체(s)는 노드에 대응할 때, s에서 루팅된 하위트리의 노드에 할당된 네트워크 및 기타 I/O 디바이스를 관리할 책임이 있다. 다음은 동기 또는 비동기 사건 시에 리소스가 이동할 수 있는 방법에 대한 설명이다.
동기 사건에 의해 트리거링된 이동
다음의 예에서, 리프 노드 스케줄러 객체(s), 및 s에 할당된 가상 프로세서(p)가 존재한다고 가정하자. 리프 노드 스케줄 객체(s)는 애플리케이션을 대신하여 애플리케이션 또는 운영 체제 코드를 실행한다고 가정하자. 리프 노드가 무한 루프가 아니라고 가정하면, p는 어떤 이유로(예로서, I/O 동작의 완료를 기다리는 것, 페이지 폴트, 등) 결국 수행할 작업이 없어질 것이다(즉, 정지(stall)). p가 실제로 정지하는 것을 허용하는 대신에, 하이퍼커널은 정지된 계산에 대한 정보를 일부 다른 노드로 이동시켜, 다른 노드의 프로세서 중 하나가 정지된 연속을 "책임지게"하거나, 아니면 노드 상의 정지된 계산의 "책임"을 유지하고 대신에, 관련 리소스를 현재 노드로 이동시킬지의 여부를 결정한다.
정지는 따라서, 2가지 방식 중 하나로 취급된다: 계산이 현재 리소스를 갖는 물리 노드로 이동되거나, 그렇지 않으면 리소스는 리소스를 요청한 물리 노드로 이동된다. 정지의 취급을 위한 예시적인 의사 코드는 하기의 "예시적인 루틴"에서 하기에 제공된다("OnStall" 루틴으로서).
정지를 취급하는 방법과 같은 결정은 사건의 도착 순서, 가상 머신 상에서 실행되는 계산의 상태, 캐시의 상태, 시스템 또는 노드 상의 부하, 및 다른 많은 것과 같은 많은 것에 의존할 수 있다. 결정은 동적으로, 즉 특정 시점에서 이용가능한 최상의 정보에 기초하여 행해진다.
정지된 계산의 기록
정지된 계산은 "연속"으로서 언급된 데이터 구조에 기록된다. 연속은 예를 들면 "사건 대기 중" 또는 "준비"일 수 있는 상태를 갖는다. 정지된 계산은 상태("사건 대기 중")를 갖는 새롭게 생성된 연속으로서 기록된다. 일단 정지의 이유가 만족되면(예로서, 사건의 감지로 인해), 대응하는 연속의 상태가 "준비"로 변경된다. 상태("준비")를 갖는 각각의 연속이 스케줄러 객체의 "대기 큐"에 저장되어 결국 그것이 실행을 위해 스케줄링된다. 대조적으로, 상태("사건 대기 중")를 갖는 임의의 연속은 임의의 스케줄러 객체의 큐에 저장되지 않을 것이다. 대신에, 그것은 누락된 리소스의 수신과 같은, 대응하는 계산을 정지시킨 하드웨어 사건이 발생할 것으로 예상되는 물리 노드의 로컬 공유 메모리에 저장된다.
부가적으로, 새로 생성된 연속은 그 생성을 야기한 정지 사건과 연관된다. (정지) 사건과 이들 사건을 기다리는 연속 사이의 이 매핑은 비동기 사건의 빠른 디스패치(dispatch)를 허용한다(하기에 설명된 "handleEvent" 참조). 연속과 사건 간의 매핑은 "사건 표"라는 표에 저장되고 대응하는 물리 노드의 공유 메모리에 보관된다. 각각의 물리 노드는 그 자체 사건 표를 갖고, 물리 노드의 사건 표는 그 물리 노드의 모든 코어에 의해 직접적으로 어드레싱가능하다. 물리 노드의 사건 표에 기록된 모든 예상 사건은 그 물리 노드에서 발생할 수 있는 하드웨어 사건에 대응한다. 물리 노드(n)에 매핑된 스케줄러 객체(s)는 n을 표현하고, n의 사건 표는 s와 연관된다. 일부 경우에서, 몇몇 연속이 동일한 사건에 대해 대기할 수 있으므로, 사건이 트리거링될 때 일부 명확화가 필요할 수 있다.
연속은 "InitContinuation" 루틴을 이용하여 구축된다. 계산을 이동시키기로 결정되면, 리소스를 보유한 원격 물리 노드가 정지된 계산에 대응하는 연속을 구축할 것이고 원격 물리 노드의 사건 표에 그것을 저장할 것이다. 그 연속이 재개될 때, 리소스가 이용가능해질 것이다. 사실상, 하이퍼커널은 가상 프로세서를 상이한 노드로 전송했다.
리소스를 이동하기로 결정되는 경우에, 정지를 경험한 노드는 리소스의 전송을 요청하고 InitContinuation을 이용하여 연속을 구축하여 로컬 사건 표에 그것을 저장한다. 리소스의 수신시에, 연속은 타이들트리의 적절한 노드에 결합되고, 그 연속이 재개될 때, 리소스는 일반적으로 이용가능하고 보이게 될 것이다. 사실상, 가상 리소스는 그것을 요청한 노드로 전송되었다.
사건 표에 연속을 배치함으로써, 사건을 수신하는 프로세서가 신속하게, 자신의 로컬 사건 표에서 관련된 연속을 신속하게 발견할 것이 보장되는 것에 주의한다. 계산에서 정지의 이유가 만족되었을 것이다.
정지를 처리하면, 가상 프로세서(p)는 사실상 정지될 것이다. 정지를 처리하는 것과 재개할 새로운 연속을 찾는 것 사이에, p는 "익명 섀도우 프로세서", 즉 운영 체제에 어떠한 아이덴티티도 알려지지 않은 프로세서가 된다. 이 섀도우 프로세서는 그 다음, 재개할 새로운 연속을 찾는다. 이에 대한 일례는 하기에 더 상세하게 설명된 "assignProcessor" 루틴에 도시된다.
표기법
e를 가상 프로세서(p)를 정지시킨 사건으로 둔다. e가 일부 물리 노드(n)의 로컬 하드웨어에 의해 트리거링된다고 가정하자. 특히 r을 정지 사건이 발생하게 한 리소스라고 가정하자. 리소스(r)은 메모리의 블록, 또는 I/O 동작, 또는 네트워크 동작일 수 있다. p가 물리 노드(n)을 표현하는 스케줄러 객체에서 루팅된 서브트리에 속하는 스케줄러 객체(s)에 할당된다고 가정하자.
정지 중(On-Stall)
일 예시적인 정지 중 루틴에 대한 의사 코드는 이하의 "예시적인 루틴" 섹션에 제공된다. 이동 연속 함수는 노드(n)에서 프로세서(p)가 리소스가 이동하지 않아야 한다고 즉, 계산이 이동해야 한다고 결정한 경우 그리고 그 경우에만 참을 리턴시킨다. 이것은 노드 간의 r의 이동의 이력 및 빈도, r의 유형, 이동의 비용, r을 기다리는 n의 로컬 사건 표의 사건의 수, 시스템 부하, 등과 같은 복수의 인자에 의해 결정될 수 있다. 예를 들면, 대기 중인 n의 로컬 사건 표에 저장된 연속 존재하면, 리소스를 이동시키는 것은 바람직하지 않을 수 있다.
이동으로부터 이익을 얻을 수 있는 다양한 패턴의 사건이 존재한다. 액세스 위반과 같은 이러한 사건의 패턴을 설명하는 하나의 방식은 공식 언어 이론에 있다. 정규(즉, 촘스키(Chomsky) 유형 3) 언어는 유한 상태 오토마타(automata)에 의해 인식될 수 있다. 게다가, 작고 유연한 표기법을 이용하여, 관찰되는 사건에 대한 설명은 일반 언어로 문장(또는 촘스키 시퀀스)으로서 만들 수 있으며 인식은 대응하는 유한 상태 자동화에서 상태 전이로서 모델링되었다. 사건의 전체 촘스키 시퀀스가 보여질 때, 이동 연속이 그에 따라 평가된다: 유한 상태 자동화가 촘스키 시퀀스를 수용하면 조건이 충족되고, 그렇지 않으면 충족되지 않는다. 최소화된 유한 상태 머신의 길이는 보존해야하는 이력의 양을 정의한다.
다양한 실시예에서, 모든 사건은 로컬적으로 발생하고, 사건을 수신하는 물리 노드 상의 하이퍼커널은 그것을 취급해야 한다 - 정말로, 물리 노드 간에는 동기 사건이 발생하는 것으로 가정되지 않는다. 노드 간의 이동 전략을 조정하기 위해 "메시지"가 이용된다. 메시지 "전송"은 노드의 관점에서 동기식이지만, 메시지 "수신"은 비동기식이며, 프로세서나 섀도우 프로세서는 일반적으로, 메시지 수신을 기다리지 않는다. 메시지가 도착하면, 그들은 하이퍼커널에 의해 가상 인터럽트로서 처리된다. 하나의 실시예에서, 하이퍼커널은 취급되도록 대기 중인 메시지가 존재하는 동안 프로세서가 연속을 재개하는 것을 허용하지 않을 것이다. 따라서, 제어가 운영 체제로 다시 전송되기 전에, 큐가 검사되고, 모든 메시지는 제어가 운영 체제로 다시 전송되기 이전에 처리된다.
스케줄러 객체(s) 및 연속(c)에 대해, 비용 함수 비용(s, c)가 트리의 검색을 안내하기 위해 이용될 수 있다. p의 다수의 조상이 비어 있지 않은 큐를 가지면, p는 비어 있지 않은 대기 큐로 발견된 제 1 조상에서 그것의 검색을 중지하고 싶지 않을 수 있다. 최적화 전략에 이용된 메트릭에 의존하여, p의 선택은 p와 그것의 선택된 조상 사이의 거리 뿐만 아니라, 대기 큐의 길이와 같은 다른 파라미터에 의존할 수 있다.
함수(find-best-within(s))는 스케줄러 객체의(비어 있지 않은) 대기 큐에서 "최적합(best-fit)" 연속을 리턴시키기 위해 이용될 수 있다. 고려될 수 있는 파라미터의 예는 다음을 포함한다:
1. 큐에서의 위치
2. p와 연속에서 기록된 마지막 위치 사이의 관계(이들 위치가 가까울수록 캐시 엔트리 재이용이 더 양호할 수 있다).
3. 성능 표시자는 큐의 연속에 기록된다.
비용 및 find-best-within 함수는 주어진 시스템 내에서 적용가능하도록 맞춤화될 수 있다.
비동기 사건에 의해 트리거링된 이동
비동기 사건의 예는: 패킷의 수신, I/O 전송의 완료, 리소스의 수신, 리소스를 요청하는 메시지의 수신 등을 포함한다. 일반적으로, 운영 체제에 의해 관리된 하드웨어 디바이스에 대응하는 사건을 수신하는 하이퍼커널은 그 사건과 연관된 연속을 스케줄러 객체(s)에 전달할 필요가 있다. 이렇게 함으로써, s는 이 연속을 적절한 스케줄러 객체 그 다음, 궁극적으로 그 연속에 의해 표현된 운영 체제에 의해 관리된 계산에 대해 이용할 수 있게 할 것이다. 반면에, 사건이 또 다른 물리 노드 상의 하이퍼커널로부터 메시지를 수신하면, 하이퍼커널은 이를 직접적으로 취급할 수 있다.
설명을 단순화하기 위해, 본 명세서에서 설명된 예에서, 사건과 연관된 하나의 연속만이 있다는 가정이 이루어진다. 본 명세서에서 설명된 절차는 필요한 경우 다수의 연속이 동일한 사건과 연관되는 경우에 대해 일반화될 수 있다.
일부 실시예에서, 연속을 배치할 스케줄러 객체에 대한 검색은 연속을 구축한 트리의 리프에서 시작하여(이전에 이 노드에서 실행된 계산인 경우) 그 다음, 위로 진행한다. 이렇게 함으로써 캐시 엔트리를 재이용할 가능성이 증가된다.
사건 취급
일 예시적인 취급 사건 루틴을 위한 의사 코드는 "예시적인 루틴" 섹션에서 하기에 제공된다. 비용 함수(cost(s, c))는 c를 스케줄링 객체(s)에 할당하는 것이 적합한지를 결정하는데 도움을 주는 함수이다. 비용 함수는 대기 큐의 크기, (캐시 엔트리가 재이용될 확률을 높이기 위해) s와 c에 대한 원래 스케줄링 노드 사이의 노드 순회 거리, 및 가상 프로세서의 이력, 물리 프로세서, 및 연속과 같은 다양한 파라미터에 의존할 수 있다. s에 가까운 스케줄러 객체의 대기 큐가 이미 너무 많은 연속을 포함하면, 임의의 새로 추가된 연속이 실행을 위해 스케줄링될 때까지 비교적 오랜 시간이 걸릴 수 있다. cost(s, c)에 기여하는 예시적인 조건이 하기에 설명되고, 그 조건은 적용가능한대로 맞춤화될 수 있다.
비용
비용 함수는 연속을 선택하고 객체를 스케줄링할 때 옵션을 평가하기 위해 이용된다. 비용 함수는 가중 인자의 합의 합산으로서 표현될 수 있다:
비용 = w1f1 x 1 + w2f2 x 2 + ... + wnfn x n,
여기서, wi는 대응하는 인자의 중요성을 나타내고 xi는 지수 함수를 나타낸다.
인자(fi)의 예는 하기의 비용의 각각에 대해 열거된다. 가중치(wi) 및 지수(xi)는 경험적으로 또는 시뮬레이션에 의한 것과 같은 다양한 방식으로 결정될 수 있다. 초기 가중치와 지수는 다양한 애플리케이션 요구에 맞춰 조정될 수 있으며, 성능을 높이기 위해 관리자가 조정할 수 있다. 시스템이 활성화인 동안 가중치가 조정될 수 있으며, 가중치를 변경하는 것은 하이퍼커널의 의미(semantics)가 변경되지 않고, 단지 운영 성능 특성이 변경된다.
고려될 수 있는 인자의 예는 다음을 포함한다:
Figure 112018031682160-pct00011
마지막 프로세서가 이 스케줄러 객체를 비운 이후의 시간의 길이.
Figure 112018031682160-pct00012
타이들트리에서의 스케줄러 객체의 높이.
Figure 112018031682160-pct00013
작업 큐의 길이.
Figure 112018031682160-pct00014
예약 상태(즉, 일부 애플리케이션이 특정 이유로 이 리소스를 예약한 경우일 수 있음).
Figure 112018031682160-pct00015
노드 사양(즉, 노드 자체가 서비스에서 제외되었거나, 문제가 있고, 일부 방식으로 특수화된 기능 등을 가짐).
Figure 112018031682160-pct00016
큐 내의 연속의 수명.
Figure 112018031682160-pct00017
이 연속을 실행하는 마지막 물리 프로세서.
Figure 112018031682160-pct00018
이 연속을 실행하는 마지막 가상 프로세서.
Figure 112018031682160-pct00019
이 연속이 마지막으로 실행되고 있었던 노드.
Figure 112018031682160-pct00020
캐시의 "온도"(캐시는 재이용될 가능성이 있는 엔트리가 있을 때 "웜(warm)"이다. 캐시는 캐시 엔트리를 재이용할 가능성이 없을 때 캐시가 "콜드(cold)"이다).
Figure 112018031682160-pct00021
연속의 그룹 멤버쉽(즉, 연속은 계산 그룹의 일부일 수 있고, 그의 각각의 요소는 그룹의 다른 멤버들에 대해 일부 관련성(affinity)을 갖는다).
Figure 112018031682160-pct00022
성능 표시자(힌트) 및 특수 요구 사항.
"OnStall" 및 "assignProcessor"
도 8은 리소스를 선택적으로 이동시키기 위한 프로세스의 일 실시예를 도시한다. 일부 실시예에서, 프로세스(800)는 예를 들면, OnStall 루틴과 결부하여 하이퍼커널에 의해 수행된다. 프로세서는 코어(또는 프로세서 칩이 하이퍼스레드를 지원하는지의 여부에 의존하여, 코어에 포함된 하이퍼스레드)가 차단되었다는 표시가 수신될 때, 802에서 시작한다. 하나의 예로서, 하이퍼스레드가 액세스할 수 없는 리소스(예로서, 하이퍼스레드를 보유하는 노드와 상이한 노드에 위치되는 RAM)에 대해 하이퍼스레드가 직접 또는 간접적으로 요청을 수신한다고 가정하자. 하이퍼스레드가 리소스에 액세스하는데 실패할 때(즉, 액세스 위반이 발생함), 인터럽트가 발생하고, 이는 인터셉트되거나, 캐치되거나, 그렇지 않으면 802에서 하이퍼커널에 의해 수신된다. 특히, 하이퍼커널은 802에서, 하이퍼스레드가 차단되었다는 표시를 수신한다(그것이 제공하도록 지시를 받은 리소스에 액세스할 수 없기 때문에). 그것의 차단된 상태를 보고하는 것 외에도, 하이퍼스레드는 그것이 액세스하도록 지시받은 메모리 어드레스 및 시도된 액세스 유형(예로서, 판독, 기록, 또는 수정)과 같은 정보를 제공한다.
804에서, 하이퍼커널은 필요한 메모리가(예로서, 차단된 하이퍼스레드가 위치한 노드로) 이동되어야 하는지의 여부, 또는 요청 프로세스가 재매핑되어야 하는지(즉, 가상 프로세서가 상이한 노드로 전송되어야 함)의 여부를 결정한다. 결정은 필요한 메모리가 위치되는 장소, 캐시의 온도, 하이퍼스레드를 보유하는 노드의 작업부하 및 필요한 메모리를 보유하는 노드 상의 작업부하(예로서, 과도하게 함 또는 평균 이하로 함)와 같은 다양한 인자에 기초할 수 있다. 일부 실시예에서, 노드의 작업부하는 타이들트리의 평균 큐 길이에 적어도 부분적으로 기초하여 결정된다.
하이퍼커널이 메모리가 이동되어야 한다고 결정하면, 하이퍼커널은 그것의 현재 리소스 맵을 이용하여 어느 노드가 필요한 메모리를 보유할 가능성이 있는지를 결정하고 그 노드로 리소스를 요청하는 메시지를 전송한다. 하이퍼커널은 또한, 연속을 생성하고 그것을 그것의 사건 표에 배치한다. 802에서 차단된 하이퍼스레드는 따라서, 다른 작업을 취하기 위해 해제되고, assignProcessor 루틴을 이용하여 또 다른 가상 프로세서에 할당될 수 있다.
하이퍼커널은 자신의 메시지 큐를 높은 우선 순위 단위로 체크한다. 하이퍼커널이 그것이 접촉한 노드(즉, "제 1 접촉 노드")로부터 메시지를 수신할 때, 일부 실시예에서 2개의 응답 중 하나가 수신될 것이다. 응답은 제 1 접촉 노드가 필요한 리소스를 가짐을 나타낼 수 있다(그리고 리소스를 제공할 수 있다). 대안적으로, 메시지는 접촉 노드가 더 이상 리소스를 갖지 않음을 나타낼 수 있다(예로서, 노드가 리소스를 상이한 노드로 제공했기 때문에). 후자의 상황에서, 제 1 접촉 노드는 그것이 리소스를 전송한 노드(즉 "제 2 노드")의 아이덴티티를 제공할 것이고, 하이퍼커널은 리소스를 요청하는 제 2 메시지를 전송할 수 있다 - 이번에는 제 2 노드로. 다양한 실시예에서, 제 2 노드가 하이퍼커널에 그것이 또한 더 이상 리소스를 갖지 않는다고 보고하면(예로서, 그것을 제 3 노드에 제공함), 하이퍼커널은 리소스를 계속해서 요청하기보다, 제 3 노드로 연속을 전송하도록 선택할 수 있다. 다른 임계치는 연속을 전송할지의 여부를 결정하거나 리소스를 계속하는데(예로서, 4회 시도) 이용될 수 있다. 게다가, 다양한 기준이 (예로서, 비용 함수에 따라) 리소스를 요청하거나 연속을 전송할지의 여부를 결정하는데 이용될 수 있다.
하이퍼커널이 연속이 전송되어야 한다고 결정한 경우(즉, 계산이 리소스를 로컬적으로 수신하기보다 또 다른 노드로 전송되어야 한다고 결정한 경우), 하이퍼커널은 원격 노드(즉, 필요한 리소스를 갖는 노드)에 원격 노드가 그 자신의 물리 어드레스 공간에 연속을 구축하기 위해 이용할 수 있는 정보를 제공한다. 원격 노드(즉, 연속을 수신하는 노드)가 그것이 필요한 모든 리소스를 갖고 있으면(즉, 초기 액세스 위반을 야기한 리소스를 소유하고 있으면), 연속은 원격 노드의 사건 표에 배치될 필요가 없으며, 대신 타이들트리에 배치될 수 있다. 원격 노드가 연속을 취급하기 위해 부가적인 리소스를 필요로 하면, 수신된 연속은 원격 노드의 사건 표에 배치된다.
도 9는 계층적 동적 스케줄링을 수행하기 위한 프로세스의 일 실시예를 도시한다. 일부 실시예에서, 프로세스(900)는 예를 들면, assignProcessor 루틴과 결부하여 하이퍼커널에 의해 수행된다. 프로세스는 하이퍼스레드가 할당되어야 한다는 표시가 수신될 때, 902에서 시작된다. 프로세스(900)는 다수의 방식으로 호출될 수 있다. 하나의 예로서, 프로세스(900)는 하이퍼스레드가 이용가능할 때(즉, 현재 수행해야 할 일이 없을 때) 호출될 수 있다. 이는 예를 들면, 하이퍼커널이 연속이 행해져야 한다고 결정할 때(예로서, 804에서) 발생할 수 있다. 이전에 차단된 하이퍼스레드는 그것이 더 이상 차단된 계산을 취급할 책임이 없기 때문에 이용가능할 수 있게될 것이다(즉, 하이퍼스레드는 "익명 섀도우 프로세서"가 된다). 제 2 예로서, 프로세스(900)는 이전에 이용불가능한 리소스가 현재 이용가능하다는 메시지가 수신될 때(예로서, 하이퍼커널에 의해) 호출될 수 있다. 하이퍼커널은 리소스가 필요한 계산을 재개하기 위해 하이퍼스레드의 위치를 찾아야 할 것이다. 원래 리소스가 부족하여 차단된 하이퍼스레드는 리소스가 수신된 후에 계산을 재개하는 것일 필요가 없음에 주의한다.
904에서, 타이들트리는 실행할 준비가 된 연속에 대해 탐색되고, 하나는 하이퍼스레드가 재개되도록 선택된다. 다양한 실시예에서, 타이들트리는 리프 레벨로부터 위쪽으로 검색되고, 비용 함수는 하이퍼스레드에 할당할 연속을 결정하기 위해 이용된다. 하나의 예로서, 하이퍼스레드가 이용가능해지면, 가장 오랜 시간 동안 큐잉된 연속이 할당될 수 있다. 어떠한 연속도 리프 레벨에서 대기하고 있지 않거나, 비용 함수로 명시된 임계치 밖에 있으면, 검색이 적절한 연속에 대해 타이들트리(예로서, 코어 레벨, 그 다음 소켓 레벨, 그 다음 노드 레벨)까지 수행되어 하이퍼스레드에 할당할 것이다. 어떠한 적절한 연속도 하이퍼스레드가 노드 레벨에서 재개하기 위해 발견되지 않으면, 그 노드에 대한 하이퍼커널이 루트에 접촉한다. 노드 레벨에서 어떠한 연속도 발견되지 않는 하나의 전형적인 이유는 그 노드가 완전히 활용되기에 충분한 작업이 존재하지 않는다는 것이다. 일부 실시예에서, 노드 또는 노드의 서브세트는 에너지 보존 상태로 진입할 수 있다.
시간 순서
설명의 목적으로, 예에서, "교환(swapping)" 동작은 연속 및 메모리를 전송하기 위해 이용되지만, 사실 모든 실시예에서 반드시 필요한 것은 아니다.
도 10은 초기 메모리 할당 및 프로세서 할당의 일례를 도시한다. 구체적으로, 도 10의 영역(1002)은 메모리의 물리 블록(좌측 상에)과 메모리의 현재 소유자(중앙 열) 간의 하이퍼커널의 맵핑을 묘사한다. 오른쪽 열은 메모리의 이전 소유자를 보여준다. 이것은 초기 메모리 할당이므로, 현재 및 마지막 소유자 열은 동일한 값을 보유한다. 도 10의 영역(1004)은 시스템 가상 프로세서(좌측 상의)와 물리 노드(중심 열)/코어 번호(우측 열) 간의 하이퍼커널의 맵핑을 묘사한다.
가상 프로세서(P00)가 위치(8FFFF)를 판독하도록 메모리 요청을 하고 하이퍼커널이 8FFFF를 포함하는 하나 이상의 메모리 블록을 P00과 동일한 노드(즉, 노드 0)로 이동시키는 것을 결정한다고 가정하자. 블록(8FFFF)은 노드 2 상에 위치된다. 그에 따라, 도 11에 도시된 바와 같이, 8FFFF를 포함하는 블록은 노드 0으로 전송되고, 또 다른 블록은 교환된다(비우기가 요구되고 블록이 유효하면).
다음, 가상 프로세서(P06)가 위치(81FFF)를 판독하기 위한 메모리 요청을 한다고 가정하자. 이 블록의 콘텐트는 노드 0으로 이동되었다(도 11에 도시된 바와 같이). 하이퍼커널은 메모리를 다시 이동시키기 보다, 계산을 이동해야 한다고 결정할 수 있다. 그에 따라, 가상 프로세서(P06)는 도 12에 도시된 바와 같이 노드 0으로 이동되고, 가상 프로세서(P01)와 교환될 수 있다.
성능 정보
잠금 및 다른 동기화기
다양한 실시예에서, 잠금과 같은 동기화 메커니즘의 이용이 최소화된다. 잠금은 예를 들면, 스케줄러 객체에서 큐를 삽입하고 큐 연속을 제거하며 사건 표를 유지하기 위해 이용된다.
코드 경로 길이
일부 실시예에서, 모든 코드 경로의 (최대) 길이는 정적 코드 분석을 통해 결정되어, 하이퍼커널 그 자체에서 소비되는 시간의 추정 가능하고 한정된 양을 초래한다. 모든 데이터 구조는 예를 들면, 색인된 어레이와 같이 사전 할당될 수 있다. 타이들트리의 노드는 부팅할 때 결정되며, 그들의 순회하는 단계의 수와 마찬가지로 불변하다. 하나의 가변 길이 계산은 작업 큐의 길이와 관련이 있지만, 심지어 한계가 있을 수 있으며 계산된 최악의 경우의 추정치이다. 다른 실시예에서, 다른 가변 길이 계산이 이용된다.
정적 저장장치
다양한 실시예에서, 하이퍼커널에서 필요한 모든 데이터 구조는 정적이며, 부팅시 결정되므로, 동적 메모리 할당 또는 가비지 컬렉션(garbage collection)에 대한 어떠한 요구도 존재하지 않는다.
물리 메모리
하이퍼커널에 의해 이용되는 모든 메모리는 물리 메모리이므로, 그것의 내부 연산(예로서, 자신이 관리하고 있는 가상 리소스를 관리하는 것을 제외하고)을 위한 어떠한 페이지 표 또는 가상 메모리가 요구되지 않으며, 또한 하이퍼커널을 운영 체제와 공존시키는데 도움을 준다.
데이터 공유 및 일관성 유지
일부 경우에서, 예로서, 운영 체제에 제공되는 가상 머신의 개념적 무결성을 보존하기 위해, 하나의 노드의 데이터 구조의 변경은 상이한 노드에서 대응하는 것에 따라 조정된다. 본 명세서에서 설명된 많은 데이터 구조는 "노드 로컬"이며 둘 중 하나는 이동할 필요가 없을 것이거나, 일정하고 복제된다. 노드 로컬인 데이터 구조는 노드 상의 모든 하이퍼스레드에 보이고 그들에 의해 어드레스가능하다. 노드 로컬이 아닌(따라서, 조정을 필요로 하는) 데이터 구조의 예는 현재 리소스 맵(또는 그 일부), 타이들트리의 루트, 및 이동 연속(즉, 하나의 노드로부터 또 다른 노드로 논리적으로 이동시켜야 할 수 있는 연속)을 포함한다.
충분한 정도의 일관성을 유지하기 위해 다양한 기술이 이용될 수 있다. 일부는 동기식이며 모든 변경이 모든 노드에 동시에 보인다고 가정하자(즉, "즉각적인 일관성"). 다른 것은 "궁극적인 일관성"을 위해 좀 더 완화된 해결책을 허용하고 노력한다. 상기 언급된 바와 같이, 기업형 슈퍼컴퓨터의 물리 노드는 하나 이상의 고속 상호연결부를 통해 연결된다. 하이퍼커널의 다수의 인스턴스가 상호연결되어 물리 노드 간에 메시지 및 리소스를 앞뒤로 이동시킨다.
현재 리소스 맵의 업데이트
각각의 물리 노드(n)는 물리 리소스 맵, 초기 가상 리소스 맵, 및 현재 리소스 맵의 동일한 카피로(예로서, 부팅 시에) 시작한다. 각각의 노드는 현재 리소스 맵의 그 자신의 카피를 유지한다.
일부 실시예에서, 현재 리소스 맵에서 리소스(r)에 대한 각각의 엔트리는 다음을 갖는다:
1. 물리 노드 상의 다수의 하이퍼스레드가 동시에 r을 수정할 수 없게 하는 로컬 로크(local lock).
2. 현재 리소스를 소유하는 노드를 명시하는 노드 번호.
3. n이 r을 소유한 마지막 시간 이후 n이 r을 요청한 횟수의 카운트(k).
4. 설정될 때, 이 노드(n)가 r을 원함을 나타내는 불린(boolean).
5. 설정될 때, 이 노드가 r을 갖지만 그것을 전송하는 중이라는 것을 나타내는 불린, 이 경우 노드 번호는 새로운 소유자를 명시한다.
일부 실시예에서, 카운트(k)는 리소스의 무한 추적을 다루기 위해 이용된다. k가 임계치를 초과하면, 시스템 주위의 리소스를 추적하기보다 새롭게 구축된 연속을 이동시키는 것이 더 양호하다는 결정이 내려진다.
다음은 리소스의 이동을 개시하고 리소스를 수신하기 위한 메커니즘의 일례이다. 주요 트랜잭션은 다음을 포함한다:
1. 노드(n)는 리소스(r)에 대한 요청을 n'으로 전송한다.
2. 노드(n')는 n으로부터 리소스(r)에 대한 요청을 수신한다.
3. 노드(n')는 특정 환경 하에서 n으로 "거부(deny)"메시지를 전송할 수 있고, 그렇지 않으면 그것은 리소스(r)를 "수용"할 수 있고 전송할 것이다.
4. 노드(n)는 리소스(r)가 이 시점에서 n'에 의해 전송될 수 없으면 n'으로부터 "거부" 메시지를 수신할 것이다. 그것은 r이 n'에 의해 필요하거나, r이 요청의 도착시에 어딘가 다른 곳으로 전송되고 있는 것일 수 있다. 전달 어드레스는 그 자체로 n'이고, 이는 "이후에 다시 시도함"과 등가일 수 있다. 노드(n)이 거부 메시지를 수신할 때, 그것은 요청을 n'에 의해 제안된 노드, 종종 리소스의 새로운 소유자로 재전송할 수 있다. 시스템 주위에서 리소스를 n을 추적하는 것을 회피하기 위해, 그것은 리소스를 얻기를 시도하는 횟수를 추적할 수 있고, 시도 횟수가 임계치를 초과하면 전략을 스위칭한다.
5. n'이 리소스를 전송할 수 있으면, 노드(n)는 리소스(r)을 수신할 것이다. 이 경우, n은 c가 재개될 수 있도록 r을 기다리고 있었던 연속(c)을 스케줄링할 필요가 있다.
타이들트리 루트
일부 실시예에서, 시스템의 노드의 세트의 하나의 물리 노드는 "마스터 노드"로서 지정된다. 이 노드는 부팅 시에, 초기 가상 리소스 맵 및 다른 데이터 구조를 구축할 책임을 가져서, 다른 노드로 그들을 복제하고, 운영 체제(예로서, 리눅스)를 부팅한다. 하나의 예외를 제외하면, 마스터 노드는 시스템이 부팅된 후에 단지 임의의 다른 노드일 수 있다. 적어도 하나의 물리 노드가 타이들트리의 루트를 저장해야한다. 마스터 노드는 루트가 배치될 수 있는 장소의 하나의 예이다. 타이들트리 루트 스케줄링 객체의 사건 큐에 대한 업데이트는 업데이트를 수행하기 위해 마스터 노드로 메시지를 전송함으로써 각각의 노드에서 취급된다.
시간에 걸쳐, 하이퍼커널은 적응할 것이고, 운영 체제 및 애플리케이션의 리소스 액세스 패턴이 허용된다면 지역성은 지속적으로 향상될 것이다.
연속
상기 설명된 바와 같이, 모든 노드에 걸친 물리 메모리 어드레스는 유일하지 않다. 일부 실시예에서, 연속된 물리 메모리 어드레스의 포함은 분할된 정수 인덱스를 이용하여 하이퍼커널에서 중요한 데이터 구조를 지정함으로써 회피될 수 있다. 어드레스를 연속으로 입력해야하는 경우에, 어드레스가 소스의 물리 어드레스이고 목적지의 물리 어드레스와 아무 관계가 없으므로, 이동 중에 주의가 필요하다. 연속을 이동시키는 것은 상기 논의된 바와 같이, 목적지 노드에 그것의 콘텐트를 카피하고, 소스로부터의 임의의 물리 어드레스를 타겟으로 재매핑하는 것을 의미한다.
타임스탬프
일부 실시예에서, 실행 없는 카운터(free-running counter)에 대한 액세스는 모든 노드에 보여진다. 이 기능이 없으면, 각각의 노드 상에서 실행 없는 카운터가 또한 이용될 수 있다. 연속의 카운터는 소스와 목적지 간에 매핑된다.
디스크 및 영구 플래시의 취급
필요한 리소스가 디스크(또는 영구적인 플래시) 상에 있는 경우, 일부 실시예에서, 이러한 리소스는 RAM과 같은 리소스보다 무거운 중력장을 갖는 것으로서 간주된다. 그에 따라, 디스크/플래시 리소스는 매우 자주 이동되지 않는 경향이 있을 것이다. 대신에, 연속은 명령 단위로 필요한 영구 저장장치를 포함하는 물리 노드로, 또는 영구 저장장치와 연관된 버퍼로 더 빈번하게 이동할 것이다.
운영 체제 구성
운영 체제를 구성하는 많은 방식이 있다. 서버에 대해, 그것의 운영 체제가 하이퍼커널에 의해 구현된 가상 머신으로부터 작은 세트의 리소스 유형: 선형 블록 어레이, 네트워크, 프로세서, 메모리, 및 노드 간 상호연결부를 포함하는 저장장치를 단지 요구하도록 구성된다는 가정이 행해질 수 있다. 결과적으로, 운영 체제 설치의 복잡성이 감소될 수 있다.
예시적인 데이터 구조 및 기능
다음 섹션은 다양한 실시예에서 이용되는 데이터 구조 및 기능의 예의 목록을 제공한다.
init-continuation: 계산이 정지될 때 연속을 초기화한다.
assignProcessor: 새로운 연속을 섀도우 프로세서에 할당하는 루틴(가능하면).
on-stall(r): 리소스(r)에 대해 정지 사건이 발생한다.
migrate-computation(computational-state, r, n): 당신이 리소스(r)를 갖기를 희망하는 또 다른 노드(n)로의 계산 상태의 이동을 요청하는 메시지.
on-interrupt(i): 소프트웨어 인터럽트(i)가 발생한다.
handle-event(e): 하이퍼커널이 비동기 사건을 취급하기 위해 호출될 때 실행된 루틴.
request-resource(r, n): 노드(n)으로부터 리소스(r)의 전송을 요청한다.
initiate-send-resource(r, n): 리소스(r)를 노드(n)로 전송하기 시작한다.
on-request-transfer-response(r, n, b): n으로부터의 r의 요청된 전송은 수용되거나 거절되었다. 거절되면 b는 참이다.
on-transfer-requested(r, m): 리소스(r)에 대한 m로부터 요청을 수신한다.
on-resource-transferred(r, n): 리소스(r)의 Ack가 n으로부터 수신되었다.
on-receive-resource(r, n): 리소스(r)가 n으로부터 수신되었다.
migration-continuation(r): 리소스를 이동시키는 것보다 연속을 이동시키는 것이 더 양호한 경우 그리고 그런 경우에만 참이다.
parent(s): 스케줄러 객체(s)의 부모 스케줄러 객체를 리턴시킨다.
cost(s, c): 스케줄러 객체(s)의 대기 큐에서 연속(c)의 배치를 평가하기 위해 이용된다.
find-best-within(s): 스케줄러 객체(s)의 대기 큐에 저장된 연속을 리턴시키는 비용 함수.
conserve-energy: 저 전력 모드로 진입한다.
resume-continuation(c): 지점에서 이 함수를 실행하는 프로세서에서 c로 표현된 계산을 재개한다.
valid(i): 인터럽트(i)가 여전히 유효한 경우 그리고 그런 경우에만 참을 리턴시키는 불린 함수.
initialize(best-guess): 비용 변수 최상 추정을 초기화한다.
insert-queue(s, c): 연속(c)을 스케줄러 객체(s)의 대기 큐에 삽입한다.
return-from-virtual-interrupt: 인터럽트로 인해 일시적으로 일시정지된 실행을 재개한다.
r.owner: 리소스(r)가 로컬인 노드를 리턴시킨다.
r.e: 리소스(r)가 이 사건을 기다리고 있다.
e.r: 이 사건은 리소스(r)에 대한 것이다.
e.continuation: 이 사건이 발생하면, 연속을 재개할 필요가 있다.
get-state(): 프로세서의 상태를 리턴시킨다.
scheduler-object(p): 프로세서(p)와 현재 연관된 스케줄러 객체를 리턴시킨다.
on-request-transfer-response(r, m, response): 노드(m)로부터 리소스(r)를 전송하는 요청에 대한 응답. 응답은 "거부"이면 참이거나 "수락"이면 거짓이다.
예시적인 루틴
다음은 다양한 실시예에서 이용되는 루틴의 의사 코드 예이다. 다음에서 "on-"으로 시작하는 함수는 비동기 사건 또는 메시지가 들어오는 것이다.
Figure 112018031682160-pct00023
Figure 112018031682160-pct00024
Figure 112018031682160-pct00025
Figure 112018031682160-pct00026
Figure 112018031682160-pct00027
Figure 112018031682160-pct00028
Figure 112018031682160-pct00029
Figure 112018031682160-pct00030
Figure 112018031682160-pct00031
선택적 리소스 이동을 이용하는 네트워크 결합 메모리
상술된 것은 일련의 긴밀하게 결합된 서버의 클러스터(본 명세서에서 "타이들포드(TidalPod)로서 언급됨)가 리소스의 집성된 세트를 공유하는 하드웨어 및 소프트웨어 아키텍처의 예시적인 실시예이다. 이러한 리소스는 프로세서, 동적 메모리, 저장장치, 및 네트워크와 같은 여러 유형을 포함한다. 이러한 시스템에서 하이퍼커널에 의한 이들 리소스의 집성은 노드 집합에 걸치고 운영 체제 및 애플리케이션에 단일의 대용량 서버로서 나타나는 가상 머신의 구성을 허용한다.
플래시 메모리, 위상 변화 메모리(phase change memory; PCM), 3D-XPoint, 하드 디스크 드라이브, 등과 같은 메모리 기술을 포함하도록 하이퍼커널에 의한 리소스의 집성을 확장하기 위한 기술이 본 명세서에서 설명된다. 플래시 메모리를 포함하는 예시적인 실시예가 하기에 설명될지라도, 본 명세서에서 설명된 기술은 적용가능한 바와 같이, 임의의 유형의 메모리 기술을 수용하도록 다양하게 적응될 수 있다.
하나의 예시적인 실시예에서, 플래시 메모리는 바이트의 물리 어레이로서 구성된다. 이 어레이의 각각의 바이트는 클러스터의 각각의 서버(또한, 본 명세서에서 "노드"로서 언급됨)에서 실행되는 하이퍼커널의 세트에 의해 생성된 가상 머신의 물리 메모리 어드레스에 대응한다.
통상적으로, 플래시 메모리는 2가지 주요 방식: 고체 상태 디스크(SSD)로서 또는 모바일 전화 및 태블릿과 같은 휴대용 전자 디바이스의 영구 메모리로서 이용된다. 서버에서 플래시에 대한 하나의 예시적인 주요 용도는 디스크를 시뮬레이팅하는 것이다. (a) 게스트 운영 체제에 의해 인식된 바와 같은 메모리의 크기를 클러스터의 이용가능한 동적 메모리의 합의 크기 이상으로 확장함으로써 애플리케이션 및 데이터베이스에 의한 이용을 위해 대용량의 메모리를 이용할 수 있게 하고 (b) 오류의 존재 시에 시스템을 더 탄력적이게 하는 방식으로서 예를 들면, 영구적인 백업 메모리로서 플래시를 이용하는 부가적인 방식을 제공하는 기술이 본 명세서에서 설명된다.
불행하게도, 서버를 위한 대부분의 시스템 소프트웨어는 전형적으로, 메모리 계층 구조의 제 1 클래스 요소로서 플래시를 효과적으로 처리하는 어떠한 메커니즘도 갖지 않고, 결과적으로 이 소프트웨어는 그것이 잘 이해하는 방식으로 그것, 즉 디스크 저장장치를 이용하는 것에 의지한다.
예시적인 이용 사례
다음은 본 명세서에서 설명된 기술에 의해 지원된 몇몇 예시적인 이용 사례이다:
1. 예를 들면, 5TB의 메인 메모리를 갖는 소프트웨어 정의 서버를 고려하고, 10TB의 플래시 메모리 어레이를 고려한다. 하나의 예시적인 실시예에서, 서버는 10TB의 메인 메모리를 갖고, 5TB의 메인 메모리를 10TB의 플래시 메모리의 새로운 캐시로서 갖도록 구성된다. 이러한 캐시를 이용하면 시스템이 가속화된다.
2. 일 대안적인 실시예에서, 플래시 메모리 어레이는 마치 총 15TB의 주 메모리에 대한 부가적인 주 메모리인 것처럼 이용될 수 있다.
3. 또 다른 예시적인 실시예에서, 플래시 메모리는 영구적인 기준 메모리를 구현하기 위해 이용될 수 있다. 예를 들면, 시스템이 임박한 실패를 검출하면, 플래시 메모리의 콘텐트는 그것이 아직 가지고 있지 않은 메인 메모리의 가장 최근 페이지로 업데이트될 수 있다. 이러한 방식으로, 시스템이 재시작될 때, 영구적인 메모리는 시스템을 이전에 저장된 상태로 복원하는 것을 돕기 위해 이용될 수 있다(예로서, 랩톱이 중단/재개될 때 수행되는 것과 유사함). 따라서 주 메모리는 영구적인 저장장치에 백업될 수 있어서, 시스템이 충돌, 오류, 또는 다른 장애의 경우에 용이하게 재시작될 수 있게 한다.
예를 들면, 전형적으로, 장애(예로서, 정전 또는 시스템 충돌의 검출)의 경우, 휘발성인 동적 랜덤 액세스 메모리(DRAM)와 같은 동적 메모리의 스냅샷(예로서, 휘발성 메모리의 콘텐트는 전력이 제거되면 손실된다)이 취해지고 디스크에 기록된다. 이것은 참조 카피가 플래시 메모리와 같은 영속적인(예로서, 정적이고, 비휘발성) 메모리를 포함하는 네트워크 결합 메모리에 저장되거나 플러싱(flushing)될 수 있기 때문에, 본 명세서에서 설명된 기술을 이용하여 회피될 수 있다. 네트워크 결합 메모리에 관한 상세는 하기에 더 상세하게 설명될 것이다.
4. 또 다른 예시적인 실시예에서, 본 명세서에서 설명된 기술은 노드의 상태를 저장하고 이를 다른 것으로 대체하기 위해 이용될 수 있다. 이것은 노드의 업그레이드, 장애 노드의 교체, 등과 같은 다양한 이유로 행해질 수 있다.
메모리 계층 구조
상기 제공된 예시적인 아키텍처에서, 큰 "물리" 어드레스 공간이 게스트 운영 체제에 제공된다. 클러스터에서의 각각의 노드의 관점에서 볼 때, 게스트 물리 어드레스가 그 노드 상의 프로세서에 의해 직접적으로 어드레싱된 운영 체제에 의해 보여지는 바와 같은 그 "게스트 물리" 어드레스 공간에 어드레스가 존재한다. 일부 실시예에서, 프로세서에 의해 요청된 게스트 물리 어드레스가 그 노드 상에 존재하지 않으면, 하드웨어에 의해 메모리 액세스 결함이 생성되고, (a) 그 어드레스를 포함하는 메모리는 프로세서가 위치되는 노드로 이동되거나 카피되거나, (b) 게스트 프로세서가 실행하고 있었던 계산(즉, 게스트 프로세서를 표현하는 가상 프로세서)은 게스트 물리 메모리가 위치된 노드로 이동된다. 하이퍼커널을 이용하는 리소스 이동 메커니즘 및 기술의 예가 상기 설명된다. 일단 완료되면, 이 2가지 전략 중 하나는 계산이 스케줄링되기 위해 이용가능하게 될 수 있고, 일단 스케줄링되면, 메모리 액세스 결함이 결코 발생하지 않은 것처럼 궁극적으로 다시 실행하기 시작한다.
일부 실시예에서, 이 모델에서, 임의의 주어진 시간에, "게스트 물리" 메모리는 시스템에서 기껏해야 하나의 노드에 의해 소유된다. 다른 노드는 이 메모리의 카피를 가질 수 있지만, 일부 실시예에서, 강한 캐시 일관성을 유지하기 위해, 게스트 프로세서가 페이지를 수정할 때, 다른 모든 카피가 무효인 것으로서 표시되거나, 그렇지 않으면 잊혀질 수 있다.
일부 실시예에서, 시스템에서의 동적 메모리의 각각의 페이지는 일부 다른 메모리, 즉 일 대안적인 플래시 메모리 또는 네트워크 결합 플래시 메모리의 로컬 카피일 수 있다. 이 플래시 메모리는 클러스터에서의 모든 노드에 액세스가능한 플래시 기기의 중앙에 위치되거나, 하나 이상의 노드 상(예로서, 하나 이상의 노드 상에 플래시 메모리를 포함하는 PCI 카드 상)에서 클러스터에 걸쳐 부분적으로 분산될 수 있다.
이러한 플래시 메모리의 어레이는 본 명세서에서 "네트워크 결합 메모리"로서 일반성의 손실 없이 언급된다. 네트워크 결합 메모리(본 명세서에서 "NAM"으로서 또한 언급됨)는 그 자체로 클러스터의 노드 중에서 분산된 메모리의 하나 이상의 뱅크로 구성될 수 있다. 다양한 실시예에서, 네트워크 결합 메모리는 상기 설명된 바와 같이, PCM, 3D-XPoint, 하드 디스크 드라이브, 등과 같은 메모리 기술을 이용하여, 적용가능한 바와 같이 다양하게 적응된 본 명세서에서 설명된 기술로 구현될 수 있다. 네트워크 결합 메모리의 일례는 하기에 더 상세하게 설명된다.
네트워크 결합 메모리는 타이들포드에서 메모리의 부가적인 계층으로서 이용될 수 있다. 하나의 예시적인 실시예에서, 네트워크 결합 메모리는 시스템에서의 모든 메모리의 "실제" 홈(예로서, 타이들포드)으로서 고려될 수 있다. 네트워크 결합 메모리는 이 방식으로 고려하거나 이용하거나 구성될 때, 네트워크 결합 메모리의 일부가 각각의 노드 상에 예를 들면, 노드의 동적 메모리에 일시적으로 상주할 수 있다. 이러한 방식으로 고려될 때, 일부 실시예에서, 각각의 노드의 메모리는 네트워크 결합 메모리의 캐시로서 이용될 수 있다.
네트워크 결합 메모리 기기의 일례는 도 14와 결부하여 하기에 더 상세하게 설명된다.
다양한 실시예에서, 정상 메모리 계층 구조는 따라서, 각각의 노드 상에 캐시 레벨을 단지 갖는 것으로부터 단단히 결합된 노드에 걸쳐 캐시 레벨을 갖는 것으로 확장된다.
네트워크 결합 메모리의 활용 시에 본 명세서에 설명된 기술의 하나의 예시적인 결과는 예를 들면, 네트워크 결합 저장장치의 메모리가 클러스터의 이용가능한 동적 메모리를 크게 확장시킬 수 있다는 것이고, 이는 예를 들면, 클러스터의 동적 메모리의 양이 가상 머신이 운영 체제에 제공되는 것과 1:1로 대응해야 하며, 이는 각각의 노드 상의 모든 물리 메모리의 합계가 아닐 수도 있다는 일 예시적인 요구조건으로 인한 것이다.
강력한 캐시 일관성
일부 실시예에서, 운영 체제 및 애플리케이션이 적절하게 기능하기 위해, 전체 메모리 계층 구조는 강하게 캐시 일관성이 있어야한다. 전형적인 하드웨어에서, 프로세서는 하드웨어 캐시의 하나 이상의 레벨을 이용하여 동기화된 강력한 캐시 일관성을 유지한다. 하나보다 많은 프로세서가 노드 상에 존재할 때, 기존 하드웨어를 이용하여, 캐시 일관성은 AMD의 Hypertransport™ 또는 Intel의 QuickPath Interconnect™와 같은 온보드 상호연결부를 통해 캐시 일관성이 유지된다.
그러나, 이들 방식은 단일 노드(즉, 프로세서 및 메모리를 갖는 노드)를 넘어 연장하지 않는다. 본 명세서에 설명된 것은 유사한 효과를 성취하기 위해 상기 설명된 메커니즘을 이용하는 강한 일관성 프로토콜의 소프트웨어 버전이다.
일부 실시예에서, 운영 체제의 지시 하에 실행중인 프로세서가 자신의 로컬 메모리의 위치에 기록할 때, 그 메모리의 카피가 그 노드 상의 프로세서의 하드웨어 캐시에 저장되면, 프로세서는 로컬 캐시의 강력한 일관성을 유지하기 위해 협력해야 한다.
상기 설명된 기술(예로서, 상기 설명된 하이퍼커널)을 이용하여, 유사한 조치가 취해질 수 있다. 예를 들면, 게스트 운영 체제의 지시 하에 실행중인 게스트 가상 프로세서가 그것이 그것의 로컬 메모리라고 믿는 위치에 기록할 때, 그 메모리가 노드의 동적 메모리에 있으면, 그 메모리의 로컬 카피를 갖는 임의의 다른 노드가 그것의 로컬 카피를 무효화하므로, 게스트 가상 머신의 단지 하나의 장소에서만 하나의 실제 카피가 유지됨을 보장하기 위해 주의를 기울여야 한다. 메모리가 네트워크 결합 메모리로 확장될 때, 동일한 기록이 동일한 효과를 가져야 한다.
네트워크 결합 메모리로의 또는 그로부터의 이동
네트워크 결합 메모리의 존재 시에 강한 캐시 일관성을 유지하는 방법에 대한 개요가 본 명세서에 설명된다. 부가적인 상세는 하기에 설명된다.
일부 실시예에서, 노드에 대한 계산이 또 다른 노드 상에 저장되고 소유되는 위치로부터 판독하기를 시도할 때, 상기 설명된 것과 같은 리소스 이동 알고리즘이 계산을 이동시키거나, 메모리를 이동시킴으로써 실행되어 계산 및 메모리가 동일한 노드 상에 공동으로 상주함을 보장한다.
네트워크 결합 메모리 플래시 기기를 통합하기 위해 리소스 이동을 연장하는 기술이 하기에 설명된다.
일부 실시예에서, 메모리를 포함하는 타이들포드에서의 노드의 세트는 플래시 기기를 포함하도록 연장된다. 플래시 기기는 시스템에서 또 다른 별개의 리소스 유형으로서 취급된다. 플래쉬 기기는 일부 실시예에서, 그것이 계산이 스케줄링될 수 있는 임의의 가상 프로세서를 갖지 않는다는 것을 제외하고는 다른 노드와 유사한 것으로서 간주될 수 있다. 일부 실시예에서, 네트워크 결합 메모리 기기는 임의의 가상 프로세서로 시작하지 않으며, 타이들포드에서의 다른 노드로부터 임의의 가상 프로세서를 결코 수용하지 않는다.
도 13a는 네트워크 결합 메모리가 선택적인 리소스 이동에 이용되는 시스템의 일 예시적인 실시예를 도시한다. 도시된 예에서, 타이들포드(1302)의 노드(1304)(노드(458 내지 462)의 예)는 영구적인 메모리 어레이(1306)(네트워크 결합 메모리의 예)와 통신한다. 일부 실시예에서, 노드 및 NAM은 함께 타이들포드를 형성한다(여기서, NAM은 타이들포드에서 특수화된 노드이다). 일부 실시예에서, 타이들포드의 NAM 및 노드는 상호연결부(1308)를 통해 서로 통신한다.
하나의 예시적인 실시예에서, 상기 설명된 바와 같이, 노드(1304)의 각각은 마더보드(1310)를 포함하고, 여기서 마더보드는 복수의 프로세서를 가질 수 있고, 각각의 프로세서는 복수의 코어를 가질 수 있고, 각각의 코어는 복수의 하이퍼스레드를 가질 수 있다. 일부 실시예에서, 타이들포드 상에서 실행되는 게스트 운영 체제는 각각의 하이퍼스레드를 프로세서로서 간주한다.
일부 실시예에서, 네트워크 결합 메모리(1306)는 메모리(1312)의 어레이(예로서, 플래시 메모리의 바이트)이다. NAM은 또한, 본 명세서에서 설명된 바와 같이, 캐시 일관성 프로토콜을 구현하도록 구성된 프로세서(1314)를 포함한다. 중복성 및/또는 복원성을 위해 다수의 NAM이 이용될 수 있다. 이 예에서, 네트워크 결합 메모리 기기(1306)는 클러스터에서의 모든 노드에 액세스가능한 플래시 기기의 중앙에 위치된다. 다른 실시예에서, 네트워크 결합 메모리는 하나 이상의 노드 상에 클러스터에 걸쳐 부분적으로 분산될 수 있다(노드(1304)에 걸쳐 분산된 NAM의 부분의 예가 1316 내지 1322로 도시되는 경우).
본 명세서에서 설명된 기술을 이용하여, 메모리의 페이지는 메모리의 페이지가 상기 설명된 바와 같이(예로서, 메모리 이동을 수행할 때), 시스템의 임의의 노드 상에 놓일 수 있는 것과 마찬가지로, NAM에 배치될 수 있다. 일부 실시예에서, 네트워크 결합 메모리 기기는 캐시 일관성 프로토콜을 이용하여 상호연결부를 통해 타이들포드에서의 다른 노드와 통신하는데, 이는 하기에 더 상세하게 설명될 것이다.
도 13b는 네트워크 결합 메모리가 선택적 리소스 이동에 이용되는 시스템의 일 예시적인 실시예를 도시한다. 이 예에서, 노드(1352 및 1354)는 노드(1304 및 458 내지 462)의 예이다. 이 예에 도시된 바와 같이, 각각의 노드는 하이퍼커널을 갖는다. 또한, 도시된 것은 L1, L2, 및 L3 캐시를 포함하는 각각의 노드 상의 메모리 또는 캐시 계층 구조의 일 예시적인 실시예이다. 각각의 노드는 L4 캐시로서 이용된 DRAM을 또한 포함한다.
이 예에 도시된 바와 같이, 노드(1352 및 1354)는 서로(예로서, 상호접속부를 통해) 통신하여, 예를 들면 서로 간에 리소스를 이동시킨다. 이 예에서, 노드는 또한 네트워크 결합 메모리의 일례인 영구적인 메모리 어레이(1356)와 통신하도록 구성된다. 타이들포드의 노드 및 NAM은 본 명세서에서 더 상세하게 설명된 캐시 일관성 프로토콜을 이용하여 통신한다.
도 14는 네트워크 결합 메모리 기기의 일 예시적인 실시예를 도시한다. NAM의 하나의 예시적인 구현은 다음과 같다. NAM(1402)은 보드 상에 2D(2차원) 어레이로 배열된 복수의 플래시 메모리 칩(예로서, 메모리 칩(1404))을 포함한다. 이 예에서, 메모리 칩은 뱅크 및 행으로 배열된다. 메모리 칩은 메모리 버스(1406) 상에 연결된다. 메모리 버스는 프로세서(1408)가 메모리 제어기(1410)(예로서, 뱅크(X), 칩(Y), 페이지(Z)를 명시하는 어드레스)에 어드레스를 출력하는 것을 허용하고, 상기 메모리 제어기는 그 다음, 뱅크/칩의 명시된 조합으로부터 적절한 페이지를 리턴시키도록 구성된다. 예를 들면, 메모리 제어기는 총 칩의 수를 취하고, 이를 칩 상의 페이지의 수로 나누고, 행의 수로 나누고, 등을 행하여 적절한 페이지를 리턴시킨다.
이 예에서, NAM에 포함된 프로세서는 예를 들면, 타이들포드에서의 다른 노드와 통신하도록 구성되거나 프로그래밍되는 특수 제한된 프로세서, 네트워크 프로세서, 또는 프로토콜 프로세서로서 구현되는 조정자(coordinator)이고, 예를 들면, 메시지를 수신하고 캐시 일관성 프로토콜의 일부로서 응답을 제공하며, 이는 하기에 더 상세하게 설명될 것이다. 일부 실시예에서, 메시지는 타이들포드의 노드 간에 전달되는 확인응답, 재시도, 등을 포함한다. 메시지의 하나의 예는 노드(n) 상의 vcpu를 노드(m)로 이동시키는 메시지이다. 이러한 메시지에 대한 예시적인 의사코드가 하기에 제공된다.
이 VCPU("V")를 노드(M)로 이동시킨다
V의 상태의 스냅샷(전형적으로 메모리의 적은 수(예로서, ~6400 바이트)의 페이지).
적절한 수의 바이트를 갖는 "이동" 명령어를 전송하여 상태(V 내지 M)를 포함한다(예로서, 6400 바이트).
확인응답 대기
메시지의 부가적인 예 및 일 예시적인 메시지 구조가 하기에 더 상세하게 설명될 것이다. 일부 실시예에서, NAM에 포함된 프로세서는 게스트 운영 체제에 보이지 않는다.
이 예에서, NAM은 또한 메타데이터(1412)를 포함한다. 일부 실시예에서, 메타데이터는 어느 페이지가 어떤 상태에 있는지를 추적하기 위해 이용된 페이지 상태 데이터를 포함한다. 일부 실시예에서, 페이지 상태 데이터는 페이지의 유형(예로서, 2차적인)을 나타낸다. 일부 실시예에서, NAM은 타이들포드에 걸쳐 다양한 노드 상의 페이지의 상태를 나타내는 메타데이터를 포함한다. 예를 들면, NAM 상의 페이지의 카피의 상태는 전형적으로 2차적이다. 다른 노드 상의 페이지의 카피는 2차적, 기본적, 또는 배타적일 수 있다. 이 정보는 예를 들면, 장애 극복 시나리오에서 복구를 수행할 때, 타이들포드의 상태를 복원하기 위해 이용될 수 있다(예로서, 타이들포드에서의 제 1 노드 상의 페이지의 카피가 주요한(본 명세서에서 "기본적"인 것으로서 언급됨) 것으로서 표시되어야 하는 반면에, 제 2 노드 상의 페이지의 또 다른 카피가 2차적인 것으로서 표시되어야 함을 나타내기 위해).
일부 실시예에서, NAM의 모든 페이지는 초기에는 유효하지 않다(예로서, 타이들포드의 시동 시). 페이지가 노드 상에 기록될 때, 페이지의 카피는 하기에 더 상세히 설명된 페이지/캐시 일관성 프로토콜에 따라 NAM으로 전송된다. 따라서, 시간에 걸쳐, 페이지가 타이들포드 상에 생성되고 기록됨에 따라, NAM은 생성되고 기록되는 모든 그들의 페이지의 최신 카피(예로서, 동적 메모리의 카피)를 유지한다.
일부 실시예에서, 대용량 메모리 시스템(예로서, 대형 메모리 리눅스 또는 FreeBSD 시스템)이 시동될 때, 전형적으로 페이지의 제로화(zeroing)가 수행된다. 이 프로세스는 대용량 메모리 시스템에 오랜 시간이 걸릴 수 있다. 일부 실시예에서, 본 명세서에서 설명된 기술을 이용하여, 페이지의 제로화는 보다 신속하고 보다 효율적으로 수행될 수 있다. 예를 들면, 제로화는 병렬로, 그리고 "레이지(lazy)" 방식으로 수행될 수 있다. 일부 실시예에서, 아직 제로화되지 않은 시스템에서의 페이지는 "휴면(dormant)" 페이지로서 표시된다. 일부 실시예에서, 이러한 휴면 페이지는 그들이 처음 이용(예로서, 할당 및 기록 또는 생성)될 때까지 제로화되지 않는다. 타이들포드 시스템은 이 "병렬의 레이지 제로화" 기술을 이용함으로써 빠르게 부팅할 수 있다.
일부 실시예에서, 타이들포드 시스템이 시작될 때, 휴면 페이지가 아직 생성되지 않았기 때문에, 휴면 페이지에 대해 제 2 레벨 페이지 표에 어떠한 엔트리도 존재하지 않고(하기에 더 상세하게 설명됨), 따라서 아직 존재하지 않는다(즉, 휴면 페이지는 그들이 할당될 때까지 임의의 물리 표현을 갖지 않는다). 일부 실시예에서, 휴면 페이지가 할당될 때, 그것은 제로화된다. 엔트리는 그 다음, 제 2 레벨 페이지 표에 배치되며, 이는 페이지를 유효하게 하고 비 휴면 상태로 만든다.
도 15는 페이지를 할당하는 일 실시예를 도시하는 도면이다. 이 도면은 동적 메모리와 네트워크 결합 메모리에 다양하게 적용된다. 예에서 휴면 페이지(1502 및 1504)가 도시된다. 휴면 페이지가 할당될 때, 그것은 제로 아웃(zero out)된다(예로서, 1506으로 도시된 바와 같이). 엔트리는 그 다음, 상기 설명된 바와 같이, 제 2 레벨 페이지 표에 배치된다. 엔트리가 만들어질 때, 페이지의 물리 어드레스가 입력된다. 일부 실시예에서, 모드 비트가 또한 페이지를 위해 입력된다. 모드 비트는 페이지가 유효한지, 페이지가 기록가능하거나 판독 전용인지, 등을 나타낼 수 있다.
일부 실시예에서, 타이들포드와 같은 시스템이 시동될 때, 모든 페이지는 비어있다(예로서, 휴면). 게스트 운영 체제는 그 다음, 페이지 할당을 시작한다. 예를 들면, 페이지가 할당될 때, 페이지 번호(예로서, 4567)가 할당된다. 할당 시, 페이지는 제로 아웃되고 그 다음, 그 어드레스는 제 2 레벨 페이지 표에 놓이게 된다(페이지는 그것이 제로 아웃된 후에야 보이게 된다). 이제, 4567로서 하이퍼커널에 알려진 일부 페이지를 어드레스 지정하려고 시도가 행해지면, 0의 페이지가 보여질 것이다.
일부 실시예에서, 할당까지, 페이지는 존재하지 않는다. 복수의 노드 및 프로세서를 갖는 타이들포드가 시동될 때, 대부분의 페이지가 시동 시 휴면이다. 페이지가 이용됨에 따라, 그들이 유효하게 된다. 이는 동적 메모리 뿐만 아니라, NAM에서의 페이지에 대해 참으로 유지된다.
일부 실시예에서, NAM에서의 페이지 수는 게스트 운영 체제가 관측하는 페이지 수와 일치한다. 페이지의 다른 카피(예로서, 섀도우 카피)의 페이지가 존재할 수 있지만(예로서, 페이지 캐시에), 일부 실시예에서 그들은 게스트 운영 체제에 보이지 않게 된다. 하이퍼커널과 NAM 간이 일대일 대응일 필요는 없다. 그러나, 일부 실시예에서, 게스트 운영 체제에 의해 보여지는 바와 같이 일대일 대응이 존재한다.
전형적인 운영 체제에서, 운영 체제는 베어 메탈 머신(bare metal machine) 상에서 실행된다. 상기 설명된 바와 같이, 본 명세서에 설명된 기술을 이용하여, 베어 메탈 시스템이 분산 하이퍼커널로 대체되고, 이는 운영 체제에 그것이 베어 메탈 피스의 하드웨어에서 실행되고 있는 인상을 준다. 이것은 타이들포드에서의 노드 상의 프로세서에 존재하는 제 2 레벨 페이지 표에 의해 지원된다. 메모리의 페이지에 대한 제 2 레벨 페이지 표에 어떠한 엔트리도 존재하지 않으면, 하드웨어 어드레스 변환을 수행할 때 장애가 발생할 것이다. 상기 설명된 바와 같이, 예를 들면, 비용 함수에 기초하여, 가상 프로세서는 메모리를 갖는 페이지로 이동될 수 있거나, 메모리가 가상 프로세서가 상주하는 곳으로 이동될 수 있다. 일부 실시예에서, 메모리가 이동될 때, 메모리의 콘텐트가 카피될 뿐만 아니라, 목적지(노드)의 제 2 레벨 페이지 표이 또한 업데이트된다. 따라서, 노드 상의 프로세스가 페이지에 액세스하려고 시도할 때, 또 다른 장애가 발생하지 않을 것이다. 이것은 게스트 운영 체제에, 하드웨어에 존재하지 않지만 본 명세서에서 설명된 기술을 이용하여 소프트웨어로 정의되고 그것에서 지원되는 단일의 큰 어드레스 공간의 모양을 제공한다. 페이지에 대한 요청이 거부되면(예로서, 비용 함수에 작용하는 메시지에 기초하여) 프로세서가 페이지의 위치로 이동한다(또는 가상 프로세스 및 페이지 둘 모두가 또 다른 노드로 이동된다 - 즉, 사후 조건이면, 그들은 공동으로 상주한다).
일부 실시예에서, 페이지가 요청될 때, 그 페이지는 그 주요한 위치로부터 요청된다. 그 페이지는 그 다음, 요청 노드로 전송된 페이지가 요청 노드 상에서 배타적 또는 기본적인 것으로 표시되는 동안 2차적인 것으로서 표시된다.
다음의 예를 고려한다. 타이들포드가 예시적인 목적을 위해, 중앙집중식 네트워크 결합 메모리, 및 2개의 모드(노드1 및 노드2)를 포함한다고 가정하자. 일부 실시예에서, 노드1이 노드2 상에 가장 최근의 카피가 있는 메모리(즉, 메모리의 페이지)의 전송을 요청하도록 전략적 결정이 이루어지면, 노드2는 먼저, 노드1이 가장 최근의 카피가 발견될 수 있는 장소 또는 위치일 가능성이 높은 표시와 함께, 그 메모리의 무효화를 네트워크 결합 메모리에 전송하고, 그 다음 그 메모리의 카피를 노드1로 전송함으로써 노드1의 요청을 만족시킨다. 일부 실시예에서, 노드1 상의 메모리는 이제, 노드1에 상주하는 다양한 계산에 의해 지시된 바와 같이 업데이트되고, 그 다음 노드1이 그 메모리를 다른 어느 곳으로 전송해야 할 때, 노드1은 그 메모리의 현재 버전이 발견될 수 있는 네트워크 결합 메모리를 또한 업데이트할 수 있다. 일부 실시예에서, 시스템(타이들포드)은 시스템의 지식이 완전하지 않을 수 있기 때문에, NAM에 대한 업데이트의 여부에 상관없이 계속 작동하거나 기능한다. 일부 경우에, 비동기성(asynchronicity)으로 인해, 메모리 페이지가 그들이 예상된 위치에 있지 않을 수 있으므로(예로서, 리소스 맵에 따라) 메모리의 페이지는 "추적되고" 검색되어야 할 수 있다. 예를 들면, 특정 시점에서 페이지는 주어진 위치에 있을 수 있지만, 페이지의 검색이 이루어질 때 거기에 더 이상 존재하지 않을 수 있다.
또 다른 노드가 그 메모리(페이지)의 카피를 필요로 하면, 카피는 요청 노드로 전송되고, 그 메모리의 카피는 네트워크 결합 메모리로 또한 전송된다.
일부 실시예에서, 메모리가 노드 상에서 수정될 때, 메모리는 그 노드에 배타적이 된다. 일부 실시예에서, 네트워크 결합 메모리 상의 임의의 카피를 포함하여 다른 모든 카피는 무효가 되어야 한다.
일부 실시예에서, 주기적 단위로, 네트워크 결합 메모리는 모든 메모리 페이지의 2차적인 카피를 요청할 수 있다. 계획되거나 계획되지 않은 중단시, 충분한 시간이 있으면, 게스트 가상 프로세서가 중지된 후, 네트워크 결합 메모리가 모든 페이지의 배타적 소유권을 요청할 수 있다.
이러한 방식으로, 네트워크 결합 메모리는 항상 강한 일관성의 의미를 보존하기 위해 충분히 최근의 카피를 포함한다.
상태 변환 및 캐시 일관성 프로토콜에 대한 설명
상기 설명된 바와 같이, 네트워크 결합 메모리("NAM")는 어떠한 가상 프로세서도 그것 상에서 시작될 수 없고, 어떠한 vcpu도 결코 이동할 수 없다는 것을 제외하고 타이들스케일 포드(TidalScale Pod)(중앙집중식 노드 또는 포드에서 다른 노드에 걸쳐 분산됨)에서의 또 다른 노드일 수 있다.
이 예에서, NAM은 어떠한 vcpu도 NAM에 존재하지 않는다는 것을 고려할 때, 본질적으로 트랜잭션(transactional)이다. 일부 실시예에서, 게스트 소프트웨어의 실행에 의해 정의된 잘 정의된 동기화 지점을 제외하고 실시간으로 NAM의 콘텐트를 최신 상태로 유지할 어떠한 요구조건이나 필요성이 없다(예로서, "나는 계산을 진행하기 위해 그리고 내가 계산을 진행할 수 없는 것을 얻을 때까지 이 페이지가 필요하다"). 따라서, NAM에 대한 판독 및 기록은 "레이지" 방식으로 수행될 수 있다. 페이지의 요청 및 페이지를 업데이트하기 위한 요청이 만족되는 한, 유효하고, 일관적인 폰 노이만 의미론은 실시간으로 수행할 필요 없이 유지되거나 보존될 수 있다. 그것은 또한, 실제로 일부 프로세서 제품군이 만족되어야 하는 부가적인 제약 예를 들면, 인텔의 "메모리 저장장치 주문" 제약을 갖는 경우일 수 있다.
일부 실시예에서, 페이지를 요청하고, 페이지를 업데이트하고, 프로세서를 이동시키고, 페이지의 판독 전용 카피를 무효화하는, 등의 논리는 vcpu의 또는 하우스키핑 스레드(housekeeping threads)에 의해 취급된다. NAM이 그러한 것을 갖지 않기 때문에, NAM은 이들 동작에 관해 걱정할 필요가 없다.
트랜잭션 구조의 일 예시적인 실시예가 이제 설명된다.
임의의 노드 상의 페이지는 유효이거나, 무효일 수 있다. 페이지의 유효성/무효성은 그 페이지에 대한 엔트리가 노드 상의 일부 페이지 표에 존재하는지의 여부를 나타낸다. 그들이 유효한 경우, 그들은 게스트 운영 체제가 물리 어드레스인 것으로 인식하지만 실제로는 하이퍼커널에서 볼 때 게스트 가상 어드레스인 어드레스에 대응한다.
노드(n) 상에 상주하는 유효한 페이지(p)는 몇몇 상태들 중 하나에 있을 수 있다: 기본적(또는 주요한), 또는 배타적 또는 2차적인.
1. p가 기본적으로 표시되면, 그것은 "판독 전용"이고 n은 p를 "소유"한다고 말해진다.
2. n 이외의 노드는 p의 카피를 가질 수 있으며, 이는 2차적인 것으로 표시되거나 그것으로 불린다. 일부 실시예에서, 2차적인 것이 존재하면, 타이들포드에서 다른 어딘가에 기본적인 것이 존재한다고 타당하게 가정될 수 있다. 유사하게, 노드가 기본적 페이지를 가지면, 타이들포드의 다른 곳에 페이지의 2차적인 것이 있다고 가정될 수 있다. 일부 실시예에서, 2차적인 것의 수가 최대화되어 이들 페이지를 판독하려는 시도가 이루어질 때, 페이지 데이터는 요청 노드 상에 이미 상주하여, 페이지 데이터를 액세스하는데 소요되는 시간을 최소화하게 한다.
2차적인 것이 요구될 수 있는 하나의 예는 운영 체제(예로서, 게스트 운영 체제)의 코드를 유지하는 페이지 세트를 취급할 때이다. 운영 체제에 대한 코드가 일정하고 변경되지 않으므로, 운영 체제를 실행하는 프로세서가 운영 체제에 대한 페이지를 가져 오는 경우 비효율적일 것이다(이것은 프로세서가 요청된 페이지를 기다리는 동안 정지를 야기할 수 있기 때문이다). 대신에, 효율성을 높이고 정지를 감소시키기 위해, 가능한 한 운영 체제의 많은 페이지가 복제되는 2차적인 것이 이용될 수 있다. 정지를 감소시킴으로써, 시스템의 오버헤드가 또한 감소되어, 시스템의 증가된 효율을 야기한다.
판독 전용 데이터(판독 전용 데이터의 페이지가 판독 전용 노드에 대한 2차적인 것으로서 카피되는)를 갖는 것과 같은 다른 종류의 프로그램에 대해서도 유사한 최적화 및 효율성이 수행될 수 있다. 일부 실시예에서, 메모리의 판독 전용 페이지인 운영 체제 또는 애플리케이션의 코드 페이지 사이에 어떠한 구별도 이루어지지 않는다.
또 다른 예로서, 매우 자주 변화하지 않는 다량의 데이터를 갖는 2차적인 것이 이용될 수 있다. 그렇게 할 수 있는 메모리가 있으면, 가능한 한 많은 판독 전용 데이터가 복제되어 효율성을 개선하고 정지를 감소시킨다.
3. p가 n에 대해 배타적으로 표시된 경우, 페이지는 n에만 존재할 수 있고, 어떠한 다른 카피도 존재할 수 없으며, 페이지는 판독 및 기록될 수 있다("판독 기록"). 이 경우에, p에 대한 어떠한 2차적인 것도 존재하지 않는다.
일부 실시예에서, 페이지가 배타적으로 되기 전에, 무효화 동작이 수행되어 페이지의 다른 모든 기존 카피를 무효화한다. 이것은 기존 아키텍처에서 평가 순서를 보장하는 데 이용할 수 있다. 무효화 동작은 모든 다른 노드에 그들이 페이지의 그들의 카피를 무효화하라고 요청하는 메시지를 전송함으로써 수행될 수 있다. 이러한 요청에 대한 응답(예로서, 확인응답)이 수신되면, 그들 모든 응답의 수신은 페이지가 존재하는 다른 위치가 없음을 나타낸다. 게스트 운영 체제는 그 다음, 다시 시동하고 페이지에 기록할 수 있다. 기록이 완료될 때, 다른 페이지는 페이지의 카피를 가지기를 원할 수 있고, 일부 실시예에서, 페이지의 스냅샷이 취해지고 이용되어 페이지에 대한 업데이트된 정보를 갖는 새로운 2차적인 것을 생성할 수 있다. 따라서 2차적인 것의 이용을 통해, 게스트 운영 체제에 페이지가 로컬임을 나타낼 것이다.
노드(m)(m≠n) 상의 vcpu가 n으로부터 p에 대한 액세스를 요청할 때, 그 페이지가 기본적 또는 배타적인 경우, 현재 n 상의 페이지(p)는 무효로 표시되고, 페이지의 카피는 그 다음, p를 기본적인 것으로서 표시하는 m으로 전송된다. 일부 실시예에서, 최적화로서, 노드(m) 상의 vcpu는 그것이 필요한 것을 알고 있는 경우, 페이지(p)를 배타적인 것으로 표시할 수 있다.
일부 실시예에서, 노드가 기본적 또는 배타적인 페이지를 갖는 경우, 노드가 그 페이지로 기본적 또는 배타적인 기록을 전송하기 위한 요청을 수신할 때, 그것은 그 노드 상에서 2차적인 것으로 변환된다. 그 페이지에 기록하는 권한은 그 다음, 페이지를 요청하고 있는 노드로 전송된다. 이것은 노드가 페이지에 기록하지 않는 한 노드가 페이지를 요청하지 않는다는 가정에 기초하여 수행될 수 있는 최적화이다. 이것은 수행되어야 할 프로토콜에 트랜잭션을 저장하여, 효율성을 증가시킨다.
일부 실시예에서, 노드(m)가 n으로부터 p에 대한 액세스를 요청하면, 노드(n)는 p의 그 자신의 카피를 2차적인 것으로서 표시한다. 페이지(p)는 그 다음, 노드(m)로 전송된다. 노드(m)가 p의 그것의 카피를 배타적 또는 기본적인 것으로서 표시하면, 페이지(p)의 노드(n)의 카피가 무효화된다.
일부 실시예에서, 노드(n) 상의 페이지(p)가 기본적인 것이고, 기록되어야 하면, 모든 2차적인 카피는 무효화되어야 하고, 단지 이것이 달성되었다는 확인응답을 수신한 후에, n은 p를 배타적으로서 표시한다. 예를 들면, 일부 실시예에서, 노드(n)이 유일한 기록자임이 공지될 때까지 페이지가 기록될 수 없다 - 즉, 페이지는 페이지가 배타적인 상태에 있을 때까지 기록될 수 없고, 여기서 페이지는 어떠한 다른 2차적인 것도 존재하지 않음을 나타내는 모든 확인응답이 수신될 때까지 배타적 상태에 있을 수 없다(즉, 모든 2차적인 것이 무효화되었음). 일부 예시적인 구현에서, 이것이 최적화될 수 있다. 예를 들면, 이 페이지에 대해 주요한 것인 노드는 무효화를 개시할 수 있다. 일부 실시예에서, 무효화는 확인응답이 현재 주요한 것이 아닌 (주요한 것이 될) 요청자로 전송되어야 하는 명령을 포함한다. 일부 실시예에서, 요청자는 페이지가 액세스될 수 있기 전에 모든 확인응답을 수집해야한다. 이 방식으로, 무효화는 페이지 전송과 동시에 안전하게 진행할 수 있다. 요약하면, 이 예시적인 최적화에서, 주요한 것은 무효화를 시작하지만, 요청자는 무효화 프로세스를 완료한다.
무효화에 관한 부가적인 상세는 다음과 같다. 일부 실시예에서, 타이들포드는 게스트 운영 체제가 믿는 것이 그 물리 공간인 이용자 공간(예로서, 이용자 공간에서 실행되는 게스트 프로그램)으로부터의 하드웨어 변환을 수행하는 제 1 레벨 페이지 표를 포함한다(즉, 제 1 레벨 페이지 표 매핑은 가상 어드레스를 게스트 OS가 물리 어드레스라고 믿는 것으로 변환한다). 상기 설명된 바와 같이, 게스트 OS가 물리 어드레스라고 믿는 것은 하이퍼커널(예로서, 하이퍼커널 호스트 어드레스)에 의해 관리된 게스트 물리 어드레스이며, 이는 그 다음 하드웨어에서, 또 다른 레벨의 페이지 어드레스 변환을 거치고(예로서, 제 2 레벨 페이지 표를 통해), 여기서 게스트 물리 어드레스는 페이지의 실제 물리 어드레스로 전환되거나 변환된다. 일부 실시예에서, 제 2 레벨 페이지 표로부터 페이지를 소거함으로써 페이지가 무효화된다. 노드가 메모리의 무효화된 페이지에 더 이상 액세스할 수 없으므로 가비지 컬렉션이 그 다음, 실행될 수 있거나, 메모리는 이용가능한 풀, 등으로 리턴될 수 있다.
이 이후에, 배타적인 것으로 표시된 페이지에 대한 모든 기록 동작은 그들이 노드 상에서 로컬적으로 판독 및 기록될 수 있고, 어떠한 다른 카피도 존재하지 않기 때문에 임의의 정지를 생성하지 않을 것이다(예로서, 상기 설명된 바와 같이, 제 2 레벨 페이지 표로부터 페이지를 소거함으로써 무효화된 페이지).
일부 실시예에서, NAM은 상기 설명된 동일한 프로토콜을 따른다. 타이들포드에서의 다른 노드와 마찬가지로, NAM은 또한, 유효한 페이지와 유효하지 않은 페이지를 갖는다. 예를 들면:
1. NAM에서의 모든 페이지가 무효로서 시작한다. 일부 실시예에서, 페이지가 유효하게되면, NAM 상의 페이지가(단지 ~로부터 판독됨) 기록될 수 없기 때문에, 그것은 2차적인 것으로서 표시된다.
2. 노드(n) 상의 vcpu(v)가 페이지에 기록하기 전에, 그것은 NAM을 포함하는 다른 곳의 P의 모든 카피를 무효화해야한다. 따라서, NAM이 p에 대해 2차적인 것을 가지면, p는 p의 카피를 갖는 임의의 다른 노드가 행해야 하는 것과 마찬가지로, p가 NAM 상에서 유효하지 않게 하고, p가 업데이트되기 전에 그것이 무효화되었다는 확인응답을 전송해야 한다.
3. 노드(n)이 노드(m)로부터 들어오는 판독 요청에 응답하면, p가 주요하거나 배타적인 것으로 표시되는 페이지(p)에 대해 m≠n이고, n은 p를 2차적인 것으로서 표시하고, 페이지(p)를 m으로 전송하고, 또한 (대략적으로) 동시에 n은 또한 그것을 NAM으로 전송하며, 상기 NAM은 그것을 유효하고 2차적인 것으로서 표시한다. 따라서, 일부 실시예에서, 노드가 배타적이거나 주요한 것으로서 페이지를 표시하면, 페이지의 카피가 네트워크 결합 메모리로 전송(및 2차적인 것으로서 표시)되어, 네트워크 결합 메모리가 그 페이지의 유효한 카피를 갖게 한다(즉, 노드가 페이지의 기본적인 카피를 가지면(예로서, 페이지에 기록한 후에), NAM은 기록 후에 유효한 2차적인 카피를 가질 것이다). 페이지가 m에 의해 수신된 후, m은 페이지를 주요한 것으로서 표시한다. 이전과 같이, 원격 기록 요청의 경우에서처럼 주요한 것으로부터 배타적인 것으로 페이지가 전이하면, NAM 상의 2차적인 카피는 무효하게 되어야 한다. 사전에 페이지가 배타적인 것으로 표시될 것으로 공지되면, NAM으로 페이지를 전송하는 단계는 건너뛸 수 있다(궁극적으로 어쨌든 무효화될 것이기 때문이다).
이 방식으로, NAM은 시간에 걸쳐 타이들포드에서의 모든 유효한 페이지의 카피의 컬렉션이 된다. 일부 실시예에서, 페이지가 업데이트될 때마다, 네트워크 결합 메모리에 대한 업데이트가 이루어진다. 따라서, 시간에 걸쳐, 휴지 기간 후에, 네트워크 결합 메모리는 타이들포드에 있는 모든 페이지의 유효한 카피를 가질 것이다. 따라서, 시스템의 전원이 꺼지더라도, 메모리의 이미지가 NAM에 상주할 것이다. 또 다른 예로서, 부팅할 때, 클린 종료가 수행되지 않은 경우, 메모리의 스냅샷은 시스템을 종료하기 이전에 시스템의 이전 상태를 복원하는데 도움을 주기 위해 이용될 수 있다.
마지막으로, 타이들포드에서의 NAM의 수에는 제한이 없다. 예를 들면, 시스템에 다수의 NAM이 존재할 수 있다(예로서, 복원력 및/또는 리던던시를 위해). 일부 실시예에서, 몇몇 네트워크 결합 메모리는 상이한 타이들포드 간에 공유될 수 있다. 하나의 예로서, NAM 기기는 복원력 및/또는 리던던시를 위해 언플러깅(unplugging)되거나 복제될 수 있다.
예를 들면, 데이터가 저장장치로부터 제거될 때(예로서, 파일로부터 추출됨), 그것은 데이터에 대해 동작할 애플리케이션 또는 데이터베이스에 의해 이용가능한 로컬 표현으로 변환될 수 있다. 하나의 예시적인 이용 사례에서, 일단 데이터가 변형되고 NAM에 복제되면, NAM은 언플러깅되고 또 다른 타이들포드로 이동될 수 있다. 따라서, 변환된 데이터는 다른 타이들포드에 의해 즉시 이용되어, 로우 데이터(raw data)를 먼저 변환하는데 드는 고비용을 절약할 수 있다. 예를 들면, 그 다음 데이터를 필요로 하는 타이들포드에서 실행되는 애플리케이션에 의해 이용가능하도록 변환되어야 하는 데이터의 초기 부하(예로서, 인터넷으로부터 스트리밍되고, 디스크로부터 판독되는, 등의 데이터베이스로부터)는 특히 매우 큰 파일에 대해 비쌀 수 있다. 이 초기 부하/변환은 상기 설명된 단계를 이용하여 건너뛸 수 있다(예로서, 변형된 데이터가 NAM을 이동시킴으로써 복제하거나 다른 시스템으로 이동될 수 있는 경우에, 단지 한번 수행될 필요가 있음).
예시 상태 전이
다음은 예시적인 상태 전이 표이다:
동작 오래된 페이지 상태 조치 새로운 페이지 상태
로컬 판독 유효하지 않음 주요하거나 배타적인 것으로부터 페이지를 요청 주요한
로컬 판독 2차적인 판독을 수행 2차적인
로컬 판독 주요한 판독을 수행 주요한
로컬 판독 배타적인 판독을 수행 배타적인
로컬 기록 유효하지 않음 주요한 것으로부터 기록을 요청 배타적인
로컬 기록 2차적인 주요한 것으로부터 기록을 요청; 무효화 배타적인
로컬 기록 주요한 무효화; 기록 배타적인
로컬 기록 배타적인 기록을 수행 배타적인
수신 판독 유효하지 않음 주요한 것으로 전달 유효하지 않음
수신 판독 2차적인 주요한 것으로 전달 2차적인
수신 판독 주요한 페이지를 전송 2차적인
수신 판독 배타적인 페이지를 전송 유효하지 않음
수신 기록 유효하지 않음 주요한 것으로 전달 유효하지 않음
수신 기록 2차적인 주요한 것으로 전달 유효하지 않음
수신 기록 주요한 페이지를 전송 유효하지 않음
수신 기록 배타적인 페이지를 전송 유효하지 않음
무효화 유효하지 않음 확인응답 유효하지 않음
무효화 2차적인 무효화; 확인응답 유효하지 않음
무효화 주요한 해당 없음 유효하지 않음
무효화 배타적인 해당 없음 유효하지 않음
표 1의 상기 예에서, 배타적인 페이지에 대한 판독 요청이 수신될 때, 페이지는 요청자로 전송되고 (판독 요청을 수신하는 노드 상의) 페이지의 스테이지는 무효화로 전이된다. 일부 실시예에서, 유효하지 않은 것으로의 전이는 상기 설명된 바와 같이, 요청된 페이지가 기록될 것이라는 가정이 행해지고, 요청을 수신한 노드 상의 페이지가 궁극적으로 어쨌든 무효화될 필요가 있는 최적화를 고려한다. 다른 실시예에서, 판독 요청을 수신하는 것에 응답하여, 판독 요청을 수신하는 노드는 페이지의 상태를 배타적인 것으로부터 2차적인 것으로 전이시킨다.
일부 실시예에서, NAM을 포함하는 타이들포드의 모든 노드는 본 명세서에서 설명된 캐시 일관성 프로토콜에 대한 상기 예시적인 상태 전이 다이어그램을 따른다. 계산을 수행하지 않는 NAM의 경우에(예로서, 그것이 보유하고 있는 페이지들에 대한 기록), NAM은 수동적 동작과 연관된 전이의 서브세트를 따른다.
예시적인 메시지
다음은 상기 설명된 노드 간 캐시 일관성 프로토콜에서 이용되는 메시지의 예이다:
일부 실시예에서, 각각의 서브시스템은 그 자신의 메시지 유형을 갖는다. 다음은 타이들포드의 서브시스템의 예이다(예로서, 스케줄러 서브시스템, I/O 서브시스템, 이동 서브시스템, 등):
Figure 112018031682160-pct00032
Figure 112018031682160-pct00033
일부 실시예에서, TS_NET_MEMORY 서브시스템은 다음의 예시적인 메시지 유형을 갖는다:
VMEM_UNKNOWN = 0,
VMEM_BUILD_GCPP = 1, // 그의 cpp(일관성 페이지 프로토콜)를 구축하기 위한 노드로의 메시지.
VMEM_BUILD_COMPLETE = 2, // 구축이 완료되었다는 메시지
VMEM_MOVE_OWNER = 3, // 소유자로부터 소유자까지 페이지를 운반하는 메시지
VMEM_COMPLETE_PAGE = 4, // 페이지 상태 변경 완료를 시그널링하기 위해 이용되는 메시지
VMEM_OK2SEND = 5, // 페이지에 대해 이용가능한 룸을 브로드캐스팅하기 위해 이용되는 메시지
VMEM_COLLECT_PAGE_BCST = 6, // 프로토콜(수집 메시지가 브로드캐스팅되는 경로)을 격리시키는데 이용되는 메시지.
GTHREAD_COLLECT_BCST = 7, // 게스트 스레드 메타데이터를 수집하기 위해 이용되는 메시지
GTHREAD_COLLECT_BCST_ACK = 8, // 게스트 스레드 수집 메시지에 응답하기 위해 이용되는 메시지
예시적인 시나리오
도 16은(예로서, 상기 표 1의 상태 전이에 따라) 상기 설명된 것과 같은 캐시 일관성 프로토콜에 따른 노드 간 통신의 일 예시적인 실시예를 도시한다.
이 실시예에서, 타이들포드가 NAM(1608) 뿐만 아니라, 노드(N0(1602), N1(1604), 및 N2(1606))를 포함한다고 가정하자.
초기 상태(1610)에서, 노드(N2)는 페이지(p)의 주요 버전을 갖는다("P"로 표시됨). 노드(N1)는 페이지(p)의 2차적 카피("S"로 표시됨)를 포함한다. 노드(N0)는 페이지(p)의 카피를 갖지 않는다(예로서, "X"로 표시된 것과 같이 유효하지 않음). NAM(1608)은 페이지(p)의 2차적 카피(예로서, 시스템이 이용 중이며 NAM이 페이지(p)의 참조 카피를 가짐)를 포함할 수 있거나, 페이지는 NAM 상에서 유효하지 않을 수 있다(예로서, 시동 시에).
다음 단계(1612)에서, 노드(N0)는 페이지(p)의 로컬 판독을 수행하기를 원한다. 그것이 페이지(p)의 유효한 카피를 가지지 않기 때문에, 그것은 페이지(p)의 주요한 카피를 갖는 노드, 이 경우에 노드(N2)(예로서, 리소스 맵에 기초하여)로부터 페이지에 대한 원격 판독 요청을 수행한다.
원격 판독 요청에 응답하여, 노드(N2)는 그의 페이지(p)의 카피를 2차적인 것으로서(주요한 것으로부터 2차적인 것으로의 전이) 표시하고, 페이지(p)를 노드(N0)으로 전송한다. 노드(N2)는 또한, 페이지(p)를 NAM으로 전송하며, 상기 NAM은 페이지(p)의 그것의 수신된 카피(예로서, 스냅샷)을 유효하고 2차적인 것으로서 표시한다. 노드(N0)가 페이지(p)를 수신한 후, 노드(N0)는 페이지(p)의 그것의 카피를 주요한 것으로서 표시한다.
일부 실시예에서, 노드(N0)는 2차적인 것으로서 표시되는 페이지(p)의 카피를 수신한다. 다른 실시예에서, 그리고 이 예에서 도시된 바와 같이, 트랜잭션(예로서, 노드 간에 전달되고 있는 메시지)의 수를 최소화하기 위해, 노드(N0)는 노드(N0)가 그것에 기록하는 의도가 있는 페이지를 요청하고 있다는 가정 하에, p의 그것의 카피를 기본적인 것으로 직접 표시한다. 노드(N2) 상의 페이지(p)는 그 다음, 2차적인 것으로서 표시된다. 페이지(p)가 NAM 상에서 유효하지 않았으면, 페이지(p)는 또한 NAM으로 전송되고, 여기서 그것은 2차적인 것으로서 표시된다. 페이지가 NAM 상에 존재하면, 그것은 2차적으로 유지된다. 노드(N1) 상의 페이지(p)의 카피는 2차적으로 유지된다.
다음 단계(1614)에서, 노드(N0)는 페이지(p)의 그것의 주요한 카피로의 로컬 기록을 수행한다. 노드(N0)가 페이지(p)의 그것의 카피에 기록하거나 그것을 업데이트할 수 있기 전에, 페이지(p)의 모든 2차적인 카피는 유효하지 않게 된다. 예를 들면, 무효화 메시지는 N1, N2 및 NAM(즉, p의 2차적인 것들을 갖는 타이들포드에서의 다른 노드는 페이지(p)의 그들의 카피를 무효화하도록 요청된다)으로 전송된다. 노드(N0)가 N1, N2, 및 NAM으로부터 그들이 p의 그것의 카피를 무효화했음을 나타내는 확인응답을 수신한 후에(즉, 타이들포드에 p의 어떠한 다른 카피도 존재하지 않고, 여기서 그들 노드 상의 무효화는 기호("X")로 표시됨), 노드(N0)는 그 다음, 페이지(p)의 그거의 카피를 배타적인 것(예로서, 주요한 것으로부터 배타적인 것으로의 전이)으로 표시하고 페이지(p)의 그것의 카피에 기록할 수 있다.
위의 예에서, 노드(N0)은 먼저 1612에서 원격 판독 요청을 수행한 다음, 후속적으로 1614에서 로컬 기록을 수행했다. 노드(N0) 상의 페이지가 배타적인 것(예로서, 원격 기록 요청과 유사함)으로 표시되었음이 사전에 공지되면, 1612에서 노드(N2)로부터 페이지(p)를 NAM으로 전송하는 단계는 건너뛸 수 있다.
이제, N1이 페이지(p)의 로컬 판독을 수행하려고 시도한다고 1616에서 가정하자. 그러나, 페이지(p)의 그것의 카피는 유효하지 않다. 노드(N1)은 그 다음, 노드(N0)로부터 페이지(p)를 요청한다. 원격 판독 요청에 응답하여, 노드(N0)는 페이지(p)의 그것의 카피를 2차적인 것으로 전이시키고(또는 일부 실시예에서 요청자가 p에 기록할 것으로 예상되면 페이지(p)의 그것의 배타적인 카피를 무효화한다), 페이지(p)를 노드(N1)로 전송한다. 노드(N1)은 페이지(p)의 그것의 수신된 카피를 주요한 것으로서 표시한다. 노드(N0)은 또한, 페이지(p)의 카피를 NAM으로 전송하고, 상기 NAM은 페이지(p)의 그것의 카피를 유효하고 2차적인 것으로서 표시한다.
상기 예에 도시된 바와 같이, 한 페이지는 타이들포드의 상이한 노드 상에서 상이한 상태에 있을 수 있다. 일부 실시예에서, 병렬 데이터 구조는 타이들포드에서의 다양한 노드 상의 페이지의 상태에 관한 메타데이터를 유지하기 위해 이용된다. 일부 실시예에서, 구조는 타이들포드에서의 노드에 걸친 페이지의 상태의 재계산이 수행될 필요가 없도록 유지된다.
이 예시적인 실시예에서, NAM은 수동적이며, 페이지를 요청하고 그들에 기록하도록 구성되지 않는다. NAM은 시간에 따라 2차적인 페이지의 세트를 구축한다. 노드가 페이지에 기록하려고 시도하면, NAM 상의 카피는 유효하지 않게 된다.
일부 실시예에서, NAM은 캐시 일관성 프로토콜을 이용하여, 주요하거나 배타적인 것으로부터 2차적인 것으로의 임의의 전이를 통보받는다(즉, NAM은 이들 전이 상에서 카피됨). 따라서, NAM은 페이지가 배타적이거나 기본적인 것으로부터 2차적인 것으로 전이할 때마다 업데이트된다. 노드(N) 상의 페이지(p)가 2차적이 되면, NAM의 페이지는 또한, 2차적인 것이 되도록 업데이트되어야 한다. 따라서, NAM은 그것이 유효한 것으로 믿는 페이지의 세트의 상태를 보존하며, 일부 실시예에서 NAM은 타이들포드의 공식 메모리의 "최종(ultimate)" 참조 카피(또는 근사치)을 갖는다.
일부 실시예에서, 타이들포드가 결함이 있거나 컴 다운(come down)하고 있는 것이 검출되면, NAM은 NAM이 아직 가지고 있지 않은 타이들포드에서의 모든 주요한 페이지의 카피에 대한 판독 요청을 행하고, 이는 NAM 상에서 2차적인 것으로서 표시될 것이다. 충분한 시간이 주어지면, 이것은 NAM이 타이들포드에서의 노드 상의 페이지의 모든 2차적인 카피를 가지는 것(그리고 예를 들면, "최종 참조 카피"가 된다)을 야기할 것이다. 하나의 예로서, 장애 또는 에러가 검출된다고 가정하자. NAM은 모든 그것의 페이지를 검색하여 어떤 페이지가 유효하지 않은지를 결정한다. NAM은 타이들포드에서의 다른 노드로부터 그들 페이지의 카피에 대한 판독 요청을 함으로써 그들을 유효하게 하려고 시도한다. 카피가 다른 노드로부터 얻어지면, NAM은 유효하지 않은 페이지를 얻은 페이지의 카피로 업데이트하고, 그 다음 NAM 상에서 유효하고 2차적인 것으로 된다.
일부 실시예에서, NAM은 NAM이 예를 들면, 시스템 셧다운 또는 전력 손실 동안 계속해서 기능하는 것을 허용하는 마더보드 상의 배터리와 같은, 백업 시스템을 포함한다. 이것은 NAM에 타이들포드에서의 다른 노드 상의 페이지의 2차적인 카피를 요청할 시간을 제공한다(유효하지 않은 페이지로부터 유효한 2차적인 것으로 전이시키기 위해). 이것은 NAM이 장애 상황에서 그 자신을 완료하는 것을 허용한다.
도 17은 네트워크 결합 메모리의 존재시 캐시 일관성을 유지하기 위한 프로세스의 일 실시예를 도시하는 흐름도이다. 일부 실시예에서, 프로세스(1700)는 네트워크 결합 메모리 기기(1306)와 같은 네트워크 결합 메모리에 의해 실행된다. 일부 실시예에서, 프로세스(1700)는 상기 설명된 것과 같은 캐시 일관성 프로토콜에 따라 수행된다. 프로세스는 메시지가 네트워크 결합 메모리에서 수신될 때 1702에서 시작한다. 메시지는 노드(예로서, 타이들포드) 상의 페이지에 대해 수행될 동작에 기초하여 수신된다. 일부 실시예에서, 노드는 네트워크 결합 메모리가 통신하는 다수의 노드에 포함된다. 일부 실시예에서, 가상 머신은 타이들포드에서의 각각의 노드 상에서 실행되는 하이퍼커널의 세트에 의해 생성된다. 운영 체제는 그 다음, 복수의 물리 노드 상에서 집합적으로 실행될 수 있다. 일부 실시예에서, (게스트) 운영 체제는 투명하게 실행된다. 예를 들면, 상기 설명한 바와 같이, 하이퍼커널을 이용함으로써, 운영 체제는 그것이 베어 메탈 피스의 하드웨어 상에서 실행되고 있다는 인상을 받게 되고(타이들포드에서와 같이 복수의 물리 노드 상에서 집합적으로 실행되는 동안), 여기서 운영 체제에 대한 수정이 행해질 필요가 없다.
상기 설명된 바와 같이, 일부 실시예에서, 네트워크 결합 메모리는 바이트의 물리 어레이로서 체계화된다. 일부 실시예에서, 어레이의 각각의 바이트는 가상 머신의 물리 메모리 어드레스에 대응한다.
일부 실시예에서, 네트워크 결합 메모리는 중앙집중식 기기이다. 다른 실시예에서, 네트워크 결합 메모리는 타이들포드에서의 노드에 걸쳐 분산된다. 1704에서, 조치는 수신된 메시지에 기초하여 네트워크 결합 메모리에 의해 수행된다.
상기 설명된 바와 같이, 다양한 실시예에서, 노드 상의 메모리의 페이지에 대해 수행될 수 있는 동작은 판독 및 기록(로컬 또는 원격일 수 있음)을 포함한다. 수행될 동작의 유형에 기초하여 상이한 유형의 메시지가 전송될 수 있다.
예를 들면, 동작이 페이지에 기록하기 위한 요청이면, 무효화 요청(1702에서의 메시지의 예)은 네트워크 결합 메모리 뿐만 아니라, 다른 노드로 전송되고 그것에 의해 수신되어 기록될 페이지의 그들의 카피를 무효화한다. 네트워크 결합 메모리는 그 다음, 페이지의 그것의 카피를 무효화하도록 구성된다. 네트워크 결합 메모리는 또한, 페이지의 그것의 카피가 현재 유효하지 않음을 나타내는 확인응답을 리턴시키도록 구성된다. 기록 동작은 그 다음, 무효화 요청에 대한 확인응답을 수신한 후에 진행될 수 있다.
동작이 예를 들면, 노드로부터 페이지를 판독하기 위한 원격 요청이면, 페이지(예로서, 1702에서 메시지가 페이지의 카피를 포함하는 페이지의 카피 또는 스냅샷)는 요청 노드 뿐만 아니라, 네트워크 결합 메모리로 전송된다. 네트워크 결합 메모리는 그 다음, 페이지의 카피로 업데이트된다(예로서, 1704에서 네트워크 결합 메모리는 페이지의 카피를 저장함).
동작, 조치, 및 페이지 상태 전이의 다른 예가 표 1과 결부하여 상기 설명된다.
도 18은 페이지를 제로화하기 위한 프로세스의 일 실시예를 도시하는 흐름도이다. 다양한 실시예에서, 프로세스(1800)는 타이들포드에 포함된 노드 및/또는 네트워크 결합 메모리에 의해 수행된다. 프로세스는 휴면 페이지를 할당하는 표시가 수신될 때 1802에서 시작한다. 일부 실시예에서, 휴면 페이지는 아직 제로화되지 않은 메모리의 페이지이다. 다양한 실시예에서, 메모리의 페이지는 DRAM(예로서, 타이들포드에서의 노드 상의)의 페이지, 플래시 메모리(예로서, 네트워크 결합 메모리에서의 비 휘발성 메모리)의 페이지, 또는 메모리의 임의의 다른 적절한 페이지를 포함한다. 1804에서, 휴면 페이지가 할당된다. 1806에서, 할당된 휴면 페이지는 그 다음 제로화된다. 일부 실시예에서, 휴면 페이지의 제로화는 휴면 페이지의 할당과 동시에 수행된다. 엔트리는 그 다음, 페이지가 유효하고 비 휴면 상태가 되는 제 2 레벨 페이지 표에 배치될 수 있다. 상기 설명된 바와 같이, 휴면 페이지(페이지가 휴면인 것으로서 태깅(tagging)될 수 있는)를 이용함으로써, 할당 후에(또는 그와 동시에/그와 병행하여) 제로화를 수행하는 것은 시동 시에, 그러나 페이지가 이용될 시에 "레이지" 방식으로 제로화가 행해지지 않기 때문에 시스템의 부팅 속도를 증가시킨다.
클러스터의 전체 메모리가 강한 메모리 일관성을 지원하는 가상 머신의 메모리를 표현하는 노드의 단단히 결합된 노드 클러스터에 네트워크 결합 메모리(예로서, 플래시 기기)를 부착하기 위한 기술이 상기 설명된다. 일부 실시예에서, 상기 설명된 바와 같이, 클러스터 내의 네트워크 결합 메모리는 가상 기계의 기준 메모리이다.
상기 실시예가 명확한 이해의 목적을 위해 일부 상세하게 설명되었지만, 본 발명은 제공된 상세로 제한되지 않는다. 본 발명을 구현하는 많은 대안적인 방식이 존재한다. 개시된 실시예는 제한적인 것이 아니라 예시적이다.

Claims (32)

  1. 컴퓨터 시스템에 있어서:
    휘발성 메모리;
    비 휘발성 메모리; 및
    하나 이상의 코어를 갖는 물리 프로세서를 포함하고,
    각각의 코어는 하나 이상의 하이퍼스레드(hyperthread)를 갖고, 하이퍼커널(hyper-kernel)은 코어 또는 하이퍼스레드에 의해 호출될 때, 상기 휘발성 메모리의 일부를 게스트 물리 어드레스 공간의 제 1 게스트 물리 어드레스에 매핑하는 단계; 및 상기 비 휘발성 메모리의 일부를 상기 게스트 물리 어드레스 공간의 제 2 게스트 물리 어드레스에 매핑하는 단계에 의해, 컴퓨터 시스템의 물리 리소스를 적어도 부분적으로 통합된 세트로 통합시키고,
    상기 하이퍼커널은 상기 컴퓨터 시스템상에서 실행되는 운영 체제에 상기 게스트 물리 어드레스 공간을 제공하며, 상기 운영 체제에 제공된 상기 게스트 물리 어드레스 공간은 가용한 휘발성 메모리의 양을 초과하는 상기 운영 체제에 의해 인지되는 주 메모리의 양에 대응하는, 컴퓨터 시스템.
  2. 제 1 항에 있어서,
    상기 하이퍼커널은 적어도 부분적으로는 상기 컴퓨터 시스템의 상기 물리 리소스를 집합함으로써 상기 운영 체제에 제공되는 가상 머신을 생성하고, 상기 비 휘발성 메모리의 상기 일부는 상기 하이퍼커널에 의해 생성된 상기 가상 머신 내의 메모리 어드레스에 매핑되는, 컴퓨터 시스템.
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 제 1 항에 있어서,
    상기 비 휘발성 메모리는 네트워크를 통해 액세스 가능한 중앙집중식 기기의 일부를 포함하는, 컴퓨터 시스템.
  14. 제 1 항에 있어서,
    상기 컴퓨터 시스템은 복수의 물리 노드들을 포함하고, 상기 비 휘발성 메모리는 상기 물리 노드들 중 적어도 일부에 걸쳐 분산되는 네트워크 결합 메모리의 일부를 포함하는, 컴퓨터 시스템.
  15. 제 1 항에 있어서,
    상기 비 휘발성 메모리는 플래시 메모리, 위상 변화 메모리, 및 3D-XPoint 메모리 중 하나를 포함하는, 컴퓨터 시스템.
  16. 삭제
  17. 물리 프로세서의 코어 또는 하이퍼스레드에 의해 호출되는 하이퍼커널에 의한, 휘발성 메모리의 일부를 게스트 물리 어드레스 공간의 제 1 게스트 물리 어드레스에 매핑하는 단계; 및 비 휘발성 메모리의 일부를 상기 게스트 물리 어드레스 공간의 제 2 게스트 물리 어드레스에 매핑하는 단계에 의해, 휘발성 메모리 및 비 휘발성 메모리를 포함하는 물리 컴퓨팅 리소스를 적어도 부분적으로 통합된 세트로 통합하는 단계; 및
    상기 하이퍼커널에 의해 상기 게스트 물리 어드레스 공간을 운영 체제에 제공하는 단계를 포함하고, 상기 운영 체제에 제공된 상기 게스트 물리 어드레스 공간은 가용한 휘발성 메모리의 양을 초과하는 상기 운영 체제에 의해 인지되는 주 메모리의 양에 대응하는, 방법.
  18. 컴퓨터 명령을 포함하는 컴퓨터 프로그램이 기록된 비 일시적 컴퓨터 판독가능한 저장 매체에 있어서,
    상기 컴퓨터 명령은:
    물리 프로세서의 코어 또는 하이퍼스레드에 의해 호출되는 하이퍼커널에 의한, 휘발성 메모리의 일부를 게스트 물리 어드레스 공간의 제 1 게스트 물리 어드레스에 매핑하는 단계; 및 비 휘발성 메모리의 일부를 상기 게스트 물리 어드레스 공간의 제 2 게스트 물리 어드레스에 매핑하는 단계에 의해, 휘발성 메모리 및 비 휘발성 메모리를 포함하는 물리 컴퓨팅 리소스를 적어도 부분적으로 통합된 세트로 통합하고,
    상기 하이퍼커널에 의해 상기 게스트 물리 어드레스 공간을 운영 체제에 제공하기 위한 것이고, 상기 운영 체제에 제공된 상기 게스트 물리 어드레스 공간은 가용한 휘발성 메모리의 양을 초과하는 상기 운영 체제에 의해 인지되는 주 메모리의 양에 대응하는, 비 일시적 컴퓨터 판독가능한 저장 매체.
  19. 삭제
  20. 삭제
  21. 제 1 항에 있어서,
    상기 휘발성 메모리 및 상기 비 휘발성 메모리는 서로 국부적인, 컴퓨터 시스템.
  22. 제 1 항에 있어서,
    상기 휘발성 메모리 및 상기 비 휘발성 메모리는 서로 떨어져있는, 컴퓨터 시스템.
  23. 제 1 항에 있어서,
    상기 비 휘발성 메모리의 일부를 상기 제 2 게스트 물리 어드레스에 매핑하는 단계는, 상기 제 2 게스트 물리 어드레스에 매핑되는 상기 비 휘발성 메모리의 일부의 물리 어드레스로 페이지 표의 엔트리를 업데이트하는 단계를 포함하는, 컴퓨터 시스템.
  24. 제 1 항에 있어서,
    상기 휘발성 메모리, 상기 비 휘발성 메모리, 및 상기 물리 프로세서를 포함하는 복수의 물리 노드들을 더 포함하며, 상기 하이퍼커널은 상기 운영 체제에 제공되는 통합된 세트로 상기 복수의 물리 노드들의 컴퓨팅 리소스를 통합시킴으로써 상기 복수의 물리 노드들에 걸치는 가상 머신을 적어도 부분적으로 생성하는, 컴퓨터 시스템.
  25. 제 17 항에 있어서,
    상기 하이퍼커널은 적어도 부분적으로 상기 물리 컴퓨팅 리소스를 통합함으로써 상기 운영 체제에 제공되는 가상 머신을 생성하고, 상기 비 휘발성 메모리의 상기 일부는 상기 하이퍼커널에 의해 생성된 상기 가상 머신 내의 메모리 어드레스에 매핑되는, 방법.
  26. 제 17 항에 있어서,
    상기 비 휘발성 메모리는 네트워크를 통해 액세스 가능한 중앙집중식 기기의 일부를 포함하는, 방법.
  27. 제 17 항에 있어서,
    상기 비 휘발성 메모리는 복수의 물리 노드들의 적어도 일부 물리 노드들에 걸쳐 분포된 네트워크 결합 메모리의 일부를 포함하는, 방법.
  28. 제 17 항에 있어서,
    상기 비 휘발성 메모리는 플래시 메모리, 위상 변화 메모리, 및 3D-XPoint 메모리 중 하나를 포함하는, 방법.
  29. 제 17 항에 있어서,
    상기 휘발성 메모리 및 상기 비 휘발성 메모리는 서로 국부적인, 방법.
  30. 제 17 항에 있어서,
    상기 휘발성 메모리 및 상기 비 휘발성 메모리는 서로 떨어져있는, 방법.
  31. 제 17 항에 있어서,
    상기 비 휘발성 메모리의 일부를 상기 제 2 게스트 물리 어드레스에 매핑하는 단계는, 상기 제 2 게스트 물리 어드레스에 매핑되는 상기 비 휘발성 메모리의 일부의 물리 어드레스로 페이지 표의 엔트리를 업데이트하는 단계를 포함하는, 방법.
  32. 제 17 항에 있어서,
    상기 휘발성 메모리, 상기 비 휘발성 메모리, 및 상기 물리 프로세서를 포함하는 복수의 물리 노드들에 걸친 가상 머신을 생성하는 단계를 더 포함하고,
    상기 하이퍼커널은 상기 운영 체제에 제공되는 통합된 세트로 상기 복수의 물리 노드들의 컴퓨팅 리소스를 통합시킴으로써 상기 복수의 물리 노드들에 걸치는 가상 머신을 적어도 부분적으로 생성하는, 방법.
KR1020187009083A 2015-10-01 2016-09-29 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 KR102051282B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562236076P 2015-10-01 2015-10-01
US62/236,076 2015-10-01
US15/279,187 2016-09-28
US15/279,187 US11240334B2 (en) 2015-10-01 2016-09-28 Network attached memory using selective resource migration
PCT/US2016/054414 WO2017059054A1 (en) 2015-10-01 2016-09-29 Network attached memory using selective resource migration

Publications (2)

Publication Number Publication Date
KR20180057639A KR20180057639A (ko) 2018-05-30
KR102051282B1 true KR102051282B1 (ko) 2019-12-03

Family

ID=58424292

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187009083A KR102051282B1 (ko) 2015-10-01 2016-09-29 선택적 리소스 이동을 이용하는 네트워크 결합 메모리

Country Status (6)

Country Link
US (2) US11240334B2 (ko)
EP (1) EP3356936B1 (ko)
JP (1) JP6652646B2 (ko)
KR (1) KR102051282B1 (ko)
CN (1) CN108292235B (ko)
WO (1) WO2017059054A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11240334B2 (en) 2015-10-01 2022-02-01 TidalScale, Inc. Network attached memory using selective resource migration
JP6696252B2 (ja) * 2016-03-24 2020-05-20 富士ゼロックス株式会社 通信プログラム、通信装置及び情報処理装置
US11023135B2 (en) 2017-06-27 2021-06-01 TidalScale, Inc. Handling frequently accessed pages
US10817347B2 (en) * 2017-08-31 2020-10-27 TidalScale, Inc. Entanglement of pages and guest threads
US10268630B1 (en) 2017-10-24 2019-04-23 Hewlett Packard Enterprise Development Lp Noncoherent interprocessor communication remapping node controller
US11275600B2 (en) * 2017-11-14 2022-03-15 TidalScale, Inc. Virtualized I/O
US11175927B2 (en) * 2017-11-14 2021-11-16 TidalScale, Inc. Fast boot
US11263122B2 (en) * 2019-04-09 2022-03-01 Vmware, Inc. Implementing fine grain data coherency of a shared memory region
US20200356485A1 (en) * 2019-05-09 2020-11-12 International Business Machines Corporation Executing multiple data requests of multiple-core processors
WO2021086839A1 (en) * 2019-10-30 2021-05-06 TidalScale, Inc. Goal-directed software-defined numa working set management
CN114860163B (zh) 2020-04-28 2023-08-22 华为技术有限公司 一种存储系统、内存管理方法和管理节点
KR102650571B1 (ko) * 2020-11-12 2024-03-26 한국전자통신연구원 역가상화 환경용 혼성 메모리 관리 장치 및 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247673A (en) 1989-12-04 1993-09-21 Bull Hn Information Systems Italia S.P.A. Multiprocessor system having distributed shared resources and dynamic global data replication
US20110179229A1 (en) 2010-01-15 2011-07-21 International Business Machines Corporation Store-operate-coherence-on-value
US20140059110A1 (en) * 2012-08-23 2014-02-27 TidalScale, Inc. Hierarchical dynamic scheduling
US20150161048A1 (en) 2013-12-09 2015-06-11 PernixData, Inc. System and Method for Maintaining Cache Coherency
JP2015127949A (ja) 2013-12-27 2015-07-09 インテル・コーポレーション 支援型コヒーレント共有メモリ

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5055999A (en) * 1987-12-22 1991-10-08 Kendall Square Research Corporation Multiprocessor digital data processing system
US5109486A (en) 1989-01-06 1992-04-28 Motorola, Inc. Distributed computer system with network and resource status monitoring
US5991893A (en) 1997-08-29 1999-11-23 Hewlett-Packard Company Virtually reliable shared memory
US6804766B1 (en) * 1997-11-12 2004-10-12 Hewlett-Packard Development Company, L.P. Method for managing pages of a designated memory object according to selected memory management policies
US6799202B1 (en) 1999-12-16 2004-09-28 Hachiro Kawaii Federated operating system for a server
US20020129128A1 (en) 2001-03-07 2002-09-12 Stephen Gold Aggregation of multiple headless computer entities into a single computer entity group
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
US7003631B2 (en) * 2002-05-15 2006-02-21 Broadcom Corporation System having address-based intranode coherency and data-based internode coherency
US7043623B2 (en) 2003-01-22 2006-05-09 Intelitrac, Inc. Distributed memory computing environment and implementation thereof
US20040249947A1 (en) 2003-05-22 2004-12-09 Hewlett-Packard Development Company, L.P. Concurrent cluster environment
JP3808058B2 (ja) 2003-05-27 2006-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 複数のホストが圧縮データを記憶するメモリ・セクタの集合を共用できるようにするための装置
US7469321B2 (en) 2003-06-25 2008-12-23 International Business Machines Corporation Software process migration between coherency regions without cache purges
US9020801B2 (en) 2003-08-11 2015-04-28 Scalemp Inc. Cluster-based operating system-agnostic virtual computing system
US8776050B2 (en) 2003-08-20 2014-07-08 Oracle International Corporation Distributed virtual machine monitor for managing multiple virtual resources across multiple physical nodes
US20050044301A1 (en) 2003-08-20 2005-02-24 Vasilevsky Alexander David Method and apparatus for providing virtual computing services
US8090914B2 (en) * 2004-01-20 2012-01-03 Hewlett-Packard Development Company, L.P. System and method for creating ordering points
US8621458B2 (en) 2004-12-21 2013-12-31 Microsoft Corporation Systems and methods for exposing processor topology for virtual machines
US9753754B2 (en) 2004-12-22 2017-09-05 Microsoft Technology Licensing, Llc Enforcing deterministic execution of threads of guest operating systems running in a virtual machine hosted on a multiprocessor machine
US8010485B1 (en) 2005-10-20 2011-08-30 American Megatrends, Inc. Background movement of data between nodes in a storage cluster
US7917474B2 (en) * 2005-10-21 2011-03-29 Isilon Systems, Inc. Systems and methods for accessing and updating distributed data
US7596654B1 (en) 2006-01-26 2009-09-29 Symantec Operating Corporation Virtual machine spanning multiple computers
US7366847B2 (en) * 2006-02-06 2008-04-29 Azul Systems, Inc. Distributed cache coherence at scalable requestor filter pipes that accumulate invalidation acknowledgements from other requestor filter pipes using ordering messages from central snoop tag
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US8095931B1 (en) * 2006-04-27 2012-01-10 Vmware, Inc. Controlling memory conditions in a virtual machine
US7783788B1 (en) 2006-04-28 2010-08-24 Huawei Technologies Co., Ltd. Virtual input/output server
US7613882B1 (en) 2007-01-29 2009-11-03 3 Leaf Systems Fast invalidation for cache coherency in distributed shared memory system
US7715400B1 (en) 2007-04-26 2010-05-11 3 Leaf Networks Node identification for distributed shared memory system
US20110004732A1 (en) 2007-06-06 2011-01-06 3Leaf Networks, Inc. DMA in Distributed Shared Memory System
US7782869B1 (en) 2007-11-29 2010-08-24 Huawei Technologies Co., Ltd. Network traffic control for virtual device interfaces
US7711789B1 (en) 2007-12-07 2010-05-04 3 Leaf Systems, Inc. Quality of service in virtual computing environments
US20110004729A1 (en) 2007-12-19 2011-01-06 3Leaf Systems, Inc. Block Caching for Cache-Coherent Distributed Shared Memory
US20100161908A1 (en) * 2008-12-18 2010-06-24 Lsi Corporation Efficient Memory Allocation Across Multiple Accessing Systems
US9003006B2 (en) 2011-03-14 2015-04-07 Mash5 Technologies, Inc. Intercloud application virtualization
US8966172B2 (en) 2011-11-15 2015-02-24 Pavilion Data Systems, Inc. Processor agnostic data storage in a PCIE based shared storage enviroment
US8769105B2 (en) 2012-09-14 2014-07-01 Peaxy, Inc. Software-defined network attachable storage system and method
US10061622B2 (en) 2013-02-26 2018-08-28 Red Hat Israel, Ltd. Updating memory topology information for virtual machines
US9760596B2 (en) 2013-05-13 2017-09-12 Amazon Technologies, Inc. Transaction ordering
US9774401B1 (en) 2013-07-15 2017-09-26 Paul Borrill Entangled links, transactions and trees for distributed computing systems
US11016820B2 (en) 2013-08-26 2021-05-25 Vmware, Inc. Load balancing of resources
EP3042282A4 (en) 2013-09-05 2017-04-26 Tidalscale Inc. Hierarchical dynamic scheduling
WO2015034506A1 (en) 2013-09-05 2015-03-12 TidalScale, Inc. Selective resource migration
US20150356125A1 (en) 2014-06-06 2015-12-10 Plexistor Ltd. Method for data placement based on a file level operation
US9565269B2 (en) 2014-11-04 2017-02-07 Pavilion Data Systems, Inc. Non-volatile memory express over ethernet
US9552233B1 (en) 2015-09-10 2017-01-24 Red Hat Israel, Ltd. Virtual machine migration using free page hinting
US11240334B2 (en) 2015-10-01 2022-02-01 TidalScale, Inc. Network attached memory using selective resource migration

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247673A (en) 1989-12-04 1993-09-21 Bull Hn Information Systems Italia S.P.A. Multiprocessor system having distributed shared resources and dynamic global data replication
US20110179229A1 (en) 2010-01-15 2011-07-21 International Business Machines Corporation Store-operate-coherence-on-value
US20140059110A1 (en) * 2012-08-23 2014-02-27 TidalScale, Inc. Hierarchical dynamic scheduling
US20150161048A1 (en) 2013-12-09 2015-06-11 PernixData, Inc. System and Method for Maintaining Cache Coherency
JP2015127949A (ja) 2013-12-27 2015-07-09 インテル・コーポレーション 支援型コヒーレント共有メモリ

Also Published As

Publication number Publication date
EP3356936A1 (en) 2018-08-08
JP2019500705A (ja) 2019-01-10
US20220174130A1 (en) 2022-06-02
US20170149921A1 (en) 2017-05-25
JP6652646B2 (ja) 2020-02-26
CN108292235B (zh) 2021-11-16
EP3356936B1 (en) 2020-05-27
US11240334B2 (en) 2022-02-01
KR20180057639A (ko) 2018-05-30
CN108292235A (zh) 2018-07-17
EP3356936A4 (en) 2019-06-05
WO2017059054A1 (en) 2017-04-06

Similar Documents

Publication Publication Date Title
KR102051282B1 (ko) 선택적 리소스 이동을 이용하는 네트워크 결합 메모리
US10783000B2 (en) Associating working sets and threads
US11803306B2 (en) Handling frequently accessed pages
US11159605B2 (en) Hierarchical dynamic scheduling
US11656878B2 (en) Fast boot
US20220229688A1 (en) Virtualized i/o
WO2015034508A1 (en) Hierarchical dynamic scheduling

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant