본문 바로가기
서버

[아키텍처] 하이퍼바이저 아키텍처

by wwns 2024. 12. 29.
반응형

서버 운영 방식은 과거 물리 서버 기반에서 점차 확장성과 유연성을 고려한 구조로 진화해 왔다.

이러한 발전의 핵심 동력 중 하나는 바로 가상화 기술의 도입이라고 생각한다.

 

가상화는 물리적 하드웨어를 논리적으로 추상화하여 여러 가상 머신(VM)이 자원을 나눠 사용할 수 있도록 하는 기술

그러나 이 개념은 처음 접하는 사람들에게는 추상적으로 느껴질 수 있어, 가상화가 구체적으로 무엇인지 명확히 이해하기 어려울 수 있다.

 

실제 가상화 환경에서는 물리 서버 위에 여러 VM을 구축하며, 이 VM들은 물리 서버와 동일하게 통신해야 하는데, VM들은 네트워크, 저장장치, 메모리 등 다양한 하드웨어 자원을 소프트웨어적으로 할당받아 사용하게 된다.

이러한 자원 할당과 관리, 그리고 VM과 물리 하드웨어 간의 통신을 중재하는 핵심 역할을 수행하는 것이 바로 하이퍼바이저입니다.

 

하이퍼바이저는 가상화 환경의 필수 요소로, 물리적 하드웨어를 가상화된 자원으로 변환하여 VM에 분배하고, 이들이 효율적으로 통신할 수 있도록 지원한다.

 

https://www.techtarget.com/searchitoperations/definition/virtualization

 

 

이 글에서는 하이퍼바이저가 VM과 물리 서버 간의 통신을 어떻게 가능하게 하는지, 그리고 어떤 하드웨어 자원을 제공하는지에 대해 

가장 대표적인 KVM(Kenel-based Virtual Machine) 하이퍼바이저를 예시로 알아본다.


KVM 아키텍처

  • KVM은 커널에 통합된 모듈로 동작하며, Intel VT-x, AMD-V를 지원하는 CPU를 통해 가상화를 지원
  • kvm 프로세스는 특수 장치 파일 /dev/kvm을 통해 KVM 커널 모듈 기능을 이용

KVM 동작을 크게 보면 다음과 같다.

  • RING 0는 CPU 명령 실행 모드 - Linux 커널 코드가 RING 0 모드에서 동작, RING 3는 물리적 H/W 자원을 조작하는 명령을 실행할 수 없는 유저모드이며 프로세스의 코드는 RING 3 모드에서 동작
  • RING 0 물리적 H/W 자원에 대한 액세스가 발생하면 VM exit가 발생하여 CPU는 VMX root / RING 0 하이퍼바이저 처리를 이행
  • kvm 프로세스의 메모리 공간에는 qemu 장치 에뮬레이터와 게스트 커널 코드가 로드된다.
  • 게스트 커널 코드는 물리적 CPU에서 특권 모드 VMX non - root / RING 0에서 실행된다

에뮬레이터?

에뮬레이터는 다른 프로그램이나 장치를 모방하는 "컴퓨터 프로그램 또는 전자기기의 능력"을 뜻한다.

 

QEMU라는 에뮬레이터가 게스트OS에게 하드웨어를 직접 사용하는 것처럼 모방하여 준다.

 

QEMU는 다양한 게스트OS 가상머신에서 생성된 명령어를 x86 기반 명령어로 번역을 해서 처리한다.

이것을 Binary Translation이라고 부르며 에뮬레이터는 물리 장치를 소프트웨어로 구현하고, Binary Translation을 수행함으로써 가상머신으로 하여금 마치 물리적인 환경이 존재하는 것처럼 보이게 해주는 역할을 한다.


성능 문제?

 

가상 서버가 물리적인 하드웨어를 사용하기 위해서는 물리 서버 커널 코드와 kvm 프로세스, QEMU에 걸쳐서 에뮬레이터 방식으로 사용하는 것을 알 수 있었다.

 

결국엔 여러 프로세스 혹은 절차를 거쳐 응답을 받게 되는 것인데, 그렇다면 성능적인 문제가 발생할 수 있지 않을까?

  • I/O 처리과정에서 발생하는 부하
    • 게스트 OS에서 디스크에 데이터를 쓰려고 하면, 하이퍼바이저가 이를 가로채고 소프트웨어적으로 디스크 명령어를 변환한 뒤 물리 디스크에 전달
  • Network 통신과정에서 발생하는 부하

이를 개선하기 위해 나온것이 전가상화 반가상화 개념이며, 성능개선을 위한 가상화 드라이버(소프트웨어)를 개발, 적용하기도 한다.

https://library.gabia.com/contents/infrahosting/3864/

전가상화

  • 물리 환경에서 동작하는 운영체제와 장치의 드라이버들을 그대로 가상 머신에서 사용하는 방식
    • QEMU나 KVM을 이용해서 가상 머신을 생성할 때 통신이 필요한 경우 Network driver를 선택해야 함 -> 오버헤드
  • 전가상화에서는 게스트 OS가 물리적 하드웨어와 상호작용한다고 "믿도록" 하이퍼바이저가 하드웨어를 소프트웨어적으로 에뮬레이션함
  • 하드웨어의 실제 동작을 모방하는 과정에서 추가적인 작업이 발생하며, 성능 오버헤드가 증가

반가상화

  • 전 가상화의 단점을 해결하기 위해 수정된 Guest OS, 혹은 Device Driver를 사용하는 경우
    • 대표적으로 Xen의 경우 가상화 환경을 최적화하기 위해 Hyper Call을 활용하고 있는데 이는 반 가상화에 해당
  • 게스트 OS가 하이퍼바이저와 직접 상호작용하도록 수정되어 API 형식으로 직접 호출
    • 하드웨어를 에뮬레이션하지 않고도 API 호출을 통해 작업을 처리

가상화 생태계는 끊임없이 발전하며, 하이퍼바이저 아키텍처 또한 점점 더 간결하고 효율적으로 설계되어 오버헤드를 최소화하는 방향으로 나아가고 있다. 이를 통해 앞으로 어떤 방향으로 학습하고 고민해야 할지를 명확히 이해할 수 있게 해 준다.

 

 

네이버클라우드 가상화 개념 참고!

 

 

카카오엔터프라이즈 SmartNIC 참고!


Refereneces

 

http://www.iamroot.org/xe/index.php?mid=Hypervisor&document_srl=28867

 

kvm 의 내부구조 요약 정리 - Hypervisor - iamroot.org

1. 소개 * 이번 소개는 저희 스터디 그룹에서 하고 있는 Linux KVM 가상화 기능과 관련된 내부 구조를 설명하려고 합니다. 가능한 프로그램 언어 등의 지식을 전제로하지 않는 간단한 설명을 기반으

www.iamroot.org

 

https://medium.com/naver-cloud-platform/%EB%84%A4%EC%9D%B4%EB%B2%84%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EA%B8%B0%EC%88%A0-%EA%B2%BD%ED%97%98-%EA%B0%80%EC%83%81%ED%99%94-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-qemu-vs-kvm-962113641799

 

[네이버클라우드 기술&경험] 가상화 개념 이해하기#1, QEMU vs KVM

Part.1에서는 QEMU와 KVM을 비교함으로써 가상화에 대한 기본 개념을 이해하고, I/O 가상화 작동 원리를 간략히 알아보고, Part. 2에서는 I/O 가상화의 성능을 높이기 위한 솔루션인 SPDK에 대해 알아보

medium.com

 

https://tech.kakaoenterprise.com/137

 

우리는 클라우드 개발에 진심입니다! - SmartNIC 편

시작하며 안녕하세요? 카카오엔터프라이즈에서 클라우드를 개발하는 멀티버스팀 Cosmos파트의 Alvin(김기명)입니다. “따라올 테면 따라와 봐”라는 광고 속 대사, 기억하시나요? 2000년 ADSL 가정용

tech.kakaoenterprise.com

 

반응형