KR20170029583A - 가상 컴퓨팅 환경에서의 메모리 및 자원 관리 - Google Patents

가상 컴퓨팅 환경에서의 메모리 및 자원 관리 Download PDF

Info

Publication number
KR20170029583A
KR20170029583A KR1020177003649A KR20177003649A KR20170029583A KR 20170029583 A KR20170029583 A KR 20170029583A KR 1020177003649 A KR1020177003649 A KR 1020177003649A KR 20177003649 A KR20177003649 A KR 20177003649A KR 20170029583 A KR20170029583 A KR 20170029583A
Authority
KR
South Korea
Prior art keywords
memory page
memory
instructions
machine
operating system
Prior art date
Application number
KR1020177003649A
Other languages
English (en)
Other versions
KR102123422B1 (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 KR20170029583A publication Critical patent/KR20170029583A/ko
Application granted granted Critical
Publication of KR102123422B1 publication Critical patent/KR102123422B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0664Virtualisation aspects at device level, e.g. emulation of a storage device or system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • 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)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

가상 컴퓨팅 환경에서의 메모리 및 자원 관리를 위한 시스템들 및 기법들이 본원에 개시된다. 예를 들어, 일부 실시예들에서, 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치는 저장 디바이스; 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는, 저장 디바이스에 결합된 메모리 페이지 비교 로직 - 게스트 머신은 호스트 머신에 의해 호스팅됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는, 메모리 페이지 비교 로직에 결합된, 병합 로직을 포함할 수 있다. 다른 실시예들이 개시되고 그리고/또는 청구될 수 있다.

Description

가상 컴퓨팅 환경에서의 메모리 및 자원 관리{MEMORY AND RESOURCE MANAGEMENT IN A VIRTUAL COMPUTING ENVIRONMENT}
본 개시내용의 실시예들은 컴퓨팅 디바이스 분야에 관한 것이며, 보다 구체적으로는, 하드웨어 자원 액세스에 관한 것이다.
하나 이상의 게스트 머신들이 호스트 머신 상에서 실행되는 가상 컴퓨팅 환경들이 흔히 사용된다. 게스트 동작들과 호스트 동작들의 메모리 액세스 시간을 개선시키기 위해, 게스트 머신들과 호스트 머신들은 메모리 캐시를 종종 사용하고, 전형적으로 적어도 일부 캐시 공간을 공유한다.
실시예들은 첨부 도면들과 관련한 이하의 상세한 설명에 의해 용이하게 이해될 것이다. 이 설명을 용이하게 하기 위해, 유사한 참조 부호들은 유사한 구조적 요소들을 가리킨다. 실시예들은 첨부 도면들의 도면들에 제한이 아닌 예로서 예시되어 있다.
도 1은 다양한 실시예들에 따른, 가상 컴퓨팅 환경의 블록도.
도 2는 다양한 실시예들에 따른, 도 1의 가상 컴퓨팅 환경의 호스트 머신에 포함될 수 있는 저장 디바이스의 블록도.
도 3은 다양한 실시예들에 따른, 다수의 호스트 머신들과 다수의 호스트 머신들의 자원들을 다수의 클라이언트 머신들 간에 할당(allocate)하는 자원 관리자를 가지는 가상 컴퓨팅 환경의 블록도.
도 4는 다양한 실시예들에 따른, 도 1의 가상 컴퓨팅 환경에 포함될 수 있는 메모리 관리 로직의 블록도.
도 5는 다양한 실시예들에 따른, 메모리 페이지들을 분석하는 프로세스의 흐름도.
도 6은 다양한 실시예들에 따른, 게스트 메모리 페이지들과 호스트 메모리 페이지들을 비교하는 프로세스의 흐름도.
도 7은 다양한 실시예들에 따른, 게스트 메모리 페이지들을 호스트 메모리 페이지들에 매핑하는 프로세스의 흐름도.
도 8은 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경의 자원 관리자에 포함될 수 있는 자원 할당 로직(resource allocation logic)의 블록도.
도 9는 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경에서 게스트 머신들을 호스트 머신들에 배정(assign)하는 프로세스의 흐름도.
도 10은 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경의 자원 관리자에 포함될 수 있는 메모리 조직화 로직(memory organization logic)의 블록도.
도 11은 다양한 실시예들에 따른, 게스트 머신 링커(guest machine linker)가 호스트 머신 링커(host machine linker)와 통신하는 가상 컴퓨팅 환경의 블록도.
도 12는 다양한 실시예들에 따른, 제1 운영 체제에 포함된 명령어 세트들의 배열과 제2 운영 체제에 포함된 명령어 세트들의 배열을 나타낸 도면.
도 13은 다양한 실시예들에 따른, 도 12의 배열과 상이한, 도 12의 제1 운영 체제에 포함된 명령어 세트들의 배열과, 도 12의 배열과 상이한, 제2 운영 체제에 포함된 명령어 세트들의 배열을 나타낸 도면.
도 14는 다양한 실시예들에 따른, 상이한 운영 체제들의 명령어 세트들을 비교하는 프로세스의 흐름도.
도 15는 다양한 실시예들에 따른, 운영 체제의 명령어 세트들을 배열하는 프로세스의 흐름도.
도 16은 본원에 기술되는 다양한 실시예들을 실시하는 데 사용될 수 있는 예시적인 컴퓨팅 디바이스의 블록도.
가상 컴퓨팅 환경에서의 메모리 및 자원 관리를 위한 다양한 시스템들 및 기법들이 본원에 개시된다. 예를 들어, 일부 실시예들에서, 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치는 저장 디바이스; 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는, 저장 디바이스에 결합된, 메모리 페이지 비교 로직 - 게스트 머신은 호스트 머신에 의해 호스팅됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는, 메모리 페이지 비교 로직에 결합된, 병합 로직(merge logic)을 포함한다.
일부 실시예들에서, 가상 컴퓨팅 환경에서의 자원 할당을 위한 장치는 저장 디바이스; 적어도 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 메모리 페이지 비교 로직 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는, 메모리 페이지 비교 로직에 결합된, 배정 로직(assignment logic)을 포함한다.
일부 실시예들에서, 가상 컴퓨팅 환경에서의 메모리 조직화를 위한 장치는 저장 디바이스; 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 제1 운영 체제 명령어 세트가, 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하는, 저장 디바이스에 결합된, 명령어 비교 로직 - 호스트 머신 상에서 실행되도록 게스트 머신이 배정되지 않음 -; 및 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다는 결정에 응답하여, 제1 운영 체제 명령어 세트와 제2 운영 체제 명령어 세트로 이루어진 그룹으로부터 선택되는 운영 체제 명령어 세트를, 운영 체제 명령어 세트가 저장 디바이스에서의 하나 이상의 메모리 페이지들에 포함되고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작하며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록, 배열하는, 명령어 비교 로직에 결합된, 배열 로직(arrangement logic)을 포함한다.
본원에 개시되는 실시예들 중 다양한 실시예들은 가상 컴퓨팅 환경에서 개선된 메모리 캐시 관리를 제공할 수 있다. 종래의 가상 컴퓨팅 환경들에서, (상이한 기능들을 수행하는) 상이한 게스트 머신들이 동작 동안 종종 시스템 제어 내로 스왑인되고 그로부터 스왑아웃된다. 게스트 머신을 위해 메모리 캐시를 사용하는 것은 (알려진 바와 같이, 캐시에의 액세스가 메인 메모리에의 액세스보다 더 빠르기 때문에) 게스트 머신이 새로 "스왑인"될 때 응답 시간을 개선시키는 종래 기법이다. 이전의 연구는 캐시 히트율(cache hit rate)을 개선시키고 캐시의 필요한 크기를 최소화하기 위해 유사한 게스트 머신들이 캐시를 공유하게 하는 것에 관한 것이었다.
그렇지만, 호스트 머신과 게스트 머신이 (예컨대, 호스트 인터럽트들에 응답하여) 시스템 제어 내로 스왑인되고 그로부터 스왑아웃될 때 캐시 압박(cache pressure)이 또한 발생한다는 것을 이전에는 인식하지 못하였다. 종래의 가상 컴퓨팅 환경들에서, 게스트 머신과 호스트 머신 각각은 그 자신의 명령어들의 사본을 캐시에 저장하고, 따라서 상대방에 대한 사본을 "오염"시킨다. 캐시의 크기를 증가시키는 것이 캐시 압박을 완화시키는 데 도움을 줄 수 있지만, 캐시 크기를 증가시키는 것이 또한 다이 크기를 증가시키는 것을 필요로 할 수 있고, 실현가능하거나 완전한 접근법이 아닐 수 있다.
본원에 개시되는 실시예들 중 일부는, 게스트 머신들이 "유사한" 호스트 머신들(즉, 공통의 운영 체제 명령어들을 갖는 것들) 상에서 실행되고 따라서 공통의 명령어들의 하나의 사본만을 캐시에 가지기만 하면 되도록, 게스트 머신들을 호스트 머신들과 일치(match)시킨다. 게스트들과 호스트들 사이에서 메모리 페이지들을 공유하는 것은 게스트 종료(guest exit) 이벤트들의 핸들링으로 인한 캐시 오염(cache pollution)을 완화시킬 수 있다. 상세하게는, 본원에 개시되는 시스템들 및 기법들의 일부 실시예들은, 게스트 머신과 호스트 머신 둘 다가, 공유된 페이지에 액세스할 때, 동일한 물리적 메모리 페이지를 참조하도록, 물리적 메모리에서 게스트 머신과 호스트 머신 사이에 공유되는 메모리 페이지들을 병합시킬 수 있다.
그에 부가하여, 명령어들이 페이지 레벨로 읽혀지기 때문에, 본원에 개시되는 실시예들 중 다양한 실시예들은 명령어들을 배열하고, 명령어들을 저장하며, 그리고/또는 호스트 머신과 게스트 머신이 가능한 한 많은 공통의 전체 메모리 페이지들을 공유하도록 호스트와 게스트 머신 페어링들을 선택한다. 본원에 개시되는 다양한 실시예들은 (예컨대, 게스트들과 호스트들 사이의 내용 기반 공유(content-based sharing)에 기초하는) 캐시 지역성(cache locality)을 개선시키고 따라서 성능을 개선시킬 수 있다. 본원에 개시되는 시스템들 및 기법들의 일부 실시예들은, (예컨대, 클라우드 컴퓨팅 환경에서) 게스트 머신을 호스트 머신에 배정할지 그리고 어떻게 배정할지를 결정할 때, 자원들을 관리할 때 게스트 머신을 호스트 머신에 일치시키기 위해 머신들과 잠재적 게스트 머신들 사이의 메모리 페이지들의 공통성을 비교할 수 있다. 게스트들과 호스트들이 공유할 수 있도록 동일하거나 유사한 운영 체제 메모리 페이지들(예컨대, 커널 명령어들의 메모리 페이지들)을 갖는 게스트들과 호스트들을 페어링하는 것은 성능을 개선시킬 수 있다.
본원에 개시되는 시스템들 및 기법들의 일부 실시예들은, 호스트 머신과 게스트 머신 각각에 의해 사용되는 명령어 세트들을 분석할 수 있고 게스트 머신 명령어들의 전체 메모리 페이지들이 호스트 머신 명령어들의 전체 메모리 페이지들과 동일하도록(그리고 따라서 용이하게 공유될 수 있도록) 명령어 세트들을 (예컨대, 링킹(linking)에 의해) 배열할 수 있다. 예를 들어, 게스트 운영 체제 명령어들과 호스트 운영 체제 명령어들이 특정의 기능들에 대해 동일한 명령어 세트들을 사용하도록 개발 및/또는 링킹될 수 있으며, 명령어들이 동일한 이진 코드(binary code) - 이 코드는 메모리 페이지들에 걸쳐 동일한 분포를 가짐 - 로 컴파일링될 수 있다. 이하에서 논의되는 바와 같이, 이것은 "페이지 입도(page granularity)를 일치시키는 것"이라고 지칭될 수 있다.
호스팅하는 게스트들 사이의 공통 메모리 페이지들을 식별하는 것은 공통 메모리 페이지들이 "핫 코드(hot code)"에 대응할 때 특히 유익할 수 있다. 본원에서 사용되는 바와 같이, "핫 코드"는 빈번히 호출되는 명령어들을 지칭할 수 있고, 인터럽트 핸들링 명령어들(예컨대, 인터럽트 서비스 루틴들) 및 페이지 폴트 핸들링 명령어들을 포함할 수 있다. 핫 코드의 다른 예들은 특정 라이브러리들(예컨대, 메모리 이동(memory move) 명령어들), (예컨대, S3과 같은, 특정의 상태로부터 재개하는) 전력 관리 명령어들, 프로세서간 통신 명령어들, (예컨대, 컨텍스트 스위칭, 타이머 관리, 인터럽트 제어기 구성 등을 위한) CPU(central processing unit) 관리 명령어들을 포함할 수 있지만, 이들로 제한되지 않는다.
이하의 상세한 설명에서, 본원의 일부를 형성하는 첨부 도면들이 참조되고, 도면들에서 유사한 도면 부호들은 도면 전체에 걸쳐 유사한 부분들을 가리키며, 실시될 수 있는 실시예들이 예시로서 도시되어 있다. 다른 실시예들이 이용될 수 있다는 것과 본 개시내용의 범주를 벗어남이 없이 구조적 또는 논리적 변경들이 행해질 수 있다는 것을 잘 알 것이다.
다양한 동작들이, 개시된 발명 요지를 이해하는 데 가장 도움이 되는 방식으로, 다수의 개별 행동들 또는 동작들로서 차례로 기술될 수 있다. 그렇지만, 설명의 순서는 이 동작들이 꼭 순서 의존적(order dependent)임을 암시하는 것으로 해석되어서는 안된다. 상세하게는, 이 동작들이 제시의 순서로 수행되지 않을 수 있다. 기술된 동작들이 기술된 실시예들과 상이한 순서로 수행될 수 있다. 다양한 부가의 동작들이 수행될 수 있고 그리고/또는 기술된 동작들이 부가의 실시예들에서 생략될 수 있다.
본 개시내용의 목적상, 문구 "A 및/또는 B"는 (A), (B), 또는 (A 및 B)를 의미한다. 본 개시내용의 목적상, 문구 "A, B, 및/또는 C"는 (A), (B), (C), (A 및 B), (A 및 C), (B 및 C), 또는 (A, B 및 C)를 의미한다. 본 설명은 문구들 "일 실시예에서" 또는 "실시예들에서"를 사용할 수 있고, 그 각각은 동일하거나 상이한 실시예들 중 하나 이상의 실시예들을 지칭할 수 있다. 게다가, 용어들 "포함하는(comprising)", "포함하는(including)", "가지는" 등은, 본 개시내용의 실시예들과 관련하여 사용되는 바와 같이, 동의어이다.
본원에서 사용되는 바와 같이, 용어 "로직"은 기술된 기능을 제공하는, 하나 이상의 소프트웨어 또는 펌웨어 프로그램들을 실행하는 ASIC(Application Specific Integrated Circuit), 전자 회로, 프로세서(공유, 전용, 또는 그룹) 및/또는 메모리(공유, 전용, 또는 그룹), 조합 논리 회로, 및/또는 다른 적절한 하드웨어 컴포넌트들을 지칭하거나, 그들의 일부이거나, 그들을 포함할 수 있다. 본원에 개시되는 로직 및 컴퓨팅 디바이스들 중 임의의 것은 기술된 기능을 제공하는 데 사용되는 임의의 적절한 데이터 또는 명령어들을 저장하는 저장 디바이스들을 포함하거나 그들에 액세스할 수 있다. 본원에서 사용되는 바와 같이, "저장 디바이스"는 결합된 컴퓨팅 디바이스들의 공통 컴퓨팅 디바이스 또는 시스템에 결합된 하나 이상의 저장 디바이스들을 포함할 수 있다. 저장 디바이스는 서로에 로컬인(예컨대, 공통 하우징에 포함되거나 로컬 버스들 또는 다른 통신 경로들을 통해 공통 컴퓨팅 디바이스와 통신하는) 저장 디바이스들과 서로로부터 원격지에 있는(예컨대, 별개의 하우징들에 포함되거나, 인터넷 기반 경로들과 같은, 장거리 통신 경로들을 통해 통신하는) 저장 디바이스들을 포함할 수 있다.
도 1은 다양한 실시예들에 따른, 가상 컴퓨팅 환경(100)의 블록도이다. 가상 컴퓨팅 환경(100)은 호스트 머신(102)에 의해 호스팅되는 게스트 머신(104)을 포함할 수 있다. 일부 실시예들에서, 호스트 머신(102)은 가상 머신 관리자(virtual machine manager)(VMM)(110)를 포함할 수 있다. VMM(110)은, 종래에 공지된 바와 같이, 게스트 머신(104)과 호스트 머신(102)의 하드웨어 자원들 사이의 중개자로서 역할할 수 있다. VMM(110)은 게스트 머신(104)의 종료 및 재개를 관리할 수 있고, 이에 대해서는 이하에서 더욱 상세히 논의한다. 비록 도 1에 단일의 게스트 머신(104)만이 도시되어 있지만, 이것은 설명의 편의를 위한 것에 불과하고, 호스트 머신(102)은 게스트 머신(104)을 참조하여 본원에서 논의되는 바와 같이 구성된 2개 이상의 게스트 머신들을 호스팅할 수 있다.
가상 컴퓨팅 환경(100)은 임의의 적절한 가상화 아키텍처에 기초할 수 있다. 예를 들어, 일부 실시예들에서, 가상 컴퓨팅 환경은 커널 기반 가상 머신(kernel-based virtual machine)(KVM) 환경일 수 있다. 보다 높은 가상화 오버헤드를 갖는 아키텍처들이 특히 본원에 개시되는 메모리 및 자원 관리 기법들로부터 이득을 볼 수 있다. 예를 들어, VMM(110)이 게스트 머신(104)의 실행을 가로채기하는 실시예들은 (예컨대, 부가의 게스트 캐시 오염의 형태의) 추가의 가상화 오버헤드를 야기할 수 있다. 이 오버헤드는 게스트 머신(104)의 실행이 게스트 머신(104)의 빈번한 종료(캐시를 오염시키고 따라서 캐시 히트율을 감소시킴)를 야기할 때 특히 상당할 수 있다. 보다 높은 차원의 게스트 대 물리적 메모리 페이지 테이블(guest-to-physical memory page table)(예컨대, 2차원 페이지 테이블에 비해 3차원 페이지 테이블)을 갖는 실시예들은 추가의 가상화 오버헤드를 야기할 수 있다. 캐시 크기 제한을 갖는 실시예들이 또한 부가의 가상화 오버헤드를 야기할 수 있다(그리고 캐시 압박을 감소시키는 개선된 메모리 관리 기법들로부터 특히 이득을 볼 수 있다).
VMM(110)은 VMM(110)이 종래의 운영 체제 환경 내에서 실행되는 유형-2 VMM, 또는 VMM(110)이 호스트 하드웨어 상에서 직접 실행되는 유형-1 VMM일 수 있다. 후자의 실시예들에서, 호스트 운영 체제는 유형-1 VMM의 위에 있는 별도의 특권을 가진 가상 머신에서 실행될 수 있다. 이러한 실시예의 일 예는 Xen 하이퍼바이저이다.
호스트 머신(102)은 저장 디바이스(106)를 포함할 수 있다. 저장 디바이스(106)는 게스트 머신(104)에 대한 명령어들과 호스트 머신(102)에 대한 명령어들을 저장할 수 있다. 호스트 머신(102)에 대한 명령어들은 VMM(110)에 대한 명령어들을 포함할 수 있다. 종래에 공지된 바와 같이, 게스트 머신(104)에 대한 명령어들과 호스트 머신(102)에 대한 명령어들은 메모리 페이지들로 조직화될 수 있다. 저장 디바이스(106)의 다양한 실시예들은 도 2를 참조하여 이하에서 논의된다.
가상 컴퓨팅 환경(100)은 또한 메모리 관리 로직(108)을 포함할 수 있다. 메모리 관리 로직(108)은 저장 디바이스(106)에 결합될 수 있다. (예컨대, 도 4를 참조하여 이하에서 논의되는 바와 같은) 일부 실시예들에서, 메모리 관리 로직(108)은 게스트 머신(104)에 대한 (저장 디바이스(106)에 저장되는) 명령어들의 제1 메모리 페이지가 호스트 머신(102)에 대한 (저장 디바이스(106)에 저장되는) 명령어들의 제2 메모리 페이지와 동일하다고 결정하도록 구성될 수 있다. 메모리 관리 로직(108)은 또한, 이러한 결정에 응답하여, (예컨대, 페이지 테이블에서) 제1 메모리 페이지를 제2 메모리 페이지에 매핑하도록 구성될 수 있다. 메모리 관리 로직(108)과 메모리 관리 기법들의 다양한 실시예들이 도 4 내지 도 7을 참조하여 이하에서 논의된다.
도 2는 다양한 실시예들에 따른, 도 1의 가상 컴퓨팅 환경(100)의 호스트 머신(102)의 저장 디바이스(106)의 블록도이다. 저장 디바이스(106)는 게스트 머신(104)에 대한 명령어들을 저장할 수 있는 게스트 메모리(202)를 포함할 수 있다. 이러한 명령어들은 운영 체제(OS) 명령어들(210) 및 다른 명령어들(212)(예컨대, 애플리케이션 명령어들)을 포함할 수 있다. 운영 체제 명령어들(210)은 게스트 머신(104)의 운영 체제를 실행하기 위한 명령어들(예컨대, 커널 명령어들)을 포함할 수 있다. 본원에서 사용되는 바와 같이, "커널 명령어"는 플랫폼 상에서 실행 중인 소프트웨어에 의한 플랫폼의 하드웨어 및 다른 자원들의 사용에 관련되어 있는 명령어를 지칭할 수 있다. 커널 명령어들의 예들은 프로세서 시간을 할당하는 것, 메모리에 액세스하는 것, 및 입력/출력 동작들을 수행하는 것을 포함할 수 있다. 커널은 운영 체제에 포함될 수 있고, 따라서 커널 명령어들은 운영 체제 명령어들일 수 있다. 일부 실시예들에서, 운영 체제 명령어들(210)은 게스트 머신(104)의 운영 체제에 대한 인터럽트들을 관리하기 위한 인터럽트 서비스 루틴 명령어들을 포함할 수 있다. 게스트 메모리(202)는 다수의 물리적 메모리 디바이스들 중 임의의 것을 포함할 수 있고, 게스트 메모리(202)에 저장된 명령어들은 다수의 메모리 장소들 중 임의의 것에 걸쳐 분산되어 있을 수 있다.
저장 디바이스(106)는 또한 호스트 머신(102)에 대한 명령어들(예컨대, VMM(110)에 대한 명령어들)을 저장할 수 있는 호스트 메모리(204)를 포함할 수 있다. 이러한 명령어들은 운영 체제 명령어들(214)(예컨대, 커널 명령어들) 및 다른 명령어들(216)을 포함할 수 있다. 운영 체제 명령어들(214)은 호스트 머신(102)의 운영 체제를 실행하기 위한 명령어들을 포함할 수 있다. 일부 실시예들에서, 운영 체제 명령어들(214)은 호스트 머신(102)의 운영 체제에 대한 인터럽트들을 관리하기 위한 인터럽트 서비스 루틴(interrupt service routine)(ISR) 명령어들을 포함할 수 있다. 호스트 메모리(204)는 다수의 물리적 메모리 디바이스들 중 임의의 것을 포함할 수 있고, 호스트 메모리(204)에 저장된 명령어들은 다수의 메모리 장소들 중 임의의 것에 걸쳐 분산되어 있을 수 있다.
저장 디바이스(106)는 또한 메모리 맵(208)을 포함할 수 있다. 메모리 맵(208)은 게스트 메모리 페이지들(예컨대, 게스트 가상 머신에 대응하는 가상 메모리 페이지들)을 물리적 메모리 페이지들(예컨대, RAM(random access memory) 내의 메모리 페이지들)에 매핑하는, 저장 디바이스(106)에 저장된 데이터 구조체일 수 있다. 일부 실시예들에서, 메모리 맵(208)은 특정의 게스트 메모리 주소를 물리적 메모리 주소에 매핑하는 페이지 테이블 엔트리들을 포함할 수 있는 하나 이상의 페이지 테이블들, 또는 먼저 게스트 가상 주소로부터 게스트 메모리 주소에 그리고 이어서 게스트 메모리 주소로부터 물리적 메모리 주소에 매핑하는 연쇄 매핑 방식(chained mapping scheme)을 포함할 수 있다. 일부 실시예들에서, 메모리 맵(208)은, 게스트 대 물리적 메모리 매핑들(guest-to-physical memory mappings)에의 빠른 액세스를 위한 최근에 사용된 페이지 테이블 엔트리들의 캐시들일 수 있는, 하나 이상의 레벨들의 변환 색인 버퍼(translation look aside buffer)(TLB)들을 포함할 수 있다.
저장 디바이스(106)는 또한 캐시(206)를 포함할 수 있다. 캐시(206)는 게스트 메모리(202)에 포함된 명령어들(예컨대, 운영 체제 명령어들(210))과 호스트 메모리(204)에 저장된 명령어들(예컨대, 운영 체제 명령어들(214))에 대한 중간 저장 장소로서 역할할 수 있다. 기술 분야에 공지된 바와 같이, 캐시(206)는 "보통의" 메모리(예컨대, 게스트 메모리(202) 및 호스트 메모리(204))로부터의 검색보다 캐시에 저장된 명령어들의 보다 빠른 검색을 제공할 수 있다. 일부 실시예들에서, 단일의 캐시(206)는 게스트 머신(104)과 호스트 머신(102) 둘 다에 대한 명령어들을 저장할 수 있다. 예를 들어, 단일의 캐시(206)는 게스트 머신(104)과 VMM(110) 둘 다에 대한 명령어들을 저장할 수 있다. 일부 실시예들에서, 단일의 캐시(206)는 게스트 메모리(202)의 운영 체제 명령어들(210) 중 일부와 호스트 메모리(204)의 운영 체제 명령어들(214)의 일부를 저장할 수 있다. 일부 실시예들에서, 캐시(206)는 다수의 개별 캐시들을 포함할 수 있다. 이 다수의 캐별 캐시들은 게스트 머신(104)에 전용된 하나 이상의 캐시들, 호스트 머신(102)에 전용된 하나 이상의 캐시들, 및/또는 게스트 머신(104)과 호스트 머신(102)에 의해 공유되는 하나 이상의 캐시들을 포함할 수 있다. 캐시(206)는, 명령어 캐시 및 데이터 캐시와 같은, 상이한 유형들의 데이터에 전용된 캐시들을 포함할 수 있다. 본원에 개시되는 다양한 실시예들은 명령어 캐시에서의 캐시 압박을 감소시키는 것에 중점을 두고 있다.
본원에 개시되는 다양한 실시예들은 하나 이상의 클라이언트 머신들로부터의 요청들에 응답하여 게스트 머신들을 호스팅하기 위해 하나 이상의 호스트 머신들이 프로비저닝되어 있는 가상 컴퓨팅 환경에서 유용할 수 있다. 일부 이러한 환경들에서, 호스트 머신들은 자원 풀을 제공할 수 있고, 요청된 컴퓨팅 기능들을 수행하기 위해 자원 풀로부터의 컴퓨팅 자원들이 클라이언트 머신들에 할당될 수 있다. 이러한 환경들은 HaaS(hardware as a service)를 제공하는 데 유용할 수 있고, 클라우드 컴퓨팅 환경들로서 구현될 수 있다.
본원에서 논의되는 메모리 및 자원 관리 기법들의 다양한 실시예들을 설명하기 위해 예시적인 시나리오가 이제부터 논의된다. 도 1을 참조하여 앞서 살펴본 바와 같이, VMM(110)은 게스트 머신(104)의 종료 및 재개를 관리할 수 있다. 상세하게는, 게스트 머신(104)의 실행은, 예를 들어, 민감한 명령어가 호스트 머신(102)에 의해 실행될 때 종료에 의해 중단될 수 있다. 종료 시에, 제어는 게스트 머신(104)으로부터 VMM(110)으로 넘어갈 수 있다. 예를 들어, 게스트 머신(104)의 ISR 명령어들의 실행 동안 호스트 머신(102)에서 물리적 인터럽트가 일어날 때, 제어(예컨대, 호스트 하드웨어의 중앙 처리 유닛의 제어)는 VMM(110)으로 넘어갈 수 있고, 이는 이어서 호스트 ISR 명령어들에 따라 물리적 인터럽트를 처리하기 위해 제어를 호스트 머신(102)으로 넘겨줄 수 있다. 물리적 인터럽트가 처리된 후에, 제어는 VMM(110)으로, 그리고 곧바로 게스트 머신(104)으로 돌아갈 수 있으며, 그로써 게스트 머신(104)을 재개시킬 수 있다. 이 예에서, 게스트 ISR 명령어들과 호스트 ISR 명령어들은 저장 디바이스(320)에서 상이한 물리적 메모리 페이지들에(각각, 게스트 메모리(202)와 호스트 메모리(204)에) 위치될 수 있다. 그 결과, 게스트 ISR 명령어 페치와 호스트 ISR 명령어 페치 둘 다가 일어나야 하는 경우 게스트 ISR 명령어들의 사본과 호스트 ISR 명령어들의 사본이 캐시(206)에 포함될 수 있다. 캐시는 양자의 명령어 세트들을 수용하도록 충분히 커야만 하고, 양자의 명령어 세트들을 포함하는 것은 (캐시 페치 비용에 부가하여) 캐시 압박을 유발시킬 수 있다.
본원에 개시되는 다양한 실시예들은 다양한 방식들로 캐시 압박을 완화시키고 따라서 상기 시나리오의 오버헤드를 감소시킬 수 있다. 예를 들어, 일부 실시예들에서, 게스트 ISR 명령어들과 호스트 ISR 명령어들 둘 다에 대해 동일한 물리적 메모리 페이지가 사용될 수 있다. 이러한 실시예들에서, 처리 하드웨어는 ISR 명령어들의 하나의 사본만을 캐시에 보유하면 되고, 부가의 캐시 부하를 피하고 캐시 압박을 최소화하는 것에 의해 성능이 개선될 수 있다. 다른 예에서, 호스트 운영 체제와 게스트 운영 체제는, 앞서 살펴본 메모리 페이지 공유를 용이하게 하기 위해, 핫 코드(예컨대, ISR 명령어들)에 대해 가능한 한 많은 공통 메모리 페이지들을 갖도록 구성될 수 있다. 다른 예에서, 호스트 운영 체제와 게스트 운영 체제가 동일하지 않을 때, 적어도 일부 메모리 페이지 공유를 용이하게 하기 위해 게스트와 호스트에서의 핫 코드가 가능한 한 동일(예컨대, 페이지 정렬과 동일한 내용을 가짐)하도록 메모리 페이지들을 수정하는 것에 의해 캐시 오염이 완화될 수 있다. 일부 이러한 실시예들에서, 게스트 링커와 호스트 링커는 메모리 페이지 공유를 용이하게 하기 위해 동일한 명령어들을 찾아내고 동일한 페이지 경계들을 갖는 동일한 명령어들을 찾아내기 위해 협력할 수 있다. 이들 및 다른 실시예들이 이하에서 더 상세히 논의된다.
도 3은 다양한 실시예들에 따른, 다수의 호스트 머신들과 다수의 호스트 머신들의 자원들을 다수의 클라이언트 머신들 간에 할당하는 자원 관리자(304)를 가지는 가상 컴퓨팅 환경(300)의 블록도이다. 상세하게는, 가상 컴퓨팅 환경(300)은 호스트 머신들(318 및 302)과 클라이언트 머신들(310 및 314)을 포함할 수 있다. 비록 2개의 호스트 머신들과 2개의 클라이언트 머신들이 도 3에 도시되어 있지만, 이것은 설명의 편의를 위한 것에 불과하고, 임의의 원하는 수의 호스트 머신들(예컨대, 하나 이상)과 임의의 원하는 수의 클라이언트 머신들(예컨대, 하나 이상)이 가상 컴퓨팅 환경(300)에 포함될 수 있다.
호스트 머신들(318 및 302)은 자원 관리자(304)에 결합될 수 있다. 자원 관리자(304)는 또한 클라이언트 머신들(310 및 314)에 결합될 수 있다. 자원 관리자(304)는 가상 컴퓨팅 환경(300) 내에서 자원 관리 기능들을 수행하도록 구성된 하나 이상의 컴퓨팅 디바이스들을 포함할 수 있다. 상세하게는, 자원 관리자(304)는 클라이언트 머신들로부터 프로비저닝 요청들을 수신하고 그에 따라 호스트 머신 자원들을 할당하고 구성하는 것에 의해 이 프로비저닝 요청들을 충족시키려고 시도하도록 구성될 수 있다. 클라이언트 머신으로부터의 프로비저닝 요청(예컨대, 클라이언트 머신(310)으로부터의 프로비저닝 요청(312) 또는 클라이언트 머신(314)으로부터의 프로비저닝 요청(316))은 인스턴스화될 게스트 머신(예컨대, 호스트 머신(318) 또는 호스트 머신(302))에 대한 명세들을 포함할 수 있다. 명세들은, 예를 들어, 게스트 머신의 운영 체제를 포함할 수 있다. 예를 들어, 프로비저닝 요청(312)은 클라이언트 머신(310)이 Linux 운영 체제를 실행하는 게스트 머신을 인스턴스화하고자 한다고 명시할 수 있다. 클라이언트 머신(310)은 프로비저닝 요청(312)을 자원 관리자(304)에 제공할 수 있고, 자원 관리자(304)는 (호스트 머신(318)과 호스트 머신(302) 중의) 하드웨어 자원들이 이러한 게스트 머신을 호스팅하기 위해 이용가능한지를 결정하고, 그러한 경우, 호스트 머신들 중 어느 것이 게스트 머신을 호스팅하고 그로써 프로비저닝 요청(312)을 충족시키기 위해 할당되어야만 하는지를 결정할 수 있다. 자원 관리자(304)는 또한, 이하에서 논의되는 바와 같이, 호스트 머신에 의해 호스팅될 때 게스트 머신의 성능을 개선시키기 위해 메모리 조직화 기능들을 수행하도록 구성될 수 있다.
가상 컴퓨팅 환경(300)은 저장 디바이스(320)를 포함할 수 있다. 저장 디바이스(320)는 가상 컴퓨팅 환경(300)의 컴포넌트들 중 임의의 것에 포함될 수 있는 하나 이상의 저장 디바이스들을 포함할 수 있다. 예를 들어, 저장 디바이스(320)는 (예컨대, 호스트 머신(102)의 저장 디바이스(106)를 참조하여 앞서 논의된 바와 같이) 호스트 머신(318)과 호스트 머신(302) 각각에 포함된 저장 디바이스들을 포함할 수 있다. 일부 실시예들에서, 저장 디바이스(320)는 호스트 머신들(318 및 302)과 별개인 저장 디바이스들(예컨대, 호스트 머신들(318 및 302)로부터 원격지에 있는 저장 디바이스들)을 포함할 수 있다. 저장 디바이스(320)는 호스팅을 위해 호스트 머신들(318 및 302) 중 하나 이상에 할당될 수 있는 게스트 머신들의 이미지들을 포함할 수 있다. 예를 들어, 저장 디바이스(320)는 상이한 운영 체제들, 상이한 소프트웨어 패키지들 등을 갖는 게스트 머신들의 이미지들을 포함할 수 있다. 이 이미지들 중 하나와 일치하는 게스트 머신에 대한 프로비저닝 요청에 응답하여, 자원 관리자(304)는 저장 디바이스(320)로부터 적절한 이미지를 검색하고, 그 이미지로 게스트 머신을 인스턴스화하기 위해, 그것을 호스트 머신들 중 하나에 제공할 수 있다.
호스트 머신들(318 및 302)은 본원에서 논의되는 호스트 머신(102)의 실시예들 중 임의의 실시예의 형태를 취할 수 있다. 상세하게는, 호스트 머신들(318 및 302)은 (예컨대, 저장 디바이스(320)를 참조하여 앞서 논의된 바와 같은) 저장 디바이스들을 포함할 수 있다. 저장 디바이스(320)는 (예컨대, 호스트 머신(102)과 저장 디바이스(106)를 참조하여 앞서 논의된 바와 같은) 호스트 머신들(318 및 302)에 대한 명령어들을 저장할 수 있다. 게스트 머신을 호스팅할 때, 호스트 머신들(318 및 302)은 호스트 머신(102)과 게스트 머신(104)을 참조하여 본원에서 논의되는 바와 같이 게스트 머신과 상호작용할 수 있고, 저장 디바이스(320)는 호스트 머신들(318 및 302)에 의해 호스팅되는 게스트 머신들에 대한 명령어들을 저장할 수 있다. 상세하게는, 일부 실시예들에서, 호스트 머신들(318 및 302)에 대한 명령어들이 호스트 머신들(318 및 302)에 로컬인 저장 디바이스들에 저장될 수 있다. 게스트 머신이 호스팅되기 전에, 그 게스트 머신에 대한 명령어들이 호스트 머신들(318 및 302)로부터 원격지에 저장되거나 그들에 로컬인 게스트 머신의 이미지에 포함될 수 있다. 일부 실시예들에서, 메모리 관리 로직(108)(도 1)은 저장 디바이스(320)에 포함되는 저장 디바이스들(예컨대, 호스트 머신들(318 및 302)에 로컬인 저장 디바이스들) 중 일부 또는 전부에 결합될 수 있는 반면, 다른 실시예들에서, 메모리 관리 로직(108)은 저장 디바이스(320)에 포함된 저장 디바이스들 중 어느 것에도 결합되지 않을 수 있다.
일부 실시예들에서, 자원 관리자(304)는 자원 할당 로직(306)을 포함할 수 있다. 자원 할당 로직(306)은 저장 디바이스(320)에 결합될 수 있고, 메모리 액세스 성능을 개선시키기 위해 게스트 머신들을 가상 컴퓨팅 환경(300)의 호스트 머신들 간에 할당하도록 구성될 수 있다. 예를 들어, 게스트 머신이 호스트에 아직 배정되지 않았을 때 또는 게스트 머신이 호스트 머신(302)에 배정되어 있을 때, 자원 할당 로직(306)은 적어도 게스트 머신에 대한, 저장 디바이스(320)에 저장된 명령어들의 제1 메모리 페이지가 적어도 호스트 머신(318)에 대한, 저장 디바이스(320)에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하도록 구성될 수 있다. 이 결정에 응답하여, 자원 할당 로직(306)은 (예컨대, 처음에 게스트 머신을 호스트 머신(318)에 배정하는 것 또는 게스트 머신을 호스트 머신(302)으로부터 호스트 머신(318)에 재배정하는 것에 의해) 호스트 머신(318) 상에서 실행되도록 게스트 머신을 배정하도록 구성될 수 있다. 일부 실시예들에서, 비교되는 명령어들의 메모리 페이지들은 운영 체제 명령어들(예컨대, 커널 명령어들)일 수 있다. 자원 할당 로직(306) 및 자원 할당 기법들의 다양한 실시예들이 도 8 및 도 9를 참조하여 이하에서 논의된다.
일부 실시예들에서, 자원 관리자(304)는 메모리 조직화 로직(308)을 포함할 수 있다. 메모리 조직화 로직(308)은 저장 디바이스(320)에 결합될 수 있고, 메모리 액세스 성능을 개선시키기 위해 호스트 머신 및/또는 게스트 머신의 운영 체제 명령어들을 배열하도록 구성될 수 있다. 예를 들어, 게스트 머신이 호스트 머신(318)에 아직 배정되지 않았을 때, 메모리 조직화 로직(308)은 게스트 머신에 대한, 저장 디바이스(320)에 저장된 제1 운영 체제 명령어 세트가 호스트 머신(318)에 대한, 저장 디바이스(320)에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정할 수 있다. 이 결정에 응답하여, 메모리 조직화 로직(308)은 저장 디바이스(320) 내의 제1 및/또는 제2 운영 체제 명령어 세트들을, 배열된 운영 체제 명령어 세트가 저장 디바이스(320)에서의 하나 이상의 메모리 페이지들에 포함되고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작하며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록, 배열할 수 있다. 환언하면, 메모리 조직화 로직(308)은 "일치하는" 운영 체제 명령어 세트들을, 그들이 전체 메모리 페이지들을 차지하도록 그리고 대응하는 페이지들이 동일한 내용을 갖도록, 배열할 수 있다. 메모리 조직화 로직(308)과 메모리 조직화 기법들의 다양한 실시예들이 도 10 내지 도 15를 참조하여 이하에서 논의된다.
비록 도 3의 자원 관리자(304)가 자원 할당 로직(306)과 메모리 조직화 로직(308) 둘 다를 포함하는 것으로 예시되어 있지만, 자원 관리자(304)는 자원 할당 로직(306)과 메모리 조직화 로직(308) 둘 다가 아니라 그들 중 하나만을 포함할 수 있다.
도 4는 다양한 실시예들에 따른, 도 1의 가상 컴퓨팅 환경(100)에 포함될 수 있는 메모리 관리 로직(108)의 블록도이다. 앞서 살펴본 바와 같이, 메모리 관리 로직(108)은 호스트 머신(102)의 저장 디바이스(106)에 결합될 수 있다.
메모리 관리 로직(108)은 메모리 페이지 비교 로직(402)을 포함할 수 있다. 메모리 페이지 비교 로직(402)은 저장 디바이스(106)에 결합될 수 있고, 게스트 머신(104)에 대한, 저장 디바이스(106)에 저장된 명령어들의 제1 메모리 페이지가 호스트 머신(102)에 대한, 저장 디바이스(106)에 저장된 명령어들의 제2 메모리 페이지와 동일한지 여부를 결정하도록 구성될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)에 의해 분석되는 명령어들의 메모리 페이지들은 운영 체제 명령어들(예컨대, 도 2의 게스트 메모리(202) 내의 운영 체제 명령어들(210)과 호스트 메모리(204) 내의 운영 체제 명령어들(214))일 수 있다. 예를 들어, 명령어들의 메모리 페이지들은 ISR 명령어들을 포함할 수 있다. 비록 "제1 메모리 페이지"와 "제2 메모리 페이지"가 본원에서 단수로 지칭될 수 있지만, 메모리 페이지 비교 로직(402)은 게스트 머신에 대한 명령어들의 다수의 메모리 페이지들이 호스트 머신에 대한 명령어들의 다수의 대응하는 메모리 페이지들과 동일하다고 결정할 수 있다.
일부 실시예들에서, 메모리 페이지 비교 로직(402)은 제1 및 명령어들의 제2 메모리 페이지들에 액세스하고, 2개의 메모리 페이지들이 동일한지 여부를 결정하기 위해 제1 및 명령어들의 제2 메모리 페이지들에 포함된 데이터 전부를 문자 단위로(character-by-character) 또는 비트 단위로(bit-by-bit) 서로 비교하도록 구성될 수 있다. 다른 실시예들에서, 메모리 페이지 비교 로직(402)은 제1 메모리 페이지와 제2 메모리 페이지가, 2개의 메모리 페이지들의 해시들을 비교하고 비교된 해시들이 동일하다고 결정하는 것에 의해, 동일하다고 결정하도록 구성될 수 있다. 본원에서 사용되는 바와 같이, "해시"는 2개의 상이한 데이터 세트들의 해시들 자체가 상이할 가능성이 있다는 특성을 사용해 데이터 세트로부터 도출되는 값을 지칭할 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 제1 및 제2 메모리 페이지들에 액세스하고, 제1 및 제2 메모리 페이지들 각각의 해시들을 비교하며, 이어서 해시들을 비교할 수 있고; 해시들이 동일한 경우, 메모리 페이지 비교 로직(402)은 제1 메모리 페이지와 제2 메모리 페이지가 동일하다고 결정할 수 있다. 메모리 페이지 비교 로직(402)은 계산된 해시들을 메모리(예컨대, 저장 디바이스(106))에 임의의 적절한 데이터 구조체로 저장하고 계산된 해시들을 임의의 적절한 비교 기법을 사용하여 비교하도록 구성될 수 있다. 예를 들어, 해시들을 저장하는 데 사용되는 데이터 구조체는 충돌 체인(collision chain)을 갖는 해시 테이블, 링크 테이블, 이진 트리, 또는 레드-블랙 트리(Red-Black tree)일 수 있다.
일부 실시예들에서, 메모리 페이지 비교 로직(402)은 그의 페이지 단위 비교(page-by-page comparison)를 게스트 머신(104) 및 호스트 머신(102)에 관한 부가 정보의 분석으로 보완하거나 대체하도록 구성될 수 있다. 예를 들어, 저장 디바이스(106)가 게스트 머신(104)의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)와 호스트 머신(102)의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)를 저장하는 실시예들에서, 메모리 페이지 비교 로직(402)은 페이지 단위 비교를 수행하기 전에 이 운영 체제 식별자들을 비교하도록 구성될 수 있다. 운영 체제 식별자들이 동일한 경우, 메모리 페이지 비교 로직(402)은 동일한 게스트/호스트 메모리 페이지들의 가능성이 아주 높다고 결론내릴 수 있다. 운영 체제 식별자들이 동일하지 않고 유사한 경우(예컨대, 동일한 이름을 갖지만 상이한 버전 번호들을 가지는 경우), 메모리 페이지 비교 로직(402)은 (예컨대, 메모리 페이지 비교 로직(402) 또는 다른 메커니즘에 의해 이전에 결정된 바와 같은) 2개의 운영 체제들 사이에서 공유되는 명령어들의 식별자들을 저장하는 저장 디바이스(106) 내의 리스트 또는 다른 데이터 구조체에 액세스할 수 있다. 메모리 페이지 비교 로직(402)은 일치할 가능성이 없는 메모리 페이지들을 비교하는 데 시간을 낭비하지 않기 위해 그의 페이지 단위 비교에 집중하는 데 이 리스트 또는 다른 데이터 구조체를 사용할 수 있다. 예를 들어, 운영 체제 식별자들이 중대한 차이를 갖는 경우, 메모리 페이지 비교 로직(402)은, 동이한 하드웨어 자원을 작동시키는 명령어들이 변할 가능성이 보다 적기 때문에, 하드웨어 자원들에 관련된 명령어들(예컨대, 인터럽트 제어기, 타이머, 인터럽트 서비스 루틴 등)에 집중할 수 있다. 다른 한편으로, 운영 체제 식별자들이 일치하는 경우, 메모리 페이지 비교 로직(402)은 또한 "소프트웨어" 특징들(예컨대, 메모리 할당, 데이터 구조, 시스템 호출 등)을 구현하는 명령어들을 검사할 수 있다.
메모리 페이지 비교 로직(402)은 임의의 적절한 스케줄 또는 트리거 조건 세트(set of trigger conditions)에 따라 그의 결정을 수행하도록 구성될 수 있다. 예를 들어, 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 게스트 머신(104)을 호스트 머신(102)에 로딩(예컨대, 재개, 부팅, 또는 재부팅)한 것에 응답하여 그의 결정을 하도록 구성될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 게스트 메모리 페이지들의 내용의 수정에 응답하여 그의 결정을 하도록 구성될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 호스트 머신(102)과 게스트 머신(104)의 메모리 페이지들의 주기적 스캔의 일부로서 그의 결정을 하도록 구성될 수 있다. 예를 들어, 메모리 페이지 비교 로직(402)은 게스트 머신(104)의 메모리 페이지들의 해시들을 주기적으로 계산하고, 호스트 머신(102)의 메모리 페이지들의 해시들을 주기적으로 계산하며, 해시들을 주기적으로 비교할 수 있다(이 동작들의 주기성은 동일하거나 상이함).
메모리 관리 로직(108)은 또한 병합 로직(404)을 포함할 수 있다. 병합 로직(404)은 메모리 페이지 비교 로직(402)에 결합될 수 있고, 게스트 머신(104)에 대한 명령어들의 제1 메모리 페이지가 호스트 머신(102)에 대한 명령어들의 제2 메모리 페이지와 동일하다는 메모리 페이지 비교 로직(402)에 의한 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하도록 구성될 수 있다. 일부 실시예들에서, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 것은 페이지 테이블에서 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 것을 포함할 수 있다. 일부 실시예들에서, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 것은 제1 메모리 페이지를 COW(copy-on-write)로서 마킹하는 것을 포함할 수 있다. 제1 메모리 페이지를 COW(copy-on-write)로서 마킹하는 것은 제1 메모리 페이지를 페이지 테이블(예컨대, 호스트 페이지 테이블 및 EPT(extended page table))에서 읽기 전용으로서 마킹하는 것을 포함할 수 있다. 병합 로직(404)은, 예를 들어, 게스트 머신(104)을 호스트 머신(102) 상에 로딩한 것에 응답하여, 게스트 메모리 페이지들의 내용의 수정에 응답하여, 또는 호스트 머신(102)과 게스트 머신(104)의 메모리 페이지들의 주기적 스캔의 일부로서, 그의 동작을 수행하도록 구성될 수 있다.
"공유" 물리적 메모리 페이지에 대한 쓰기 동작이 (예컨대, 게스트 머신(104) 또는 호스트 머신(102)으로부터) 일어나는 경우, 병합 로직(404)은 공유 메모리 페이지를 제2 물리 페이지에 복사하고 게스트 메모리 페이지를 제2 물리 페이지에 재매핑하는 것에 의해 공유를 끝내도록 구성될 수 있다.
도 5 내지 도 7은 다양한 실시예들에 따른, 가상 컴퓨팅 환경에서의 메모리 관리를 위한 프로세스들의 흐름도들이다. 설명의 편의를 위해, 도 5 내지 도 7의 프로세스들은 가상 컴퓨팅 환경(100)에서 호스트 머신(102) 및 게스트 머신(104)에 대해 메모리 관리 로직(108)에 의해 수행되는 것으로 기술될 수 있지만, 임의의 적절한 하드웨어가 이 프로세스들을 실행하도록 구성될 수 있다.
도 5는 다양한 실시예들에 따른, 메모리 페이지들을 분석하는 프로세스(500)의 흐름도이다. 프로세스(500)는 메모리 관리 로직(108)(예컨대, 메모리 페이지 비교 로직(402))이 게스트 메모리 페이지와 호스트 메모리 페이지가 동일한지를 결정할 때 게스트 메모리 페이지들의 해시들과 호스트 메모리 페이지들의 해시들을 비교하도록 구성되어 있는 실시예들에서 수행될 수 있다. 프로세스(500)의 동작들은 메모리 페이지 비교 로직(402)에 의해 수행되는 것으로 논의될 수 있지만, 앞서 살펴본 바와 같이, 임의의 적절한 하드웨어가 프로세스(500)를 실행하도록 구성될 수 있다.
프로세스(500)는 메모리 페이지 비교 로직(402)이 메모리 페이지를 선택할 수 있는 502에서 시작될 수 있다. 502에서 선택된 메모리 페이지는 게스트 머신(104)에 대한 명령어들의 메모리 페이지 또는 호스트 머신(102)에 대한 명령어들의 메모리 페이지일 수 있다. 502에서의 메모리 페이지의 선택은 게스트 머신(104)과 호스트 머신(102) 사이에서 비교되어야 하는 명령어들(예컨대, 운영 체제 명령어들)을 포함하는 것으로 알려진 미리 결정된 메모리 페이지들의 범위 또는 세트에서 스케줄에 기초하여 그리고/또는 순차적으로 행해질 수 있다.
504에서, 메모리 페이지 비교 로직(402)은 502에서 선택된 메모리 페이지의 해시를 계산할 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은, 그 메모리 페이지의 기존의 저장된 해시가 미리 결정된 윈도우보다 더 오래된 경우(그리고 따라서 메모리 페이지의 내용에 대해 변경들이 행해진 경우에 "리프레시"되어야만 하는 경우), 또는 메모리 페이지가 마지막 해싱 이후에 내용의 변화를 겪은 것으로 알려진 경우, 504에서, 해시를 계산할 뿐일 수 있다. 일부 실시예들에서, 선택된 메모리 페이지의 기존의 저장된 해시가 없을 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은, 기존의 저장된 해시가 있는지 또는 기존의 저장된 해시가 얼마나 최신인지에 관계없이, 선택된 메모리 페이지의 해시를 계산할 수 있다.
506에서, 메모리 페이지 비교 로직(402)은 504에서 계산된 해시를 메모리에(예컨대, 저장 디바이스(106)에) 저장할 수 있다. 앞서 살펴본 바와 같이, 메모리 페이지 해시들은 (예컨대, 게스트 머신들에 대한 명령어들의 메모리 페이지들의 해시들과 호스트 머신들에 대한 명령어들의 메모리 페이지들의 해시들의 비교를 위해) 임의의 적절한 메모리 구조에 저장될 수 있다.
508에서, 메모리 페이지 비교 로직(402)은 모든 원하는 메모리 페이지들이 해싱을 위해 검토되었는지(또는 단순히 해싱되었는지)를 결정할 수 있다. 이 결정은 미리 결정된 메모리 페이지들의 범위 또는 세트의 끝에 도달되었고, 그 미리 결정된 범위 또는 세트 내의 모든 메모리 페이지들이 검토되었는지를 결정하는 것을 포함할 수 있다. 메모리 페이지 비교 로직(402)이, 508에서, 검토될 메모리 페이지들이 여전히 있다고 결정하는 경우, 메모리 페이지 비교 로직(402)은 502로 복귀하고 검토하기 위한 부가의 메모리 페이지를 선택할 수 있다. 메모리 페이지 비교 로직(402)이, 508에서, 모든 원하는 메모리 페이지들이 검토되었다고 결정하는 경우, 프로세스(500)가 이어서 종료될 수 있다. 앞서 살펴본 바와 같이, 임의의 원하는 스케줄에 따라 다양한 메모리 페이지 세트들에 대해 프로세스(500)가 반복될 수 있다.
도 6은 다양한 실시예들에 따른, 게스트 메모리 페이지들과 호스트 메모리 페이지들을 비교하는 프로세스(600)의 흐름도이다. 프로세스(600)는 (예컨대, 도 5를 참조하여 앞서 논의된 바와 같이) 메모리 관리 로직(108)(예컨대, 메모리 페이지 비교 로직(402))이 게스트 메모리 페이지와 호스트 메모리 페이지가 동일한지를 결정할 때 게스트 메모리 페이지들의 해시들과 호스트 메모리 페이지들의 해시들을 비교하도록 구성되어 있는 실시예들에서 수행될 수 있지만, 메모리 관리 로직(108)이 (예컨대, 604 및 606을 참조하여 이하에서 논의되는 동작들을 유사한 적절한 동작으로 치환하는 것에 의해) 게스트 메모리 페이지와 호스트 메모리 페이지를 해시에 기초하지 않는 방식으로(on a non-hash basis) 비교하도록 구성되어 있을 때 유사한 프로세스를 따를 수 있다. 프로세스(600)의 동작들은 메모리 페이지 비교 로직(402)에 의해 수행되는 것으로 논의될 수 있지만, 앞서 살펴본 바와 같이, 임의의 적절한 하드웨어가 프로세스(600)를 실행하도록 구성될 수 있다.
프로세스(600)는 메모리 페이지 비교 로직(402)이 게스트 메모리 페이지와 호스트 메모리 페이지를 선택할 수 있는 602에서 시작될 수 있다. 602에서 메모리 페이지들이 선택되는 것은 게스트 머신(104)과 호스트 머신(102) 사이에서 비교되어야 하는 명령어들(예컨대, 운영 체제 명령어들)을 포함하는 것으로 알려진 미리 결정된 메모리 페이지들의 범위 또는 세트에서 스케줄에 기초하여 그리고/또는 순차적으로 행해질 수 있다. 비교를 위한 게스트/호스트 메모리 페이지 쌍들을 선택하는 임의의 적절한 기법이 사용될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 602의 선택을 돕기 위해 게스트 머신과 호스트 머신의 운영 체제들에 관한 정보를 사용할 수 있다. 예를 들어, 메모리 페이지 비교 로직(402)은, 앞서 논의된 바와 같이, 운영 체제들이 동일하거나 관련되어 있는지(그리고 따라서 특정의 일치하는 메모리 페이지들을 가질 가능성이 있는지)를 결정하기 위해 게스트 머신과 호스트 머신의 운영 체제 버전들을 비교할 수 있다.
604에서, 메모리 페이지 비교 로직(402)은 602에서 선택된 메모리 페이지들의 해시들에 액세스할 수 있다. 이 해시들은 도 5를 참조하여 앞서 논의된 바와 같이 발생되고 메모리에(예컨대, 저장 디바이스(106)에) 저장되었을 수 있다. 일부 실시예들에서, 602와 604의 동작들이 결합될 수 있고, 메모리 페이지 비교 로직(402)은 게스트 메모리 페이지와 호스트 메모리 페이지를, 그들의 대응하는 저장된 해시들을 선택하고 그들에 액세스하는 것에 의해, 선택할 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은 하나의 또는 양쪽의 기존의 저장된 해시들이 미리 결정된 윈도우보다 더 오래된 경우(그리고 따라서 하나의 또는 양쪽의 메모리 페이지들의 내용에 대해 변경들이 행해진 경우에 비교가 "리프레시"되어야만 하는 경우), 또는 하나의 또는 양쪽의 메모리 페이지들이 마지막 비교 이후에 내용의 변화를 겪은 것으로 알려진 경우, 604에서, 해시들에 액세스할 뿐일 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(402)은, 기존의 저장된 해시들이 얼마나 최신인지에 관계없이, 선택된 메모리 페이지들의 해시들에 액세스할 수 있다.
606에서, 메모리 페이지 비교 로직(402)은 (604에서 액세스되는) 게스트 메모리 페이지 해시와 호스트 메모리 페이지 해시가 동일한지를 결정할 수 있다. 일부 실시예들에서, 이 결정은 해시들의 문자 단위 또는 비트 단위 비교를 포함할 수 있다. 임의의 적절한 비교 기법이 사용될 수 있다. 메모리 페이지 비교 로직(402)이, 606에서, 해시들이 동일하지 않다고 결정하는 경우, 메모리 페이지 비교 로직(402)은 608로 진행하여, "일치 없음" 식별자를 게스트 메모리 페이지 및 호스트 메모리 페이지와 연관시켜 메모리에(예컨대, 저장 디바이스(106)에) 저장할 수 있다. 이 "일치 없음" 식별자는 임의의 적절한 형태(예컨대, "0"의 이진 지시자)를 취할 수 있고, 게스트 메모리 페이지 해시와 호스트 메모리 페이지 해시가 동일하지 않다는 결과가 용이하게 결정될 수 있도록 임의의 적절한 데이터 구조체(예컨대, 게스트 머신의 해싱된 메모리 페이지들은 행들에 대응하고 호스트 머신의 해싱된 메모리 페이지들은 열들에 대응하는 테이블)에 저장될 수 있다.
메모리 페이지 비교 로직(402)이, 606에서, 해시들이 동일하다고 결정하는 경우, 메모리 페이지 비교 로직(402)은 610로 진행하여, "일치" 식별자를 게스트 메모리 페이지 및 호스트 메모리 페이지와 연관시켜 메모리에(예컨대, 저장 디바이스(106)에) 저장할 수 있다. 이 "일치" 식별자는 임의의 적절한 형태(예컨대, "1"의 이진 지시자)를 취할 수 있고, 게스트 메모리 페이지 해시와 호스트 메모리 페이지 해시가 동일하다는 결과가 용이하게 결정될 수 있도록 임의의 적절한 데이터 구조체(예컨대, 게스트 머신의 해싱된 메모리 페이지들은 행들에 대응하고 호스트 머신의 해싱된 메모리 페이지들은 열들에 대응하는 테이블)에 저장될 수 있다.
612에서, 메모리 페이지 비교 로직(402)은 모든 원하는 메모리 페이지들(예컨대, 모든 원하는 메모리 페이지 쌍들)이 동일한 해시들이 있는지 검토되었는지를 결정할 수 있다. 이 결정은 미리 결정된 메모리 페이지들의 범위 또는 세트의 끝에 도달되었고, 그 미리 결정된 범위 또는 세트 내의 모든 메모리 페이지들이 검토되었는지를 결정하는 것을 포함할 수 있다. 메모리 페이지 비교 로직(402)이, 612에서, 검토될 메모리 페이지들이 여전히 있다고 결정하는 경우, 메모리 페이지 비교 로직(402)은 602로 복귀하고 검토하기 위한 부가의 메모리 페이지들을 선택할 수 있다. 메모리 페이지 비교 로직(402)이, 612에서, 모든 원하는 메모리 페이지들이 검토되었다고 결정하는 경우, 프로세스(600)가 이어서 종료될 수 있다. 앞서 살펴본 바와 같이, 임의의 원하는 스케줄에 따라 다양한 메모리 페이지 세트들에 대해 프로세스(600)가 반복될 수 있다. 프로세스(600)가 수행되는 스케줄은 프로세스(500)가 수행되는 스케줄에 관련될 수 있거나 그로부터 독립적일 수 있다.
도 7은 다양한 실시예들에 따른, 게스트 메모리 페이지들을 호스트 메모리 페이지들에 매핑하는 프로세스(700)의 흐름도이다. 프로세스(700)는 메모리 관리 로직(108)(예컨대, 병합 로직(404))이 (예컨대, 도 6과 도 7을 참조하여 앞서 논의된 바와 같이) 게스트 메모리 페이지들의 해시들과 호스트 메모리 페이지들의 해시들을 비교하도록 구성되거나 게스트 메모리 페이지와 호스트 메모리 페이지를 임의의 다른 방식으로 비교하도록 구성되어 있는 실시예들에서 수행될 수 있다. 프로세스(700)의 동작들은 병합 로직(404)에 의해 수행되는 것으로 논의될 수 있지만, 앞서 살펴본 바와 같이, 임의의 적절한 하드웨어가 프로세스(700)를 실행하도록 구성될 수 있다.
프로세스(700)는 병합 로직(404)이 게스트 메모리 페이지와 호스트 메모리 페이지 사이의 저장된 "일치" 식별자를 선택할 수 있는 702에서 시작될 수 있다. 도 6의 608 및 610을 참조하여 앞서 논의된 바와 같이, 게스트 메모리 페이지가 호스트 메모리 페이지와 동일한 것으로 결정되었는지 여부를 나타내는 데이터가 임의의 적절한 데이터 구조체(예컨대, "일치" 식별자와 "일치 없음" 식별자를 포함하는 테이블)로 메모리에(예컨대, 저장 디바이스(106)에) 저장될 수 있다. 이와 같이, 702에서, 병합 로직(404)은 "일치" 식별자(존재하는 경우)를 선택하기 위해 이 데이터 구조체에 액세스할 수 있다. 병합 로직(404)은 저장된 "일치" 식별자를 검토하고 선택하기 위해(예컨대, 요소 단위(element-by-element) 검토) 임의의 적절한 기법을 사용하거나 임의의 적절한 패턴을 따를 수 있다.
704에서, 병합 로직(404)은 702에서 선택된 "일치" 식별자와 연관된 메모리 페이지들을 식별할 수 있다. 일부 실시예들에서, "일치" 식별자와 "일치 없음" 식별자를 저장하는 데 사용되는 데이터 구조체는 (예컨대, 도 6의 608 및 610을 참조하여 앞서 논의된 바와 같이) 연관된 게스트 및 호스트 메모리 페이지들이 용이하게 식별될 수 있도록 "일치" 식별자 및 "일치 없음" 식별자와 연관된 게스트 및 호스트 메모리 페이지들에 대한 링크들 또는 포인터들을 포함할 수 있다. 다른 실시예들에서, 어느 게스트 및 호스트 메모리 페이지들이 특정의 "일치" 또는 "일치 없음" 식별자와 연관되어 있는지를 결정하기 위해 룩업 테이블(look-up table) 또는 다른 데이터 구조체가 사용될 수 있다. 일부 실시예들에서, 병합 로직(404)은, 704에서, 게스트 및 호스트 메모리 페이지들 각각에 대한 물리적 메모리 주소들을 식별하는 것에 의해 게스트 및 호스트 메모리 페이지들을 식별할 수 있다.
706에서, 병합 로직(404)은 (704에서 식별되고 702에서 선택된 "일치" 식별자와 연관되어 있는) 게스트 메모리 페이지를 (704에서 식별되고 702에서 선택된 "일치" 식별자와 연관되어 있는) 호스트 메모리 페이지에 매핑할 수 있다. 일부 실시예들에서, 병합 로직(404)은, 706에서, 페이지 테이블에서 게스트 메모리 페이지를 호스트 메모리 페이지에 매핑할 수 있다. 일부 실시예들에서, 병합 로직(404)은 게스트 메모리 페이지를 호스트 메모리 페이지에 매핑할 때 게스트 메모리 페이지를 읽기 전용으로서 마킹할 수 있다.
708에서, 병합 로직(404)은 모든 원하는 일치들(예컨대, "일치" 식별자들과 연관된 모든 원하는 메모리 페이지 쌍들)이 검토되었는지를 결정할 수 있다. 이 결정은 "일치" 식별자들을 포함하는 데이터 구조체의 끝에 도달되었고 그 데이터 구조체에서의 모든 일치들이 검토되었는지를 결정하는 것을 포함할 수 있다. 병합 로직(404)이, 708에서, 검토될 일치들이 여전히 있다고 결정하는 경우, 병합 로직(404)은 702로 복귀하고 검토하기 위한 다른 "일치" 식별자를 선택할 수 있다. 병합 로직(404)이, 708에서, 모든 원하는 일치들이 검토되었다고 결정하는 경우, 프로세스(700)가 이어서 종료될 수 있다. 앞서 살펴본 바와 같이, 임의의 원하는 스케줄에 따라 다양한 일치들에 대해 프로세스(700)가 반복될 수 있다. 프로세스(700)가 수행되는 스케줄은 프로세스(500) 및 프로세스(600)가 수행되는 스케줄에 관련될 수 있거나 그로부터 독립적일 수 있다.
앞서 논의된 바와 같이, 일부 실시예들에서, 가상 컴퓨팅 환경(300)은 자원 관리 기능들을 수행하도록 구성된 자원 관리자(304)를 포함할 수 있다. 자원 관리자(304)는 자원 할당 로직(306) 및/또는 메모리 조직화 로직(308)을 포함할 수 있다. 자원 할당 로직(306)은 메모리 액세스 성능을 개선시키기 위해 게스트 머신들을 호스트 머신들에 배정하도록 구성될 수 있다. 메모리 조직화 로직(308)은 메모리 액세스 성능을 개선시키기 위해 게스트 머신들 및 호스트 머신들에 대한 명령어 세트들을 조직화하도록 구성될 수 있다.
자원 할당 로직(306) 및 자원 할당 기법들의 다양한 실시예들이 도 8 및 도 9를 참조하여 이제부터 논의된다. 먼저, 도 8은 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경(300)의 자원 관리자(304)에 포함될 수 있는 자원 할당 로직(306)의 블록도이다. 앞서 살펴본 바와 같이, 자원 할당 로직(306)은 (호스트 머신들(318 및 302) 내의 저장 디바이스들과 호스트 머신들(318 및 302)과 별개인 저장 디바이스들을 포함할 수 있는) 저장 디바이스(320)와 결합될 수 있다.
자원 할당 로직(306)은 메모리 페이지 비교 로직(802)을 포함할 수 있다. 메모리 페이지 비교 로직(802)은 저장 디바이스(320)에 결합될 수 있고, 실질적으로 메모리 페이지 비교 로직(402)(도 4)을 참조하여 앞서 논의된 실시예들 중 임의의 실시예의 형태를 취할 수 있지만, 게스트 머신 및 후보 호스트 머신에 대한 명령어들의 메모리 페이지들을 분석하고 비교하도록 구성될 수 있다. 상세하게는, 메모리 페이지 비교 로직(802)은, 게스트 머신이 가상 컴퓨팅 환경(300) 내의 임의의 호스트 머신에 배정되기 전에 그리고/또는 게스트 머신이 가상 컴퓨팅 환경(300) 내의 다른 호스트 머신(예컨대, 호스트 머신(302))에 배정되었을 때, 게스트 머신에 대한 명령어들의 메모리 페이지들과 호스트 머신(318)에 대한 명령어들의 메모리 페이지들을 비교하도록 구성될 수 있다. 본원에서 논의되는 바와 같이, 메모리 페이지 비교 로직(802)에 의해 수행되는 동작들의 목적은 게스트 머신과 호스트 머신 사이의 배정의 적합성을 결정하기 위해 게스트 머신에 대한 명령어들의 임의의 메모리 페이지들이 호스트 머신에 대한 명령어들의 임의의 메모리 페이지들과 동일한지를 결정하는 것일 수 있다. 일부 실시예들에서, 메모리 관리 로직(108)은 (예컨대, 동일한 메모리 페이지들의 최대 수, 동일한 메모리 페이지들의 유형들, 또는 메모리 페이지들의 동일성에 관련된 다른 기준들로 인해) 어느 잠재적 호스트 머신들이 게스트 머신을 호스팅하는 데 가장 적절할 수 있는지를 결정하기 위해 게스트 머신 및 하나 초과의 잠재적 호스트 머신에 대해 그의 동작들을 수행할 수 있다. 이 동작들은, 게스트 머신이 임의의 호스트 머신에 배정되기 전에 또는 게스트 머신이 호스트 머신에 배정된 후에, 수행될 수 있다. 후자의 경우에, 게스트 머신을 호스팅하는 데 보다 적절한 다른 호스트 머신이 식별되는 경우, 게스트 머신이 다른 호스트 머신으로 라이브 마이그레이션(live migrate)될 수 있다.
메모리 페이지 비교 로직(402)을 참조하여 앞서 논의된 바와 같이, 메모리 페이지 비교 로직(802)은 게스트 머신에 대한, 저장 디바이스(320)에 저장된 명령어들의 제1 메모리 페이지가 호스트 머신(예컨대, 호스트 머신(318) 또는 호스트 머신(302))에 대한, 저장 디바이스(320)에 저장된 명령어들의 제2 메모리 페이지와 동일한지 여부를 결정하도록 구성될 수 있다. 일부 실시예들에서, 저장 디바이스(320)는 호스트 머신들(318 및 302)에 로컬인 저장 디바이스들과 호스트 머신들(318 및 302)로부터 원격지에 있는 저장 디바이스를 포함할 수 있고; 일부 이러한 실시예들에서, 게스트 머신의 메모리 페이지들은 이미지로서 "원격" 저장 디바이스에 저장될 수 있는 반면, 호스트 머신들의 메모리 페이지들은 그 각자의 "로컬" 저장 디바이스들에 저장될 수 있다. 일부 실시예들에서, 호스트 머신들의 메모리 페이지들의 사본들이 메모리 페이지 비교 로직(802)에 의한 용이한 비교를 위해 게스트 머신의 메모리 페이지들에 로컬적으로 저장될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(802)에 의해 분석되는 명령어들의 메모리 페이지들은 운영 체제 명령어들일 수 있다. 예를 들어, 명령어들의 메모리 페이지들은 ISR 명령어들을 포함할 수 있다.
메모리 페이지 비교 로직(402)을 참조하여 앞서 논의된 바와 같이, 일부 실시예들에서, 메모리 페이지 비교 로직(802)은 그의 페이지 단위 비교를 게스트 머신 및 호스트 머신에 관한 부가 정보의 분석으로 보완하거나 대체하도록 구성될 수 있다. 예를 들어, 저장 디바이스(320)가 게스트 머신의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)와 호스트 머신(302)의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)를 저장하는 실시예들에서, 메모리 페이지 비교 로직(802)은 페이지 단위 비교를 수행하기 전에 이 운영 체제 식별자들을 비교하도록 구성될 수 있다. 앞서 논의된 바와 같이, 운영 체제 식별자들이 동일하거나 관련되어 있는 경우, 메모리 페이지 비교 로직(402)은 동일한 게스트 및 호스트 메모리 페이지들이 있다고(또는 그럴 가능성이 있다고) 결론내릴 수 있고 그에 따라 그의 비교들을 수정할 수 있다.
일부 실시예들에서, 메모리 페이지 비교 로직(802)은 제1 및 명령어들의 제2 메모리 페이지들에 액세스하고, 2개의 메모리 페이지들이 동일한지 여부를 결정하기 위해 제1 및 명령어들의 제2 메모리 페이지들에 포함된 데이터 전부를 문자 단위로 또는 비트 단위로 서로 비교하도록 구성될 수 있다. 다른 실시예들에서, 메모리 페이지 비교 로직(802)은 제1 메모리 페이지와 제2 메모리 페이지가, 2개의 메모리 페이지들의 해시들을 비교하고 비교된 해시들이 동일하다고 결정하는 것에 의해, 동일하다고 결정하도록 구성될 수 있다. 상세하게는, 메모리 페이지 비교 로직(802)은 메모리 페이지들의 해시들을 계산하고 비교하기 위해(또는 메모리 페이지들을 다른 방식으로 비교하기 위해) 도 5의 프로세스(500)와 도 6의 프로세스(600)를 실행하도록 구성될 수 있다. 비록 "제1 메모리 페이지"와 "제2 메모리 페이지"가 본원에서 단수로 지칭될 수 있지만, 메모리 페이지 비교 로직(802)은 게스트 머신에 대한 명령어들의 다수의 메모리 페이지들이 호스트 머신에 대한 명령어들의 다수의 대응하는 메모리 페이지들과 동일하다고 결정할 수 있다.
메모리 페이지 비교 로직(402)을 참조하여 앞서 살펴본 바와 같이, 메모리 페이지 비교 로직(802)은 임의의 적절한 스케줄 또는 트리거 조건 세트에 따라 그의 결정을 수행하도록 구성될 수 있다. 예를 들어, 일부 실시예들에서, 메모리 페이지 비교 로직(802)은 게스트 머신에 대한 프로비저닝 요청(예컨대, 프로비저닝 요청(312 또는 316))의 수신에 응답하여 그의 결정을 하도록 구성될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(802)은 호스트 머신들(318 및 302)과 호스트 머신들(318 및 302)에 대해 요청되거나 그들 상에서 호스팅되는 게스트 머신들의 메모리 페이지들의 주기적 스캔의 일부로서 그의 결정을 하도록 구성될 수 있다.
자원 할당 로직(306)은 또한 배정 로직(804)을 포함할 수 있다. 배정 로직(804)은 메모리 페이지 비교 로직(802)에 결합될 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 메모리 페이지 비교 로직(802)에 의한 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하도록 구성될 수 있다. 일부 실시예들에서, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 메모리 페이지 비교 로직(802)에 의한 결정은 배정 기준 세트가 충족되는지에 관한 배정 로직(804)에 의한 분석에 포함될 수 있다. 상세하게는, 일부 실시예들에서, 배정 로직(804)은 동일한 메모리 페이지들에 관한 정보를 메모리 페이지 비교 로직(802)으로부터 수신하고 그 정보를 배정 기준 세트와 비교하도록 구성될 수 있다. 호스트 머신/게스트 머신 쌍이 배정 기준들을 충족시키는 경우, 호스트 머신이 게스트 머신에 배정될 수 있다.
배정 기준들은 메모리(예컨대, 저장 디바이스(320))에 저장될 수 있고, 호스트 머신 상에서 호스팅하기 위한 게스트 머신을 배정할지를 결정할 때 배정 로직(804)에 의해 액세스가능할 수 있다. 임의의 적절한 기준들이 배정 기준들에 포함될 수 있다. 예를 들어, 상이한 호스트 머신들이 상이한 운영 체제들을 실행하는 가상 컴퓨팅 환경(300)의 실시예들에서, 배정 기준들은 게스트 머신이 게스트 머신과 공통으로 가장 많은 운영 체제 명령어 메모리 페이지들을 가지는 호스트 머신에 할당되어야 한다고 명시할 수 있다. 일부 실시예들에서, 배정 기준들은 게스트 머신이 게스트 머신과 공통으로 가장 많은 "핫 코드" 메모리 페이지들을 가지는 호스트 머신에 할당되어야 한다고 명시할 수 있다. 일부 실시예들에서, 배정 기준들은 (예컨대, 동일한 메모리 페이지들에 관련되는 배정 조건들의 면에서) 다른 방식으로 "최적의" 호스트 머신이 또한 게스트 머신을 호스팅하는 데 적절한 다른 특성들(예컨대, 이용가능한 메모리 및 처리 능력)을 가져야 한다는 것을 요구하는 완화 조건들을 포함할 수 있다. 게스트 머신이 이미 "차선의" 호스트 머신 상에서 실행 중인 실시예들에서, 배정 로직(804)은 게스트 머신을 라이브 마이그레이션하는 것에 의해 게스트 머신을 다른 "최적의" 호스트 머신에 배정할 수 있다. 배정 로직(804)은 또한 호스트에 대한 게스트의 현재 배정이 차선일 가능성이 있는지를 결정하기 위해, 캐시 히트율과 같은, 동적 프로파일링 기준들을 사용할 수 있다.
일부 실시예들에서, 자원 할당 로직(306)은 게스트 머신과 호스트 머신 둘 다에 대해 동일한 바이너리(binary)를 사용하려고 시도하도록 구성될 수 있다. 일부 실시예들에서, 동일한 바이너리를 사용하려는 시도는 호스트 머신과 게스트 머신의 적어도 커널 명령어들에 대해 동일한 바이너리를 사용하는 것에 중점을 둘 수 있다. 예를 들어, 자원 할당 로직(306)은 게스트 머신을 동일한 커널 버전을 갖는 호스트 머신과 일치시키려고 시도하도록 구성될 수 있다.
도 9는 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경(300)에서 게스트 머신들을 호스트 머신들에 배정하는 프로세스(900)의 흐름도이다. 설명의 편의를 위해, 도 9의 프로세스는 가상 컴퓨팅 환경(300)에서 호스트 머신(318) 및 게스트 머신에 대해 자원 할당 로직(306)(예컨대, 메모리 페이지 비교 로직(802)) 및 배정 로직(804)에 의해 수행되는 것으로 기술될 수 있지만, 임의의 적절한 하드웨어가 프로세스(900)를 실행하도록 구성될 수 있다.
902에서, 자원 할당 로직(306)(예컨대, 메모리 페이지 비교 로직(802))은 게스트 머신을 선택할 수 있다. 902에서 선택된 게스트 머신은 호스트 머신(318) 이외의 호스트 머신(예컨대, 호스트 머신(302))에 배정될 수 있거나 프로비저닝 요청의 대상이었을 수 있고, 아직 배정되지 않을 수 있다.
904에서, 자원 할당 로직(306)(예컨대, 메모리 페이지 비교 로직(802))은 후보 호스트 머신(이 논의에서, 호스트 머신(318))을 선택할 수 있다. 후보 호스트 머신은 902에서 선택된 게스트 머신을 현재 호스팅하고 있지는 않지만 902에서 선택된 게스트 머신이 배정될 수 있는 호스트 머신일 수 있다.
906에서, 자원 할당 로직(306)(예컨대, 메모리 페이지 비교 로직(802))은 이전에 결정된 메모리 페이지 일치들의 세트에 액세스할 수 있다. 메모리 페이지 일치들은 게스트 머신의 어느 메모리 페이지들과 호스트 머신(318)의 어느 메모리 페이지들이 동일한 것으로 결정되었는지를 나타낼 수 있다. 일부 실시예들에서, 자원 할당 로직(306)은 본원에 개시되는 기법들(도 5 및 도 6을 참조하여 앞서 논의된 프로세스들) 중 임의의 것에 따라 이 메모리 페이지 일치들의 세트를 발생시킬 수 있다. 일부 실시예들에서, 메모리 페이지 일치들의 세트가 다른 로직에 의해 발생될 수 있다. 906에서 일치들에 액세스하는 것은 도 7의 702 및 704를 참조하여 앞서 논의된 실시예들 중 임의의 실시예의 형태를 취할 수 있다.
908에서, 자원 할당 로직(306)(예컨대, 배정 로직(804))은 906에서 액세스된 메모리 페이지 일치들이 배정 기준들을 충족시키는지를 결정할 수 있다. 앞서 논의된 바와 같이, 배정 기준들은 게스트 머신이 호스트 머신(318) 상에서 실행하기 위해 적절히 배정되는지를 결정하기 위한 임의의 적절한 하나 이상의 규칙들을 포함할 수 있다.
자원 할당 로직(306)이, 908에서, 메모리 페이지 일치들이 배정 기준들을 충족시키지 않는다고 결정하는 경우, 자원 할당 로직(306)(예컨대, 배정 로직(804))은 910으로 진행하여 배정 기준들이 충족되지 않았다고 보고할 수 있다. 이 보고는 가상 컴퓨팅 환경(300)의 시스템 관리자에게 또는 가상 컴퓨팅 환경(300)의 내부 로직(예컨대, 자원 관리자(304)의 내부 로직)에 제공될 수 있다. 예를 들어, 일부 실시예들에서, 보고는, 이 새로운 후보에 대해 프로세스(900)를 개시할 때 다른 후보 호스트 머신을 선택하는 것으로 응답하도록 구성될 수 있는, 메모리 페이지 비교 로직(802)에 제공될 수 있다. 일부 실시예들에서, 이 보고에 응답하여, 시스템 관리자는 게스트 머신이 배정될 수 있는 호스트 머신을 수동으로 선택할 수 있다. 일부 실시예들에서, 이 보고에 응답하여, 자원 관리자(304)의 다른 로직은 게스트 머신을 적절한 호스트 머신에 할당하기 위해 다른 기준들을 적용할 수 있다. 일부 실시예들에서, 게스트 머신에 대한 프로비저닝 요청(예컨대, 프로비저닝 요청(312 또는 316)을 제공한 클라이언트 머신(예컨대, 클라이언트 머신(310 또는 314))에 지원이 제공될 수 있다.
자원 할당 로직(306)이, 908에서, 메모리 페이지 일치들이 배정 기준들을 충족시킨다고 결정하는 경우, 자원 할당 로직(306)(예컨대, 배정 로직(804))은 912로 진행하여 게스트 머신을 호스트 머신(318)에 배정할 수 있다. 게스트 머신이 이전에 호스트 머신에 배정되지 않았던 실시예들에서, 912의 배정은 게스트 머신의 최초 배정일 수 있다. 게스트 머신이 이전에 다른 호스트 머신에 배정되었던 실시예들에서, 912의 배정은 호스트 머신(318)으로의 게스트 머신의 라이브 마이그레이션을 포함할 수 있다. 프로세스(900)가 이어서 종료될 수 있다.
앞서 살펴본 바와 같이, 자원 관리자(304)는 메모리 조직화 로직(308)을 포함할 수 있다. 메모리 조직화 로직(308)과 메모리 조직화 기법들의 다양한 실시예들이 이제부터 도 10 내지 도 15를 참조하여 이하에서 논의된다. 먼저, 도 10은 다양한 실시예들에 따른, 도 3의 가상 컴퓨팅 환경(300)의 자원 관리자(304)에 포함될 수 있는 메모리 조직화 로직(308)의 블록도이다. 앞서 살펴본 바와 같이, 메모리 조직화 로직(308)은 (호스트 머신들(318 및 302) 내의 저장 디바이스들과 호스트 머신들(318 및 302)과 별개인 저장 디바이스들을 포함할 수 있는) 저장 디바이스(320)에 결합될 수 있다.
메모리 조직화 로직(308)은 명령어 비교 로직(1002)을 포함할 수 있다. 명령어 비교 로직(1002)은 저장 디바이스(320)에 결합될 수 있고, 가상 컴퓨팅 환경(300)에서의 게스트 머신에 대한, 저장 디바이스(320)에 저장된 제1 운영 체제 명령어 세트가 가상 컴퓨팅 환경(300)에서의 호스트 머신(예컨대, 호스트 머신(318 또는 302))에 대한, 저장 디바이스(320)에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하도록 구성될 수 있다. 일부 실시예들에서, 명령어 비교 로직(1002)은 메모리 페이지 비교 로직(402)(도 4) 또는 메모리 페이지 비교 로직(802)(도 8)을 참조하여 앞서 논의된 실시예들 중 임의의 것과 유사한 형태를 취할 수 있지만, 전체 메모리 페이지들보다는, 게스트 머신 및 후보 호스트 머신에 대한 개개의 명령어들 및/또는 명령어들의 그룹들을 분석하고 비교하도록 구성될 수 있다. 상세하게는, 명령어 비교 로직(1002)은, 게스트 머신이 가상 컴퓨팅 환경(300) 내의 임의의 호스트 머신에 배정되기 전에 그리고/또는 게스트 머신이 가상 컴퓨팅 환경(300) 내의 다른 호스트 머신에 배정되었을 때, 게스트 머신에 대한 명령어들과 후보 호스트 머신에 대한 명령어들의 메모리 페이지들을 비교하도록 구성될 수 있다. 본원에서 논의되는 바와 같이, 명령어 비교 로직(1002)에 의해 수행되는 동작들의 목적은 게스트 머신과 호스트 머신 사이의 개선된 메모리 페이지 정렬을 달성하기 위해 게스트 머신 및/또는 호스트 머신의 운영 체제 명령어들을 얼마나 최상으로 배열해야 하는지를 결정하기 위해 게스트 머신에 대한 임의의 운영 체제 명령어들이 호스트 머신에 대한 임의의 운영 체제 명령어들과 동일한지를 결정하는 것일 수 있다. 일부 실시예들에서, 메모리 조직화 로직(308)은 게스트 머신 및 하나 초과의 잠재적 호스트 머신에 대해 그의 동작들을 수행할 수 있다.
앞서 살펴본 바와 같이, 일부 실시예들에서, 저장 디바이스(320)는 호스트 머신들(318 및 302)에 로컬인 저장 디바이스들과 호스트 머신들(318 및 302)로부터 원격지에 있는 저장 디바이스를 포함할 수 있고; 일부 이러한 실시예들에서, 게스트 머신의 명령어들은 이미지로서 "원격" 저장 디바이스에 저장될 수 있는 반면, 호스트 머신들의 명령어들은 그 각자의 "로컬" 저장 디바이스들에 저장될 수 있다. 일부 실시예들에서, 호스트 머신들의 명령어들의 사본들이 명령어 비교 로직(1002)에 의한 용이한 비교를 위해 게스트 머신의 메모리 페이지들에 로컬적으로 저장될 수 있다. 일부 실시예들에서, 앞서 살펴본 바와 같이, 명령어 비교 로직(1002)에 의해 분석되는 명령어들은 운영 체제 명령어들일 수 있다. 예를 들어, 명령어들은 ISR 명령어들을 포함할 수 있다.
메모리 페이지 비교 로직(402) 및 메모리 페이지 비교 로직(802)을 참조하여 앞서 논의된 바와 같이, 일부 실시예들에서, 명령어 비교 로직(1002)은 그의 명령어 단위 또는 명령어 세트 단위 비교를 게스트 머신 및 호스트 머신에 관한 부가 정보의 분석으로 보완하거나 대체하도록 구성될 수 있다. 예를 들어, 저장 디바이스(320)가 게스트 머신의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)와 호스트 머신(302)의 운영 체제의 식별자(예컨대, 이름, 버전 번호, 및 임의의 다른 적절한 식별 정보를 포함함)를 저장하는 실시예들에서, 명령어 비교 로직(1002)은 명령어 비교를 수행하기 전에 이 운영 체제 식별자들을 비교하도록 구성될 수 있다. 앞서 논의된 바와 같이, 운영 체제 식별자들이 동일하거나 관련되어 있는 경우, 명령어 비교 로직(1002)은 동일한 게스트 및 호스트 명령어들이 있다고(또는 그럴 가능성이 있다고) 결론내릴 수 있고 그에 따라 그의 비교들을 수정할 수 있다.
일부 실시예들에서, 명령어 비교 로직(1002)은 제1 및 제2 명령어 세트들에 액세스하고, 2개의 명령어 세트들이 동일한지 여부를 결정하기 위해 제1 및 제2 명령어 세트들에 포함된 데이터 전부를 문자 단위로 또는 비트 단위로 서로 비교하도록 구성될 수 있다. 다른 실시예들에서, 명령어 비교 로직(1002)은 제1 명령어 세트와 제2 명령어 세트가, 2개의 명령어 세트들의 해시들을 비교하고 비교된 해시들이 동일하다고 결정하는 것에 의해, 동일하다고 결정하도록 구성될 수 있다. 상세하게는, 명령어 비교 로직(1002)은 명령어 세트들의 해시들을 계산하고 비교하기 위해(또는 명령어 세트들을 다른 방식으로 비교하기 위해) 도 5의 프로세스(500) 및 도 6의 프로세스(600)와 유사한 프로세스들을 실행하도록 구성될 수 있다. 비록 "제1 명령어 세트"와 "제2 명령어 세트"가 본원에서 단수로 지칭될 수 있지만, 명령어 비교 로직(1002)은 (이하에서 도 12 및 도 13의 예에서 논의된 바와 같이) 게스트 머신에 대한 다수의 명령어 세트들이 호스트 머신에 대한 다수의 대응하는 명령어 세트들과 동일하다고 결정할 수 있다.
메모리 페이지 비교 로직(402) 및 메모리 페이지 비교 로직(802)을 참조하여 앞서 살펴본 바와 같이, 명령어 비교 로직(1002)은 임의의 적절한 스케줄 또는 트리거 조건 세트에 따라 그의 결정을 수행하도록 구성될 수 있다. 예를 들어, 일부 실시예들에서, 명령어 비교 로직(1002)은 게스트 머신에 대한 프로비저닝 요청(예컨대, 프로비저닝 요청(312 또는 316))의 수신에 응답하여 그의 결정을 하도록 구성될 수 있다. 일부 실시예들에서, 메모리 페이지 비교 로직(802)은 호스트 머신들(318 및 302)과 호스트 머신들(318 및 302)에 대해 요청되거나 그들 상에서 호스팅되는 게스트 머신들의 메모리 페이지들의 주기적 스캔의 일부로서 그의 결정을 하도록 구성될 수 있다. 일부 실시예들에서, 명령어 비교 로직(1002)은 이전에 분석되지 않은 운영 체제를 갖는 호스트 머신이 가상 컴퓨팅 환경(300) 내에 도입될 때 그리고/또는 이전에 분석되지 않은 운영 체제를 갖는 게스트 머신이 가상 컴퓨팅 환경(300) 내에 도입될 때 그의 결정을 수행하도록 구성될 수 있다.
메모리 조직화 로직(308)은 또한 배열 로직(1004)을 포함할 수 있다. 배열 로직(1004)은 명령어 비교 로직(1002)에 결합될 수 있고, 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다는 명령어 비교 로직(1002)에 의한 결정에 응답하여, 제1 운영 체제 명령어들 및/또는 제2 운영 체제 명령어 세트의 메모리 페이지들에 걸친 분포가 보다 잘 일치하도록 제1 운영 체제 명령어 세트 및/또는 제2 운영 체제 명령어 세트를 배열하도록 구성될 수 있다. 상세하게는, 일부 실시예들에서, 배열 로직(1004)에 의한 재배열 시에, 제1 운영 체제 명령어 세트 및/또는 제2 운영 체제 명령어 세트는 저장 디바이스(320)에서의 하나 이상의 메모리 페이지들에 포함될 수 있고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작할 수 있으며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝날 수 있다. 제1 명령어 세트와 제2 명령어 세트가 전체 메모리 페이지들을 차지하고 그 메모리 페이지들 내에 동일하게 분포되도록 제1 명령어 세트 및/또는 제2 명령어 세트를 배열하는 것은 메모리 페이지들이 게스트 머신과 호스트 머신 사이에서 공유될 수 있게 할 수 있고, 도 1을 참조하여 앞서 논의된 부수적인 메모리 액세스 성능 개선들이 있다. 게스트의 전체 메모리 페이지들이 호스트의 전체 메모리 페이지들과 동일하도록 메모리 페이지들 사이의 "일치"를 개선시키기 위해 명령어들을 재배열하는 것은 본원에서 일치하는 페이지 입도를 달성하는 것이라고 지칭될 수 있다.
일부 실시예들에서, 명령어 배열 로직(1004)은 게스트 머신에 대한 링커에 그리고/또는 호스트 머신에 대한 링커에 포함될 수 있다. 본원에서 사용되는 바와 같이, "링커"는 주소 공간에서 명령어들을 실행가능 프로그램으로 결합시키는 로직의 세트를 지칭할 수 있다. 일부 실시예들에서, 링커는 컴파일러에 의해 발생된 오브젝트 파일들(은 물론 라이브러리로부터의 오브젝트들)을 결합시키고 주소 공간에서 오브젝트들을 배열할 수 있다. 도 11은 다양한 실시예들에 따른, 게스트 머신 링커(1102)가 호스트 머신 링커(1104)와 통신하는, 가상 컴퓨팅 환경(300)에 포함될 수 있는, 가상 컴퓨팅 환경(1100)의 블록도이다. 일부 실시예들에서, 배열 로직(1004)은 게스트 머신 링커(1102)에 포함될 수 있고, 배열 로직(1004)은 원하는 메모리 페이지 입도를 위해 게스트 머신에 대한 명령어들을 배열하도록 구성될 수 있다. 일부 이러한 실시예들에서, 명령어 비교 로직(1002)은 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 호스트 머신 링커(1104)와 통신하도록 구성될 수 있다.
일부 실시예들에서, 배열 로직(1004)은 게스트 머신 링커(1102)에 포함될 수 있고, 배열 로직(1004)은 원하는 메모리 페이지 입도를 위해 호스트 머신에 대한 명령어들을 배열하도록 구성될 수 있다. 일부 이러한 실시예들에서, 명령어 비교 로직(1002)은 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 게스트 머신 링커(1102)와 통신하도록 구성될 수 있다. 일부 실시예들에서, 게스트 머신 링커(1102)와 호스트 머신 링커(1104) 둘 다는 게스트 머신과 호스트 머신 사이의 일치하는 페이지 입도를 추가로 개선시키기 위해 게스트 머신에 대한 명령어들과 호스트 머신에 대한 명령어들 둘 다가 배열될 수 있도록 배열 로직(1004)으로 구성될 수 있다.
일부 실시예들에서, 메모리 조직화 로직(308)은 (Linux와 같은) 전형적인 운영 체제들이 (ISR 코드 및 페이지 폴트 핸들링 코드와 같은) 핵심적인 커널 컴포넌트들에 대한 상당히 안정된 코드 베이스를 가진다는 관찰을 이용할 수 있다.그 결과, 그 운영 체제들의 후속 버전들은 이 동일한 핵심적인 커널 컴포넌트들을 이용할 수 있고, 따라서 동일한 명령어들이 선택되고 일치하는 페이지 입도로 배열되는 메모리 조직화 기법들에 적절할 수 있다. 일부 실시예들에서, 개발자는 (예컨대, 적어도 핫 코드에 대해) 동일한 소스 코드를 사용하고 일치하는 페이지 입도를 갖는 동일한 이진 코드로 컴파일링하는 게스트 운영 체제 커널과 호스트 운영 체제 커널을 의도적으로 개발할 수 있다.
도 12 및 도 13은 메모리 조직화 로직(308)의 메모리 조직화 동작들 이전(도 12) 및 이후(도 13)의 2개의 상이한 운영 체제들에 대한 명령어들의 다양한 배열들을 나타내고 있다. 상세하게는, 도 12는 다양한 실시예들에 따른, 제1 운영 체제(1212)에 포함된 명령어 세트들의 배열(1226)과 제2 운영 체제(1224)에 포함된 명령어 세트들의 배열(1228)을 나타내고 있다. 제1 운영 체제(1212)는, 예를 들어, 게스트 머신의 운영 체제일 수 있고, 제2 운영 체제(1224)는, 예를 들어, 후보 호스트 머신의 운영 체제일 수 있다.
배열(1226)은 명령어 세트 A(1202), 명령어 세트 B(1204), 명령어 세트 C(1206), 명령어 세트 D(1208), 및 명령어 세트 E(1210)를 포함할 수 있다. 명령어 세트들(1202 내지 1210)은 저장 디바이스(예컨대, 저장 디바이스(320))에서 개략적으로 도시된 배열로 분산되어 있을 수 있다. 배열(1228)은 명령어 세트 D(1214), 명령어 세트 F(1216), 명령어 세트 G(1218), 명령어 세트 A(1220), 및 명령어 세트 H(1222)를 포함할 수 있다. 명령어 세트들(1214 내지 1222)은 저장 디바이스(예컨대, 저장 디바이스(320))에서 개략적으로 도시된 배열로 분산되어 있을 수 있다. 메모리 조직화 로직(308)이 배열들(1226 및 1228)을 분석할 때, 명령어 비교 로직(1002)은 제1 운영 체제(1212)의 명령어 세트 A(1202)가 제2 운영 체제(1224)의 명령어 세트 A(1220)와 동일하고 제1 운영 체제(1212)의 명령어 세트 D(1208)가 제2 운영 체제(1224)의 명령어 세트 D(1214)와 동일하다고 결정할 수 있다.
제1 운영 체제(1212)의 특정 명령어 세트들이 제2 운영 체제(1224)의 특정 명령어 세트들과 일치한다는 명령어 비교 로직(1002)에 의한 결정 시에, 배열 로직(1004)(제1 운영 체제(1212)와 연관된 링커에 그리고 제2 운영 체제(1224)와 연관된 링커에 대응물들을 가짐)은 일치하는 페이지 입도를 개선시키기 위해 제1 운영 체제(1212) 및 제2 운영 체제(1224)의 명령어 세트들을 재배열할 수 있다. 상세하게는, 도 13은 다양한 실시예들에 따른, 도 12의 배열(1226)과 상이한, 도 12의 제1 운영 체제(1212)에 포함된 명령어 세트들의 배열(1326)과, 도 12의 배열(1228)과 상이한, 제2 운영 체제(1224)에 포함된 명령어 세트들의 배열(1328)을 나타내고 있다. 도 13의 배열들(1326 및 1328)은 명령어 배열 로직(1004)의 동작 이후의 새로운 배열들을 나타낼 수 있다. 도 13에 도시된 바와 같이, 제1 운영 체제(1212)와 제2 운영 체제(1224) 사이에서 동일한 명령어 세트들(즉, 명령어 세트들 A(1202 및 1220)와 명령어 세트들 D(1208 및 1214))은 동일한 명령어들이 메모리 페이지들 간에(예컨대, 메모리 페이지 경계들에 대해) 동일하게 분포되도록 물리적 메모리 내에 배열될 수 있다. 상세하게는, 동일한 명령어 세트들이 (파선 상자(1226)로 표시된 바와 같이) 제1 운영 체제(1212)와 제2 운영 체제(1224) 사이에서 일치하는 페이지 입도를 가지도록 배열될 수 있다.
일부 실시예들에서, 게스트 링커와 호스트 링커는 협력하여 동일한 명령어들을 찾아내고 동일한 명령어들을 페이지 입도로(예컨대, 페이지 경계에서 시작하고 페이지 경계에 끝나게) 위치시키기 위해 통신할 수 있다. 이 동일한 명령어들은 자연스러운 섹션들을 형성할 수 있고, 임의적인 위치들에 위치된 다른 대응하는 명령어들과 링킹될 수 있다.
도 14 및 도 15는 다양한 실시예들에 따른, 가상 컴퓨팅 환경에서의 메모리 조직화를 위한 프로세스들의 흐름도들이다. 설명의 편의를 위해, 도 14 및 도 15의 프로세스들은 가상 컴퓨팅 환경(300) 내의 메모리 조직화 로직(308)에 의해 수행되는 것으로 기술될 수 있지만, 임의의 적절한 하드웨어가 이 프로세스들을 실행하도록 구성될 수 있다.
도 14는 다양한 실시예들에 따른, 상이한 운영 체제들의 명령어 세트들을 비교하는 프로세스(1400)의 흐름도이다. 다양한 실시예들에서, 프로세스(1400)를 참조하여 논의되는 제1 운영 체제와 제2 운영 체제는 게스트 머신의 운영 체제와 후보 호스트 머신의 운영 체제에 대응할 수 있다. 프로세스(1400)의 동작들은 명령어 비교 로직(1002)에 의해 수행되는 것으로 논의될 수 있지만, 앞서 살펴본 바와 같이, 임의의 적절한 하드웨어가 프로세스(1400)를 실행하도록 구성될 수 있다.
프로세스(1400)는 명령어 비교 로직(1002)이 제1 운영 체제에 대한 제1 명령어 세트를 선택할 수 있는 1402에서 시작될 수 있다. 1402에서 선택된 제1 명령어 세트는 제1 운영 체제와 제2 운영 체제 사이에서 비교되어야 하는 미리 결정된 명령어들의 범위 또는 세트에서 스케줄에 기초하여 그리고/또는 순차적으로 선택될 수 있다(1404를 참조하여 이하에서 논의됨). 일부 실시예들에서, 제1 명령어 세트는 프로세스(1400)의 비교들을 위한 논리적 경계들을 제공하는 주석문(comment) 또는 다른 코드 구분자(code separator)에 의해 구별되는 명령어 세트일 수 있다. 명령어 세트들을 선택하기 위한 임의의 적절한 기법이 사용될 수 있다. 일부 실시예들에서, 명령어 비교 로직(1002)은 1402의 선택을 돕기 위해 제1 운영 체제와 제2 운영 체제에 관한 정보를 사용할 수 있다. 예를 들어, 명령어 비교 로직(1002)은, 앞서 논의된 바와 같이, 운영 체제들이 동일하거나 관련되어 있는지(그리고 따라서 특정의 동일한 명령어들을 가질 가능성이 있는지)를 결정하기 위해 제1 및 제2 운영 체제들의 버전들을 비교할 수 있다.
1404에서, 명령어 비교 로직(1002)은 제2 운영 체제에 대한 제2 명령어 세트를 선택할 수 있다. 1404에서 선택된 제2 명령어 세트는 제1 운영 체제(1402)와 제2 운영 체제 사이에서 비교되어야 하는 미리 결정된 명령어들의 범위 또는 세트에서 스케줄에 기초하여 그리고/또는 순차적으로 선택될 수 있다. 일부 실시예들에서, 제2 명령어 세트는 프로세스(1400)의 비교들을 위한 논리적 경계들을 제공하는 주석문 또는 다른 코드 구분자에 의해 구별되는 명령어 세트일 수 있지만, 명령어 세트들을 선택하기 위한 임의의 적절한 기법이 사용될 수 있다. 일부 실시예들에서, 명령어 비교 로직(1002)은, 1402를 참조하여 앞서 논의된 바와 같이, 1404의 선택을 돕기 위해 제1 운영 체제와 제2 운영 체제에 관한 정보를 사용할 수 있다.
1406에서, 명령어 비교 로직(1002)은 (1402에서 선택된) 제1 명령어 세트와 (1404에서 선택된) 제2 명령어 세트가 동일한지를 결정할 수 있다. 일부 실시예들에서, 이 결정은 명령어 세트들의 문자 단위 또는 비트 단위 비교를 포함할 수 있거나, 메모리 페이지들을 참조하여 앞서 논의된 바와 같이, 명령어 세트들의 해시들의 비교를 포함할 수 있다. 임의의 적절한 비교 기법이 사용될 수 있다. 명령어 비교 로직(1002)이, 1406에서, 명령어 세트들이 동일하지 않다고 결정하는 경우, 명령어 비교 로직(1002)은 1408로 진행하여, "일치 없음" 식별자를 제1 명령어 세트 및 제2 명령어 세트와 연관시켜 메모리에(예컨대, 저장 디바이스(320)에) 저장할 수 있다. 이 "일치 없음" 식별자는 임의의 적절한 형태(예컨대, "0"의 이진 지시자)를 취할 수 있고, 제1 명령어 세트와 제2 명령어 세트가 동일하지 않다는 결과가 용이하게 결정될 수 있도록 임의의 적절한 데이터 구조체(예컨대, 제1 운영 체제의 명령어 세트들은 행들에 대응하고 제2 운영 체제의 명령어 세트들은 열들에 대응하는 테이블)에 저장될 수 있다. 일부 실시예들에서, 제1 명령어 세트와 제2 명령어 세트가 동일하지 않다는 결정의 결과로서 어떤 데이터도 저장되지 않을 수 있고, 따라서 1406의 동작들이 수행되지 않을 수 있다.
명령어 비교 로직(1002)이, 1406에서, 제1 명령어 세트와 제2 명령어 세트가 동일하다고 결정하는 경우, 명령어 비교 로직(1002)은 1410로 진행하여, "일치" 식별자를 제1 명령어 세트 및 제2 명령어 세트와 연관시켜 메모리에(예컨대, 저장 디바이스(320)에) 저장할 수 있다. 이 "일치" 식별자는 임의의 적절한 형태(예컨대, "1"의 이진 지시자)를 취할 수 있고, 제1 명령어 세트와 제2 명령어 세트가 동일하다는 결과가 용이하게 결정될 수 있도록 임의의 적절한 데이터 구조체(예컨대, 제1 운영 체제의 명령어 세트들은 행들에 대응하고 제2 운영 체제의 명령어 세트들은 열들에 대응하는 테이블)에 저장될 수 있다. 일부 실시예들에서, 일치 식별자는 (예컨대, 배열 로직(1004)에 의한 나중의 액세스를 위해) 1408에서 동일한 명령어 세트들의 메모리 장소들을 데이터 구조체로 저장 디바이스(320)에 기록하는 것에 의해 저장될 수 있다.
1412에서, 명령어 비교 로직(1002)은 모든 원하는 명령어 세트들(예컨대, 모든 원하는 명령어 세트 쌍들)이 동일성이 있는지 검토되었는지를 결정할 수 있다. 이 결정은 미리 결정된 명령어 세트들의 범위 또는 세트의 끝에 도달되었고, 그 미리 결정된 범위 또는 세트 내의 모든 명령어 세트들이 검토되었는지를 결정하는 것을 포함할 수 있다. 명령어 비교 로직(1002)이, 1412에서, 검토될 명령어 세트들이 여전히 있다고 결정하는 경우, 명령어 비교 로직(1002)은 1402로 복귀하고 검토하기 위한 부가의 명령어 세트들을 선택할 수 있다. 명령어 비교 로직(1002)이, 1412에서, 모든 원하는 명령어 세트들이 검토되었다고 결정하는 경우, 프로세스(1400)가 이어서 종료될 수 있다. 앞서 살펴본 바와 같이, 임의의 원하는 스케줄에 따라 다양한 명령어 세트들에 대해 프로세스(1400)가 반복될 수 있다.
도 15는 다양한 실시예들에 따른, 운영 체제의 명령어 세트들을 배열하는 프로세스(1500)의 흐름도이다. 다양한 실시예들에서, 프로세스(1500)를 참조하여 논의되는 제1 운영 체제와 제2 운영 체제(그리고 대응하는 제1 명령어 세트와 제2 명령어 세트)는 게스트 머신의 운영 체제와 후보 호스트 머신의 운영 체제에 대응할 수 있다. 프로세스(1500)의 동작들은 배열 로직(1004)에 의해 수행되는 것으로 논의될 수 있지만, 앞서 살펴본 바와 같이, 임의의 적절한 하드웨어가 프로세스(1500)를 실행하도록 구성될 수 있다.
프로세스(1500)는 배열 로직(1004)이 제1 운영 체제로부터의 제1 명령어 세트와 제2 운영 체제로부터의 제2 명령어 세트 사이의 저장된 "일치" 식별자를 선택할 수 있는 1502에서 시작될 수 있다. 도 14의 1408 및 1410을 참조하여 앞서 논의된 바와 같이, 제1 명령어 세트와 제2 명령어 세트가 동일한 것으로 결정되었는지 여부를 나타내는 데이터가 임의의 적절한 데이터 구조체(예컨대, "일치" 식별자와 "일치 없음" 식별자를 포함하는 테이블)로 메모리에(예컨대, 저장 디바이스(320)에) 저장될 수 있다. 이와 같이, 1502에서, 배열 로직(1004)은 "일치" 식별자(존재하는 경우)를 선택하기 위해 이 데이터 구조체에 액세스할 수 있다. 배열 로직(1004)은 저장된 "일치" 식별자를 검토하고 선택하기 위해(예컨대, 요소 단위 검토) 임의의 적절한 기법을 사용하거나 임의의 적절한 패턴을 따를 수 있다.
1504에서, 배열 로직(1004)은 1502에서 선택된 "일치" 식별자와 연관된 명령어 세트들을 식별할 수 있다. 일부 실시예들에서, "일치" 식별자와 "일치 없음" 식별자를 저장하는 데 사용되는 데이터 구조체는 (예컨대, 도 14의 1408 및 1410을 참조하여 앞서 논의된 바와 같이) 연관된 제1 및 제2 명령어 세트들이 용이하게 식별될 수 있도록 "일치" 식별자 및 "일치 없음" 식별자와 연관된 제1 및 제2 명령어 세트들에 대한 링크들 또는 포인터들을 포함할 수 있다. 다른 실시예들에서, 어느 제1 및 제2 명령어 세트들이 특정의 "일치" 또는 "일치 없음" 식별자와 연관되어 있는지를 결정하기 위해 룩업 테이블 또는 다른 데이터 구조체가 사용될 수 있다. 일부 실시예들에서, 배열 로직(1004)은, 1504에서, 제1 및 제2 명령어 세트들 각각에 대한 물리적 메모리 주소들을 식별하는 것에 의해 제1 및 제2 명령어 세트들을 식별할 수 있다.
1506에서, 배열 로직(1004)은 제1 명령어 세트 및/또는 제2 명령어 세트를 일치하는 페이지 입도를 갖도록 배열할 수 있다. 앞서 논의된 바와 같이, 배열 로직(1004)은 제1 명령어 세트에 대한 링커 또는 제2 명령어 세트에 대한 링커에 포함될 수 있고; 이러한 실시예들에서, 배열 로직(1004)은 연관된 명령어 세트들을 배열할 수 있고, 일치하는 페이지 입도를 달성하도록 다른 명령어 세트들을 배열하기 위해 대응물 링커에 포함된 로직(예컨대, 배열 로직(1004)에 대해 기술된 바와 같이 구성된 배열 로직)과 조정할 수 있다.
1508에서, 배열 로직(1004)은 모든 원하는 일치들(예컨대, "일치" 식별자들과 연관된 모든 원하는 명령어 세트 쌍들)이 검토되었는지를 결정할 수 있다. 이 결정은 "일치" 식별자들을 포함하는 데이터 구조체의 끝에 도달되었고 그 데이터 구조체에서의 모든 일치들이 검토되었는지를 결정하는 것을 포함할 수 있다. 배열 로직(1004)이, 1508에서, 검토될 일치들이 여전히 있다고 결정하는 경우, 배열 로직(1004)은 1502로 복귀하고 검토하기 위한 다른 "일치" 식별자를 선택할 수 있다. 배열 로직(1004)이, 1508에서, 모든 원하는 일치들이 검토되었다고 결정하는 경우, 프로세스(1500)가 이어서 종료될 수 있다. 앞서 살펴본 바와 같이, 임의의 원하는 스케줄에 따라 다양한 일치들에 대해 프로세스(1500)가 반복될 수 있다. 프로세스(1500)가 수행되는 스케줄은 프로세스(1400)가 수행되는 스케줄에 관련될 수 있거나 그로부터 독립적일 수 있다.
앞서 살펴본 바와 같이, 가상 컴퓨팅 환경에서의 상이한 게스트 머신들 사이의 내용 기반 페이지 공유 메커니즘들이 메모리 사용을 감소시키기 위해 이미 사용되었지만, 게스트 머신들과 호스트 머신들 사이의 공유 캐시들의 과제가 이전에 인식 또는 해결되지 않았다. 그 대신에, 종래의 접근법들은 게스트 머신과 호스트 머신 캐시 공유를 비교적 사소한 것으로 취급하였는데, 그 이유는 공유 캐시의 풋프린트(예컨대, VMM의 풋프린트)가 비교적 작을 수 있고, 따라서 어떤 기법들도 게스트 종료 핸들링에 의해 야기되는 캐시 오염을 효과적으로 완화시키지 않았기 때문이다. 본원에 개시되는 시스템들 및 기법들은, 특히 이용가능한 캐시 크기가 작을 때, (캐시 라인 정렬, 가장 많이 읽혀지는 데이터를 한꺼번에 식별하는 것(identifying read-most data together), 및 캐시 프리페칭(cache pre-fetching)과 같은) 다른 메모리 관리 기법들에 의해 달성가능한 것들에 부가하여 성능 개선들을 제공할 수 있다.
도 16은 다양한 개시된 실시예들을 실시하는 데 적절할 수 있는 예시적인 컴퓨팅 디바이스(1600)의 블록도이다. 예를 들어, 컴퓨팅 디바이스(1600)는 호스트 머신(102), 자원 관리자(304), 호스트 머신(318), 호스트 머신(302), 클라이언트 머신(310), 및/또는 클라이언트 머신(314)으로서 역할할 수 있다. 일부 실시예들에서, 컴퓨팅 디바이스(1600)의 컴포넌트들은 다수의 물리적 디바이스 하우징들 또는 장소들에 걸쳐 분산될 수 있고, 다른 실시예들에서, 컴퓨팅 디바이스(1600)의 컴포넌트들은 단일의 하우징 또는 장소에 포함될 수 있다.
컴퓨팅 디바이스(1600)는, 하나 이상의 프로세서(들)(1604) 및 적어도 하나의 통신 칩(1606)을 비롯한, 다수의 컴포넌트들을 포함할 수 있다. 다양한 실시예들에서, 프로세서(1604)는 프로세서 코어를 포함할 수 있다. 다양한 실시예들에서, 적어도 하나의 통신 칩(1606)은 또한 프로세서(1604)에 물리적으로 그리고 전기적으로 결합될 수 있다. 추가의 구현들에서, 통신 칩(1606)은 프로세서(1604)의 일부일 수 있다. 다양한 실시예들에서, 컴퓨팅 디바이스(1600)는 인쇄 회로 보드(PCB)(1602)를 포함할 수 있다. 이 실시예들에서, 프로세서(1604)와 통신 칩(1606)은 그 위에 배치될 수 있다. 대안의 실시예들에서, 다양한 컴포넌트들이 PCB(1602)를 이용하지 않고 결합될 수 있다.
그의 응용분야들(예컨대, 메모리 및 자원 관리 응용분야들)에 따라, 컴퓨팅 디바이스(1600)는 PCB(1602)에 물리적으로 그리고 전기적으로 결합될 수 있거나 그렇지 않을 수 있는 다른 컴포넌트들을 포함할 수 있다. 이 다른 컴포넌트들은 RAM(random access memory)(1608), 휘발성 메모리(DRAM(dynamic RAM) 등), 비휘발성 메모리(예컨대, "ROM"이라고도 지칭되는 판독 전용 메모리(1610), 하나 이상의 하드 디스크 드라이브들, 하나 이상의 솔리드 스테이트 드라이브들, 하나 이상의 콤팩트 디스크 드라이브들, 및/또는 하나 이상의 DVD(digital versatile disc) 드라이브들), 플래시 메모리(1612), 입출력(I/O) 제어기(1614), 디지털 신호 프로세서(도시되지 않음), 암호 프로세서(도시되지 않음), 그래픽 프로세서(1616), 하나 이상의 안테나(1618), 터치 스크린 디스플레이(1620), 터치 스크린 제어기(1622), 다른 디스플레이들(액정 디스플레이, 음극선관 디스플레이, 및 전자 잉크(e-ink) 디스플레이 등)(도시되지 않음), 배터리(1624), 오디오 코덱(도시되지 않음), 비디오 코덱(도시되지 않음), GPS(global positioning system) 디바이스(1628), 나침반(1630), 가속도계(도시되지 않음), 자이로스코프(도시되지 않음), 스피커(1632), 카메라(1634), 및 대용량 저장 디바이스(하드 디스크 드라이브, 솔리드 스테이트 드라이브, CD(compact disk), DVD(digital versatile disk) 등)(도시되지 않음), 임의의 다른 원하는 센서들(도시되지 않음) 등을 포함하지만, 이들로 제한되지 않는다. 다양한 실시예들에서, SoC(System on Chip)를 형성하기 위해 프로세서(1604)가 동일한 다이 상에서 다른 컴포넌트들과 통합될 수 있다. 본원에서 논의되는 저장 디바이스들(예컨대, 저장 디바이스(106) 및 저장 디바이스(320)) 중 임의의 것은 도 16에 예시된 또는 도 16을 참조하여 본원에서 논의된 메모리 디바이스들 중 임의의 하나 이상을 포함할 수 있다.
다양한 실시예들에서, 휘발성 메모리(예컨대, RAM(1608)), 비휘발성 메모리(예컨대, ROM(1610)), 플래시 메모리(1612), 및 대용량 저장 디바이스는, 하나 이상의 프로세서(들)(1604)에 의한 실행에 응답하여, 컴퓨팅 디바이스(1600)로 하여금 본원에 기술되는 프로세스들의 모든 또는 선택된 양태들을 실시하게 하는 명령어들을 포함할 수 있다. 예를 들어, 휘발성 메모리(예컨대, RAM(1608)), 비휘발성 메모리(예컨대, ROM(1610)), 플래시 메모리(1612), 및 대용량 저장 디바이스와 같은 메모리 컴포넌트들 중 하나 이상은, 하나 이상의 프로세서(들)(1604)에 의한 실행에 응답하여, 컴퓨팅 디바이스(1600)로 하여금 본원에 기술되는 프로세스들의 모든 또는 선택된 양태들을 실시하게 하는 명령어들의 일시적 및/또는 영속적(예컨대, 비일시적) 사본들을 포함하는 머신 판독가능 매체일 수 있다. 컴퓨팅 디바이스(1600)에 의해 액세스가능한 메모리는 컴퓨팅 디바이스(1600)가 설치되어 있는 디바이스의 물리적 일부인 하나 이상의 저장 디바이스들 및/또는 컴퓨팅 디바이스(1600)에 의해 액세스가능하지만 꼭 그의 일부는 아닌 하나 이상의 저장 디바이스들을 포함할 수 있다. 예를 들어, 저장 디바이스는 네트워크를 거쳐 통신 칩(1606)을 통해 컴퓨팅 디바이스(1600)에 의해 액세스될 수 있다.
통신 칩(1606)은 컴퓨팅 디바이스(1600)로의 그리고 그로부터의 데이터의 전송을 위한 유선 및/또는 무선 통신을 가능하게 할 수 있다. 용어 "무선" 및 그의 파생어들은 변조된 전자기 방사를 사용하여 비고체 매체(non-solid medium)를 통해 데이터를 전달할 수 있는 회로, 디바이스, 시스템, 방법, 기법, 통신 채널 등을 기술하는 데 사용될 수 있다. 이 용어는 연관된 디바이스가 어떤 전선(wire)도 포함하지 않는다는 것을 암시하지는 않지만, 일부 실시예들에서는, 그렇지 않을 수 있다. 본원에 기술되는 실시예들 중 다수는, 앞서 살펴본 바와 같이, WiFi 및 3GPP/LTE 통신 시스템들에서 사용될 수 있다. 그렇지만, 통신 칩들(1606)은 IEEE02.20, GPRS(General Packet Radio Service), Ev-DO(Evolution Data Optimized), HSPA+(Evolved High Speed Packet Access), HSDPA+(Evolved High Speed Downlink Packet Access), HSUPA+(Evolved High Speed Uplink Packet Access), GSM(Global System for Mobile Communications), EDGE(Enhanced Data rates for GSM Evolution), CDMA(Code Division Multiple Access), TDMA(Time Division Multiple Access), DECT(Digital Enhanced Cordless Telecommunications), 블루투스, 그의 파생물들은 물론, 3G, 4G, 5G, 및 그 이상으로서 지정된 임의의 다른 무선 프로토콜들(이들로 제한되지 않음)을 비롯한 다수의 무선 표준들 또는 프로토콜들 중 임의의 것을 구현할 수 있다. 컴퓨팅 디바이스(1600)는 복수의 통신 칩들(1606)을 포함할 수 있다. 예를 들어, 제1 통신 칩(1606)은 Wi-Fi 및 블루투스와 같은 단거리 무선 통신에 전용될 수 있고, 제2 통신 칩(1606)은 GPS, EDGE, GPRS, CDMA, WiMAX, LTE, Ev-DO, 및 다른 것들과 같은 장거리 무선 통신에 전용될 수 있다.
다양한 구현들에서, 컴퓨팅 디바이스(1600)는 랩톱, 넷북, 노트북, 울트라북, 스마트폰, 컴퓨팅 태블릿, PDA(personal digital assistant), 울트라 모바일 PC, 휴대폰, 데스크톱 컴퓨터, 서버, 프린터, 스캐너, 모니터, 셋톱 박스, 엔터테인먼트 제어 유닛(예컨대, 게임 콘솔), 디지털 카메라, 휴대용 음악 플레이어, 또는 디지털 비디오 레코더일 수 있다. 추가의 구현들에서, 컴퓨팅 디바이스(1600)는 데이터를 처리하는 임의의 다른 전자 디바이스일 수 있다.
이하의 단락들은 다양한 실시예들의 예들을 기술한다.
예 1은 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치이고, 본 장치는 저장 디바이스; 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는, 저장 디바이스에 결합된, 메모리 페이지 비교 로직 - 게스트 머신은 호스트 머신에 의해 호스팅됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는, 메모리 페이지 비교 로직에 결합된, 병합 로직을 포함한다.
예 2는 예 1의 발명 요지를 포함할 수 있고, 제1 메모리 페이지와 제2 메모리 페이지가 인터럽트 서비스 루틴 명령어들을 포함한다는 것을 추가로 명시할 수 있다.
예 3은 예 1 및 예 2 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 것은 제1 메모리 페이지의 해시가 제2 메모리 페이지의 해시와 동일하다고 결정하는 것을 포함한다는 것을 추가로 명시할 수 있다.
예 4는 예 1 내지 예 3 중 어느 한 예의 발명 요지를 포함할 수 있고, 병합 로직이 추가로 제1 메모리 페이지를 읽기 전용으로서 마킹하기 위한 것임을 추가로 명시할 수 있다.
예 5는 예 1 내지 예 4 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 것은 페이지 테이블에서 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 것을 포함한다는 것을 추가로 명시할 수 있다.
예 6은 예 1 내지 예 5 중 어느 한 예의 발명 요지를 포함할 수 있고, 메모리 페이지 비교 로직은 게스트 머신의 로딩에 응답하여 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 것을 추가로 명시할 수 있다.
예 7은 예 1 내지 예 6 중 어느 한 예의 발명 요지를 포함할 수 있고, 메모리 페이지 비교 로직은 제1 메모리 페이지와 제2 메모리 페이지의 주기적 스캔의 일부로서 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 것을 추가로 명시할 수 있다.
예 8은 가상 컴퓨팅 환경에서의 자원 할당을 위한 장치이고, 본 장치는 저장 디바이스; 적어도 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 메모리 페이지 비교 로직 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는, 메모리 페이지 비교 로직에 결합된, 배정 로직을 포함한다.
예 9는 예 8의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 것은 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 복수의 메모리 페이지들이 호스트 머신에 대한 대응하는 명령어들의 복수의 메모리 페이지들과 동일하다고 결정하는 것을 포함한다는 것을 추가로 명시할 수 있다.
예 10은 예 8 및 예 9 중 어느 한 예의 발명 요지를 포함할 수 있고, 명령어들의 제1 메모리 페이지와 명령어들의 제2 메모리 페이지가 커널 명령어들이라는 것을 추가로 명시할 수 있다.
예 11은 예 8 내지 예 10 중 어느 한 예의 발명 요지를 포함할 수 있고, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 것은 게스트 머신을 호스트 머신으로 라이브 마이그레이션하는 것을 포함한다는 것을 추가로 명시할 수 있다.
예 12는 예 8 내지 예 11 중 어느 한 예의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 것은 게스트 머신의 운영 체제 버전을 호스트 머신의 운영 체제 버전과 비교하는 것을 포함한다는 것을 추가로 명시할 수 있다.
예 13은 가상 컴퓨팅 환경에서의 메모리 조직화를 위한 장치이고, 본 장치는 저장 디바이스; 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 제1 운영 체제 명령어 세트가, 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하는, 저장 디바이스에 결합된, 명령어 비교 로직 - 호스트 머신 상에서 실행되도록 게스트 머신이 배정되지 않음 -; 및 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다는 결정에 응답하여, 제1 운영 체제 명령어 세트와 제2 운영 체제 명령어 세트로 이루어진 그룹으로부터 선택되는 운영 체제 명령어 세트를, 운영 체제 명령어 세트가 저장 디바이스에서의 하나 이상의 메모리 페이지들에 포함되고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작하며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록, 배열하는, 명령어 비교 로직에 결합된, 배열 로직을 포함한다.
예 14는 예 13의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 메모리 페이지 비교 로직 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는, 메모리 페이지 비교 로직에 결합된, 배정 로직을 추가로 포함할 수 있다.
예 15는 예 13 및 예 14 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제1 운영 체제 명령어 세트를 포함하고, 배열 로직은 게스트 머신에 대한 링커에 포함된다는 것을 추가로 명시할 수 있다.
예 16은 예 15의 발명 요지를 포함할 수 있고, 명령어 비교 로직은 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 호스트 머신에 대한 링커와 통신하는 것을 추가로 명시할 수 있다.
예 17은 예 13 내지 예 16 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제2 운영 체제 명령어 세트를 포함하고, 배열 로직은 호스트 머신에 대한 링커에 포함된다는 것을 추가로 명시할 수 있다.
예 18은 예 17의 발명 요지를 포함할 수 있고, 명령어 비교 로직은 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 게스트 머신에 대한 링커와 통신하는 것을 추가로 명시할 수 있다.
예 19는 가상 컴퓨팅 환경에서의 메모리 관리를 위한 방법이고, 본 방법은 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계 - 게스트 머신은 호스트 머신에 의해 호스팅됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 단계를 포함한다.
예 20은 예 19의 발명 요지를 포함할 수 있고, 제1 메모리 페이지와 제2 메모리 페이지는 인터럽트 서비스 루틴 명령어들을 포함한다는 것을 추가로 명시할 수 있다.
예 21은 예 19 및 예 20 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 단계는 제1 메모리 페이지의 해시가 제2 메모리 페이지의 해시와 동일하다고 결정하는 단계를 포함한다는 것을 추가로 명시할 수 있다.
예 22는 예 19 내지 예 21 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지를 읽기 전용으로서 마킹하는 단계를 추가로 포함할 수 있다.
예 23은 예 19 내지 예 22 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 단계는 페이지 테이블에서 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 단계를 포함한다는 것을 추가로 명시할 수 있다.
예 24는 예 19 내지 예 23 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 단계가 게스트 머신의 로딩에 응답하여 수행된다는 것을 추가로 명시할 수 있다.
예 25는 예 19 내지 예 24 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 단계는 제1 메모리 페이지와 제2 메모리 페이지의 주기적 스캔의 일부로서 수행된다는 것을 추가로 명시할 수 있다.
예 26은 가상 컴퓨팅 환경에서의 자원 할당을 위한 방법이고, 본 방법은 적어도 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 단계를 포함한다.
예 27은 예 26의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계는 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 복수의 메모리 페이지들이 호스트 머신에 대한 대응하는 명령어들의 복수의 메모리 페이지들과 동일하다고 결정하는 단계를 포함한다는 것을 추가로 명시할 수 있다.
예 28은 예 26 및 예 27 중 어느 한 예의 발명 요지를 포함할 수 있고, 명령어들의 제1 메모리 페이지와 명령어들의 제2 메모리 페이지가 커널 명령어들이라는 것을 추가로 명시할 수 있다.
예 29는 예 26 내지 예 28 중 어느 한 예의 발명 요지를 포함할 수 있고, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 단계는 게스트 머신을 호스트 머신으로 라이브 마이그레이션하는 단계를 포함한다는 것을 추가로 명시할 수 있다.
예 30은 예 26 내지 예 29 중 어느 한 예의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계는 게스트 머신의 운영 체제 버전을 호스트 머신의 운영 체제 버전과 비교하는 단계를 포함한다는 것을 추가로 명시할 수 있다.
예 31은 가상 컴퓨팅 환경에서의 메모리 조직화를 위한 방법이고, 본 방법은 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 제1 운영 체제 명령어 세트가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하는 단계 - 게스트 머신은 호스트 머신 상에서 실행하기 위해 배정되지 않음 -; 및 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다는 결정에 응답하여, 제1 운영 체제 명령어 세트와 제2 운영 체제 명령어 세트로 이루어진 그룹으로부터 선택되는 운영 체제 명령어 세트를, 운영 체제 명령어 세트가 저장 디바이스에서의 하나 이상의 메모리 페이지들에 포함되고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작하며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록, 배열하는 단계를 포함한다.
예 32는 예 31의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 단계를 추가로 포함할 수 있다.
예 33은 예 31 및 예 32 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제1 운영 체제 명령어 세트를 포함하고, 운영 체제 명령어 세트를 배열하는 단계는 게스트 머신에 대한 링커에 의해 수행된다는 것을 추가로 명시할 수 있다.
예 34는 예 33의 발명 요지를 포함할 수 있고, 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 호스트 머신에 대한 링커와 통신하는 단계를 추가로 포함할 수 있다.
예 35은 예 31 내지 예 34 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제2 운영 체제 명령어 세트를 포함하고, 운영 체제 명령어 세트를 배열하는 단계는 호스트 머신에 대한 링커에 의해 수행된다는 것을 추가로 명시할 수 있다.
예 36는 예 35의 발명 요지를 포함할 수 있고, 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 게스트 머신에 대한 링커와 통신하는 단계를 추가로 포함할 수 있다.
예 37은, 컴퓨팅 디바이스의 하나 이상의 처리 디바이스들에 의한 실행에 응답하여, 컴퓨팅 디바이스로 하여금 예 19 내지 예 36 중 어느 한 예의 방법을 수행하게 하는 명령어들을 가지는 하나 이상의 컴퓨터 판독가능 매체이다.
예 38은 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치이고, 본 장치는 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단 - 게스트 머신은 호스트 머신에 의해 호스팅됨 -; 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 수단을 포함한다.
예 39는 예 38의 발명 요지를 포함할 수 있고, 제1 메모리 페이지와 제2 메모리 페이지는 인터럽트 서비스 루틴 명령어들을 포함한다는 것을 추가로 명시할 수 있다.
예 40은 예 38 및 예 38 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 수단은 제1 메모리 페이지의 해시가 제2 메모리 페이지의 해시와 동일하다고 결정하는 수단을 포함한다는 것을 추가로 명시할 수 있다.
예 41은 예 38 내지 예 40 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지를 읽기 전용으로서 마킹하는 수단을 추가로 포함할 수 있다.
예 42는 예 38 내지 예 41 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 수단은 페이지 테이블에서 제1 메모리 페이지를 제2 메모리 페이지에 매핑하는 수단을 포함한다는 것을 추가로 명시할 수 있다.
예 43은 예 38 내지 예 42 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 수단은 게스트 머신의 로딩에 응답하여 결정을 수행한다는 것을 추가로 명시할 수 있다.
예 44는 예 38 내지 예 43 중 어느 한 예의 발명 요지를 포함할 수 있고, 제1 메모리 페이지가 제2 메모리 페이지와 동일하다고 결정하는 수단은 제1 메모리 페이지와 제2 메모리 페이지의 주기적 스캔의 일부로서 결정을 수행한다는 것을 추가로 명시할 수 있다.
예 45는 가상 컴퓨팅 환경에서의 자원 할당을 위한 장치이고, 본 장치는 적어도 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 수단을 포함한다.
예 46은 예 45의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단은 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 복수의 메모리 페이지들이 호스트 머신에 대한 대응하는 명령어들의 복수의 메모리 페이지들과 동일하다고 결정하는 수단을 포함한다는 것을 추가로 명시할 수 있다.
예 47은 예 45 및 예 46 중 어느 한 예의 발명 요지를 포함할 수 있고, 명령어들의 제1 메모리 페이지와 명령어들의 제2 메모리 페이지가 커널 명령어들이라는 것을 추가로 명시할 수 있다.
예 48은 예 45 내지 예 47 중 어느 한 예의 발명 요지를 포함할 수 있고, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 수단은 게스트 머신을 호스트 머신으로 라이브 마이그레이션하는 수단을 포함한다는 것을 추가로 명시할 수 있다.
예 49는 예 45 내지 예 48 중 어느 한 예의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단은 게스트 머신의 운영 체제 버전을 호스트 머신의 운영 체제 버전과 비교하는 수단을 포함한다는 것을 추가로 명시할 수 있다.
예 50은 가상 컴퓨팅 환경에서의 메모리 조직화를 위한 장치이고, 본 장치는 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 제1 운영 체제 명령어 세트가 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 저장 디바이스에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하는 수단 - 게스트 머신은 호스트 머신 상에서 실행하기 위해 배정되지 않음 -; 및 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다는 결정에 응답하여, 제1 운영 체제 명령어 세트와 제2 운영 체제 명령어 세트로 이루어진 그룹으로부터 선택되는 운영 체제 명령어 세트를, 운영 체제 명령어 세트가 저장 디바이스에서의 하나 이상의 메모리 페이지들에 포함되고, 하나 이상의 메모리 페이지들의 페이지 경계에서 시작하며, 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록, 배열하는 수단을 포함한다.
예 51은 예 50의 발명 요지를 포함할 수 있고, 적어도 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 호스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단 - 게스트 머신은 호스트에 배정되지 않거나 호스트 머신과 상이한 호스트에 배정됨 -; 및 제1 메모리 페이지가 제2 메모리 페이지와 동일하다는 결정에 응답하여, 호스트 머신 상에서 실행되도록 게스트 머신을 배정하는 수단을 추가로 포함할 수 있다.
예 52는 예 50 및 예 51 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제1 운영 체제 명령어 세트를 포함하고, 운영 체제 명령어 세트를 배열하는 수단은 게스트 머신에 대한 링커인 것을 추가로 명시할 수 있다.
예 53은 예 52의 발명 요지를 포함할 수 있고, 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 호스트 머신에 대한 링커와 통신하는 수단을 추가로 포함할 수 있다.
예 54는 예 50 내지 예 53 중 어느 한 예의 발명 요지를 포함할 수 있고, 운영 체제 명령어 세트는 제2 운영 체제 명령어 세트를 포함하고, 운영 체제 명령어 세트를 배열하는 수단은 호스트 머신에 대한 링커인 것을 추가로 명시할 수 있다.
예 55는 예 54의 발명 요지를 포함할 수 있고, 제1 운영 체제 명령어 세트가 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 게스트 머신에 대한 링커와 통신하는 수단을 추가로 포함할 수 있다.

Claims (25)

  1. 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치로서,
    저장 디바이스;
    상기 가상 컴퓨팅 환경에서의 게스트 머신(guest machine)에 대한, 상기 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 상기 가상 컴퓨팅 환경에서의 호스트 머신(host machine)에 대한, 상기 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는, 상기 저장 디바이스에 결합된, 메모리 페이지 비교 로직 - 상기 게스트 머신은 상기 호스트 머신에 의해 호스팅됨(hosted) -; 및
    상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다는 결정에 응답하여, 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는, 상기 메모리 페이지 비교 로직에 결합된 병합 로직(merge logic)
    을 포함하는, 장치.
  2. 제1항에 있어서, 상기 제1 메모리 페이지와 상기 제2 메모리 페이지는 인터럽트 서비스 루틴 명령어들을 포함하는, 장치.
  3. 제1항에 있어서, 상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다고 결정하는 것은 상기 제1 메모리 페이지의 해시(hash)가 상기 제2 메모리 페이지의 해시와 동일하다고 결정하는 것을 포함하는, 장치.
  4. 제1항에 있어서, 상기 병합 로직은 추가로 상기 제1 메모리 페이지를 읽기 전용(read-only)으로서 마킹하는, 장치.
  5. 제1항에 있어서, 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 것은 페이지 테이블에서 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 것을 포함하는, 장치.
  6. 제1항에 있어서, 상기 메모리 페이지 비교 로직은 상기 게스트 머신의 로딩(loading)에 응답하여 상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다고 결정하는, 장치.
  7. 제1항에 있어서, 상기 메모리 페이지 비교 로직은 상기 제1 메모리 페이지와 상기 제2 메모리 페이지의 주기적 스캔의 일부로서 상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다고 결정하는, 장치.
  8. 가상 컴퓨팅 환경에서의 자원 할당을 위한 장치로서,
    저장 디바이스;
    적어도 상기 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 상기 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 메모리 페이지 비교 로직 - 상기 게스트 머신은 호스트에 배정되지 않거나 상기 호스트 머신과 상이한 호스트에 배정됨 -; 및
    상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다는 결정에 응답하여, 상기 호스트 머신 상에서 실행되도록 상기 게스트 머신을 배정하는, 상기 메모리 페이지 비교 로직에 결합된, 배정 로직
    을 포함하는, 장치.
  9. 제8항에 있어서, 적어도 상기 게스트 머신에 대한 명령어들의 상기 제1 메모리 페이지가 적어도 상기 호스트 머신에 대한 명령어들의 상기 제2 메모리 페이지와 동일하다고 결정하는 것은 상기 게스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 복수의 메모리 페이지들이 상기 호스트 머신에 대한 대응하는 명령어들의 복수의 메모리 페이지들과 동일하다고 결정하는 것을 포함하는, 장치.
  10. 제8항에 있어서, 명령어들의 상기 제1 메모리 페이지와 명령어들의 상기 제2 메모리 페이지가 커널 명령어들인, 장치.
  11. 제8항에 있어서, 상기 호스트 머신 상에서 실행되도록 상기 게스트 머신을 배정하는 것은 상기 게스트 머신을 상기 호스트 머신으로 라이브 마이그레이션하는(live migrate) 것을 포함하는, 장치.
  12. 제8항에 있어서, 적어도 상기 게스트 머신에 대한 명령어들의 상기 제1 메모리 페이지가 적어도 상기 호스트 머신에 대한 명령어들의 상기 제2 메모리 페이지와 동일하다고 결정하는 것은 상기 게스트 머신의 운영 체제 버전을 상기 호스트 머신의 운영 체제 버전과 비교하는 것을 포함하는, 장치.
  13. 가상 컴퓨팅 환경에서의 메모리 조직화(memory organization)를 위한 장치로서,
    저장 디바이스;
    상기 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 상기 저장 디바이스에 저장된 제1 운영 체제 명령어 세트가 상기 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 상기 저장 디바이스에 저장된 제2 운영 체제 명령어 세트와 동일하다고 결정하는, 상기 저장 디바이스에 결합된 명령어 비교 로직 - 상기 게스트 머신은 상기 호스트 머신 상에서 실행하기 위해 배정되지 않음 -; 및
    상기 제1 운영 체제 명령어 세트가 상기 제2 운영 체제 명령어 세트와 동일하다는 결정에 응답하여, 상기 제1 운영 체제 명령어 세트와 상기 제2 운영 체제 명령어 세트로 이루어진 그룹으로부터 선택되는 운영 체제 명령어 세트를, 상기 운영 체제 명령어 세트가 상기 저장 디바이스에서의 하나 이상의 메모리 페이지들에 포함되고, 상기 하나 이상의 메모리 페이지들의 페이지 경계(page boundary)에서 시작하며, 상기 하나 이상의 메모리 페이지들의 페이지 경계에서 끝나도록 배열하는, 상기 명령어 비교 로직에 결합된 배열 로직
    을 포함하는, 장치.
  14. 제13항에 있어서,
    적어도 상기 게스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 적어도 상기 호스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 메모리 페이지 비교 로직 - 상기 게스트 머신은 호스트에 배정되지 않거나 상기 호스트 머신과 상이한 호스트에 배정됨 -; 및
    상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다는 결정에 응답하여, 상기 호스트 머신 상에서 실행되도록 상기 게스트 머신을 배정하는, 상기 메모리 페이지 비교 로직에 결합된 배정 로직
    을 추가로 포함하는, 장치.
  15. 제13항에 있어서, 상기 운영 체제 명령어 세트는 상기 제1 운영 체제 명령어 세트를 포함하고, 상기 배열 로직은 상기 게스트 머신에 대한 링커(linker)에 포함되는, 장치.
  16. 제15항에 있어서, 상기 명령어 비교 로직은 상기 제1 운영 체제 명령어 세트가 상기 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 상기 호스트 머신에 대한 링커와 통신하는, 장치.
  17. 제13항에 있어서, 상기 운영 체제 명령어 세트는 상기 제2 운영 체제 명령어 세트를 포함하고, 상기 배열 로직은 상기 호스트 머신에 대한 링커에 포함되는, 장치.
  18. 제17항에 있어서, 상기 명령어 비교 로직은 상기 제1 운영 체제 명령어 세트가 상기 제2 운영 체제 명령어 세트와 동일하다고 결정하기 위해 상기 게스트 머신에 대한 링커와 통신하는, 장치.
  19. 가상 컴퓨팅 환경에서의 메모리 관리를 위한 방법으로서,
    상기 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 상기 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 단계 - 상기 게스트 머신은 상기 호스트 머신에 의해 호스팅됨 -; 및
    상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다는 결정에 응답하여, 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 단계
    를 포함하는, 방법.
  20. 제19항에 있어서, 상기 제1 메모리 페이지와 상기 제2 메모리 페이지는 인터럽트 서비스 루틴 명령어들을 포함하는, 방법.
  21. 제19항에 있어서, 상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다고 결정하는 단계는 상기 제1 메모리 페이지의 해시가 상기 제2 메모리 페이지의 해시와 동일하다고 결정하는 단계를 포함하는, 방법.
  22. 제19항에 있어서, 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 단계는 페이지 테이블에서 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 단계를 포함하는, 방법.
  23. 컴퓨팅 디바이스의 하나 이상의 처리 디바이스들에 의한 실행에 응답하여, 상기 컴퓨팅 디바이스로 하여금 제19항 내지 제22항 중 어느 한 항의 방법을 수행하게 하는 명령어들을 가지는 하나 이상의 컴퓨터 판독가능 매체.
  24. 가상 컴퓨팅 환경에서의 메모리 관리를 위한 장치로서,
    저장 디바이스;
    상기 가상 컴퓨팅 환경에서의 게스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제1 메모리 페이지가 상기 가상 컴퓨팅 환경에서의 호스트 머신에 대한, 상기 저장 디바이스에 저장된 명령어들의 제2 메모리 페이지와 동일하다고 결정하는 수단 - 상기 게스트 머신은 상기 호스트 머신에 의해 호스팅됨 -; 및
    상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다는 결정에 응답하여, 상기 제1 메모리 페이지를 상기 제2 메모리 페이지에 매핑하는 수단
    을 포함하는, 장치.
  25. 제24항에 있어서, 상기 제1 메모리 페이지가 상기 제2 메모리 페이지와 동일하다고 결정하는 수단은 상기 제1 메모리 페이지의 해시가 상기 제2 메모리 페이지의 해시와 동일하다고 결정하는 수단을 포함하는, 장치.
KR1020177003649A 2014-09-12 2014-09-12 가상 컴퓨팅 환경에서의 메모리 및 자원 관리 KR102123422B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/086360 WO2016037344A1 (en) 2014-09-12 2014-09-12 Memory and resource management in a virtual computing environment

Publications (2)

Publication Number Publication Date
KR20170029583A true KR20170029583A (ko) 2017-03-15
KR102123422B1 KR102123422B1 (ko) 2020-06-16

Family

ID=55458268

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177003649A KR102123422B1 (ko) 2014-09-12 2014-09-12 가상 컴퓨팅 환경에서의 메모리 및 자원 관리

Country Status (5)

Country Link
US (1) US10216532B2 (ko)
EP (1) EP3191945A4 (ko)
KR (1) KR102123422B1 (ko)
CN (1) CN106575235B (ko)
WO (1) WO2016037344A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200135715A (ko) * 2019-05-24 2020-12-03 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 데이터 처리 방법, 장치, 기기 및 매체

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9854041B1 (en) 2014-09-30 2017-12-26 Amazon Technologies, Inc. Reducing network traffic when replicating memory data across hosts
US20170003997A1 (en) * 2015-07-01 2017-01-05 Dell Products, Lp Compute Cluster Load Balancing Based on Memory Page Contents
US10416916B2 (en) * 2015-10-19 2019-09-17 Telefonaktiebolaget Lm Ericsson (Publ) Method and memory merging function for merging memory pages
CN111133416A (zh) 2017-09-26 2020-05-08 英特尔公司 处理来自虚拟机命令的方法和装置
US10733096B2 (en) 2017-11-22 2020-08-04 Samsung Electronics Co., Ltd. System and method for frame buffer
US20210334024A1 (en) * 2020-04-28 2021-10-28 International Business Machines Corporation Transactional Memory Based Memory Page De-Duplication
US11341060B2 (en) * 2020-08-11 2022-05-24 International Business Machines Corporation Multifunction communication interface supporting memory sharing among data processing systems

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100023941A1 (en) * 2008-07-28 2010-01-28 Fujitsu Limted Virtual machine monitor
US20110191095A1 (en) * 2002-09-17 2011-08-04 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor
US20110213911A1 (en) * 2010-02-26 2011-09-01 Izik Eidus Mechanism for Dynamic Placement of Virtual Machines During Live Migration Based on Memory
US20130036249A1 (en) * 2011-08-01 2013-02-07 International Business Machines Corporation Preemptive guest merging for virtualization hypervisors
US20130159639A1 (en) * 2011-12-14 2013-06-20 Vmware, Inc. Optimizing for Page Sharing in Virtualized Java Virtual Machines

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7373446B2 (en) * 2004-11-05 2008-05-13 Microsoft Corporation Method and system for dynamically patching an operating system's interrupt mechanism
US7472252B2 (en) * 2005-08-15 2008-12-30 Microsoft Corporation Merging identical memory pages
US8694712B2 (en) * 2006-12-05 2014-04-08 Microsoft Corporation Reduction of operational costs of virtual TLBs
JP4864817B2 (ja) 2007-06-22 2012-02-01 株式会社日立製作所 仮想化プログラム及び仮想計算機システム
US8190827B2 (en) * 2009-02-27 2012-05-29 Red Hat, Inc. Memory sharing among computer programs
US8490091B2 (en) * 2011-03-28 2013-07-16 International Business Machines Corporation Virtual machine placement to improve memory utilization
US9311250B2 (en) * 2011-12-19 2016-04-12 Intel Corporation Techniques for memory de-duplication in a virtual system
CN102567080B (zh) * 2012-01-04 2015-03-04 北京航空航天大学 一种云计算环境中的面向负载均衡的虚拟机择位系统
CN103019884B (zh) 2012-11-21 2015-07-01 北京航空航天大学 基于虚拟机快照的内存页去重方法及装置
US9292452B2 (en) * 2013-07-03 2016-03-22 Vmware, Inc. Identification of page sharing opportunities within large pages
CN104035822A (zh) 2014-05-28 2014-09-10 中国科学院计算技术研究所 一种低开销的高效内存去冗余方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110191095A1 (en) * 2002-09-17 2011-08-04 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor
US20100023941A1 (en) * 2008-07-28 2010-01-28 Fujitsu Limted Virtual machine monitor
US20110213911A1 (en) * 2010-02-26 2011-09-01 Izik Eidus Mechanism for Dynamic Placement of Virtual Machines During Live Migration Based on Memory
US20130036249A1 (en) * 2011-08-01 2013-02-07 International Business Machines Corporation Preemptive guest merging for virtualization hypervisors
US20130159639A1 (en) * 2011-12-14 2013-06-20 Vmware, Inc. Optimizing for Page Sharing in Virtualized Java Virtual Machines

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200135715A (ko) * 2019-05-24 2020-12-03 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 데이터 처리 방법, 장치, 기기 및 매체

Also Published As

Publication number Publication date
US10216532B2 (en) 2019-02-26
US20160291998A1 (en) 2016-10-06
EP3191945A4 (en) 2018-05-16
CN106575235A (zh) 2017-04-19
WO2016037344A1 (en) 2016-03-17
CN106575235B (zh) 2020-10-23
EP3191945A1 (en) 2017-07-19
KR102123422B1 (ko) 2020-06-16

Similar Documents

Publication Publication Date Title
KR102123422B1 (ko) 가상 컴퓨팅 환경에서의 메모리 및 자원 관리
US10877793B2 (en) Extending the base address register by modifying the number of read-only bits associated with a device to be presented to a guest operating system
US10255069B2 (en) Cleared memory indicator
KR102321913B1 (ko) 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템
KR101847262B1 (ko) 하드웨어 가속기를 포함하는 메인 메모리 및 메인 메모리의 동작 방법
US9529616B2 (en) Migrating processes between source host and destination host using a shared virtual file system
US10061701B2 (en) Sharing of class data among virtual machine applications running on guests in virtualized environment using memory management facility
US10241926B2 (en) Migrating buffer for direct memory access in a computer system
US9471226B2 (en) Reverse copy on write for better cache utilization
US9292452B2 (en) Identification of page sharing opportunities within large pages
US20170277632A1 (en) Virtual computer system control method and virtual computer system
EP3274818A1 (en) Computing methods and apparatuses with graphics and system memory conflict check
EP3274896A1 (en) Configuration of a memory controller for copy-on-write with a resource controller
EP3262519A1 (en) Configuration of a memory controller for copy-on-write
US10795821B2 (en) Memory efficient key-value store
US9189406B2 (en) Placement of data in shards on a storage device
US10552374B2 (en) Minimizing file creation and access times using skip optimization
US20230185593A1 (en) Virtual device translation for nested virtual machines
US11900142B2 (en) Improving memory access handling for nested virtual machines
US9836241B1 (en) Label based guest memory deduplication
KR20120070326A (ko) 메모리 가상화 장치 및 방법
US11243801B2 (en) Transparent huge pages support for encrypted virtual machines
US20180107509A1 (en) Migration of computer systems
TWI594124B (zh) 虛擬化感知之預取
US20240211293A1 (en) Efficient queue shadowing for virtual machines

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