티스토리 뷰

VMware Expore 2022에서 지난 2020년 처음 공개했던 Projcet Monterey에 대한 Deep Dive 세션이 진행되었습니다.

Project Monterey Behind the Scenes: A Technical Deep Dive

 

Projcet Monterey는 SmartNIC을 통해 기존의 서버 CPU에서는 컴퓨팅에 대한 가상화를 유지하면서,

네트워킹 및 스토리지 입출력 기능을 SmartNIC 내의 CPU에서 수행할 수 있도록 역할을 분리하는 프로젝트로,

성능 및 규모의 한계를 극복하고, 운영 복잡성을 제거하며, 새로운 보안 모델을 만들고자 하는 목표를 가지고 있었습니다.

 

이번 VMware Expore 2022에서 발표된 vSphere 8로 인해, Project Monterey는 이제 vSpehre의 한부분이 되었습니다.

따라서 프로젝트명 대신 'vSphere Distributed Serviced Engine(DSE)'라는 멋진 기능의 이름으로 변경되었으며,

이제 별도의 제품이 아니라 vMothion이나 DRS같이 vSphere 8에 기본으로 포함되는 기능입니다.

 

대부분의 가상화 기반의 인프라구성은 일반적인 x86 서버 위에 먼저 ESXi를 구성하면서 시작합니다.

ESXi에는 호스트 관리 기능과 컴퓨팅 가상화를 위한 하이퍼바이저 기능이 탑재되어 있으며,

상황에 따라 네트워크 가상화(NSX), 스토리지 가상화(vSAN)가 함께 구성되기도 합니다.

그리고나서 그 위에 애플리케이션들이 가상머신 형태로 구성되어 있습니다.

 

그럼 이상황에서 만약 NIC을 DPU(Data Processing Unit)로 대체하거나 DPU를 추가한다면 어떻게 될까요?

DPU는 기존의 ESXi에 함께 탑재되었던 기능 중 컴퓨팅 하이퍼바이저 기능을 제외한 나머지 기능,

즉 호스트 관리기능과 NSX, vSAN과 같은 기능을 CPU로부터 가져올 수 있습니다.

 

서버 안에 위치한 DPU 안에는 ARM 기반의 CPU가 탑재되어 있으며, 플래시 기반의 디스크도 가지고 있습니다.

바로 이 작은 SmartNIC 위에 ESXi가 설치되고, 그 기반으로 다양한 기능들을 직접 동작시킬 수 있는 것입니다.

즉, 이제 x86의 CPU에서는 더이상의 추가적인 부하를 가져가지 않아도 됩니다.

 

그럼 이 상황을 베어메탈 상황으로 바꿔보겠습니다.

베어메탈에 대한 지원은 Project Moterey가 발표될때부터 논의된 구성으로 향후 지원을 위해 아직은 개발중입니다.

하지만 이 기능이 지원된다면, NSX의 분산방화벽 기능을 베어메탈에 적용하거나,

하나의 NSX 매니저를 통해서 베어메탈과 가상머신을 함께 제어할 수도 있습니다.

즉, 다양한 컴퓨팅 환경에 대해 하나의 보안 관리 및 가시성을 제공해 더 안전한 인프라 환경을 관리할 수 있습니다.

 

여기서 사용되는 DPU는 제조사마다 규격이 일부 다르긴 하지만,

25G 또는 100G 속도의 네트워크 인터페이스를 가진 특수목적용 네트워크 카드입니다.

 

DPU 위에는 ARM 기반의 CPU와 Programable Aacelerator가 탑재되어 있고,

이 둘사이의 고속 연결을 위한 고대역폭의 연결을 지원하고 있습니다.

또한, ESXi 파일 저장 및 내부에 로그를 저장할 수 있도록 별도의 플래시 메모리도 가지고 있어

이 작은 하드웨어 위에서 ESXi가 동작하고, 가상화된 네트워크 기능들이 돌아갈 수 있습니다.

 

하지만, DPU만 현재 사용중인 x86에 설치한다고 사용할 수는 없습니다.

DPU 외에도 일부 특화된 하드웨어 연결이 추가적으로 필요하기 때문입니다.

 

대부분의 서버에 장착되어 있는 Out of Band(OOB)를 통한 제어 기능과 DPU간의 연결이 필요합니다.

이를 위해 추가적인 Daughter 카드가 필요하며, DPU와 IDRAC/ILO 양쪽 모두에 연결되어 서로간의 연결을 이어줍니다.

이제 Daughter 카드는 DPU를 vSphere 환경에서 사용할 수 있게 도와줍니다.

 

즉, DPU를 통한 vSphere8 사용은 모든 x86 하드웨어가 아닌 완성품 제조사의 인증된 DPU ready 서버만 가능합니다.

 

현재 인증되어 있으며, vSphere에서 사용가능한 DPU 카드는 NVIDIA와 PENSANDO(AMD) 그리고 Intel에서 제조하고,

제조된 DPU는 Dell Tech, HPE, Lenovo를 통해 x86 완제품 형태로 제공됩니다.

따라서 사용자는 x86 서버 구매시 어떤 제조사의 서버에 어떤 제조사의 DPU를 장착할 것인가를 선택할 수 있습니다.

 

DPU에서 활용하고자 하는 첫번째 기능은 바로 네트워크 기능입니다.

로드밸런서, 라우터, 스위치, 보안등의 네트워크 관련 기능들을 DPU를 통해 제공하는 것입니다.

현재는 NSX 관련된 모든 기능이 x86 CPU에서 동작하고 있지만,

경령화된 NSX를 기반으로 DPU에 구성된 ESXi 위로 네트워크 기능을 이동시켜 성능향상을 가져올 수 있습니다.

 

먼저 현재 상태의 데이터 흐름에 대해 살펴보겠습니다.

 

현재의 x86 기반의 컴퓨팅 환경에서 NSX는 표준 분산 스위치(Standard VDS)를 사용합니다.

표준분산스위치는 다른 네트워크 기능들처럼 기본적으로 Interrupt를 기반으로 동작합니다.

즉, 패킷이 물리적인 NIC에 들어오면, 기본적으로 Interrupt를 발생시킵니다.

 

이 과정에서 CPU는 프로세스를 실행하고 있는 상태에서 Interrupt 요청을 받고,

처리중인 프로세스의 상태 또는 레저스터 값(context)를 저장 후, 새로운 프로세스로 교체하는 작업,

즉, Context Switching이 발생합니다.

 

이후 패킷에 대해 어떤 목적지의 VM들이 이 패킷을 필요로 하는지, 어디로 보내야할지,

아니면 어떤 보안정책을 적용해야할지, 혹시 drop이 필요하지는 않은지, 분산방화벽에서 패킷이 허용되어 있는지 등

이후 패킷에 대해 수행해야 할 작업을 CPU를 통해 확인합니다.

 

즉 이와 같은 데이터 흐름상에서는 새로운 패킷이 들어올때마다 CPU에 항상 interrupt가 발생합니다.

애플리케이션 증가에 따라 초당 처리해야하는 패킷이 증가할수록, 더 많은 interrupt를 만들게 되며,

응답시간이나 성능등에 있어 악영향을 미칠 수 있습니다.

 

만약 애플리케이션이 지연시간에 민감하거나 특별한 성능 요구사항을 가지고 있을 경우, 

추가적인 향상된 데이터 경로 모델을 활용할 수도 있습니다.

 

첫번째, 성능 중심의 데이터 경로 모델로 SR-IOV가 있습니다.

 

SR-IOV는 물리적인 NIC을 가상화를 통해 다수의 NIC 카드로 만들어 사용하게 해줍니다.

SR-IOV가 제공하는 PF(Physical Function)는 물리적인 PCI 카드로 vSphere 하이퍼바이저가 사용하며,

VF(Virtual Function)는 가상으로 생성된 PCI 카드로 VM이 직접 접근하여 사용합니다.

VF를 사용하기 위해 애플리케이션은 NIC 드라이버를 가지고 직접적으로 물리적인 NIC에 접근해야 합니다.

즉, 물리적인 하드웨어가 무엇인지에 대해서도 애플리케이션이 관리해야 합니다.

 

SR-IOV는 x86 서버를 위한 완전한 pass-through 모델로 ESXi뿐만 아니라 NSX도 완전히 bypass 합니다.

이를 통해 매우 적은 지연시간 및 높은 대역폭을 보장할 수 있습니다.

다만, vSphere에서 제공되는 HA, DRS 또는 vMotion 같은 다양한 기능과

NSX에서 제공되는 네트워크와 보안 관련 다양한 기능들을 활용할 수 없게 됩니다.

 

이러한 제약사항들로 인해 가상화 환경에서 대중적으로 사용되고 있지는 않습니다.

 

두번째 방법으로는 NSX에서 지원하는 Enhanced Data Path(EDP)가 있습니다.

EDP는 주로 DPDK를 사용하는 NFV 워크로드들을 타겟으로하며,

x86의 CPU 코어 중에 일부 코어를 패킷 처리를 위해 전담 CPU 코어로 할당하여 사용합니다.

이는 다른 애플리케이션이 사용할 수도  있었던 x86으로부터 컴퓨팅 파워를 빌려쓰는 것입니다.

 

기본적으로 EDP는 패킷이 물리적인 NIC을 통해 들어오면,

할당된 전담 CPU 코어들을 이용하여 패킷을 shared memory 공간으로 지속적으로 전달합니다.

shared memory 공간에서 특정 패킷이 확인되면, 소프트웨어 기반의 Fast Path에서 먼저 살펴봅니다.

만약 Fast Path에서 유사한 Flow가 확인된다면, 어떤 VM으로 패킷이 전달될지가 정해집니다.

그러나 찾을 수 없다면, 즉 Cache miss가 발생하면, Slow Path로 넘어갑니다.

Slow Path는 NSX manager로부터 전달받은 설정을 기반으로 네트워크와 보안의 관점에서 무엇을 해야할지 결정합니다.

 

Enhanced Data Path의 가장 큰 장점은 VMXNET3의 반가상화 드라이버를 사용할 수 있다는 점입니다.

즉, 애플리케이션은 물리적인 하드웨어가 무엇인지 신경쓸 필요가 없습니다.

 

SR-IOV와 Enhanced Data Path 모두 애플리케이션의 네트워크 성능 향상을 위해 사용되고 있으며, 좋은 점들이 있습니다.

그러나 SR-IOV는 엄격한 제약사항을 가지고 있으며, EDP의 경우에는 고성능을 위해 CPU 코어의 할당을 필요로 합니다.

이와 같은 단점을 극복하기 위해 DPU 기반 가속화는 SR-IOV와 EDP의 장점만을 모아 구현하였습니다.

 

하이퍼바이저와 구성된 DPU 내부에서는 ARM CPU가 돌아가고 있으며, 하드웨어 가속기능도 탑재하고 있습니다.

이 경우, 패킷이 DPU로 들어온다면, 제일먼저 DPU에 탑재된 하드웨어 가속기를 만나게 됩니다.

여기서 어떤 VM으로 보내야할지 확인된다면, 하드웨어 가속기가 바로 처리합니다.

그러나 찾을 수 없다면, 즉 어디로 보내야할지 결정되지 못한다면, 

EDP와 마찬가지로 CPU에 위치한 소프트웨어 Fast Path를 거쳐 Slow Path로 정보가 전달되어,

해당 경로에 대한 처리를 하고, 새롭게 확인된 정보는 다시 Fast Path를 거쳐 하드웨어 가속기에 업데이트 됩니다.

 

이러한 동작 방식이 Data Path Offload의 핵심입니다.

ARM CPU를 사용하여 수 많은 경로 결정을 처리하여 x86의 CPU 사용량은 줄이고,

하드웨어 기반 가속기를 사용하여 더욱 빠른 초당 처리 성능 및 적은 지연시간을 가져옵니다.

이 방식을 이용하여 NSX의 동작 위치를 x86 CPU로부터 DPU로 완전히 이동하였습니다.

 

DPU 기반 가속화 이후 x86 CPU에서의 동작하는 ESXi의 데이터 처리 방식에 따라 2가지 모드를 제공합니다.

바로 MUX와 UPTv2(Unified Uniform Pass Through)의 2가지 모드입니다.

 

첫번째, MUX 모드입니다.

MUX 모드에서는 완전히 x86 CPU를 제외하지는 않고, 일부분의 CPU 자원을 사용합니다.

네트워크 패킷의 경로 결정이나 보안의 적용은 DPU에서 이미 이루어 졌기 때문에,

추가적인 패킷의 복제나, VLAN 태깅 같은 기능에 있어서 CPU 자원을 활용합니다.

물론 일반적인 x86 기반의 non-offloaded 상태보다는 훨씬 적은 CPU를 사용하며,

이미 기본적인 네트워크 경로에 대한 처리는 DPU의 가속 기능을 활용했기 때문에 훨씬 빠른 처리 성능을 보여줍니다.

 

두번째, UPTv2 모드입니다.

UPTv2 모드에서는 완전히 x86 하이퍼바이저를 bypass 하고, 모든 VM은 VMXNET3 반가상화 드라이버를 사용합니다.

이를 통해 SR-IOV에서 발생했던 하드웨어에 대한 의존성을 제거시켰습니다.

즉 NSX의 네트워크나 보안 기능을 사용할수도 있고, DRS나 HA, FT같은 vSphere의 모든 기능을 사용할 수도 있습니다.

이제 SR-IOV와 비교할만한 성능을 발휘하면서, 관련된 제약사항을 모두 제거하였습니다.

 

또 하나의 고려할 부분은 가속화와 Offloaded의 지원 여부입니다.

현재 NSX의 DPU를 통한 가속화에 있어서 거의 모든 네트워크와 보안 부분을 DPU로 이동시키고 있습니다.

그러나 초기 상태에서, 성능 가속화(Accelerated) 및 DPU로의 Offloaded가 모두 지원되는 기능과,

가속화는 지원되지 않고 DPU의 ARM CPU를 이용한 Offloaded만이 지원되는 일부 기능으로 나누어 집니다.

예를 들어, 분산IPS 기능의 경우 offloaded되었지만, 가속화는 사용할 수 없습니다.

 

UPTv2와 MUX 모드를 비교해보면,

두 모드 모두 vSphere와 NSX에서 제공하는 모든 기능을 사용할 수 있으며, DPU 사용환경에서만 가능합니다.

 

다만 UPTv2 모드에서는 x86에서 수행되는 것이 없기 때문에, 거의 0에 가까운 CPU 사용량을 보여줍니다.

상대적으로 MUX 모드에서는 VLAN 태깅이나 패킷 복제 등을 위해 작은 MUX용 스위치를 사용하기 때문에

비교적 많은 CPU 자원을 사용하게 되나, Offloaded 되지 않은 상태와 비교했을때는 확실히 적은 사용량을 보여줍니다.

 

UPTv2 VM을 생성할때, VM을 위한 Guest 메모리의 예약이 필요하나, MUX 모드에서는 메모리 예약이 필요하지 않습니다.

 

UPTv2는 vSphere v7 기반의 VMXNET3 드라이버를 필요로 하나,

MUX 모드에서는 하위 호환성이 좋아서 특정한 드라이버에 대한 요구사항이 없습니다.

 

UPTv2는 x86 구간을 bypass하기 때문에 저지연 및 고대역폭을 위한 더 나은 성능 향상을 가져오며,

MUX 모드에서도 DPU가 가진 하드웨어 가속 기능을 통해 성능 향상을 가져옵니다.

 

UPTv2의 경우 VF를 사용하기 때문에, 각 제조사별 DPU에서 지원하는 최대 VF 수량에 제한을 받기도 합니다.

반면 MUX 모드는 소프트웨어 기반의 스위치를 사용하여 이러한 구성이 제약없이 더 많은 VM을 수용할 수 있습니다.

 

어떠한 모드를 사용할지는 VM 레벨에서 결정하기 때문에,

동일한 하이퍼 바이저 위에서 UPTv2를 사용하는 VM과 MUX 모드를 사용하는 VM이 모두 동작할 수 있습니다.

또한, 기능은 vNIC 레벨에서 수행되기 때문에,

하나의 VM에서 UPTv2 모드를 사용하는 NIC과 MUX모드를 사용하는 NIC을 동시에 가질수도 있습니다.

 

실제 애플리케이션(Redis)을 사용할 때의 성능 차이를 비교해보겠습니다.

왼쪽의 밝은 파란색이 non-offloaded된 일반적인 분산스위치 환경에서 EDP standard로 구성된 환경이고, 

오른쪽의 어두운 파란색이 네트워크와 보안 기능이 offloaded되고 가속화된 DPU 기반에서,

하이퍼바이저를 pass-throuth하는 UTPv2 모드로 구성된 환경입니다.

 

막대그래프는 초당 처리 세션을 나타냅니다.

DPU를 사용할때가 x86 CPU만 사용할때보다 비슷하거나 아니면 조금 더 나은 성능을 보여줍니다.

하지만 서로간의 Core수 차이를 보면, 36개 Stream 기준으로,

가상 네트워크를 위해 사용되던 12개의 코어가 거의 0에 가깝게 줄어든 것을 확인할 수 있습니다.

 

이제 DPU를 사용한다면,

CPU의 역할 중 일부를 DPU로 Offloaded하여 동일한 호스트에서 더 많은 워크로드를 구현할 수 있으며,

더 높은 네트워크 성능을 얻을 수 있습니다.

 

그럼 남은 CPU를 Redis VM이 더 사용할 수 있도록하고 측정해 보았습니다.

동일한 CPU 코어 수량의 환경에서 총 48개 CPU 코어 중 7개는 네트워크 기능이 사용했고,

41개만이 Redis VM에서 사용되었지만, UPTv2에서는 48개 코어 모두를 Redis VM이 사용할 수 있습니다.

 

이를 통해 초당 처리하는 트랜잭션은 36%가 증가하였으며, 네트워크의 지연도 27%나 감소하였습니다.

즉, SR-IOV와 비슷한 성능효과를 발휘하면서, vMotion이나 DRS 같은 vSphere의 장점도 활용할 수 있습니다.

 

이제 DPU를 사용한다면,

CPU의 역할 중 일부를 DPU로 Offloaded하여 동일한 호스트에서 더 많은 워크로드의 성능을 낼 수 있으며,

더 빠른 네트워크 지연시간을 얻을 수 있습니다.

 

 

NSX의 보안 기능은 매우 중요한 역할을 담당합니다.

대부분의 물리적 보안 장비는 데이터센터 내부의 East-West 트래픽에 대한 가시성을 가지지 못합니다.

하지만, NSX의 보안 기능인 분산방화벽이나 분산 IDP 기능을 이용하면, 누구도 가지지 못하는 가시성을 가질 수 있습니다.

모든 기능은 모든 VM의 vNIC 레벨에서 이루어지며, 이 기능은 하이퍼바이저에서 동작합니다.

 

이 경우에 DPU를 사용한다면, 아키텍처는 변하지 않습니다.

또한 분산방화벽/IPS와 관련된 기능도 전혀 바뀌지 않았으며, 여전히 East-West 트래픽에 대한 가시성을 제공합니다.

다만, 해당 기능의 동작 위치를 DPU로 변경함으로써 성능 향상을 가져오고,

x86 기반의 하이퍼바이저 앞에서 보안을 처리하기 때문에 보안의 경계를 향상 시킬 수 있습니다.

 

결론적으로,

DSE(Distributed Services Engine)로 새롭게 명명된 Project Montrey는 vSphere8의 기능으로써,

인증된 제조사에서 구성된 DPU ready 서버에서 ARM CPU가 장착된 DPU 카드에서 동작합니다.

DPU 카드로 기존 네트워킹 기능의 Offload를 통해 네트워크의 성능 향상 및 지연시간 감소를 가져오며,

x86 CPU의 절감을 통한 추가적인 워크로드의 활용 또는 기존 워크로드의 성능 향상을 가져올 수 있습니다.

댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크