가상 컴퓨터 생성 및 초기 구성
1. NUMA (Non-Uniform Memory Access)
- CPU는 가상화 기술 지원과 함께 나날이 더 많은 코어를 지원하는 형태로 발전.
- 초창기 CPU코어도 1개로 설계. 1개의 CPU 코어가 메모리와 연계되어 작동하는 구조. CPU와 메모리는 상호 교신을 위한 버스를 가짐. 1개의 코어와 메모리가 있을 경우 이 채널에 대한 병목이 문제되지 않지만 다수의 코어가 사용되면서 메모리와 교신하는 버스에 대한 병목 현상이 발생 => CPU코어가 빨리 일을 처리하더라도 메모리와의 교신에서 병목이 발생해서 성능이 떨어지는 현상이 발생.
- NUMA는 이러한 병목을 해결하기 위함 <-> UMA
- UMA의 경우 모든 CPU 코어들이 메모리를 하나의 통으로 생각하고 접근하는 구조.
- NUMA는 CPU코어와 메모리의 일부를 그룹으로 묶어서 처리하는 구조. 여러 프로세스들이 동일 메모리 주소에 접근하려할 때 성능 충돌을 피할 수 있음.
- 컴퓨터가 켜질 때 CPU 코어를 균등히 분할하고 분할된 코어들이 사용할 메모리 공간을 묶어 노드를 생성. 하나의 노드 내 코어들은 최대한 같은 노드 내 메모리를 이용하는 형태로 교신하는 것. 같은 노드 내 메모리 공간이 부족할 경우 다른 노드의 메모리를 사용하도록 동작하지만, 처음부터 다른 노드 메모리를 사용하지는 않음.
- NUMA 아키텍처는 SMP 아키텍처의 확장성 제한을 극복하기 위해 고안. SMP를 사용하면 모든 메모리 엑세스가 같은 공유 메모리 버스를 게시. CPU 수가 비교적 적을 때는 문제가 없지만 공유 메모리 버스 엑세스를 위해 수십 개나 수백 개의 CPU가 경쟁할 경우에는 이 기능이 제대로 동작하지 않음. 특정 메모리 버스의 CPU 개수를 제한하고 고속 연결로 여러 개의 노드를 연결하여 병목 현상을 완화.
2. ccNUMA (cache-coherent NUMA)
- 거의 모든 CPU 아키텍처는 CPU캐시라고 알려진 적은 양의 매무 빠른 비공유 메모리를 사용. NUMA에서 공유 메모리의 캐시 일관성을 유지시키는 것은 상당히 어려운 일.
3. NUMA 스패닝
- 가상 컴퓨터가 시작될 때 하나의 NUMA 노드에서 가상 컴퓨터에서 요청한 프로세서 코어와 메모리 할당이 모두 되지 않을 경우 두 번째 NUMA노드에서 이를 확장하여 처리하는 것.
1세대 & 2세대 가상 컴퓨터 차이
- Windows Server 2012까지의 Hyper-V 가상 컴퓨터는 모두 1세대 형태.
- 전통적인 BIOS는 PC-AT BIOS. Hyper-V 에 설계된 PC-AT BIOS의 경우 성능은 최적화 되었으나 몇 가지 한계점이 있음.
a) 최대 2.2TB의 부트 볼륨
b) 가상 IDE로만 부팅 가능
c) PXE부트의 경우에는 에뮬레이션되는 NIC를 사용해야 함.
d) COM포트나 플로피 디스크를 제공하기 위한 에뮬레이션.
- 이러한 한계점을 해결하기 위해 나온 것이 2세대. 2세대는 BIOS 형태가 아닌 UEFI(Unified Extensible Firmware Interface) 펌웨어 형태를 사용. SCSI컨트롤러 사용=> GPT파티션 사용 가능하므로 2.2 TB의 용량 한계와 에뮬레이션된 NIC을 사용한 PXE 부트를 해결.
- IDE 컨트롤러에 연결된 디스크는 운영 중에 디스크를 추가하거나 용량 조절 등의 작업을 할 수 없음.
- 1세대 가상 컴퓨터의 경우 부트 디스크는 무조건 IDE 컨트롤러에 연결해야 하므로 운영 도중 디스크에 대한 변경 작없을 할 수 없음.
- 2세대는 SCSI 컨트롤러를 사용하므로 가능.
- 2세대 가상 컴퓨터는 UEFI 펌웨어를 사용한다는 것. UEFI 펌웨어 형태를 인식하지 못하는 운영체제는 2세대 가상 컴퓨터로 구성할 수 없음. Windows Server 2012 이후부터 사용이 가능.
- 1세대의 경우 각종 에뮬레이션 되고 있는 장치들을 위해 에뮬레이션 되는 PCI버스부터 하위 단계를 제공.
- 2세대의 경우 모든 하드웨어가 가상 컴퓨터 버스(VMBUS)를 통해 연결 된 장치.
- 가상 컴퓨터 생성 시 '세대 선택'에서는 설치하고자 하는 운영체제의 종류에 따라 결정하는 것이 좋으며 성능상의 차이를 느끼긴 어려움.
- 각 세대로 설정된 가상 컴퓨터는 나중에 다른 세대로 변경할 수 없으며, 부트 영역의 경우 1세대는 BIOS기반의 MBR, 2세대는 UEFI 방식이기 때문에 사전에 만들어 놓은 가상 하드 디스크는 호환할 수 없음.
메모리 할당
- 메모리 버퍼: Hyper-V가 예약해 놓은 메모리에 대한 백분율. 기본값 20%. 가상 컴퓨터 메모리의 남은 양이 20% 미만인 경우 추가 메모리를 요구해서 가상 컴퓨터에 할당.
- 동적 메모리 10GB ~ 20GB 범위에서 설정 했을 경우 최소 10GB 메모리를 할당 받고 이후 10GB 중 8GB 이상을 사용하면 20% 메모리 버퍼가 설정되어 12GB의 메모리를 준비.
하드웨어 추가
- SCSI 컨트롤러: 가상 하드 디스크나 DVD 드라이브 추가하기 위해 컨트롤러 추가. 개별 SCSI 컨트롤러에 최대 64개 디스크 연결 가능. 최대 4개의 컨트롤러 추가할 수 있음
- 레거시 네트워크 어댑터: 에뮬레이션 방식이 아닌 실제 NIC에 연결되는 Synthetic NIC을 제공. 통합 서비스 패키지가 지원되지 않은 운영체제를 사용하거나, 1세대 가상 컴퓨터에서 PXE 부트를 통해 운영체제를 설치한다면 레거시 네트워크 어댑터가 필요.
- 파이버 채널 어댑터: FC 형태로 호스트가 스토리지에 연결할 수 있음.
- RemoteFX 3D 어댑터: RemoteFX를 사용할 경우, 가상 컴퓨터에 활용할 수 있는 비디오 어댑터 추가.
* 가상 컴퓨터에 고성능 GPU 그래픽 카드가 필요할 경우 호스트에 그래픽 카드 설치 GPU 가상화를 이용.
프로세서
- 최대 64개의 가상 프로세서 사용 가능하며 호스트 프로세서 숫자를 넘어갈 수 없음.
- 호환성: 성능 및 제조 시기 세대가 다른 CPU를 가진 호스트 간 마이그레이션 가능. 타 벤더 간 불가능.