Linux KVM에서 실행되는 Windows 7 VM이 모든 가상 프로세서를 사용하지 않는 이유는 무엇입니까?


12

모두

VM 중 하나를 Windows 2008 Server에서 Windows 7 (최종)로 마이그레이션 한 후 서버에서 문제가 발생했습니다. VM에 4 개의 코어를 할당했는데 VM을 보는 것 같지만 생각하는 것 같습니다. 두 개의 핵심이 있습니다!

프로세서를 인식하지만 사용하지 않습니다!

아무도 여기서 무슨 일이 일어나고 있는지 말해 줄 수 있습니까? 나는 그것이 KVM과 Windows 7 사이의 비 호환성 일 수 있다고 생각했지만 가상 프로세서를 보았 기 때문에 생각하지 않고 있습니다.

다음은 동일한 상자에 두 개의 코어 만 표시하는 프로세스 관리자의 스크린 샷입니다.

작업 관리자


두 개의 듀얼 코어 프로세서가 표시되지 않습니까?
피버스

@phoebus : 궁금한 점이 있지만 프로세서 모니터를 볼 때 4 개의 코어를보기 전에이 설정을 실행 한 모든 버전의 창에서 여기에 없습니다.
jkp

프로세서 모니터라고 할 때 작업 관리자의 성능 모니터링 섹션을 의미합니까? 스크린 샷만을 기반으로하기 때문에 2 개의 2 코어 프로세서에 대한 증거가 표시됩니다. 이 경우 성능 모니터에 4 개의 코어가 모두 표시됩니다. 그렇지 않다면, 뭔가 이상한 것입니다.
피버스

@phoebus : 예, 작업 관리자의 성능 모니터링 섹션을 의미합니다. 확실히 나에게
기발한

답변:


17

프로세서가 별도의 소켓에 단일 코어 프로세서로 표시되는 것 같습니다. Windows 7은 최대 2 개의 소켓 시스템을 지원하므로 2 개의 프로세서를 사용합니다.

프로세서를 단일 쿼드 코어 CPU 또는 2 개의 듀얼 코어 CPU로 표시하도록 KVM을 구성하여 문제를 해결해야하는지 모르겠습니다.


1
맞습니다. ATM에는 토폴로지를 변경할 수있는 방법이 없습니다.
Luca Tettamanti

1
와우, 나는 이것을 몰랐다. 문제를 올바르게 입력 해 주셔서 감사합니다. @Luca : 그러한 지원이 계획되어 있는지 알고 있습니까? 나는 실제로 여분의 두 코어를 사용하고 있습니까? 아니면 낭비됩니까?
jkp

2
@Luca : 실제로 qemu 0.12부터 토폴로지를 변경할 수 있습니다. 내 사용자 공간 KVM 구성 요소를 업그레이드했지만 나는 일에 .... 어쨌든,이 :) 수행 할 수 있습니다 그것을 위해 새로운 커널 모드 필요가 있다고 생각
jkp

아, 쿨 ... 나도 업그레이드해야 :)
Luca Tettamanti

현재 이전 커널에서 최신 kvm 커널 모듈을 실행할 수 있습니다. 바이너리를 가진 배포판의 저장소를 찾을 수 없다면 모듈을 직접 컴파일해야 할 것입니다. 그러나 모듈을 만드는 것은 그리 어렵지 않습니다.
3dinfluence

21

libvirt 0.8.3에서 다음을 입력하면 :

virsh capabilities | grep topology

호스트의 토폴로지를 나열합니다.

<topology sockets='1' cores='4' threads='1'/>

숫자는 소켓, 소켓 당 코어 및 코어 당 스레드를 나타냅니다. xml 파일의 cpu 항목에이 행을 추가하여 창에서 4 개의 코어를 모두 사용할 수 있도록합니다. 예 :

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>

그것을 알고 있었지만 잊어 버렸습니다. 다시 한 번 서버 오류가 있으며 모든 사람들 이이 멋진 것들을 작성합니다. 팁 고마워!
fen

1
내 RHEL 7.2 컴퓨터에서 시도했습니다. <topology sockets='1' cores='4' threads='1'/>내 XML에 추가되었습니다 . virsh capabilities | grep topology보여줍니다 <topology sockets='1' cores='6' threads='2'/>. 치명적 : kill -HUP nnnnnnnnnn은 내 libvirtd 프로세스의 PID입니다. VM을 시작했습니다. 효과가있었습니다. +1! 감사! ...하지만 HUP 신호 또는 재시작으로 libvirtd를 시작하는 것을 잊지 마십시오!
Mike S

4

Ubuntu 15.04 이후로 virt-manager에서 토폴로지 설정이 완벽하게 지원됩니다.

virt-manager에서> CPU> 토폴로지 :

  • 점검 : 수동으로 CPU 토폴로지 설정
  • 소켓 : 2
  • 코어 : 2
  • 스레드 : 2

virt-manager의 위 설정에서 다음이 생성됩니다. virsh edit로 이들을 입력 할 필요는 없습니다.

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

업데이트 후 토폴로지가 Windows에서 인식을 중지하고 다시 가상 CPU를 2 개의 소켓으로 제한합니다.

이 문제를 해결하려면 'virsh edit'를 사용하여 kvm 기능을 숨기고 hyperv 기능을 추가하십시오. 완전히 종료 한 후 다시 부팅하면 Windows VM이 여러 CPU를 다시 인식합니다.

Linux KVM에서 실행되는 Windows 7 VM이 모든 가상 프로세서를 사용하지 않는 이유는 무엇입니까?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

2

RHEL / CentOS 5.5 (kvm> = 83-164.el5)에서 kvm 바이너리는 "-smp N, cores = N"옵션도 지원합니다 (패키지에 백 포트 패치가 있음). 그러나 libvirt 버전은 도메인 XML에서 <topology> 요소를 지원하지 않습니다. 해결 방법은 / usr / libexec / kvm에 대한 래퍼 스크립트를 작성하여 적절한 옵션을 추가하고 기본 경로 대신 <emulator> 요소에 해당 스크립트를 지정하는 것입니다.


1

Ubuntu 10.4 (Lucid)에는 0.7.5 버전의 libvirt가 있으며 토폴로지대한 지원 은 버전 0.7.6의 libvirt에 추가되었습니다. Ubuntu 10.10 (Maverick)에는 0.8.3 libvirt가 있으므로 래퍼없이 XML의 토폴로지 사양을 직접 지원할 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.