2011-04-12 6 views
9

오라클의 가상 박스를 사용 중이고 가상 머신에 둘 이상의 가상 코어를 할당하는 경우 실제 코어는 어떻게 할당됩니까? 가상 머신에서 실제 코어를 모두 사용합니까, 아니면 코어를 에뮬레이트하는 것을 사용합니까?이 있으면 가상 코어를 두 개 이상 할당하면 어떻게됩니까?

+0

귀하의 질문은 흥미 롭습니다. 나는 AMD x86_64 프로세서에서 VBox 4.0.4를 사용하고 VM 인스턴스 (Linux Red Hat 64 비트)에 대해 두 개의 가상 코어를 활성화했지만 하나의 가상 코어 만 활성화되었다 "VirtualBox는 각 가상 시스템에 최대 32 개의 가상 CPU를 제공 할 수 있습니다 ". 나는이 질문을 따를 것이다. –

답변

10

질문과 거의 같습니다 : 운영 체제가 주어진 프로세스/스레드를 실행할 코어를 어떻게 결정합니까? 귀하의 컴퓨터는 항상 그러한 유형의 의사 결정을 내리고 있습니다. 사용 가능한 코어보다 많은 프로세스/스레드가 실행되고 있습니다. 이 특정 답변은 본질적으로 비슷하지만 게스트 시스템이 어떻게 구성되고 하드웨어를 지원하여 가상화 프로세스를 가속화 할 수 있는지에 따라 달라집니다. 따라서이 답변은 확실하지 않으며 호스트가 코드를 예약하는 방법을 실제로 다루지는 않습니다 두 가지 비교적 단순한 경우를 검토 할 수 있습니다.

첫 번째 가상 컴퓨터는 완전히 가상화 된 컴퓨터입니다.이 컴퓨터는 가속 기능을 사용하지 않거나 최소한으로 설정할 수 있습니다. 많은 CPU 명령어가 단순히 통과되어 CPU에서 직접 실행 되더라도 게스트에 제공된 하드웨어는 완전히 가상화됩니다. 이와 같은 경우 게스트 VM은 호스트에서 실행되는 프로세스와 비슷하게 작동합니다. CPU 리소스는 운영 체제 (예 : 호스트)에서 예약되고 프로세스/스레드를 실행할 수 있습니다 그들이 허용되는 코어에 상관없이. 기본값은 일반적으로 사용 가능한 모든 코어이지만 L1/L2 캐시가 더 효율적으로 컨텍스트 스위치를 최소화 할 수 있도록 동일한 코어에 프로세스를 유지하기 위해 일부 최적화가 제공 될 수도 있지만 일반적으로 사용 가능한 코어입니다. 일반적으로 이러한 경우 게스트 운영 체제에 할당되는 CPU는 하나 뿐이며 이는 호스트에서 실행되는 단일 프로세스로 변환됩니다.

약간 더 복잡한 시나리오에서 가상 컴퓨터는 사용 가능한 모든 CPU 가상화 가속 옵션으로 구성됩니다. 인텔에서는 이것을 말하기 위해 VT-x라고하며 AMD-V는 AMD-V입니다. 이들은 주로 호스트와 게스트를 보호하기 위해 일부 바이너리 변환/트래핑이 필요한 권한있는 명령어를 주로 지원합니다. 따라서 호스트 운영 체제는 약간의 가시성을 잃습니다. 하드웨어 가속화 된 MMU 지원 (가상화 소프트웨어에 의해 음영 처리되지 않고 메모리 페이지 테이블에 직접 액세스 할 수 있음)을 포함 시키십시오. 가시성이 조금 떨어집니다. 궁극적으로 여전히 첫 번째 예제로 작동하지만 호스트에서 실행되는 프로세스이므로 그에 따라 예약됩니다. 각 가상 CPU에 대해 명령어를 실행하도록 할당 된 스레드를 생각할 수 있습니다.

적절한 하드웨어 지원을 통해 사용 가능한 가상 코어보다 많은 가상 코어를 할당 할 수는 있지만 좋은 생각은 아닙니다. 일반적으로 게스트가 잠재적으로 CPU를 처리하고 CPU가 완전히 과세되지 않은 경우에도 요청중인 리소스를 올바르게 예약 할 수 없으므로 성능이 저하됩니다. 나는이 스레드를 실행할 수있는 유휴 CPU 코어보다 훨씬 많은 스레드 (실제로는 사용 중입니다)를 생성하는 멀티 스레드 프로그램과 특정 유사점을 공유하는 시나리오로 만듭니다. 작업을 수행하는 데 필요한 스레드 수가 더 적 으면 성능이 저하됩니다.

극단적 인 경우 VirtualBox는 hot-plugging CPU 리소스도 지원합니다. Windows 2008 데이터 센터 에디션 및 특정 Linux 커널은 일부 운영 체제에서만 제대로 지원하지만 리소스도 지원합니다. 동일한 규칙은 일반적으로 하나의 게스트 CPU 코어가 호스트의 논리 코어에서 프로세스/스레드로 처리되는 경우에 적용되지만 가상 코어에 사용할 논리 코어를 결정하는 것은 호스트 및 하드웨어 자체에 달려 있습니다.

VirtualBox 이 실제로에 할당 된 방법에 대한 질문 ... 글쎄, 확실하게 대답 할 수는 없지만 코드를 파헤 치지는 못했지만 내 경험으로는 일반적으로 설명 된대로 동작합니다.정말 궁금하다면 VirtualBox VBoxSvc.exe 및 작업 관리자의 관련 프로세스에 태그를 지정하고 "선호도 설정"옵션을 선택하고 실행을 단일 CPU로 제한하고 해당 설정이 적용되는지 확인하십시오. 게스트가 게스트의 일부로 실제로 실행되지 않기 때문에 호스트에서 이러한 설정을 사용할 수있는 경우 사용 가능한 HW 지원 수준에 따라 달라질 수 있습니다.

관련 문제