편집 : 2013 년 10 월 1 일 업데이트-원래 답변 중 일부가 더 이상 사용되지 않습니다.
이 사이트에서 여전히 활동 중인지 또는이 사이트를 볼 수 있는지 잘 모르겠지만 오늘이 질문을 읽고 나를 매료시키고 하루 종일 보냈다는 것을 알고 싶습니다. Hyper-V 및 Windows 내부를 조사하고 가상화 개념 자체를 파고 들어 귀하의 질문에 대답 할 수 있기를 바랍니다.
Hyper-V의 관점에서 가상화 플랫폼으로오고 있다고 말하면서 이것이 가장 경험이 많기 때문에 서문을 시작하겠습니다. 비록 우리가 알고 있듯이, 가상화와 관련하여 특정한 가상화 원칙이있을 수 있지만 Microsoft와 VMware 및 Xen은 하이퍼 바이저를 설계하는 방법에 대해 서로 다른 전략을 가지고 있습니다.
그것이 당신의 질문에 도전하는 첫 번째 일입니다. 당신은 질문이 마치 하이퍼 바이저에 구애받지 않는 것처럼, 실제로는 그렇지 않을 때 질문합니다. 예를 들어 Amazon EC2는 Xen 하이퍼 바이저 및 해당 하이퍼 바이저에서 top
실행되는 Linux VM 내에서 실행 된 명령 의 출력에 표시되는 "CPU Steal Time"지표를 사용합니다 . 해당 게스트 OS에 설치된 통합 서비스의 결과입니다 특정 하이퍼 바이저가 제공 한 데이터와 함께 (또는 게스트의 가상화 인식 도구).
먼저 귀하의 질문에 바로 대답하겠습니다. 특정 가상 도구 /가 아니면 하이퍼 바이저가 실행되는 물리적 시스템에 속한 프로세서가 다른 작업을 수행하는 데 얼마나 많은 시간을 Windows를 실행하는 가상 시스템 내부에서 볼 수있는 방법이 없습니다 특정 하이퍼 바이저에 대한 서비스 또는 가상화 인식 도구가 게스트 VM에 설치 되고게스트가 실행중인 특정 하이퍼 바이저는 해당 데이터를 게스트에 노출합니다. Hyper-V 하이퍼 바이저에서 실행되는 Windows 게스트조차도 하이퍼 바이저의 물리적 프로세서가 다른 작업을 수행하는 데 소요 된 시간과 관련된 정보에 즉시 액세스 할 수 없습니다. (보레 타크 7을 인용하자면, "제 4의 벽을 무너 뜨립니다.") 올바른 통합 서비스 / 도구가 설치된 Hyper-V에서 가상화 게스트로 실행되는 Windows 클라이언트 및 서버 운영 체제가 "현상"(문자 그대로 커널)을 사용합니다 물리적 호스트의 리소스를 사용하는 데있어 성능을 크게 향상시키는 VM을 위해 특별히 작성된 코드 변경) 결론은 하이퍼 바이저에없는 것입니다.게스트 OS에 원하는 것보다 더 많은 정보를 제공합니다. 즉, 하이퍼 바이저는하지 않습니다 이 는 그 VM ... 그것을 원하는 않는 한에 서비스 외에하고있는 다른 어떤 게스트 VM에게. 그리고 "CPU Steal Time : vCPU가 물리적 CPU를 기다리는 시간의 백분율"과 같이 VM의 관점에서 메트릭을 도출하려면 물리적 프로세서가 수행하는 다른 작업에 대한 정보가 필요합니다.
게스트 OS가 실제로 가상화되었다는 것을 인식하지 못한다면 어떻게 게스트 OS를 알 수 있습니까?
즉, 게스트에 올바른 통합 도구가 설치되어 있지 않으면 게스트 OS는 해당 CPU가 실제로 v CPU 라는 것을 알지 못합니다 . CPU 사이클을 "스틸 링"하는 것 외에 다른 힘이 있다는 사실조차 알지 못하므로 게스트 VM에는 메트릭이 존재하지 않습니다.
VMware는이 데이터를 ESXi 5.0뿐만 아니라 Windows 게스트에도 공개하기 시작했습니다. 게스트에서 VMware 통합 도구도 업데이트해야합니다. 여기 참조가 있습니다 ; "CPU 도난 시간"이라고합니다.
Hyper-V와 같은 하이퍼 바이저는 게스트에게 물리적 프로세서 또는 프로세서 코어와 같은 물리적 리소스에 대한 직접 액세스를 제공하지 않습니다. 대신 하이퍼 바이저는 vCPU와 같은 가상 장치 인 vDev를 제공합니다.
이유의 주요 예 : 가상 머신 게스트 OS가 물리적 CPU의 물리적 구성 요소 인 TLB (번역 룩앤 사이드 버퍼)를 플러시하도록 호출한다고 가정하십시오. 게스트 OS가 물리적 프로세서 에서 전체 TLB 를 지우도록 허용 된 경우 동일한 물리적 TLB를 공유하는 다른 모든 VM에 부정적인 영향을 미칩니다. Windows의 경우 게스트 OS의 해당 호출은 하이퍼 바이저에 의해 해석되는 "하이퍼 콜"또는 "현상 화 된"호출로 변환되므로 해당 가상 머신과 관련된 TLB 섹션 만 플러시됩니다.
(흥미롭게도 적절한 통합 도구 및 / 또는 서비스가없는 게스트 VM은 동일한 호스트에서 다른 모든 VM의 성능에 영향을 줄 수 있지만이 주제의 범위를 완전히 벗어난 것입니다. .)
모든 것을 당신이 말을 할 수 여전히 Hyper-V 호스트에서 가상 프로세서가 실제 프로세서가 실행되도록 예약 할 수 있음을 사용할 수 있도록되기 위해 기다리고 보낸 시간을 감지합니다. 그러나 Windows Hyper-V 하이퍼 바이저에서만 해당 데이터를 볼 수 있습니다. 다른 하이퍼 바이저에서이 정보를 볼 수 있다면 다른 사람들에게 해당 하이퍼 바이저에서이 정보를 보는 방법과 게스트에게 노출되는 방법을 알려주십시오. (2013 년 10 월 1 일 편집 그렇게하는 것에 대해 evilensky에게 감사합니다!)
필자의 테스트 컴퓨터는 Core 및 Hyper-V 역할 만 실행하는 Server 2012 무료 버전 인 Hyper-V Server 2012였습니다. Hyper-V를 실행하는 모든 Windows Server 2012와 사실상 동일합니다.
부모 파티션, 즉 물리적 호스트에서 Perfmon을 실행하십시오. 이 카운터를로드하십시오.
Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*
_Total뿐만 아니라 해당 하이퍼 바이저의 각 가상 머신에 대한 해당 카운터의 인스턴스가 있음을 알 수 있습니다. 해당 Perfmon 카운터의 Microsoft 정의는 다음과 같습니다.
가상 프로세서가 논리 프로세서로 디스패치되기까지 소요 된 평균 시간 (나노초)입니다.
분명히, 당신은 그 숫자가 가능한 한 낮아지기를 원합니다. 컴퓨터의 경우 대기는 거의 좋은 일이 아닙니다.
당신이 조사 할 것이라는 하이퍼 바이저의 다른 성능 카운터는 Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time
, % Hypervisor Run Time
하고 % Total Run Time
. 이 카운터는 "실제"프로세서 가 VM 또는 모든 VM을 서비스 하는 것 이외의 작업을 수행하는 데 걸리는 시간과 같은 사실을 결정하는 데 사용할 수있는 백분율을 제공합니다 .
결론적으로, 게스트 가상 머신에서 찾고있는 메트릭은 실행중인 하이퍼 바이저, 해당 하이퍼 바이저가 해당 VM을 서비스하는 것 이외의 시간을 소비하는 방법에 대한 데이터를 제공하도록 선택했는지 여부 및 게스트의 경우에 따라 다릅니다. OS에는 하이퍼 바이저가 해당 데이터를 사용할 수 있음을 알기에 충분한 가상화 통합 도구 / 서비스 / 드라이버가 있습니다.
Windows 게스트, 통합 도구 설치 여부에 관계없이 VM 호스트가 전체 물리적 프로세서 시간에 대해 VM 서비스를 제공했거나 서비스하지 않은 시간 (초 또는 백분율)을 확인하는 방법은 없습니다. (2013 년 10 월 1 일 수정 : ESXi 5.0 이상은 통합 도구를 통해이 데이터를 게스트 VM에 노출합니다. Hyper-V에는 아직 아무것도 없습니다.)