CPU의 KVM 가상화

1.1 왜 가상 CPU

기술에서 실행 : (호스트 OS로 불리는 호스트 운영 체제) 주 Caozuojitong의 : 가상화 (게스트 OS라고 게스트 운영 체제) x86 시스템, 하나 또는 그 이상의 승객 Caozuojitong을 의미합니다. 이 기술은 승객 Caozuojitong 또는 수정없이 만 약간의 수정이 필요합니다. 처음으로 x86 프로세서 아키텍처에서 매우 복잡하게 일반 가상 머신에서 x86 프로세서의 작동을 만드는 포 피크과 골드버그 가상화 요구 사항 (포 피크과 골드버그 가상화 요구 사항)을 충족하지 않습니다. 2005 년과 2006 년, 인텔과 AMD에서 각각 자신의 x86 아키텍처에서이 문제뿐만 아니라 다른 가상화의 어려움을 해결한다.

CPU에 연결 1.2 Ring0, 고리 1 ···

image.png를 |  센터 |  400x288.125

ring0은 고리 1이 다음에, 그것은 가장 높은 수준의 ring0되면, CPU 레벨을 실행하는 작업이 포함됩니다, ring2 더 뒤에 ...... 리눅스 + 86을 얻을, 실행하는 가장 높은 수준의 ring0에서 실행되는 운영 체제 (커널) 코드, 당신은 특권 명령을 사용할 수 있습니다, 인터럽트 제어, 장비 등의 페이지 테이블 액세스를 수정합니다. 링 3에 가장 낮은 수준에서 실행되는 응용 프로그램을 실행하는 코드는 작동을 제어 할 수 없습니다. 당신이 할 경우, 예를 들어, 시스템 호출의 CPU가 발생합니다 ring0에 실행 수준의 링 3에서 전환 될 때, 시스템을 실행하여 (함수)를 호출하고, 해당 시스템 호출에 점프한다, 디스크, 쓰기 파일에 액세스 할 수 커널 코드 실행 위치, 그래서 커널 완료 한 액세스 장치, 및 완료 후 ring0에서 다음 반환 링 3. 이 프로세스는 사용자 모드와 커널 모드로의 전환이라고한다.
그래서, 여기에 가상화 호스트 운영 체제가 ring0에서 일하고 있기 때문에 문제가 게스트 운영 체제는 ring0는하지만,이 모르는 수 없습니다 발생 지금 어떤 명령 실행, 실행 또는 무엇을 설명하기 전에, 그것은 아, 어떤 기관이, 아, 아 처리하지 수 확실하지 않다. 이 시간 하이퍼 바이저 그래서 (VMM)는 이런 일을 방지하기 위해 필요하다. 예외 (CPU 메커니즘을 트리거 일반적이므로, 클라이언트 운영 시스템은 특권 명령을 수행 할 아무런 권한 것 (VMM은 ring0에 보통 드라이버의 형태로 구체화 드라이버 ring0에서 작동되지 않는, 또는 장치를 구동 할 수 있음) 명령, 트리거 예외), 다음 VMM이 예외, 비정상, 시뮬레이션 및 마침내 게스트 운영 체제 작업에 자신의 특권 명령이 계속 실행되는 게스트 운영 체제에 반환하는 번역기를 잡을 수있어. 그러나 이러한 성능 손실은 원래 실행 간단한 지시, 문제를 생각하고, 지금 복잡한 예외 처리 과정을 통과해야, 매우 큽니다.
이 시간 반 가상화는 반 가상화 아이디어는 고객의 운영 체제가 가상 머신에서 실행중인 알 수 있도록하는 것입니다, 온이 원래 물리적 시스템에서 실행되었으며, ring0 상태에서 특권 명령 작업 중 일부는, 그것은 것입니다 다른 방법으로 수정,이 방법이 좋은 계약 및 VMM이며,이, 나는 새로운 아키텍처까지로 정의되는 운영 체제에 대한 코드를 수정하는 것과 동일합니다. 그래서이 반 XEN 가상화 기술과 같은 클라이언트 운영 체제는 전용 사용자 정의 커널 버전 및 x86, MIPS는 이들 커널 버전이 동일 팔. 이 방법은, 성능 손실은 매우 낮은이, 프로세스 시뮬레이션, 예외를 잡을 번역 것입니다. 이것은이 반 XEN 가상화 아키텍처의 장점이다. 젠 가상화 만 지원 리눅스, 가상화 창문이없는 이유, 마이크로 소프트는 코드 아를 변경하지 않는 이유입니다.
이후, CPU 제조업체 지원 가상화를 시작 할 상황은, 인텔 VT의 CPU를 지원하는 X86 CPU, 인텔 VT 기술의 도입을,이 VMX 루트 운영 및 VMX의 루트가 아닌 동작 모드를 변경 두 모드는 링 0 ~ 링 3 사 실행 수준을 지원합니다. 이 단지 중대하다, VMM이 VMX 루트 동작 모드에서 실행할 수있는, VMX 루트가 아닌 동작 모드에서 실행되는 게스트 OS. 구현이 필요하지 않습니다 또한 그는 하드웨어 층 "- - 번역 아날로그 캐치 예외"에이 완전히 가상화, 일부는 의지 약간의 차이를 만들었다 고 말했다. 그리고 CPU 제조업체는 점차 반에 접근하고 하드웨어 지원 가상화의 성능에 가상화 전체 가상화 기술의 강도를 증가 지원, 플러스 완전 가상화 게스트 운영 체제는 이러한 장점을 수정해야, 전체 가상화 기술하지 않는다 그것은 개발의 미래 추세해야합니다.
XEN은 가장 일반적인 반 가상화,하지만 지금 XEN 또한 아 이길 실패, 하드웨어 지원 전체 가상화 추세를 지원합니다. . . KVM, VMARE이 항상 전체 가상화되고있다.

1.3 가상화 기술 분류

현재 가상화 기술은 주로 세 가지 유형으로 구분됩니다 :
1. 플랫폼 가상화
플랫폼 가상화 및 가상화는 가상화 기술, 하이퍼 -V, 젠, VM웨어 및 기타 모든 제품의 가장 일반적인 형태입니다 컴퓨터 운영 체제에 관한 것이다 이러한 응용 프로그램 가상화 기술입니다.
2. 리소스 가상화
자원 가상화 수단 메모리, 네트워크 자원 등과 같은 특정 컴퓨터 시스템 자원의 가상화있다.
3. 응용 프로그램 가상화
가장 일반적인 응용 프로그램 중 하나가 생성 프로그램은 지정된 VM의 내부에서 실행, 응용 프로그램 가상화 JAVA입니다.

1.3.1 플랫폼 가상화

image.png를 |  센터 |  400x265.51724137931035

완전히 프로세서, 물리 메모리 클럭 같은 주변 장치의 다양한 종류를 포함하는 컴퓨터의 하드웨어의 기본 가상 머신, 가상 시뮬레이션 전체를 의미한다. 이것은 당신이 원래의 하드웨어와 운영 시스템 변경이 필요하지 않습니다, 발생합니다.
컴퓨터의 물리적 하드웨어 가상 머신 소프트웨어에 대한 액세스는 인터페이스에 액세스 할 수있는 특정 소프트웨어로 볼 수 있습니다. VMM 모두 기본 하드웨어에 VMM에서 제공하는이 인터페이스 (하이퍼 바이저 기술에 의해 제공)되는 컴퓨터 환경을 완벽하게 시뮬레이션을 제공하고,이 시간 (비 가상 머신 운영 체제에서 실행) 운영 체제 컴퓨터 (호스트)에서 실행에서 다운 그레이드됩니다 (고리 1에 Ring0 변화)를 실행합니다.
게스트 OS (게스트 OS)가 아닌 권한 수준의 작업을 실행하는 다운 그레이드하면서 간단하게, VMM은 호스트 시스템의 모든 권한을 최고 권한 수준에서 실행해야합니다 전체 가상화를 넣어, 게스트 OS는 VMM 대신 원래의 권한 수준에 넘겨을 동작 완료.
전체 가상화는 초기 x86 플랫폼에서 달성 될 수 없다. 2006 년까지, AMD와 인텔은 AMD-V와 Intel VT-X 확장에 추가되었습니다. 제대로 특권 가상 머신 커널 모드를 제어 할 수있는 보호 링 수단을 사용하는 인텔 VT-X. 그러나,이 매우 가까운 전체 가상화를 달성 이미 많은 x86 플랫폼 VMM, 심지어 주장하기 전에 전체 가상화를 지원합니다. 예를 들어 ADEOS, 맥 - 온 - 리눅스, 맥, 병렬 워크 스테이션, VM웨어 워크 스테이션, VM웨어 서버, 버추얼 박스, Win4BSD 패러랠 데스크톱 Pro와 Win4Lin.

1.3.2 반 가상화 (paravirtualization)

image.png를 |  센터 |  400x253.48837209302326

게스트 OS를 수정하는 것이다 의사 가상화 알려진 의사 가상화는 특권 상태 코드는 VMM과 상호 작용한다. 이러한 가상화 소프트웨어 성능 가상화 기술은 매우 좋다. 운영 체제 커널을 수정하여 반 가상화는 슈퍼 호출을 통해 직접 가상화 계층을 기본으로 통신 할 수있는 가상화 프로그램을 대체 할 수 없습니다. 코어 동작은 가상화 계층에 의해 수행.
반 가상화는 VM웨어 도구의 전형이다, VM웨어 도구 서비스 프로그램은 서비스 운영 권한 수준이 많이 될 수있는 가상화 계층에 대한 백 도어 서비스를 제공합니다. 사용 반 가상화 기술 소프트웨어 : 등등 나다, 젠합니다. (젠은 전체 가상화와 반 가상화 두 개의 상태를 사용할 수 있습니다)

1.3.3  하드웨어 지원 가상화

하드웨어 지원 가상화 (하드웨어 지원 가상화) 예를 들어, 효율적인 전체 가상화를 구현하기 위해 프로세서에 의해 제공되는 특별 지시 사항을 참조, 인텔 VT 기술과 AMD-V 기술.
인텔 VT 기술과 AMD-V 기술, VMM 게스트 OS와 완전히 같은 시간에, CPU 가상화 기술로 CPU 따라서 격리 게스트 OS와 VMM을 달성, 새로운 모델 루트를 추가했습니다, 격리됩니다.
하드웨어 지원 가상화에서는 하드웨어 도움으로 구조 지원은 가상 머신 모니터를 작성 제공 및 게스트 운영 체제는 독립적으로 실행할 수 있습니다. 하드웨어 지원 가상화가 1972 년에 실행 시작, 그것은 첫 번째 가상 시스템 운영 체제 / 370 VM을 사용하여 IBM 시스템 / 370에서 실행됩니다. 2005 년과 2006 년, 인텔과 AMD 가상화는 추가 하드웨어 지원을 제공합니다. 하드웨어 지원 가상화에 대한 지원은 리눅스 KVM, VM웨어 워크 스테이션, VM웨어 퓨전이 맥, 버추얼를 들어, Microsoft 가상 PC, 젠, 패러랠 데스크톱 및 병렬 워크 스테이션.

1.3.4 운영체제 가상화

image.png를 |  센터 |  645x240

운영 체제 가상화 (운영 시스템 레벨의 가상화) VPS, 기존의 운영 체제에서 더 많은 응용 프로그램은 모든 사용자 프로세스는 기본적으로, 따라서 동일한 운영 체제 인스턴스에서 실행되며, 운영 체제 커널 결함, 다른 실행중인 프로세스에 영향을 미칠 수밖에 없다.
시스템 가상화를 운영하는 서버 운영 체제에서 사용할 수있는 경량의 가상화 기술, 그것은 매우 간단하고, 매우 강력하다.
이러한 기술은 다중 가상 오퍼레이팅 시스템 인스턴스 (N 멀티 코어 및 라이브러리) 프로세스를 생성함으로써, 코어를 분리한다. 프로세스가 실행 중인지 알 수없는 다른 경우에 실행되는 프로그램의 다른 인스턴스는,이 통신 할 수 없습니다.
에서 유닉스 운영 체제,이 기술은 더욱 진화, 표준의 chroot 메커니즘에서 유래. 커널 소프트웨어 독립적기구 외부에 더하여 일반적으로 소프트웨어를 최소화 할 인해 다른 소프트웨어와 상호 작용을위한 콘테이너에 동작 한 용기 있도록 자원 관리 기능을 제공한다.
이 기술의 가장 일반적인 응용 프로그램은 오픈 VZ이지만, 초과 예약 문제의 오픈 VZ는 많은 대중의 소유자에 의해 비판을 받아왔다.

다양한 종류의 가상화 기술의 1.3.5 비교

 
전체 가상화의 바이너리 변환의 사용
하드웨어 지원 가상화
OS는 지원 / 반 가상화를
구현 기술
BT 직접 실행
루트 만남 특권 명령 실행 모드로 이동
하이퍼
게스트 운영 체제 / 호환성 수정
게스트 운영 체제를 수정할 필요가 없습니다, 최고의 호환성
게스트 운영 체제를 수정할 필요가 없습니다, 최고의 호환성
그것은 물리적 인 하드웨어 자체 또는 다른 하이퍼 바이저, 가난한 호환성에 실행할 수 있도록 게스트 운영 체제는 윈도우를 지원하지 않습니다, 지원 하이퍼 콜을 수정해야
공연
전체 가상화는 두 가지 모드, 성능 오버 헤드 사이를 전환 할 CPU의 요구가 있지만, 성능이 점차 반 가상화 접근.
좋은. 반 가상화는 CPU 성능 오버 헤드가 거의 제로에 가까운 물리적 시스템을 가상 머신의 성능이다.
응용 프로그램 공급 업체
VM웨어 워크 스테이션 / QEMU / 가상 PC
VM웨어 ESXi를 / 마이크로 소프트 하이퍼 V / 젠 3.0 / KVM

1.3.6 cgroup을

이름이 대조군 (대조군)에 유도되는 짧은하여 cgroup은, 한정적인 분리 공정 자원 그룹 (예를 들어, CPU, 메모리, 디스크 입출력 등)를 제어하기위한 리눅스 커널의 함수이다.
이 프로젝트는 처음으로 구글 엔지니어 2006 년 (주로 폴 삼각와 Rohit 세스), 프로세스 용기 (공정 용기)에 대한 최초의 이름으로 시작되었다. 2007 년, 리눅스 커널, 컨테이너 (용기)이 용어가 순서대로 피할 혼란, 많은 다른 의미를 가지고, 같이 cgroup의 이름이 변경되고, 2.6.24 커널의 버전에 통합됩니다. 그 이후, 그들은 많은 기능을 추가 할 수 있습니다.
cgroup을 설계 목표는 (오픈 VZ, 리눅스 VServer가, LXC 같은) 운영 체제 수준의 가상화 단일 제어 과정에서 (좋은으로), 다른 응용 프로그램에 통합 된 인터페이스를 제공하는 것입니다 . cgroup에는 다음과 같은 기능을 제공합니다

  • 자원 제약은 다음 그룹의 메모리 세트 한계를 초과하지 않도록 설정 될 수 있으며,이 또한 가상 메모리를 포함한다.
  • 우선 순위 : 일부 그룹은 CPU [5] 또는 디스크 IO 처리량을 많이받을 수 있습니다.
  • 해결 : 시스템이 실제로 목적을 위해 사용 얼마나 많은 자원을 측정하는 데 사용됩니다.
  • 제어 : 고정 그룹 또는 검사 점 다시 시작합니다.

image.png를 |  센터 |  800x500

1.4 KVM의 CPU 가상화

KVM은 CPU 보조, 그것은 CPU의 가상화 기능을 지원하기 위해 필요에 따라 전체 가상화 솔루션입니다.

1.4.1 CPU 물리적 특성

호스트 CPU의 물리적 상황을 볼 수 numactl은 명령을 사용하여

[[email protected] /root]
# numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 12 13 14 15 16 17
node 0 size: 12276 MB
node 0 free: 7060 MB
node distances:
node   0 
  0:  10  21 

지원 KVM 위해, CPU의 인텔 CPU AMD의 SVM 또는 VMX 확장은 힘에 있어야합니다 :

[[email protected] /root]
# egrep "(vmx|svm)" /proc/cpuinfo
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm arat epb dts tpr_shadow vnmi flexpriority ept vpid

1.4.2 멀티 CPU 서버 아키텍처 : SMP, NMP, NUMA

보기의 시스템 아키텍처의 관점에서, 현재 상용 서버는 대략 세 가지 범주로 나눌 수 있습니다 :

  • 멀티 프로세서 아키텍처 (SMP는 : 대칭형 멀티 프로세서) : 같은 버스, 메모리 및 I / O 시스템, 운영 시스템의 사본이나 단지 데이터베이스 관리, 이러한 시스템으로 모든 CPU 자원을 모든 공유는 최대의 특징이있다 그것은 모든 자원의 공유입니다. 다중 CPU 및 동일한 액세스 메모리, 주변 장치, 운영체제 사이에는 차이가 없다. 주요 문제 SMP 서버, 즉 확장 성이 매우 제한되어있다. 실험은 최상의 경우 SMP 서버 CPU 사용률이 CPU 2-4 것을 보여줍니다.
  • 대량 병렬 처리 구조 (MPP는 : 대규모 병렬 처리) 기본 특성 NUMA 서버 CPU의 복수의 모듈을 갖는 각 CPU 모듈 (예를 들어, 4) CPU되며, 복수의 독립적 인 로컬 메모리, I / O 슬롯을 갖는 입 등등. 하나 개의 물리적 서버에서 CPU의 수백을 지원할 수 있습니다. CPU의 개수는, 시스템 성능이 선형 증가 할 수 없도록 때도 NUMA 기술하지만, 훨씬 더 로컬 메모리보다 인해 원격 메모리 액세스 지연 시간에 약간의 결함을 가지고있다. MPP 모드는 분산 메모리 모드, 그것은 메모리 시스템에 더 많은 프로세서가 될 수 있습니다. 분산 된 복수의 노드를 갖는 패턴 메모리는, 각 노드는 자신의 메모리, SMP 모드로 구성 될 수 있으며,는 비 SMP 모드로 배치 될 수있다. 서로 연결된 개별 노드는 전체 시스템을 형성한다. MPP는 SMP 클러스터의 대략적인 규모로 이해, MPP는 일반적으로 소프트웨어에 의존하고 있습니다.
  • 비 균일 메모리 액세스 아키텍처 (NUMA는 : 비 균일 메모리 액세스) : 그것은 특정 네트워크 노드를 통해 연결된 SMP 서버의 복수의 구성, 함께 작업은 동일한 작업,보기의 사용자 지점에서 서버 시스템을 수행합니다. 본질적으로 노드 네트워크를 통하여 서로 접속 (SMP 노드 서버 당 공지) SMP의 복수의 서버에 의해 특징되는, 각 노드는 자신의 로컬 리소스 (메모리, 스토리지 등), 완전 비공유 (공유 아무것도 인 액세스 ) 구조.
[[email protected] /root]
#uname -a
Linux clsn.io 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

참고 :이 기계는 SMP 아키텍처

1.5 KVM 가상 머신의 생성

1.5.1 KVM 시작 환경 개요

CPU 지원 가상화는 새로운 기능을 추가하고 있습니다. VMX 루트 모드와 VMX의 루트가 아닌 모드 : 인텔 VT 기술로, 예를 들어, 두 가지 작동 모드를 추가합니다. 일반적으로, VMX 루트 모드에서 호스트 운영 체제와 VMM의 실행은, 게스트 운영 체제 및 응용 프로그램 VMX의 루트가 아닌 모드에서 실행. 두 모델 모두 반지를 지원하기 때문에, 따라서 클라이언트가 링에서 필요로 실행할 수 있습니다 (링 0에서 실행되는 OS, 응용 프로그램이 링 3에서 실행), VMM은 (그들의 요구에 링에서 실행 그것은 KVM, QEMU 링 3에서 실행, 링 0에서 KVM 실행).
두 모드 사이에서 CPU를 스위칭 VMX 핸드 오버라고한다. VM이 항목으로 언급 루트 모드 루트가 아닌 모드에서 시작합니다; 루트 모드 루트가 아닌 모드로 진입하는 VM 종료라고도합니다. , VMM 코드와 게스트 OS 코드를 실행 차례로 두 모드 사이의 전환에 의해 제어되는 CPU를 알.
는 CPU의 명령에 명령이 VMLAUNCH VMX 루트가 아닌 모드로 변환 할 때, KVM VM 게스트 OS를 수행하기위한 VMX 루트 모드에서 VMM 실행이 수행 될 필요는, 클라이언트, 즉 VM 입력 프로세스의 코드를 실행을 시작, 게스트 OS가 필요 종료 모드는 CPU 자동 VMX 루트 모드, 즉 VM 이탈 공정으로 전환. 눈에 보이는, KVM 클라이언트 코드는 직접 물리적 CPU에 VMM 실행에 의해 제어됩니다. QEMU는 가상 머신 KVM을 제어하는 CPU에 의해 실행되는 코드이지만, 그 자체는 코드를 실행할 수 없습니다. 즉, CPU는 정말 클라이언트에 가상 CPU의 가상 수준으로하지 않습니다.

image.png를 |  센터 |  700x741.125

위와 같이 볼 수 :

  1. 는 / dev / KVM 시리즈 ICOTL 제어 명령 VM으로 QEMU-KVM
  2. 다른 리눅스 프로세스와 같은 리눅스 QEMU-KVM 과정 인 KVM 가상 머신은, 리눅스 프로세스 스케줄러를 예정이다.
  3. KVM 가상 메모리, 가상 머신의 가상 CPU 및 I / O 장치, 가상 메모리 및 CPU 책임 KVM 커널 모듈 구현에있어서, 가상 I /를 QEMU 구현을 담당 O 장치를 포함 가상 머신.
  4. 메모리 KVM 클라이언트 시스템은 QEMU-KVM 프로세스의 주소 공간의 일부입니다.
  5. 의 vCPU KVM QEMU-KVM 프로세스의 컨텍스트에서 실행되는 스레드와 같은 가상 머신.



1.6 VM 코드가 실행되는 방법

커널 모드 (Kenerl)와 사용자 모드 (사용자) : 정상적인 리눅스 커널은 두 가지 실행 모드가 있습니다.
즉, 가상화 기능을 가진 CPU를 지원하기 위해 KVM은 리눅스 커널에 세 번째 모드 클라이언트 모드 (게스트)를 추가, VMX 루트가 아닌 모드 CPU의에 모드에 해당합니다.

1.6.1 KVM 커널 모드

사용자 모드와 게스트 모드 사이의 다리 KVM 커널 모듈 :

  • 명령에 QEMU-KVM 사용자 모드는 가상 머신 ICOTL을 통해 실행됩니다
  • VMX 루트가 아닌 모드를 구동하도록 요청 KVM 커널 상기 VCPU VMCS (가상 머신 제어 구조)에로드와 같은 맥락으로 약간의 예비 작업을 수행하는 모듈, 등 및 그 CPU가 진행을 수신 한 후, 클라이언트 코드가 시작되면 실행
    세 가지 모드 분업 :
  • 게스트 모드 : 필요할 때 아닌 클라이언트 시스템을 수행하는 I / O를 코드는 드라이브의 CPU는이 모드를 종료
  • 돌아 가기 Kenerl 모드는 CPU에서 게스트 OS 게스트 모드 코드와 출구 게스트 모드를 실행하기 위해 CPU를 전환 할 책임이있다 : 커널 모드
  • 사용자 모드 : 클라이언트 시스템 대신은 I / O 작업을 수행하는

image.png를 |  센터 |  680x512.5073746312685

1.6.2 처리 KVM

QEMU-KVM은 기본 QEMU에 비해 ​​변경됩니다 :

  • 완벽에 의해 QEMU 기본 명령어 번역은 CPU를 가상화하지만 수정 된 QEMU-KVM은 KVM 모듈을 호출 할 ICOTL 명령을 호출합니다.
  • 기본 QEMU는 단일 스레드 QEMU-KVM은 멀티 스레드 구현, 달성한다.
    리눅스는 아래 여러 스레드를 포함하는 프로세스로 간주 QEMU 가상을 개최한다 :
  • I / 스레드에게 고객 코드의 vCPU를 실행하기위한 시뮬레이션 장치를 관리하기위한 O 스레드
  • 등 처리 스레드의 이벤트 루프, 오프로드 작업과 같은 다른 스레드,

image.png를 |  센터 |  680x507.3475177304964

1.7 호스트 CPU 구조 모델

KVM은 호스트 및 클라이언트의 멀티 CPU SMP 및 NUMA 아키텍처를 지원합니다. 클라이언트의 SMP 유형은 "-smp"매개 변수를 사용합니다 :

kvm -smp <n>[,cores=<ncores>][,threads=<nthreads>][,sockets=<nsocks>][,maxcpus=<maxcpus>]

클라이언트의 NUMA의 종류, "-numa"매개 변수를 사용합니다 :

kvm -numa <nodes>[,mem=<size>][,cpus=<cpu[-cpu>]][,nodeid=<node>]

호스트 CPU의 (기능)의 기능을 정의 CPU 모델 (모델) 클라이언트 운영 체제에 노출됩니다. 다른 CPU 기능과 호스트 사이의 안전한 이동을 위해, QEMU-KVM 스위치는 호스트 CPU의 기능은 클라이언트에 노출되는 모든하지 경향이있다. 다음과 같이 원리는 :
당신은 실행할 수있는 qemu-kvm  -cpu ?호스트 CPU에 의해 지원되는 모델의 목록을 얻으려면 명령을 사용합니다.

[[email protected] /root]
#kvm -cpu ?
x86       Opteron_G5  AMD Opteron 63xx class CPU                      
x86       Opteron_G4  AMD Opteron 62xx class CPU                      
x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)          
x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)          
x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)           
x86          Haswell  Intel Core Processor (Haswell)                  
x86      SandyBridge  Intel Xeon E312xx (Sandy Bridge)                
x86         Westmere  Westmere E56xx/L56xx/X56xx (Nehalem-C)          
x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)       
x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)    
x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)   
x86      cpu64-rhel5  QEMU Virtual CPU version (cpu64-rhel5)          
x86      cpu64-rhel6  QEMU Virtual CPU version (cpu64-rhel6)          
x86             n270  Intel(R) Atom(TM) CPU N270   @ 1.60GHz          
x86           athlon  QEMU Virtual CPU version 0.12.1                 
x86         pentium3                                                  
x86         pentium2                                                  
x86          pentium                                                  
x86              486                                                  
x86          coreduo  Genuine Intel(R) CPU           T2600  @ 2.16GHz 
x86           qemu32  QEMU Virtual CPU version 0.12.1                 
x86            kvm64  Common KVM processor                            
x86         core2duo  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz 
x86           phenom  AMD Phenom(tm) 9550 Quad-Core Processor         
x86           qemu64  QEMU Virtual CPU version 0.12.1                 

Recognized CPUID flags:
  f_edx: pbe ia64 tm ht ss sse2 sse fxsr mmx acpi ds clflush pn pse36 pat cmov mca pge mtrr sep apic cx8 mce pae msr tsc pse de vme fpu
  f_ecx: hypervisor rdrand f16c avx osxsave xsave aes tsc-deadline popcnt movbe x2apic sse4.2|sse4_2 sse4.1|sse4_1 dca pcid pdcm xtpr cx16 fma cid ssse3 tm2 est smx vmx ds_cpl monitor dtes64 pclmulqdq|pclmuldq pni|sse3
  extf_edx: 3dnow 3dnowext lm|i64 rdtscp pdpe1gb fxsr_opt|ffxsr fxsr mmx mmxext nx|xd pse36 pat cmov mca pge mtrr syscall apic cx8 mce pae msr tsc pse de vme fpu
  extf_ecx: perfctr_nb perfctr_core topoext tbm nodeid_msr tce fma4 lwp wdt skinit xop ibs osvw 3dnowprefetch misalignsse sse4a abm cr8legacy extapic svm cmp_legacy lahf_lm

각 하이퍼 바이저는 CPU의 기능은 클라이언트에 노출 될의 기본을 정의하는 자신의 전략을 가지고있다. 클라이언트의 구성에 따라, 클라이언트 시스템에 노출되는 어떤 기능에 관해서. qemu32 및 qemu64 기본 클라이언트 CPU 모델이지만, 다른 모델을 사용할 수 있습니다. 당신이 사용할 수있는  qemu-kvm 명령  -cpu 은 CPU 모델 클라이언트를 지정하는 매개 변수를 당신은 또한 추가 CPU 기능을 지정할 수 있습니다. "-CPU는"완전히, 일부 기능은 물리적 호스트 CPU에서 지원되지 않는 경우에도 클라이언트에 CPU 모델을 지정된 모든 기능이 시간이 노출되는 QEMU /이 특정 시간이 될 수 있도록 KVM은 이러한 특성을 모방합니다 성능 저하.
클라이언트 CPU 모델로 6 레드햇 리눅스의 기본 cpu64-rhe16를 사용하여, 특정의 CPU 모델과 기능을 지정할 수 있습니다 :

[[email protected] /root]
#qemu-kvm -cpu Nehalem,+aes

자세한 내용은 다음을 참조하십시오 : https://clsn.io/clsn/lx194.html

1.8의 vCPU 번호 할당 방법

클라이언트보다 더 많은 vCPU 한 개는 더 나은 성능, 스레드 스위치는 많은 시간을 소비하기 때문에, 그것은 부하에 따라 vCPU가 최소 할당해야한다.
호스트에서 클라이언트의 vCPU의 총 수는 CPU 코어의 총 수를 초과하지 않아야한다. 아니 이상의 단어보다 더 CPU 경쟁 각각의 vCPU 스레드가 물리적 CPU 코어에서 실행이없는, 즉 이상이, 실의 부분은 헤드 될까 CPU 코어의 CPU와 스레드 사이에서 전환하는 것을 기다릴 것이다.
계산 부하와 부하는 I / O로드, 계산 부하, 필요로 나누어도 선호도 CPU를 고려 개의 vCPU는, 물리적 CPU 코어는 고객을 제공하기 위해 지정 더 할당합니다.

1.8.1 단계들의 수를 결정의 vCPU

우리는 VM을 만들려면, 다음 단계의 vCPU의 적절한 번호를 확인하는 데 도움이 될 수 있습니다

(1) 애플리케이션을 이해하고, 초기 값을 설정

응용 프로그램이든 서비스 수준 계약이 있는지, 중요한 응용 프로그램입니다. 멀티 스레드의 가상 머신 깊이있는 이해에서 실행되는 응용 프로그램을 지원해야합니다. 제공자 애플리케이션은 멀티 스레딩 및 SMP (Symmetricmulti 처리)를 지원합니다. 물리적 CPU 서버에서 실행되는 응용 프로그램의 참조 번호가 필요합니다. 또한, 참조 정보가없는 경우, 1vCPU 초기 값으로서 제공하고 밀접 자원 사용량을 관찰 할 수있다.
리소스 사용을 관찰 (2)
가상 머신의 자원 사용을 관찰 기간을 결정한다. 응용 프로그램의 특성과 요구 사항에 따라 시간의 기간, 일, 몇 주 수 있습니다. 뿐만 아니라 VM CPU 사용률, 응용 프로그램을 관찰하고 운영 시스템에서 CPU의 점유율을 관찰합니다.
특히 CPU 사용량과 평균 사용량이 CPU를 구분합니다.
피크 값의 CPU VM 프로그램은 단일 스레드 애플리케이션에의 vCPU를 사용하는 경우에만 가능하다는 것을 나타내는 경우에만 최대 모든 CPU 리소스를 사용할 수있는 25 %, 즉 25 % 이상이면 할당 네 개의 vCPU이있는 경우 (4 * 25 % = 1)
의 평균 값보다 38 %,의 vCPU의 수 감소를 고려하여 피크 값 미만의 45 %이다
의 vCPU 수 늘려, 보통 75 % 이상이고, 상기 피크가 90 % 이상이다
관측 수가 VCPU. (3) 변경
각 가능한만큼 작은 변화 가능한 필요 4vCPU, 그것이 사용 가능한지 2vCPU 관측 성능을 설정하는 경우.

1.9 참조

https://clsn.io/clsn/lx194.html
http://www.cnblogs.com/popsuper1982/p/3815398.html
http://frankdenneman.nl/2013/09/18/vcpu-configuration-performance- 충격 간 가상 소켓 및 가상 코어 /
https://www.dadclab.com/archives/2509.jiecao
https://zh.wikipedia.org/zh-hans/%E5%88%86% E7의 %의 BA % A7 % E4 % BF % 9D % E6 % 8A % A4 % E5 % 9F % 9F
https://www.cnblogs.com/cyttina/archive/2013/09/24/3337594.html
https : //로 www.cnblogs.com/sammyliu/p/4543597.html
http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html
https://blog.csdn.net/hshl1214/article/ 자세한 내용은 / 62046736

추천

출처www.cnblogs.com/liujunjun/p/12444772.html