다음을 통해 공유


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

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

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

Background

Hyper-V 가상 프로세서 예약의 논리 및 컨트롤을 고려하기 전에 SMT(동시 다중 스레딩)와 같은 특정 개념과 Hyper-V 프로세서를 가상화하는 방법을 이해하는 것이 중요합니다.

SMT 이해하기

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

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

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

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

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

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

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

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

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

  • 루트 파티션의 가상 프로세서와 기본 논리 프로세서 간에 일대일 매핑이 존재합니다. 호스트 가상 프로세서는 항상 동일한 기본 논리 프로세서에서 실행됩니다. 루트 파티션 가상 프로세서의 마이그레이션은 없습니다.

  • 기본적으로 루트 파티션 가상 프로세서를 호스트하는 논리 프로세서는 게스트 가상 프로세서를 실행할 수도 있습니다.

  • 하이퍼바이저는 사용 가능한 논리 프로세서에서 실행되도록 게스트 가상 프로세서를 예약할 수 있습니다. 하이퍼바이저 스케줄러는 게스트 가상 프로세서를 예약할 때 임시 캐시 지역성, NUMA(비유형 메모리 액세스) 토폴로지 및 기타 여러 요소를 고려하려고 합니다. 그러나 궁극적으로 모든 호스트 논리 프로세서에서 가상 프로세서를 예약할 수 있습니다.

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

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

클래식 스케줄러

클래식 스케줄러는 Windows Server 2019 이전 버전의 모든 Hyper-V 사용되는 기본 스케줄러입니다. 고전적인 스케줄러는 게스트 가상 프로세서에 대한 공정 공유, 선점형, 라운드 로빈 방식의 스케줄링 모델을 제공합니다.

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

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

핵심 스케줄러

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

핵심 스케줄러:

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

이 작업은 대칭적으로 발생합니다. 논리 프로세서가 두 그룹으로 구성된 경우 가상 프로세서는 두 그룹으로 예약되며 코어는 VM 간에 공유되지 않습니다. SMT를 사용하지 않고 VM에 대한 가상 프로세서를 예약하면 해당 가상 프로세서가 실행될 때 전체 코어를 사용합니다. 핵심 스케줄러를 사용하는 경우:

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

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

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

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

루트 스케줄러

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

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

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

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

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

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

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

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

하이퍼바이저 루트 스케줄러를 사용하도록 설정할 때 개별 VM 프로세서에서 사용하는 Hyper-V 하이퍼바이저의 리소스 제어는 지원되지 않습니다. 루트 OS에서 스케줄러 논리는 전역적으로 호스트 리소스를 관리하고 개별 VM의 게스트 리소스를 관리하지 않습니다. 대문자, 가중치 및 예약과 같은 VM별 Hyper-V 프로세서 리소스 제어는 하이퍼바이저가 클래식 및 코어 스케줄러 유형과 같은 가상 프로세서 예약을 직접 제어하는 경우에만 적용됩니다.

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

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

게스트 VM에서 SMT 사용

핵심 스케줄러 유형을 사용하도록 가상화 호스트의 하이퍼바이저를 구성한 후에는 SMT를 사용하도록 게스트 VM을 구성할 수도 있습니다. 특히 게스트 VM에 노출할 가상 SMT 스레드 수를 지정할 수 있습니다. 게스트 OS 스케줄러와 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 <VM-name> -HwThreadCountPerCore <n>, 여기서 <n> 게스트 VM이 보는 코어당 SMT 스레드 수입니다. 0의 값으로 <n>을 사용하는 경우, HwThreadCountPerCore 값은 코어당 호스트의 SMT 스레드 수로 설정됩니다.

    Note

    Windows Server 2016에서는 HwThreadCountPerCore0로 설정하는 것을 지원하지 않습니다.

다음 스크린샷은 VM에서 실행되는 게스트 OS에서 가져온 시스템 정보를 보여줍니다. 두 개의 가상 프로세서가 있으며 SMT가 사용하도록 설정됩니다. 게스트 OS는 동일한 코어에 속하는 두 개의 논리 프로세서를 검색합니다.

시스템 정보 창의 스크린샷. 프로세서 줄이 선택되어 있습니다. 코어 1개와 프로세서 2개에 대한 정보가 나열됩니다.

하이퍼바이저 스케줄러 유형 구성

Hyper-V 기본적으로 사용하는 하이퍼바이저 스케줄러의 유형은 OS 버전에 따라 달라집니다. OS의 기본 스케줄러에 관계없이 핵심 스케줄러를 사용하도록 하이퍼바이저를 구성할 수 있습니다. 핵심 스케줄러는 게스트 가상 프로세서가 해당 물리적 SMT 쌍에서 실행되도록 제한하여 보안을 강화합니다. 이 구성은 게스트 가상 프로세서에 대한 SMT 예약과 함께 VM의 사용을 지원합니다.

Note

Windows Server 2016에서 Hyper-V 기본적으로 클래식 스케줄러를 사용합니다. Windows Server 2016 이상에서 Hyper-V 사용하는 경우 핵심 스케줄러를 선택하는 것이 좋습니다. 이 스위치를 사용하면 가상화 호스트가 잠재적으로 악의적인 게스트 VM으로부터 최적으로 보호됩니다.

보안 및 성능에 미치는 영향 고려

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

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

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

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

  1. 관리자 권한으로 명령 프롬프트를 엽니다.

  2. bcdedit /set hypervisorschedulertype <type>을(를) 입력합니다. 여기서 <type>는 다음 옵션 중 하나입니다.

    • Classic
    • Core
    • Root

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

Note

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

현재 스케줄러 유형 확인

Windows 시스템 로그를 검사하여 Hyper-V 현재 사용 중인 하이퍼바이저 스케줄러 유형을 확인할 수 있습니다. ID가 2인 가장 최근의 하이퍼바이저 시작 이벤트를 찾습니다. 이 이벤트는 하이퍼바이저 시작 시 구성된 하이퍼바이저 스케줄러 유형을 보고합니다. 하이퍼바이저 스케줄러 유형에 대해 다음 값을 사용할 수 있습니다.

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

이벤트 뷰어 또는 PowerShell을 사용하여 하이퍼바이저 시작 이벤트 로그를 볼 수 있습니다.

ID가 2인 Hyper-V-Hypervisor 이벤트에 대한 이벤트 뷰어 속성 창의 스크린샷 일반 탭의 텍스트는 스케줄러 유형의 0x2 나타냅니다.

이벤트 뷰어의 이벤트 스크린샷 ID가 2인 Hyper-V-하이퍼바이저 시작 이벤트가 선택됩니다. 아래쪽 창에는 이벤트 세부 정보가 표시됩니다.

PowerShell을 사용하여 하이퍼바이저 시작 이벤트에 대한 시스템 로그 쿼리

PowerShell을 사용하여 ID가 2인 하이퍼바이저 이벤트에 대한 시스템 로그를 쿼리하려면 다음 명령을 실행합니다.

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

PowerShell 창의 스크린샷. 명령은 ID가 2인 최신 하이퍼바이저 시작 이벤트를 쿼리합니다. 출력은 스케줄러 형식을 0x2 표시합니다.