Hyper-V 하이퍼바이저 스케줄러 유형 관리

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 버전 1803, Windows Server 버전 1709, Windows 10

이 문서에서는 Windows Server 2016에 도입된 가상 프로세서 예약 논리의 새로운 모드에 대해 설명합니다. 이러한 모드 또는 스케줄러 유형은 Hyper-V 하이퍼바이저가 게스트 가상 프로세서에서 작업을 할당하고 관리하는 방법을 결정합니다. Hyper-V 호스트 관리자는 다음을 수행할 수 있습니다.

  • 게스트 VM(가상 머신)에 가장 적합한 하이퍼바이저 스케줄러 유형을 선택합니다.
  • 예약 논리를 활용하도록 VM을 구성합니다.

사전 요구 사항

이 문서의 뒷부분에 설명된 하이퍼바이저 스케줄러 기능을 사용하려면 다음 업데이트를 설치해야 합니다. 이러한 업데이트에는 호스트 구성에 필요한 새 hypervisorschedulertype BCD 옵션을 지원하기 위한 변경 내용이 포함됩니다.

버전 해제 업데이트 필요 KB 문서
Windows Server 2016 1607 2018.07 C KB4338822
Windows Server 2016 1703 2018.07 C KB4338827
Windows Server 2016 1709 2018.07 C KB4338817
Windows Server 2019 1804 없음 없음

배경

Hyper-V 가상 프로세서 예약의 논리 및 제어에 대해 논의하기 전에 동시 다중 스레딩과 같은 특정 개념과 Hyper-V가 프로세서를 가상화하는 방법을 이해하는 것이 중요합니다.

SMT 이해

SMT(동시 다중 스레딩)는 별도의 독립 실행 스레드가 프로세서 리소스를 공유할 수 있도록 하는 최신 프로세서 디자인의 기술입니다. SMT는 일반적으로 대부분의 워크로드에 성능 향상을 제공합니다. 가능하면 계산을 병렬 처리하여 명령 처리량을 높입니다. 그러나 스레드가 공유 프로세서 리소스를 위해 서로 경쟁할 때 성능이 눈에 띄게 개선되거나 약간의 손실이 없는 경우도 있습니다.

Windows Server에서 SMT를 사용하려면 호환되는 프로세서가 있어야 합니다. 예를 들어 Intel Hyper-Threading 기술 또는 AMD(Advanced Micro Devices) SMT(다중 스레딩)를 사용하는 프로세서입니다.

이 문서의 목적을 위해 SMT에 대한 설명과 Hyper-V에서 SMT를 사용하는 방법은 Intel 및 AMD 시스템 모두에 동일하게 적용됩니다.

  • Intel HT 기술에 대한 자세한 내용은 Intel Hyper-Threading 기술을 참조 하세요.

  • AMD SMT에 대한 자세한 내용은 "Zen" 핵심 아키텍처를 참조 하세요.

Hyper-V가 프로세서를 가상화하는 방법 이해

하이퍼바이저 스케줄러 유형을 고려하기 전에 Hyper-V 아키텍처를 이해해야 합니다. Hyper-V 기술 개요에서 이 아키텍처가 작동하는 방식에 대한 자세한 요약을 찾을 수 있지만 지금은 다음 개념을 염두에 두어야 합니다.

  • Hyper-V는 하이퍼바이저를 제어하여 VM 파티션을 만들고 관리하며, 해당 파티션 간에 컴퓨팅 리소스를 할당하고 공유합니다. 파티션은 모든 게스트 VM과 게스트 VM과 루트 파티션 간에 강력한 격리 경계를 제공합니다.

  • 루트 파티션은 고유한 속성과 게스트 VM보다 더 큰 권한을 가지고 있지만 자체 VM 파티션입니다. 루트 파티션:

    • 모든 게스트 VM을 제어하는 관리 서비스를 제공합니다.
    • 게스트에 대한 가상 디바이스 지원을 제공합니다.
    • 게스트 VM에 대한 모든 디바이스 입력 및 출력을 관리합니다.

    루트 파티션에서 애플리케이션 워크로드를 실행하지 않는 것이 좋습니다.

  • 루트 파티션의 각 VP(가상 프로세서)는 기본 LP(논리 프로세서)에 일대일로 매핑됩니다. 호스트 VP는 항상 동일한 기본 LP에서 실행됩니다. 루트 파티션의 VP를 마이그레이션할 수 없습니다.

  • 기본적으로 루트 파티션의 VP 실행을 호스트하는 LP는 게스트 VP를 실행할 수도 있습니다.

  • 하이퍼바이저는 사용 가능한 논리 프로세서에서 실행되도록 게스트 VP를 예약할 수 있습니다. 하이퍼바이저 스케줄러는 임시 캐시 지역성, NUMA(비균일 메모리 액세스) 토폴로지 및 게스트 VP를 예약할 때 다른 많은 요인을 고려하려고 하지만 궁극적으로 모든 호스트 LP에서 VP를 예약할 수 있습니다.

하이퍼바이저 스케줄러 형식

Windows Server 2016에서 Hyper-V 하이퍼바이저는 하이퍼바이저가 기본 논리 프로세서에서 가상 프로세서를 예약하는 방법을 결정하는 여러 가지 스케줄러 논리 모드를 지원합니다. 이러한 스케줄러 유형은 다음과 같습니다.

클래식 스케줄러

클래식 스케줄러는 Windows Server 2016 Hyper-V를 포함하여 시작부터 모든 버전의 Windows Hyper-V 하이퍼바이저에 대한 기본값입니다. 클래식 스케줄러는 게스트 가상 프로세서에 대한 공정한 공유, 선점적 라운드 로빈 일정 모델을 제공합니다.

클래식 스케줄러 유형은 프라이빗 클라우드, 호스팅 공급자 등 대부분의 기존 Hyper-V 사용에 가장 적합합니다. 클래식 스케줄러 유형의 성능 특성은 다음과 같은 다양한 가상화 시나리오를 지원하도록 가장 최적화되어 있습니다.

  • VP를 LP에 과도하게 구독합니다.
  • 여러 다른 유형의 VM 및 워크로드를 동시에 실행합니다.
  • 대규모 고성능 VM 실행
  • 제한 사항 및 기타 시나리오 없이 Hyper-V의 전체 기능 집합을 지원합니다.

핵심 스케줄러

하이퍼바이저 코어 스케줄러는 Windows Server 2016 및 Windows 10 버전 1607에서 도입된 클래식 스케줄러 논리의 대안입니다. 핵심 스케줄러는 게스트 워크로드 격리를 위한 강력한 보안 경계를 제공합니다. 또한 SMT 사용 가상화 호스트에서 실행되는 VM 내 워크로드의 성능 가변성을 줄입니다. 핵심 스케줄러는 동일한 SMT 지원 가상화 호스트에서 SMT 및 비 SMT VM을 동시에 실행하도록 지원합니다.

핵심 스케줄러:

  • 가상화 호스트의 SMT 토폴로지 사용
  • 필요에 따라 게스트 VM에 SMT 쌍을 노출합니다.
  • 동일한 VM의 게스트 가상 프로세서 그룹을 SMT 논리 프로세서 그룹으로 예약합니다.

이 작업은 대칭적으로 발생합니다. LP가 2인 그룹에 있는 경우 VP는 두 그룹으로 예약되며 코어는 VM 간에 공유되지 않습니다. SMT를 사용하지 않고 VM에 대한 VP를 예약하면 해당 VP는 실행될 때 전체 코어를 사용합니다. 핵심 스케줄러의 전체 결과는 다음과 같습니다.

  • 게스트 워크로드 격리를 위해 강력한 보안 경계가 존재합니다. 게스트 VP는 기본 물리적 코어 쌍에서만 실행할 수 있으므로 사이드 채널 스누핑 공격에 대한 취약성을 줄일 수 있습니다.
  • 처리량의 가변성을 줄입니다.
  • 잠재적으로 성능을 저하시킬 수 있습니다. 그룹의 한 VP만 실행할 수 있는 경우 코어의 명령 스트림 중 하나만 실행되고 다른 하나는 유휴 상태로 남아 있습니다.
  • 게스트 VM에서 실행되는 OS 및 애플리케이션은 물리적 컴퓨터와 마찬가지로 SMT 동작 및 API(프로그래밍 인터페이스)를 사용하여 SMT 스레드 간에 작업을 제어하고 배포할 수 있습니다.

Windows Server 2019를 기준으로 Hyper-V는 기본적으로 핵심 스케줄러를 사용합니다. Windows Server 2016과 같은 이전 버전에서는 스케줄러가 선택 사항이며 클래식 스케줄러가 기본 옵션입니다.

호스트 SMT를 사용하지 않도록 설정된 핵심 스케줄러 동작

경우에 따라 핵심 스케줄러 형식을 사용하도록 하이퍼바이저를 구성할 수 있지만 SMT 기능이 비활성화되거나 가상화 호스트에 없습니다. 이러한 경우 Hyper-V는 하이퍼바이저 스케줄러 유형 설정에 관계없이 클래식 스케줄러 동작을 사용합니다.

루트 스케줄러

루트 스케줄러는 Windows 10 버전 1803과 함께 도착했습니다. 루트 스케줄러 유형을 사용하도록 설정하면 하이퍼바이저가 작업 예약의 루트 파티션 제어를 제공합니다. 루트 파티션의 OS 인스턴스에 있는 NT 스케줄러는 시스템 LP에 대한 작업 예약의 모든 측면을 관리합니다.

루트 스케줄러는 유틸리티 파티션을 지원하고 WDAG(Windows Defender Application Guard)와 함께 사용되는 강력한 워크로드 격리를 제공하기 위한 고유한 요구 사항을 해결합니다. 이 시나리오에서는 예약 책임을 루트 OS에 맡기면 다음과 같은 몇 가지 이점이 있습니다.

  • 유틸리티 파티션을 사용하여 컨테이너 시나리오에 적용할 수 있는 CPU 리소스 컨트롤을 사용하여 관리 및 배포를 간소화할 수 있습니다.
  • 루트 OS 스케줄러는 컨테이너 내에서 워크로드 CPU 사용에 대한 메트릭을 쉽게 수집할 수 있습니다. 이 데이터를 시스템의 다른 모든 워크로드에 적용할 수 있는 동일한 일정 정책에 대한 입력으로 사용할 수 있습니다.
  • 이러한 동일한 메트릭은 애플리케이션 컨테이너에서 수행된 특성 작업을 호스트 시스템에도 도움이 됩니다. 이러한 메트릭 추적은 루트 파티션에서 실행 중인 모든 VM을 대신하여 일부 작업이 수행되는 기존 VM 워크로드에서 더 어렵습니다.

클라이언트 시스템에서 루트 스케줄러 사용

Windows 10 버전 1803부터 루트 스케줄러는 기본적으로 클라이언트 시스템에서만 사용됩니다. 즉, 다음을 의미합니다.

  • 하이퍼바이저가 가상화 기반 보안 및 WDAG 워크로드 격리를 지원하도록 설정할 수 있습니다.
  • 이종 핵심 아키텍처를 사용하여 향후 시스템을 제대로 운영하는 것이 중요합니다.

이 구성은 클라이언트 시스템에 대해 지원되는 유일한 하이퍼바이저 스케줄러 구성입니다. 관리자는 Windows 클라이언트 시스템에서 기본 하이퍼바이저 스케줄러 유형을 재정의하려고 시도해서는 안 됩니다.

Virtual Machine CPU 리소스 컨트롤 및 루트 스케줄러

하이퍼바이저 루트 스케줄러를 사용하도록 설정하면 Hyper-V의 제공된 VM 프로세서 리소스 제어가 지원되지 않습니다. 루트 운영 체제의 스케줄러 논리는 전역적으로 호스트 리소스를 관리하며 단일 VM의 게스트 리소스를 관리하지 않습니다. Hyper-V당 VM 프로세서 리소스 컨트롤(예: 대문자, 가중치 및 예약)은 하이퍼바이저가 클래식 및 코어 스케줄러 유형과 같이 VP 예약을 직접 제어하는 경우에만 적용할 수 있습니다.

서버 시스템에서 루트 스케줄러 사용

서버에서 Hyper-V와 함께 루트 스케줄러를 사용하지 않는 것이 좋습니다. 성능 특성은 아직 많은 서버 가상화 배포의 일반적인 광범위한 워크로드를 수용하도록 완전히 특성화되고 조정되지 않았습니다.

게스트 VM에서 SMT 사용

핵심 스케줄러 유형을 사용하도록 가상화 호스트의 하이퍼바이저를 구성한 후에는 SMT를 사용하도록 게스트 VM을 구성할 수도 있습니다. VP가 게스트 VM에 하이퍼스레딩된다는 사실을 노출하면 게스트 운영 체제의 스케줄러와 VM에서 실행되는 워크로드가 자체 작업 예약에서 SMT 토폴로지 검색 및 사용을 수행할 수 있습니다.

  • Windows Server 2016에서는 게스트 SMT가 기본적으로 구성되지 않습니다. Hyper-V 호스트 관리자는 명시적으로 사용하도록 설정해야 합니다.
  • Windows Server 2019부터 호스트에서 만든 새 VM은 기본적으로 호스트 SMT 토폴로지 상속됩니다. 예를 들어 코어당 두 개의 SMT 스레드가 있는 호스트에서 만드는 버전 9.0 VM에는 코어당 두 개의 SMT 스레드가 있습니다.

게스트 VM에서 SMT를 사용하도록 설정하려면 PowerShell을 사용해야 합니다. Hyper-V 관리자에는 사용자 인터페이스가 제공되지 않습니다. 게스트 VM에서 SMT를 사용하도록 설정하려면 다음을 수행합니다.

  1. Hyper-V 관리자 그룹의 구성원이거나 해당하는 계정을 사용하여 PowerShell 창을 엽니다.
  2. 실행 Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <n>, 여기서 <n> 게스트 VM이 보는 코어당 SMT 스레드 수입니다. <n> = 0HwThreadCountPerCore 코어 값당 호스트의 SMT 스레드 수와 일치하도록 값을 설정합니다.

참고

Windows Server 2019 이상에서는 호스트 SMT 스레드 수와 일치하는 대신 설정할 HwThreadCountPerCore = 0 수 있습니다.

다음 스크린샷은 VM에서 실행되는 게스트 운영 체제에서 가져온 시스템 정보를 보여줍니다. 두 개의 가상 프로세서와 SMT를 사용할 수 있습니다. 게스트 운영 체제가 동일한 코어에 속하는 두 개의 논리 프로세서를 검색합니다.

Screenshot that shows msinfo32 in a guest VM with SMT enabled.

Windows Server 2016 Hyper-V에서 하이퍼바이저 스케줄러 유형 구성

Windows Server 2016 Hyper-V는 기본적으로 클래식 하이퍼바이저 스케줄러 모델을 사용합니다. 필요에 따라 핵심 스케줄러를 사용하도록 하이퍼바이저를 구성할 수 있습니다. 핵심 스케줄러는 게스트 VP가 해당 물리적 SMT 쌍에서 실행되도록 제한하여 보안을 강화합니다. 이 구성은 게스트 VP에 대한 SMT 예약과 함께 VM의 사용을 지원합니다.

참고

Windows Server 2016 Hyper-V를 실행하는 모든 고객은 핵심 스케줄러를 선택하여 가상화 호스트가 잠재적으로 악의적인 게스트 VM으로부터 최적으로 보호되도록 하는 것이 좋습니다.

Windows Server 2019 Hyper-V는 기본적으로 핵심 스케줄러를 사용합니다.

Hyper-V 호스트가 최적의 보안 구성에 배포되도록 하기 위해 Windows Server 2019 Hyper-V는 이제 기본적으로 핵심 하이퍼바이저 스케줄러 모델을 사용합니다. 호스트 관리자는 필요에 따라 레거시 클래식 스케줄러를 사용하도록 호스트를 구성할 수 있습니다. 기본 설정을 재정의하기 전에 관리자는 각 스케줄러 유형이 가상화 호스트의 보안 및 성능에 미치는 영향을 주의 깊게 읽고 이해하고 고려해야 합니다. 자세한 내용은 Hyper-V 하이퍼바이저 스케줄러 유형 선택 정보를 참조 하세요.

Windows Server에서 하이퍼바이저 스케줄러 유형 선택

하이퍼바이저 스케줄러 구성은 BCD 항목에 hypervisorschedulertype 의해 제어됩니다.

스케줄러 유형을 선택하려면 다음을 수행합니다.

  1. 관리자 권한으로 명령 프롬프트를 엽니다.
  2. 다음 옵션 중 하나는 다음과 type 같습니다.bcdedit /set hypervisorschedulertype type
  • Classic
  • Core
  • Root

하이퍼바이저 스케줄러 유형을 변경하여 적용하려면 시스템을 다시 부팅해야 합니다.

참고

현재 Windows Server Hyper-V에서는 하이퍼바이저 루트 스케줄러가 지원되지 않습니다. Hyper-V 관리자는 서버 가상화 시나리오에 사용할 루트 스케줄러를 구성하려고 시도해서는 안 됩니다.

현재 스케줄러 유형 확인

이벤트 뷰어 시스템 로그를 검사하여 현재 사용 중인 하이퍼바이저 스케줄러 유형 Hyper-V를 확인할 수 있습니다. 하이퍼바이저 시작 시 구성된 하이퍼바이저 스케줄러 유형을 보고하는 가장 최근의 하이퍼바이저 시작 이벤트 ID 2를 볼 수 있습니다. Windows 이벤트 뷰어 또는 PowerShell에서 하이퍼바이저 시작 이벤트를 가져올 수 있습니다.

하이퍼바이저 시작 이벤트 ID 2는 하이퍼바이저 스케줄러 유형을 나타냅니다. 여기서는 다음과 같습니다.

  • 1 = 클래식 스케줄러, SMT 사용 안 함
  • 2 = 클래식 스케줄러
  • 3 = 코어 스케줄러
  • 4 = 루트 스케줄러

A screenshot of the hypervisor launch event ID 2 properties window. The user has selected the General tab, showing that the hypervisor scheduler type is 0x2.

A screenshot of the Event Viewer window. The user has selected Hyper-V Hypervisor launch event ID 2 from the list of events, highlighting it in dark blue.

PowerShell을 사용하여 Hyper-V 하이퍼바이저 스케줄러 유형 시작 이벤트 쿼리

PowerShell을 사용하여 하이퍼바이저 이벤트 ID 2를 쿼리하려면 PowerShell 프롬프트에서 다음 명령을 실행합니다.

Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1

A screenshot of a query for hypervisor launch event ID 2. The results say hypervisor scheduler type is 0x2.