Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.11. CPU 모델 및 토폴로지

이 섹션에서는 CPU 모델의 요구 사항을 다룹니다. 모든 하이퍼바이저에는 기본적으로 CPU 기능 게스트가 표시되는 자체 정책이 있습니다. QEMU/KVM에서 게스트에 제공하는 CPU 기능 세트는 게스트 가상 머신 구성에서 선택한 CPU 모델에 따라 다릅니다. qemu32qemu64 는 기본 CPU 모델이지만 다른 모델(추가 기능 포함)을 사용할 수 있습니다. 각 모델 및 해당 토폴로지는 도메인 XML의 다음 요소를 사용하여 지정됩니다.

그림 20.13. CPU 모델 및 토폴로지 예 1

<cpu match='exact'>
    <model fallback='allow'>core2duo</model>
    <vendor>Intel</vendor>
    <topology sockets='1' cores='2' threads='1'/>
    <feature policy='disable' name='lahf_lm'/>
  </cpu>

그림 20.14. CPU 모델 및 토폴로지 예 2

<cpu mode='host-model'>
   <model fallback='forbid'/>
   <topology sockets='1' cores='2' threads='1'/>
</cpu>

그림 20.15. CPU 모델 및 토폴로지 예 3

<cpu mode='host-passthrough'/>
CPU 모델이나 해당 기능에 제한이 없는 경우 다음과 같은 간단한 cpu 요소가 사용될 수 있습니다.

그림 20.16. CPU 모델 및 토폴로지 예 4

<cpu>
   <topology sockets='1' cores='2' threads='1'/>
</cpu>
도메인 XML의 이 섹션의 구성 요소는 다음과 같습니다.

표 20.9. CPU 모델 및 토폴로지 요소

element설명
<cpu>이 요소에는 vCPU 기능 세트에 대한 모든 매개변수가 포함되어 있습니다.
<match><cpu> 요소에 표시된 기능이 사용 가능한 vCPU와 얼마나 밀접하게 일치해야 하는지 지정합니다. <topology><cpu> 요소에 중첩된 유일한 요소인 경우 match 특성을 생략할 수 있습니다. match 속성에 사용 가능한 값은 다음과 같습니다.
  • Minimum - 나열된 기능은 최소 요구사항입니다. vCPU에 더 많은 기능을 사용할 수 있는 기능이 더 있을 수 있지만 이는 허용되는 최소 기능입니다. 최소 요구 사항이 충족되지 않으면 이 값이 실패합니다.
  • 정확한 - 게스트 가상 머신에 제공되는 가상 CPU는 지정된 기능과 정확히 일치해야 합니다. 일치하는 항목이 없으면 오류가 발생합니다.
  • Strict - 호스트 물리적 머신 CPU가 사양과 정확히 일치하지 않는 한 게스트 가상 머신이 생성되지 않습니다.
<cpu> 요소에서 match 속성이 생략되면 기본 설정 match='exact' 가 사용됩니다.
<mode>이 선택적 특성은 게스트 가상 머신 CPU를 호스트 물리적 머신 CPU에 최대한 가깝게 구성하는 데 더 쉽게 사용할 수 있습니다. mode 특성에 가능한 값은 다음과 같습니다.
  • Custom - CPU가 게스트 가상 머신에 제공되는 방법을 설명합니다. mode 속성이 지정되지 않은 경우 기본 설정입니다. 이 모드를 사용하면 게스트 가상 머신이 부팅되는 호스트 물리적 시스템과 관계없이 영구 게스트 가상 머신이 동일한 하드웨어를 볼 수 있습니다.
  • 호스트 모델 - 기본적으로 호스트 물리적 머신 CPU 정의를 기능 XML에서 도메인 XML로 복사하는 바로 가기입니다. 도메인을 시작하기 직전에 CPU 정의가 복사되므로 서로 다른 호스트 물리적 시스템에서 동일한 XML을 사용할 수 있으며 각 호스트 물리적 시스템이 지원하는 게스트 가상 머신 CPU를 계속 제공할 수 있습니다. match 속성과 모든 기능 요소를 이 모드에서 사용할 수 없습니다. 자세한 내용은 libvirt 도메인 XML CPU 모델을참조하십시오.
  • 이 모드에서 호스트 전달을 통해 게스트 가상 머신에 표시되는 CPU는 libvirt 내에 오류를 유발하는 요소를 포함하여 호스트 물리적 시스템 CPU와 정확히 동일합니다. 이 모드의 단점은 게스트 가상 머신 환경을 다른 하드웨어에서 재현할 수 없으므로 이 모드를 신중하게 사용하는 것이 좋습니다. 이 모드에서는 모델 이나 기능 요소가 허용되지 않습니다.
  • host-modelhost-passthrough 모드에서는 virDomainGetXMLDesc API를 호출할 때 VIR_DOMAIN_XML_UPDATE_CPU 플래그를 지정하여 현재 호스트 물리적 시스템에서 사용되는 실제(호스트-passthrough 모드에서 적용) CPU 정의를 결정할 수 있습니다. 다른 하드웨어에서 사용할 수 있는 게스트 가상 머신을 실행할 때 다른 하드웨어가 표시되고 다른 기능이 있는 호스트 물리적 시스템 간에 마이그레이션될 예정인 게스트 가상 머신을 실행하는 경우 이 출력을 사용하여 보다 강력한 마이그레이션을 위해 사용자 지정 모드로 XML을 다시 작성할 수 있습니다.
<model>게스트 가상 머신에서 요청한 CPU 모델을 지정합니다. 사용 가능한 CPU 모델 및 해당 정의 목록은 libvirt의 data 디렉터리에 설치된 cpu_map.xml 파일에서 확인할 수 있습니다. 하이퍼바이저가 정확한 CPU 모델을 사용할 수 없는 경우 libvirt는 CPU 기능 목록을 유지하면서 하이퍼바이저에서 지원하는 가장 가까운 모델로 자동 대체됩니다. 선택적 fallback 속성은 이 동작을 금지하는 데 사용할 수 있으며, 이 경우 지원되지 않는 CPU 모델을 요청하는 도메인을 시작하려고 하면 실패합니다. fallback 속성에 지원되는 값은 allow (기본값) 및 forbid 입니다. 선택적 vendor_id 특성은 게스트 가상 머신에 표시된 벤더 ID를 설정하는 데 사용할 수 있습니다. 정확히 12자 길이여야 합니다. 설정되지 않은 경우 호스트 물리적 시스템의 벤더 ID가 사용됩니다. 일반적인 가능한 값은 AuthenticAMDGenuineIntel 입니다.
<vendor>게스트 가상 머신에서 요청한 CPU 벤더를 지정합니다. 이 요소가 누락된 경우 게스트 가상 머신은 벤더에 관계없이 지정된 기능과 일치하는 CPU에서 실행됩니다. 지원되는 공급 업체 목록은 cpu_map.xml 에서 확인할 수 있습니다.
<토폴로지>게스트 가상 머신에 제공된 가상 CPU의 요청된 토폴로지를 지정합니다. 소켓, 코어, 스레드 수, 소켓당 코어 수, 코어당 코어 수, 코어당 3개의 스레드 수를 각각 지정해야 합니다.
<기능>선택한 CPU 모델에서 제공하는 기능을 미세 조정하는 데 사용되는 0개 이상의 요소를 포함할 수 있습니다. 알려진 기능 이름 목록은 CPU 모델과 동일한 파일에서 확인할 수 있습니다. 각 feature 요소의 의미는 다음 값 중 하나로 설정해야 하는 policy 특성에 따라 달라집니다.
  • force - 호스트 물리적 시스템 CPU에서 실제로 지원되는지 여부에 관계없이 가상이 계속 지원됩니다.
  • require - 호스트 물리적 머신 CPU에서 기능을 지원하지 않는 한 게스트 가상 머신 생성이 실패합니다. 기본 설정입니다.
  • 선택 사항 - 이 기능은 가상 CPU에서 지원되지만 호스트 물리적 머신 CPU에서 지원되는 경우에만 해당합니다.
  • 비활성화 - 가상 CPU에서 지원되지 않습니다.
  • forbid - 호스트 물리적 머신 CPU에서 기능을 지원하는 경우 게스트 가상 머신 생성이 실패합니다.

20.11.1. 게스트 가상 머신 NUMA 토폴로지

<numa> 요소와 도메인 XML에서 다음을 사용하여 게스트 가상 머신 NUMA 토폴로지를 지정할 수 있습니다.

그림 20.17. 게스트 가상 머신 NUMA 토폴로지


  <cpu>
    <numa>
      <cell cpus='0-3' memory='512000'/>
      <cell cpus='4-7' memory='512000'/>
    </numa>
  </cpu>
  ...
각 셀 요소는 NUMA 셀 또는 NUMA 노드를 지정합니다. CPU 는 노드에 포함된 CPU의 CPU 또는 범위를 지정합니다. memory 는 노드 메모리를 kibibytes(24바이트의 블록)로 지정합니다. 각 셀 또는 노드에는 0부터 시작하는 순서에 따라 cellid 또는 nodeid 가 할당됩니다.