|
http://www.ibm.com/developerworks/kr/library/l-hypervisor/index.html
KVM 및 Lguest 소개 PDF - Fits A4 and Letter 난이도 : 중급 M. Tim Jones, Consultant Engineer 원문 게재일 : 2009 년 5 월 31 일 하이퍼바이저가 운영 체제에서 수행하는 역할은 운영 체제가 프로세스에서 수행하는 역할과 비슷하다. 하이퍼바이저는 실행을 위한 격리된 가상 하드웨어 플랫폼을 제공하며 이 플랫폼을 통해 기본 시스템에 대한 가상의 전체 액세스를 제공한다. 하지만 유연성과 다양한 선택이 Linux의 특징이기에 모든 하이퍼바이저가 동일하지는 않으며 여기에서 설명하는 하이퍼바이저는 하나의 좋은 예로 생각할 수 있다. 이 기사에서는 먼저 가상화와 하이퍼바이저에 대해 간략하게 설명한 후 두 가지 Linux 기반 하이퍼바이저를 살펴본다. 먼저 가상화의 중요성과 하이퍼바이저의 역할에 대해 간단히 살펴보자. (참고자료 섹션에서 두 항목에 대한 자세한 정보를 볼 수 있다.) 이 기사에서 말하는 가상화는 여러 운영 체제에서 투명하게 사용 및 공유할 수 있도록 만들어 주는 방식으로 기본 물리적 하드웨어를 숨기는 프로세스를 뜻한다. 이 아키텍처는 플랫폼 가상화로 더 잘 알려져 있다. 일반적인 계층화된 아키텍처에서 플랫폼 가상화를 지원하는 계층을 하이퍼바이저라고 하며 가상 시스템 모니터 또는 VMM(Virtual Machine Monitor)이라고도 한다. 게스트 운영 체제의 각 인스턴스를 가상 시스템(VM, Virtual Machine)이라고 하며 이러한 VM에서는 가상화된 하드웨어를 전용 하드웨어로 인식한다. 그림 1에서는 이 계층화된 아키텍처를 보여 준다. 플랫폼 가상화에는 여러 가지 장점이 있다. 하지만 미국의 EPA(Environmental Protection Agency)에서 매우 흥미로운 통계를 발표했다. 서버 및 데이터 센터 에너지 효율성에 대한 이 EPA 연구를 보면 서버 용량의 약 5%만 실제로 사용되고 나머지 시간에는 서버가 대기 상태로 유지된다는 것을 알 수 있다. 단일 서버에서 여러 플랫폼을 가상화하면 서버 활용도를 높일 수 있으며 더 나아가 서버 수를 줄이면 훨씬 더 큰 효과를 얻을 수 있다. 서버 수가 줄어들면 필요한 물리적 공간과 전력 소비량도 줄어들고 냉각 및 관리 비용도 절감된다. 또한 하드웨어가 줄어든다는 것은 안정성이 향상된다는 것을 의미한다. 결론적으로 플랫폼 가상화는 기술적인 장점뿐 아니라 비용 및 에너지 장점까지도 제공한다. 그림 1에서 보듯이 하이퍼바이저는 기본 시스템의 가상화를 제공하는 소프트웨어 계층이며 이 계층에는 프로세서 지원이 포함되기도 한다. 모든 가상화 솔루션이 동일하지는 않으므로 참고자료에서 다양한 유형의 가상화에 대한 자세한 정보를 볼 수 있다. 운영 체제에서는 프로세스를 위해 시스템의 기본 리소스에 대한 액세스를 가상화한다. 하이퍼바이저도 같은 작업을 수행하지만 프로세스가 아닌 전체 게스트 운영 체제를 위해 이 작업을 수행한다. 하이퍼바이저는 크게 두 가지 유형으로 분류할 수 있다. 먼저 첫 번째 유형의 하이퍼바이저는 기본적으로 베어메탈(bare-metal) 하드웨어에서 실행되며 두 번째 유형의 하이퍼바이저는 다른 운영 체제(베어메탈에서 실행되는 운영 체제)의 컨텍스트에서 실행된다. 첫 번째 하이퍼바이저 유형의 예로는 그 자체도 운영 체제 기반 하이퍼바이저인 KVM(Kernel-based Virtual Machine)이 있으며 두 번째 하이퍼바이저 유형의 예로는 QEMU와 WINE이 있다. 따라서 하이퍼바이저는 유형에 상관없이 시스템 하드웨어를 게스트로부터 추상화하는 계층화된 애플리케이션이다. 이로 인해 각 게스트는 실제 하드웨어 대신 VM을 보게 된다. 이제 하이퍼바이저의 내부 및 VM(게스트 운영 체제)에 대한 프리젠테이션에 대한 일반적인 내용을 살펴보자. 상위 레벨에서 게스트 운영 체제 시스템을 부팅하기 위해 하이퍼바이저에는 부팅할 커널 이미지, 구성(사용할 IP 주소 및 메모리 용량 등), 디스크, 네트워크 장치 등의 몇 가지 항목이 필요하다. 디스크와 네트워크 장치는 일반적으로 시스템의 물리적 디스크 및 네트워크 장치에 맵핑된다(그림 2 참조). 마지막으로 게스트를 시작하고 관리하는 데 사용할 수 있는 게스트 도구 세트가 필요하다. 그런 다음 이 단순화된 하이퍼바이저 아키텍처에서는 게스트 운영 체제를 호스트 운영 체제와 동시에 실행할 수 있도록 글루(glue)를 구현한다. 이 기능을 구현하기 위해서는 몇 가지 특정 요소가 필요하다(그림 3 참조). 먼저 사용자 공간 애플리케이션과 커널 함수를 연결하는 시스템 호출과 유사한 역할을 수행하는 하이퍼 호출(hypercall) 계층에서는 일반적으로 호스트 운영 체제에 대한 게스트의 요청을 처리한다. 입출력(I/O)은 커널 내에서 가상화될 수 있으며 그렇지 않은 경우에는 게스트 운영 체제의 코드를 사용하여 지원할 수 있다. 하이퍼바이저에서는 인터럽트를 고유한 방식으로 처리해야 한다. 즉, 실제 인터럽트를 직접 처리하거나 가상 장치에 대한 인터럽트를 게스트 운영 체제에 전달해야 한다. 또한 하이퍼바이저에서는 게스트 내에서 발생한 트랩이나 예외를 처리해야 한다. (결국 한 게스트에서 오류가 발생할 경우 해당 게스트만 중지되고 하이퍼바이저나 다른 게스트는 중지되지 않는다.) 페이지 맵퍼는 하이퍼바이저의 핵심 요소로 특정 운영 체제(게스트 또는 하이퍼바이저)에 대한 페이지에 하드웨어를 연결하는 역할을 수행한다. 마지막으로 상위 레벨 스케줄러는 하이퍼바이저와 게스트 운영 체제 사이에서 컨트롤을 전송하는 데 사용된다. 이 기사에서는 두 가지 Linux 기반 하이퍼바이저 솔루션을 살펴본다. 먼저 KVM은 Linux 커널에 통합된 최초의 하이퍼바이저 모듈로 전체 가상화를 구현한 솔루션이며 Lguest는 매우 간단한 변경 작업을 통해 의사 가상화를 제공하는 실험용 하이퍼바이저이다. KVM은 x86 하드웨어에서 실행되는 Linux를 위한 커널 기반 가상화 인프라이다. KVM은 네이티브 Linux 커널(2.6.20)에 통합된 최초의 하이퍼바이저로 현재 Red Hat 소유의 신생 기업인 Qumranet을 통해 Avi Kivity가 관리하고 있다. 이 하이퍼바이저는 PowerPC? 및 IA64에 대한 포트가 포함된 x86 가상화를 제공한다. 또한 최근에는 SMP(symmetrical multiprocessing)에 대한 지원이 KVM에 추가되었으며 라이브 마이그레이션(게스트 운영 체제를 물리적 서버 간에 마이그레이션하는 기능)과 같은 엔터프라이즈 레벨 기능도 지원된다. KVM은 커널 모듈로 구현되므로 모듈을 로드하는 것만으로도 Linux를 하이퍼바이저로 전환할 수 있으며 Intel VT(Intel? Virtualization Technology) 또는 AMD-V(AMD Virtualization) 오퍼링과 같은 하이퍼바이저 명령을 지원하는 하드웨어 플랫폼에서의 전체 가상화를 제공한다. 또한 KVM은 Linux 및 Windows?를 포함한 의사 가상화된 게스트를 지원한다. 이 기술은 두 가지 구성 요소로 구현된다. 첫 번째 구성 요소는 KVM 동적 적재 모듈로 Linux 커널에 설치될 때 가상화 하드웨어에 대한 관리 기능을 제공하며 /proc 파일 시스템을 통해 해당 기능을 사용할 수 있다(그림 4 참조). 두 번째 구성 요소는 PC 플랫폼 에뮬레이션에 필요한 기능을 제공하며 수정된 버전의 QEMU를 통해 제공된다. QEMU는 사용자 공간 프로세스로 실행되며 커널과 공동으로 게스트 운영 체제 요청을 처리한다. 각 게스트 운영 체제는 KVM은 Linux 컨텍스트에서 호스트로 작동하지만 기본 하드웨어 가상화 지원이 제공될 경우 많은 수의 게스트 운영 체제를 지원한다. 참고자료에서 지원되는 게스트 목록을 확인할 수 있다. 오스트레일리아 출신의 IBM 직원인 Rusty Russell에 의해 개발된 Lguest 하이퍼바이저는 기존 방식과는 현저하게 다른 방식으로 가상화를 지원한다. 임의의 운영 체제를 실행하기 위해 전체 가상화 지원을 제공하는 대신 Lguest는 Lguest 사용 x86 Linux 게스트를 위한 경량 의사 가상화를 제공한다. 이를 Linux-on-Linux 가상화라고도 한다. 이는 곧 게스트 운영 체제가 스스로 가상화되고 있음을 알고 있다는 것을 의미하며 이러한 인식을 바탕으로 성능이 향상된다. 하지만 Lguest에서는 KVM과는 달리 플랫폼 가상화를 제공하는 QEMU가 필요하지 않기 때문에 높은 수준의 성능 향상을 얻을 수 있다. 이러한 Lguest 방식에서는 게스트 및 호스트 운영 체제에 하나의 단순한 계층만 필요하기 때문에 전체적인 코드 요구 사항 또한 단순하다. 이제 이러한 변경 사항과 Lguest 환경의 상위 레벨 아키텍처를 살펴보자. 그림 5를 보면 게스트 운영 체제에 단순한 Lguest 코드 계층(의사 가상화)이 포함되어 있다. 이 코드는 수 많은 서비스를 제공한다. 이 코드의 최상위 레벨에는 부팅 중인 커널이 가상화 중인지 여부를 결정하는 코드가 있다. 또한 하이퍼 호출을 통해 권한이 있는 작업을 호스트 운영 체제에 전달하는 추상화 계층( 커널측 기능은 lg.ko라는 동적 적재 모듈로 구현된다. 이 모듈에는 호스트 커널과의 통신을 위한 게스트 운영 체제의 인터페이스가 들어 있다. 첫 번째 요소인 스위처는 실행할 게스트 운영 체제를 컨텍스트에 따라 전환하는 메소드를 구현한다. 이 모듈에는 커널 및 드라이버에 대한 사용자 공간 인터페이스(하이퍼 호출 포함)를 구현한 /proc 파일 시스템 코드( 마지막으로 커널의 Documentation 서브디렉토리에는 새로운 게스트 운영 체제 인스턴스를 실행하는 실행 프로그램 유틸리티( Lguest는 2.6.23(2007년 10월) 이후 주류 커널에 포함되었으며 Rusty Russell에 개발 및 관리되고 있다. 이 하이퍼바이저는 사용자 공간 유틸리티를 포함하여 약 5000줄의 소스 코드로 구성되어 있다. Lguest는 경량임에도 불구하고 진정한 의사 가상화를 제공한다. 하지만 이 단순함으로 인해 따라오는 제약도 있다. 예를 들어, Lguest는 Lguest 사용 게스트 운영 체제만을 가상화하며 현재는 x86 아키텍처에서만 사용할 수 있다. 이러한 제약이 따르기는 하지만 Rusty의 코드를 연구하고자 하는 열의만 있다면 누구나 Lguest에서 제공하는 흥미로운 방식의 가상화 기술을 자세히 살펴볼 수 있다. Linux를 코어로 사용하여 하이퍼바이저를 개발할 경우 매우 실질적인 장점을 얻을 수 있다. 무엇보다도 Linux를 기반으로 하는 하이퍼바이저에서는 발전을 거듭하고 있는 Linux뿐만 아니라 Linux에 포함된 엄청난 양의 우수한 기술을 지속적으로 활용할 수 있다는 장점이 있다. 일반적인 최적화 및 버그 수정 사항, 개선된 스케줄링 및 메모리 관리 기능부터 다양한 프로세서 아키텍처 지원에 이르기까지 Linux는 꾸준히 발전하고 있는 플랫폼이다. 이 상황을 John of Salisbury의 말을 빌려 표현하자면 "거인의 어깨 위에 올라 서 있다"라고 말할 수 있을 것이다. KVM은 길지 않은 시간에 커널 모듈의 추가를 통해 Linux 커널을 하이퍼바이저로 변환할 수 있다는 것을 증명했다. Lguest 하이퍼바이저는 이를 한 단계 더 진척시켜서 의사 가상화의 제약이 있기는 하지만 솔루션을 최소화하는 성과를 보여 주었다. Linux를 플랫폼으로 사용했을 때 얻을 수 있는 또 하나의 장점은 해당 플랫폼을 운영 체제로도 활용할 수 있고 하이퍼바이저로도 활용할 수 있다는 것이다. 따라서 Linux 하이퍼바이저에서 여러 게스트 운영 체제를 실행할 수도 있고 동일한 레벨에서 다른 일반적인 애플리케이션도 실행할 수 있다. 따라서 새 API(Application Programming Interfaces)와 새 플랫폼에 신경 쓰는 대신 표준 Linux 플랫폼을 사용하여 애플리케이션을 개발할 수 있다(모니터링 애플리케이션 또는 하이퍼바이저 관리 애플리케이션이 필요한 경우). 표준 프로토콜(TCP/IP) 및 기타 유용한 애플리케이션(웹 서버)을 게스트와 함께 사용할 수 있다. KVM 섹션에서 설명한 그림 4를 다시 보면 게스트 운영 체제와 함께 KVM 수정 QEMU가 있다는 것을 알 수 있다. 이는 표준 프로세스이며 하이퍼바이저로서의 Linux가 지니고 있는 강점을 보여 준다. KVM은 QEMU를 통해 플랫폼 가상화를 수행하고 Linux를 하이퍼바이저로 사용함으로써 다른 Linux 애플리케이션과 함께 게스트 운영 체제를 실행한다는 의견을 뒷받침했다. 하이퍼바이저 개발과 관련하여 한 가지 분명한 사실은 하이퍼바이저로 인해 새로운 경쟁의 장이 열렸다는 것이다. 30년 전에는 운영 체제가 중심이었고 이를 두고 소수가 경쟁을 벌였지만 오늘날에는 하이퍼바이저를 두고 치열한 경쟁을 벌이고 있으며 Linux가 분명한 역할을 하기 시작했다. 하지만 하이퍼바이저로서의 Linux에 대한 비판도 있기 때문에 다양한 논쟁이 활발하게 펼쳐지고 있다. 몇 년 전에도 임베디드 도메인과 관련하여 이와 같은 논쟁이 있었으며 오늘날 임베디드 운영 체제로서의 Linux는 한결 높아진 위상을 가지고 있다. 그렇다고 해서 비판의 여지가 없는 것은 아니다. 보다 유연하고 우수한 유비쿼터스 운영 체제를 위해서는 아키텍처를 어느 정도는 변경해야 할 수도 있기 때문이다. M. Tim Jones는 임베디드 펌웨어 아키텍트이자 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(현재 2판), AI Application Programming(현재 2판) 및 BSD Sockets Programming from a Multilanguage Perspective의 저자이다. 정지 위성을 위한 커널 개발에서 시작해 임베디드 시스템 아키텍처와 네트워크 프로토콜 개발에 이르기까지 다양한 분야에 대한 공학 지식을 가지고 있다. 콜로라도주 롱몬트 소재의 Emulex Corp.에서 컨설턴트 엔지니어로 활약하고 있다.Linux 하이퍼바이저 분석
문서 옵션
80KB (10 pages)제안 및 의견 피드백
번역 게재일 : 2009 년 10 월 06 일오늘날 Linux?의 가장 중요한 혁신 중 하나는 하이퍼바이저(또는 다른 운영 체제를 위한 운영 체제)로의 변환입니다. 그리고 많은 하이퍼바이저 솔루션에서 Linux를 코어로 사용하고 있습니다. 이 기사에서는 하이퍼바이저에 대한 기본 개념과 Linux를 플랫폼으로 사용하는 두 가지 특별한 하이퍼바이저(KVM 및 Lguest)를 살펴봅니다.
developerWorks에서 Tim Jones의 추가 기사 읽기
그림 1. 공통 하드웨어의 가상화를 보여 주는 단순한 형태의 계층화된 아키텍처
위로
그림 2. 가상 하이퍼바이저에 필요한 최소한의 리소스 맵핑
그림 3. 단순화된 형태의 Linux 기반 하이퍼바이저
위로
그림 4. KVM 하이퍼바이저의 상위 레벨 보기
kvm
이라는 유틸리티를 통해 새 운영 체제가 KVM에서 부팅될 때 새 운영 체제는 호스트 운영 체제의 프로세스가 되며 따라서 다른 프로세스와 마찬가지로 스케줄링될 수 있다. 하지만 Linux의 기존 프로세스와는 달리 게스트 운영 체제는 하이퍼바이저에 의해 커널 및 사용자 모드와는 독립된 "게스트" 모드로 작동 중인 것으로 식별된다./dev/kvm
장치를 통해 맵핑되며 호스트 커널의 물리적 주소 공간에 맵핑되는 고유한 가상 주소 공간을 사용한다. 앞에서 언급한 대로 KVM은 기본 하드웨어의 가상화 지원을 사용하여 전체(네이티브) 가상화를 제공한다. I/O 요청은 호스트 커널을 통해 호스트(하이퍼바이저)에서 실행되는 QEMU 프로세스에 맵핑된다.paravirt_ops
를 통해 구현)도 있다. 예를 들어, 이러한 요청은 호스트 운영 체제에서 수행되기 때문에 게스트가 인터럽트를 비활성화할 수 없다. 그리고 게스트에 대한 장치 추상화를 구현하는 버스도 있으며 콘솔, 가상 블록 드라이버 및 가상 네트워크 드라이버(다른 게스트와의 통신 지원)를 구현한 단순한 드라이버 세트도 있다.
그림 5. x86 의사 가상화에 대한 Lguest의 접근 방식
/dev/lguest
의 경우)도 구현되어 있다. 섀도우 페이지 테이블을 사용하는 메모리 맵핑 기능과 x86 세그먼트 관리 기능을 제공하는 코드도 있다.lguest
)가 있다. 이 파일은 유틸리티로서의 역할과 설명서로서의 역할을 모두 수행한다.위로 위로
교육
제품 및 기술 얻기
토론