실제로 가상화의 오버 헤드는 무엇이며 언제 걱정해야합니까?


16

기계를 가상화하지 않을 때 이해할 수있는 좋은 규칙을 찾고 있습니다.

예를 들어, 거의 100 %의 사용률을 가진 완전한 CPU 바운드 프로세스는 가상화하는 것이 좋지 않을 수도 있지만, 대부분의 시간 동안 CPU를 "실질적인 양"으로 활용하는 무언가를 실행하는 데 의미가 있습니다 (예 : 40). 또는 50 %)?

또 다른 예 : 1000 대의 시스템을 가상화하면 약간 또는 적당히 활용하더라도 4 개의 코어 만있는 호스트에서 모두 실행하는 것이 좋지 않을 수 있습니다.

호스트 리소스와 비교할 때 머신 워크로드 또는 수많은 게스트 머신을 기반으로 가상화에 대한 힌트를 요약 할 수 있습니까?

나는 일반적으로 VirtualBox 또는 VMWare를 사용하여 Windows 호스트에서 가상화하지만 이것이 꽤 일반적인 질문이라고 가정합니다.


1
일부 CPU 바운드 작업의 경우에도 가상화에 대한 요점이 있습니다. 예를 들어 VM 이미지를 사용하면 간단한 배치 스케줄러를 사용하여 가능한 것보다 작업이 실행되는 환경을 훨씬 잘 제어 할 수 있으므로 클러스터에 작업을 제출할 수 있습니다.
Flexo

그러나 어느 시점에서 "VM 실행"예약은 단일 VM 내에서 스레드를 예약하기에 이미 어려운 경우 불필요한 오버 헤드처럼 보입니다. 맞습니까?
kvista

답변:


13

디스크 서브 시스템. 일반적으로 공유 가능한 리소스가 가장 적습니다. 물론 기억이지만, 그 기억은 분명합니다.

디스크 서브 시스템 제한 사항은 두 가지 방식으로 작동합니다. 시스템이 많은 디스크 I / O를 사용하는 경우 다른 게스트가 느려집니다. 이 게스트가 프로덕션 환경에 있으면 웹 쿼리에 신속하게 응답해야합니다. 이는 매우 실망스럽고 가상 하드웨어를 임대하지 않는 큰 이유이기도합니다. 전용 디스크를 사용하여이 문제를 최소화 할 수 있습니다.

게스트에서 512MB 메모리 만 사용하면 모든 디스크 캐시가 호스트에 저장됩니다. 그리고 그것은 게스트들에게 똑같이 나누어지지 않았습니다.

CPU IO에 대해 걱정하지 마십시오. 이런 식으로 가상화는 매우 효율적이며 종종 동일한 시스템에서 실행되는 여러 프로세스와 관련이 있습니다. CPU에서 100 %가 실행되는 멀티 제온 시스템은 거의 없습니다.

편집 : 오타


3
무거운 디스크 I / O 요구 사항이 없습니다 가상화 # 1 이유가 될 것입니다 - 그것은 자원이 가상화 처벌에 의해 어려운 타격을 참조 codinghorror.com/blog/2006/10/...을
제프 앳 우드

감사합니다. 두 의견 모두 도움이됩니다. 높은 디스크 사용이 가상화에 문제가되는 이유를 아는 사람이 있는지 궁금하십니까? 가상화 엔지니어는 왜 상대적으로 기본적인 문제를 무시합니까? 아니면 CPU 가상화보다 근본적으로 더 복잡합니까?
kvista

참고-@Jeff, 2006 블로그 게시물을 읽고 있는데 왜 이것이 더 나은지 설명 할 것이라고 가정합니다 (예 : 스핀들 예약). 가상화 디자이너 / 구현 자에 대한 내 질문은 동일하게 유지됩니다. CPU 가상화가 아닌 방식?
kvista

3
하드 디스크가 할 수있는 많은 시도가 있습니다. 5ms 하드 디스크의 경우 이것은 초당 200 회입니다. 그리고 일반적으로 OS가 파일을 복사하거나 디렉토리를 스캔 할 때 항상 디스크 io의 100 %를 사용합니다. 이 시간 동안 디스크의 모든 작은 요청이 지연되며 많은 요청이 있습니다. 또한 복사로 인해 파일 시스템 버퍼가 낭비됩니다. 작동하는 OS라는 개념이 유휴 하드 드라이브에 의존한다고 말할 수 있습니다.
Antti Rytsölä

1
감사. SSD 가이 방정식을 전혀 바꾸지 않는지 보는 것이 흥미로울 것 같습니다. 그러나 지금 우리는 너무 토론 모드에 들어가고 있습니다. 알겠습니다. 감사합니다.
kvista

15

VM에 절대 넣지 않을 것들 :

  • 가상화 할 수없는 특정 하드웨어를 사용하는 것 : 일반적으로 그래픽, 상당히 많은 하드웨어 보안 모듈, 맞춤형 드라이버가있는 것 (예 : 특수 목적 네트워크 드라이버).

  • 라이센스 문제가있는 시스템 VM에 할당 한 수량에 관계없이 실제 CPU 또는 코어 당 일부 소프트웨어 요금이 부과됩니다. 32 코어 서버의 VM에서 실행되는 단일 코어에 대한 소프트웨어 라이센스가 있으면 감사를받을 수 있습니다.

VM에 넣지 말아야 할 것들 :

  • 상용 하드웨어의 모든 리소스를 이미 사용하려고하는 소프트웨어입니다. hadoop과 같은 "빅 데이터"노력의 일환으로 작동하는 기계는 일반적으로 베어 메탈에서 실행되도록 설계되었습니다.

  • 자원을 활용하기 위해 미세 조정될 것. 실제로 데이터베이스 튜닝을 시작하면 리소스에 대해 경합하는 VM이 ​​실제로 작업에 렌치를 던질 것입니다.

  • 이미 큰 병목 현상이있는 모든 것. 이미 잘 재생되지 않으며 다른 사람들과 잘 어울리지 않을 것입니다.

VM에 넣는 데 매우 멋진 몇 가지 사항이 있습니다.

  • 많은 시간을 유휴 상태로 보내는 모든 것. 메일 및 DNS와 같은 유틸리티 호스트는 전용 서버를 보증하기 위해 최신 하드웨어에서 충분한로드를 생성하는 데 어려움을 겪습니다.

  • 자체적으로 잘 확장되지 않는 응용 프로그램. 레거시 코드는이 범주에 속합니다. 앱이 서버를 차지하도록 확장되지 않으면 작은 가상 서버를 많이 사용하십시오.

  • 소규모로 시작하지만 성장하는 프로젝트 / 응용 프로그램. 베어 메탈에서 시작하는 대신 VM에 리소스를 추가하고 새롭고 더 큰 하드웨어로 이동하는 것이 훨씬 쉽습니다.

또한 단일 호스트에 많은 수의 VM을 배치하는 것에 대해 과장하는지 확실하지 않지만 큰 VM : HW 비율을 시도하는 경우 ESX, Xen, KVM을 대신 고려할 수 있습니다. Windows에서 VMware 또는 virtualbox를 사용하는 것보다 훨씬 유리합니다.


1
매우 유용한 조직 의견 +1-감사합니다!
kvista

ESX 등을 사용하더라도 X 코어를 Y 코어 호스트에 배치하는 것은 의미가 없다고 가정합니다. 좋은 경험 법칙은 무엇입니까? 어딘가에서 가상화 백서 가이 문제를 해결해야한다고 가정하지만 슬프게도 쉽게 찾을 수는 없습니다.
kvista

1
VMware의 경우 여기에서 시작할 수 있습니다. vmware.com/technology/whyvmware/calculator
Cakemox

참고로 : 위의 VMWare 링크마다 CPU 당 최대 30 개의 VM을 구성 할 수 있습니다. 기본값은 CPU 당 6 개의 VM입니다.
Alex Yursha

4

가상화 성능에는 두 가지 사항이 있습니다.

  • 병목 현상 공유
  • 에뮬레이션

병목 현상이 발생하면 누가 같은 아이언을 사용합니까? 가상화 된 환경에 함께 있으면 호스팅 파트너가 자신에게 정직한 태도를 취해야합니다.

나는 원시 성능 (특히 상호 작용 성)에 대한 주요 질문은 가상화 시스템의 어느 부분이 에뮬레이트되는지 생각합니다. 설정에 따라 다릅니다. 디스크와 네트워크가 일반적인 후보입니다. 일반적으로 에뮬레이션은 작업 수행 성능 "비용"을 두 배로 늘리므로 하드웨어 대기 시간을 두 배로 계산하고 처리량을 절반으로 줄여야합니다.


1
내가 본 수치는 CPU 96-97 %, 네트워크 70-90 %, 디스크 40-70 % (베어 메탈)
Jeff Atwood

1
+1 규칙 규칙이 도움이됩니다.
kvista


1

적에게 좋은 대답.

또한 시간이 중요한 시스템. 나는 Hyper-V dime rot을 알아 냈습니다 (vm은 천천히 뒤 떨어지고 VM의 모든 최신 OS는 자주 동기화됩니다)는 내가 개발하고있는 시간이 중요한 응용 프로그램에서 잘 작동하지 않습니다. 또한 거기에 "많은"CPU를 사용하고 프로덕션 환경에서 해당 응용 프로그램을위한 12 코어 머신을 구입할 계획입니다.


별표는 그러한 응용 프로그램 중 하나입니다. 시각화 할 때 전화 회의 중에 발생하는 매우 펑키 한 일이 있습니다.
Ryaner

데이터 기록의 클럭 안정성에 문제가 있습니다.) 천국에 데이터 피드에서 안정적인 타임 스탬프를 얻지 만 시스템 클럭이 안정적이지 않을 때 네트워크 문제가 있는지 확인하는 것은 어렵습니다.
TomTom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.