클라우드

AWS Nitro 시스템 & Nitro 하이퍼바이저 이해하기

팬도라 2024. 8. 6. 18:22
반응형

 

AWS 클라우드를 사용하면 가장 많이 접근하게 되는 서비스가 Amazon Elastic Compute Cloud (Amazon EC2)입니다.

가상화기반으로 구성된 EC2를 통해서 안전하고 크기 조정이 가능한 컴퓨팅 파워를 AWS 클라우드상에 배포할 수 있고, 99.99%의 가용성을 지원하는 SLA 약정을 기반으로 몇 분 안에 용량 크기를 조정할 수 있습니다. 

 

저에게 AWS에서 제공하는 핵심 서비스가 무엇이냐고 여쭤본다면 저는 S3, EC2, Lambda 3가지라고 말할 만큼 EC2는 가장 기본적이자 근본 서비스라고 할 수 있습니다. 

 

그렇다면 AWS는 어떤 방식을 통해서 고객들에게 EC2 서비스를 제공하고 있을까요? 다양한 모델과 타입을 통해 전세계 고객에게 서비스 중인 EC2에 대해 조금 딥다이브하게 알아보고자 합니다. 

 


 

현재 AWS EC2는 HVM (Hardware Virtual Machine)기반의 Nitro 시스템에 속해있는 Nitro 하이퍼바이저 환경에서 동작하고 있습니다. 이를 통해서 가상화 오버헤드를 없애고 호스트 하드웨어에 대한 모든 액세스 권한이 필요한 워크로드를 지원하는 베어 메탈과 유사한 기능을 제공합니다. 

 

아래 그림에서 볼 수 있듯이 Nitro 시스템은 가상화 서버 환경에 근간에서 동작하는 플랫폼을 통합해서 부르는 용어이며, 다음 5가지의 주요 기능을 포함하고 있습니다. 

 

  • Nitro Card 
    • Nitro Card는 기능을 지원하는 데 따른 IO의 부담을 덜어 IO 속도를 높임으로써 궁극적으로는 전반적인 시스템 성능을 개선하는 카드 제품군입니다. 주요 카드로는 Nitro Card for VPC, Nitro Card for EBS, Nitro Card for Instance Storage, Nitro Card Controller, Nitro Security Chip Card 등이 있습니다.
  • Nitro 보안 칩 
    • Nitro 보안 칩은 가상화 및 보안 기능이 전용 하드웨어 및 소프트웨어에 오프로드되어 공격 표면이 최소화된 가장 안전한 클라우드 플랫폼을 지원합니다. 또한 잠금형 보안 모델은 Amazon 직원을 포함한 모든 관리 액세스를 금지하여 인적 오류 및 변조가 발생할 가능성을 없앱니다.
  • Nitro 하이퍼바이저 
    • Nitro 하이퍼바이저는 메모리 및 CPU 할당을 관리하고 베어 메탈과 차이가 없는 성능을 제공하는 경량 하이퍼바이저입니다.
  • Nitro 엔클레이브 
    • AWS Nitro 엔클레이브를 통해 고객은 Amazon EC2 인스턴스 내 PII(개인 식별 정보), 의료, 금융 및 지적 재산권 데이터와 같은 매우 민감한 데이터를 추가로 보호하고 안전하게 처리하도록 격리된 컴퓨팅 환경을 생성할 수 있습니다. Nitro 엔클레이브는 EC2 인스턴스에 대한 CPU 및 메모리 격리를 제공하는 동일한 니트로 하이퍼바이저 기술을 사용합니다
  • NitroTPM 
    • Trusted Platform Module(TPM) 2.0인 NitroTPM은 고객이 TPM 기반의 애플리케이션 및 운영 체제 기능을 EC2 인스턴스에서 보다 손쉽게 사용할 수 있도록 지원하는 보안 및 호환성 기능입니다. TPM 2.0 사양을 준수하므로 TPM 기능을 사용하는 기존 온프레미스 워크로드를 EC2로 더 쉽게 마이그레이션 할 수 있습니다. NitroTPM은 AWS Nitro System을 사용하여 보안 암호화 오프로드 기능을 제공하며, EC2 인스턴스에서 동일한 키에 액세스 하지 않고도 키를 생성, 저장 및 사용할 수 있도록 합니다. 또한 NitroTPM은 TPM 검증 메커니즘을 통해 인스턴스의 무결성에 대한 암호화 증명을 제공할 수 있습니다.

 

오버헤드가 거의 없는 가상화 환경이라는 부분에서 의아에 하시는 분들이 있으실 것이라 생각합니다. 이에 대한 부분은 아래에 자세히 서술하도록 하고, 지금은 Nitro 시스템을 통해서 얻을 수 있는 장점에 대해 먼저 서술하겠습니다.

2017년 Nitro 시스템 아키텍처가 완성된 이후에는 베어메탈 성능의 100%를 EC2 가상화 환경에 배정할 수 있었습니다. 

 

 

이러한 특성으로 인해 Nitro 이전의 C4 타입과 Nitro 이후의 C5 타입 인스턴스, 그리고 I/O 특화 타입의 I3.metal 베어메탈 인스턴스와 비교하면 다음과 같은 특성을 볼 수 있습니다. 

 

기존의 가상화 환경에서는 네트워크 응답이 150 µs 이내로 유지해야 하는 특수한 환경은 지원할 수 없었지만, Nitro 시스템을 도입한 이후에는 이러한 일들이 가능해졌으며, 베어메탈 시스템과 가상화 환경의 차이도 거의 없는 것을 확인할 수 있습니다. 

Nitro 시스템을 통해 네트워크 성능이 비약적으로 좋아지면서 100 Gbps 이더넷 네트워킹을 제공하는 최초이자 유일한 클라우드 제공자가 되었습니다. 

 

이번에는 스토리지 지연 시간을 확인해 보겠습니다. 다음 그림은 Nitro 시스템 인스턴스 스토리지 개선 사항을 보여주고 있습니다. 

 

I/O 특화 타입의 I3 인스턴스와 비교했을 때, Nitro 시스템이 적용된 인스턴스가 최대 4배의 지연시간이 줄어든 것을 확인할 수 있습니다. 

 


 

AWS EC2가 가상화 환경에서 동작하고 있음에도 불구하고 베어메탈 시스템과 비교했을 때 성능차이가 없는 이유는 AWS가 그동안 가상화 기술에 대한 끊임없는 발전이 있었기 때문입니다. 

 

Amazon EC2 인스턴스는 초기부터 Xen PV (반가상화)를 채택한 후 점진적으로 HVM (Hardware-Assisted Virtualization)과 SR-IOV를 통한 하드웨어 가속기술을 추가했으며, 마침내 2017년에는 소프트웨어와 하드웨어를 통합한 Nitro 시스템을 출시하였습니다. 

 

전통적으로 온프레미스 환경에서 서버는 어떠한 기능을 수행하는 단독적인 모델로 구성되어 있었습니다. 하지만 하나의 역할을 수행하는 서버의 낮은 사용량으로 인해 이를 효과적으로 사용하고자 하는 니즈가 있었고 이것이 오늘날의 가상화 기술이 되었다고 생각하셔도 됩니다. 

 

가상화라는 개념은 최근에 나온것이라고 생각할 수 있지만 기술자체의 콘셉트와 내용은 1960년대에 정립이 시작되었습니다.  시분할 기법을 통해서 물리 장치가 매우 짧은 시간 단위로 분할하여 여러 애플리케이션을 수행할 수 있는 것으로 시작하여 (현대의 모든 병렬처리가 이와 같은 방법으로 데이터를 처리하고 있음), 1962년 ~ 1972년에 사용된 세계 최초의 슈퍼컴퓨터 Atlas Computer는 실제 물리적 메모리보다 더 큰 주소 공간을 사용할 수 있게 하는 가상 메모리 기능이 탑재되었고, 1972년 하드웨어 수준의 가상화 기술을 제공하는 IBM의 VM/370 하이퍼바이저를 통해서 여러 개의 가상 머신을 실행할 수 있었습니다. 

 

오랜 시간 동안 발전한 가상화 방식은 어떠한 방식으로 구성되었는지에 따라서 크게 2가지로 나눌 수 있습니다.

(본글에서는 컨테이너는 제외하겠습니다.) 

 

Tpye 1은 하드웨어 위에 하이퍼바이저가 올라가는 방식으로 Xen, ESXi, KVM이 여기에 속하며, PV 혹은 반가상화라는 호칭이 있습니다. 게스트 OS는 하이퍼바이저와 통신하기 위해 Hyper Call이라는 방식을 사용하기 때문에 게스트 OS의 커널을 수정해야 한다는 단점이 있지만 (윈도우의 경우 PV 드라이버 사용) 게스트 OS가 하이퍼바이저와 직접 통신하고 있기 때문에 Type 2 가상화 대비 오버헤드를 줄여 성능의 이점이 있다고 알려져 있습니다. 

 

Type 2는 호스트 OS에 하이퍼바이저가 올라가는 방식으로 VMware, Virtual Box 등이 속하며 전가상화라고 부릅니다. 전가상화는 하드웨어를 전부 에뮬레이트하여 가상화 시키기 때문에 어떤 OS와 상관없이 동작할 수 있다는 이점이 있지만 하이퍼바이저와 호스트 OS 간 바이너리 번역 (Binary Translation)을 사용하기 때문에 구현이 까다롭고 바이너리 번역과정에서 빈번한 컨텍스트 스위칭이 발생하여 성능저하가 발생한다는 문제가 있었습니다. 

 

AWS가 2006년에 출시한 첫 번째 EC2 인스턴스 유형 m1.small은 Xen 가상화 기술을 사용했고, 다음과 같이 구현되었습니다. 

 

Xen은 가상 머신에서 CPU, 메모리 가상화를 구현했지만, 네트워크와 스토리지와 같은 I/O 기능은 Frontend에서 Xen bus를 통해 Dom0의 Backend로 전달되어 특권명령을 통해 디바이스 드라이버를 호출하는 방식으로 구현되었습니다. 

 

이후 본격적으로 CPU 제조사에서 Intel VT-x, AMD-V와 같은 가상화 기술을 지원하면서 AWS는 Xen HVM 3.0 방식을 도입하게 됩니다. HVM 도입으로 인해 Type 1, Type 2 관계없이 하드웨어 가상화를 사용할 수 있게 되면서 이전과 대비하여 더 효율적인 가상화 구현이 가능해졌습니다. 이후 Xen HVM 4.0.1이 도입된 시점에는 PVHVM  혹은 PV on HVM 가상화 기술이 도입되었고, Xen AWS 2013에서는 NIC에 SR-IOV 기능이 추가되면서 네트워크 처리량이 급격하게 향상되기에 이릅니다. 

 

 

Xen AWS 2017에는 NVMe 스토리지에 SR-IOV 기술이 접목되면서 i3 인스턴스 유형이 공개됩니다. 

 

 

SR-IOV 기술이 본격적으로 접목되면서 Dom0에서 일괄적으로 처리해야 했던 I/O 작업이 IOMMU를 통해 네임스페이스로 분리된 VF로 VM에 맵핑되고, 컨트롤러가 PF로 데이터라 처리될 수 있도록 변경되었습니다. 일반적으로 NIC에서 사용되었지만 시간이 지나면서 스토리지에도 적극적으로 적용되기에 이릅니다. 

 

다만 HVM을 통한 하드웨어 가상화 기술이 적극적으로 활용되었다고 할지라도 Xen 가상화 아키텍처 방식에서는 여전히 Dom0는 반드시 필요합니다. 이러한 상황으로 인해 I/O 통신간 거리로 인한 오버헤드와 Dom0를 구동하기 위한 CPU 성능이 소모됩니다. 

상황에 따라 다르겠지만 순수 Xen 아키텍처로 가상화 구동시 베어메탈에 비해 최대 30% 이상의 리소스가 소모되는 만큼, 대규모 가상화 환경을 제공해야 하는 AWS 입장에서는 그리 달갑지 않았을 것입니다. 

 

이러한 문제를 해결하기 위해 AWS는 2017년 기존의 Xen 하이퍼바이저 방식을 버리고 KVM (Kernel-based Virtual Machine) 기반의 Nitro Hypervisor를 새롭게 개발하게 됩니다. 

 

KVM의 가장 큰 특징은 CPU와 메모리의 가상화 기능만 제공할 뿐, 어떠한 장치도 시뮬레이션 할 수 없기 때문에 네트워크, 그래픽, 스토리지 등을 활용하기 위해서는 VMM (Virtual Machine Monitor)이 필수적으로 요구되며, KVM에서는 QEMU를 사용하고 있습니다. 

다만 AWS는 KVM으로 이전해도 VMM으로 인한 성능하락이 Dom0와 동일하다고 판단, 해당 기능을 사용하지 않고 Nitro 카드를 개발하여 I/O 작업에 대한 모든 것을 Nitro 카드가 처리할 수 있도록 변경합니다. 

 

하이퍼바이저의 역할을 최소한으로 줄인 경량화된 하이퍼바이저와 I/O 작업을 수행하기 위한 독립적인 카드 구성, 보안에 관련된 전용 칩까지 포함한 AWS의 새로운 가상화 환경을 Nitro 시스템이라고 지칭합니다. 

 

기존의 하이퍼바이저가 CPU와 메모리 가상화와 더불어서 주변장치의 I/O 처리로 인한 성능저하가 발생할 수 밖에 없는 구조였지만 Nitro 카드가 VPC, EBS, 로컬 스토리지, 보안에 관련한 모든 I/O를 VM이 직접 호출하여 처리할 수 있게 되면서 오버헤드 문제가 완전하게 사라지게 되었습니다. 

실제로 Nitro 하이퍼바이저의 오버헤드는 0.1% ~ 1% 미만으로 거의 베어메탈과 동일한 성능을 보여주고 있으며, 이러한 특성으로 인해 위해서 설명드렸던 성능혁신이 가능하게 되었습니다.

 

Nitro 시스템이 적용된 EC2는 c5 부터 적용되었으며, 현재 출시되는 EC2는 Nitro 시스템에서 동작한다고 보시면 됩니다. 


 

이번에는 Nitro 카드에 대해서 자세히 알아보도록 하겠습니다. Nitro 카드는 서버와 PCI Express 슬롯으로 연결되며, 다음 유형으로 분류될 수 있습니다. 부가적으로 EC2 mac1.metal 및 mac2.metal은 Thunderbolt를 통해 Nitro 카드가 연결되고 같이 보관됩니다. 

  • Nitro Card Controller
  • Nitro Card for VPC
  • Nitro Card for EBS
  • Nitro Card for Instance Storage
  • Nitro Security Chip Card

Nitro 시스템은 하나 이상의 Nitro 카드를 포함할 수 있습니다. 만약 두 개 이상인 경우 별도의 통신 채널을 통해서 독립적으로 통신할 수 있는 구조로 구성되어 있습니다. 전체 아키텍처를 살펴보면 다음 그림과 같습니다. 

 

Nitro Card Controller전체 시스템에 대한 신뢰의 하드웨어 루트를 제공합니다. 시스템의 다른 구성 요소에 로드된 펌웨어를 포함하여 서버 시스템의 다른 모든 구성 요소를 관리하며, Nitro 컨트롤러에 직접 연결된 암호화된 SSD에 저장됩니다. 해당 컨트롤러는 OS 부팅 시 시스템이 예기치 않게 손상되지는 않았는지 확인하는 것은 물론 VPC, EBS 통신을 위한 게이트웨이의 역할도 수행합니다. 

 

Nitro Card for VPC는 AWS VPC 환경에서 네트워크 통신을 전담합니다. SR-IOV 개념을 기반으로 VPC의 데이터 플레인 오프로드를 완벽하게 구현되었습니다. 이를 통해 ENA (Elastic Network Adapter)를 통해 최대 25Gbps 대역폭을 제공하며, EFA (Elastic Fabric Adapter)는 AWS에서 자체 개발한 네트워크 프로토콜인 SRD(Scalable Reliable Datagram)를 탑재하여 최대 400 Gbps 네트워크 대역폭을 사용할 수 있습니다. 

이것이 가능한 이유가 Nitro Card for VPC를 통한 네트워크 가속 기능을 구현했기 때문입니다. 고객은 MPI (Message Passing Interface)를 활용하여 OpenFabrics Alliance Libfabric SDK/API 또는 NCCL (NVIDIA Collective Communication Library)를 사용할 수 있습니다. 

다만 EFA와 같은 고속 네트워크는 커널을 바이패스하여 TCP/IP 스택이 제거된 상태이기 때문에 일반적인 환경에서 사용하면 안됩니다. 

 

Nitro Card for EBS는 NVMe SSD를 적극적으로 지원하며 최대 10TB의 용량과 100만 IOPS 성능을 제공하는 동시에 마이크로초 미만의 지연시간을 제공합니다. 이러한 성능은 HDD와 SSD 기반의 스토리지 성능을 100배 이상 향상할 수 있습니다. 

AI 기술의 발전에 따라 다양한 산업 규모에 AI 기술들이 적용되기 시작했고, 이러한 AI를 학습시키기 위한 딥러닝 작업에는 매우 높은 네트워크 처리량과 높은 컴퓨팅 성능 그리고 컴퓨팅 노드와 스토지지 노드 간의 대량의 데이터를 처리하기 위한 스토리지가 필요합니다. Xen 가상화 기술의 전통적인 Forint-end/Back-end I/O 아키텍처는 2017년 Nitro Hypervisor가 출시될 때까지 유지되었지만 현재는 모든 데이터 처리는 Nitro Card for EBS가 전담하고 있습니다. 

Nitro Card for EBS는 EBS 데이터 플레인 오프로딩을 완벽하게 구현할 수 있고, 표준 NVMe 드라이버를 통해 카드와 통신하여 EBS 볼륨 데이터 암호화 및 복호화, I/O 가속과 QoS 등을 지원합니다. 또한 EC2 인스턴스와 스토리지 간의 I/O를 사용자별로 격리하여 다른 유저간 I/O로 인한 성능간섭을 차단합니다. 

 

Nitro Card for Instance Storage는 로컬 EC2 인스턴스 스토리지를 위해 사용되는 전용 Nitro 시스템입니다. EC2 자체적으로 연결되어 있는 NVMe 로컬스토리지를 SR-IOV 기술과 결합하여 IOPS 및 대기시간을 크게 개선했습니다.

해당 기능은 Amazon EC2 인스턴스 스토어가 지원하는 EC2에서 NVMe 스토리지를 지원하는 C1, C3, M1, M2, M3, R3, D2, H1, I2, X1, X1e 등의 인스턴스에서 자동으로 연결되어 사용할 수 있습니다.  

 

Nitro Security Chip Card는 Nitro Controller에서 제어되며, 서버의 하드웨어 리소스를 지속적으로 모니터링하고 보호합니다. 호스트 OS가 시작될 때 펌웨어가 손상되지 않았는지 확인하고, 승인되지 않은 방식으로 수정되거나 변경되지 않도록 합니다. 특히 베어 메탈 인스턴스에서는 하이퍼바이저가 없기 때문에 Nitro Security Chip이 시스템 펌웨어를 조작할 수 없도록 하는 중요한 보안 기능을 제공합니다. 이를 통해 악의적인 사용자가 펌웨어를 수정하지 못하도록 보호합니다.

 


 

현재 AWS Nitro 시스템은 re:Invent 2022에 AWS Nitro v5까지 공개되었습니다. 트렌지스터 수를 2배로 늘리고 PCIe 대역폭을 50% 개선시켜 기존대비 60%의 성능 향상을 이루었다고 발표했습니다.

 

 

지금까지 AWS Nitro 시스템에 대해 딥다이브하게 알아보았습니다. 혹시나 궁금하신점이 있으시거나 잘못된 부분이 있다면 언제든지 댓글로 소통 바랍니다. 감사합니다.