우리는 클라우드 개발에 진심입니다! - SmartNIC 편
시작하며
안녕하세요? 카카오엔터프라이즈에서 클라우드를 개발하는 멀티버스팀 Cosmos파트의 Alvin(김기명)입니다.
“따라올 테면 따라와 봐”라는 광고 속 대사, 기억하시나요? 2000년 ADSL 가정용 인터넷 광고에서 초고속을 강조하기 위해 사용되었던 문구인데요. 당시에 정말 획기적이었던 이 인터넷의 속도는 고작 8 Mbps ADSL였습니다. 그리고 2022년, 클라우드 시대의 우리는 지금 10 Gbps가 인터넷을 사용하고 있습니다. 20년 전과 비교하면 우리는 약 1,200배 빠른 인터넷을 쓰고 있는 셈입니다.
조금 더 들어가 이더넷(Ethernet) 표준을 살펴보면, 2017년 IEEE 802.3 이더넷 표준화 그룹에서는 400 Gbps 이더넷 속도 표준인 802.3bs 규격을 승인했고, 올해 400 Gbps 제품이 양산될 예정이라고 합니다.
빠르게 발전하는 인터넷 속도만큼이나 네트워크 접속량과 트래픽 증가는 당연한 현상입니다. Cisco Global Cloud Index 보고서에 따르면 세계 데이터 센터의 트래픽은 2016년 6.8 ZB에서 2021년 20.6 ZB로 증가하여 연평균 25%의 증가율을 보였고, 대부분의 트래픽이 클라우드 서비스 및 애플리케이션에서 발생하였습니다. 이렇게 급증하는 네트워크 트래픽을 처리하기 위해서 클라우드 서비스 사업자들은 다양한 측면에서의 해결책을 마련하고 있는데요. 최근에는 ‘하드웨어’를 직접 개발하기 시작했고, 그 흐름에 맞춰 SmartNIC(스마트닉)이 등장하였습니다.
SmartNIC의 등장
클라우드 인프라 하드웨어 혁신을 향한 업계의 행보가 빨라지고 있는 가운데, CPU와 역할을 분담하는 기술인 스마트 네트워크 인터페이스 카드(SmartNIC)가 주목받고 있습니다. ‘SmartNIC(스마트닉)’은 Smart Network Interface Card의 줄임말로 데이터 센터의 네트워킹, 보안, 스토리지를 효율적이고 유연하게 만드는 프로그래밍이 가능한 가속기입니다. 여기서 가속기(Accelerator)는 CPU에서 처리하던 기존 소프트웨어의 작업 일부를 FPGA/GPU/NPU 등의 하드웨어로 오프로드(Offload)해서 소프트웨어 실행 속도를 빠르게 하는 역할을 하는데요. 하드웨어로 구성된 가속기 내부 로직을 프로그래밍하여 기존 소프트웨어에서의 코드 네트워킹 로직 변경 기능을 그대로 사용할 수 있습니다.
즉, SmartNIC은 네트워크 트래픽에 비례하여 CPU 점유율이 증가하는 것을 막고 CPU 리소스를 100% 투입하더라도 구현하기 어려운 와이어 스피드(Wire Speed)를 제공하기 위해서 탄생했다고 볼 수 있습니다.
'오프로드' 란
위에서도 언급했지만, SmartNIC을 검색해보면 ‘오프로드(Offload)’라는 단어가 수식어처럼 따라붙습니다. 일반적으로 컴퓨팅 분야에서 오프로드는 서버 CPU의 과부하를 방지하기 위해 다른 기기나 회선을 이용하는 것을 의미하는 것에 반해, SmartNIC의 오프로드는 CPU 리소스를 통해 구동되는 프로그램이나 애플리케이션의 연산을 내부 FPGA/DSP 등으로 옮겨 실행하는 것을 뜻합니다.
아래 그림은 일반 NIC과 SmartNIC의 사용에 따른 CPU 사용률 비교 예시입니다. 일반 NIC을 사용할 경우에는 네트워킹, 보안, 스토리지 기능을 수행하는 데 CPU 코어가 할당됩니다. 하지만 SmartNIC을 사용하는 경우, CPU에서 구동하던 네트워크 관련 기능을 ‘오프로드’ 합니다. 이때 발생한 유휴 CPU 코어는 다른 애플리케이션에 할당되어 사용됩니다. 이러한 CPU 활용의 극대화는 전반적인 서버 성능 향상을 의미하므로 데이터 센터에 상당히 중요한 사항입니다.
카카오 i 클라우드가 만든 SmartNIC
SmartNIC은 사용자의 요구사항에 따라 다양한 하드웨어 아키텍처를 선택하여 제작할 수 있습니다. 최근에는 ASIC(Application-Specific Integrated Circuit) + DSP(Digital Signal Processor) 등 프로그래밍이 가능한 코어와 ASIC + FPGA(Field Programmable Gate Array) 혹은 FPGA 기반으로 제작되고 있습니다.
x86 프로세서로 대표되는 CPU는 소프트웨어를 구동하는 방식이며, 높은 유연성을 가지는 것이 특징입니다. 반면에 ASIC은 특정 기능을 위해 설계 단계부터 정형화된 형태로 만들어지기 때문에 유연성이 없는 대신 해당 기능 동작 시 CPU 대비 높은 성능을 얻을 수 있습니다. FPGA는 CPU와 ASIC의 장점을 모두 갖습니다. 즉, ‘프로그래머블(Programmable)’이라는 의미가 포함되면서 소프트웨어를 통해 내부 로직을 유연하게 수정할 수 있고 높은 성능을 얻을 수 있게 된 것이죠.
그렇다면 카카오 i 클라우드가 선택한 방식은 무엇일까요? 바로 성능과 유연함, 두 마리 토끼를 모두 잡을 수 있는 ARM + FPGA 방식의 단일 칩 시스템(System on chip: SoC)입니다. FPGA의 유연함을 기반으로 SmartNIC이 결합된 카카오 i 클라우드 서버에서는 하드웨어 변경 없이 소프트웨어를 통해 성능 개선을 위한 구성을 변경하거나 프로비저닝(Provisioning) 할 수 있습니다. 이러한 유연성은 추후에 개발되는 다양한 오프로드 기능들의 적용까지 고려되어, 앞으로가 더 기대되는 강점이라고 할 수 있습니다.
첫 오프로드 기능, OVS
카카오 i 클라우드 SmartNIC에 탑재된 첫 오프로드 기능은 OVS(Open vSwitch, Open virtual Switch)입니다.
OVS는 오픈소스로 구현된 분산 가상 멀티레이어 스위치입니다. OVS는 하드웨어 가상화 환경을 위한 스위칭 스택을 제공하고 동시에 컴퓨터 네트워크에 사용되는 여러 프로토콜과 표준을 지원하는데 목적이 있습니다.
위 그림은 네트워크 스위치 구조의 변화를 나타내는데요. 전통적인 네트워크 구성에서 가상화된 네트워크를 거처 분산형 가상스위치 기반의 네트워크 구성에서 OVS가 등장합니다.
OVS는 가상 머신들의 Virtual NIC을 연결한 스위치를 가상화시키고, 단일의 하이퍼바이저 환경에서 구동되던 서버 환경을 여러 개의 하이퍼바이저 환경으로 대체함으로써 이기종 간 클라우드 환경을 구성합니다. 하지만 OVS는 CPU에서 소프트웨어로 구동되기 때문에 규칙이 많아질수록(네트워크 복잡도가 증가할수록) 소프트웨어 처리량이 많아지고, 이로 인해 사용할 수 있는 CPU 리소스가 줄어든다는 단점이 있습니다. 상당히 CPU 집약적인 기능이라 할 수 있죠.
이를 해결하기 위해 카카오 i 클라우드는 OVS 기능을 CPU에서 SmartNIC으로 오프로딩 함으로써 CPU 리소스의 낭비 없이 OVS를 지원할 수 있게 구현하였습니다.
OVS 오프로드 아키텍처의 성능 비교
SmartNIC이 탑재된 카카오 i 클라우드 서버의 아키텍처를 설명하기 위해서는 기본 기능인 SR-IOV에 대한 이해가 필요할 것 같습니다. SR-IOV(Single Root I/O Virtualization)는 PCI-SIG 표준 아키텍처로 하나의 PF(Physical Function)가 다수의 VF(Virtual Function)를 생성해서 가상화된 NIC을 실제 NIC과 같이 사용할 수 있게 되는 기능입니다. 가상 머신에서는 PCI 장치가 직접 연결된 것과 같이 동작하고, 가상화 환경을 지원하는 드라이버 루트를 통해서 리소스 낭비와 지연을 방지할 수 있게 되는 것이죠.
위 그림은 일반 NIC과 카카오 i 클라우드의 SmartNIC을 적용한 아키텍처를 비교한 그림입니다.
일반 NIC을 적용한 서버에서 OVS는 하이퍼바이저 상에 구현되고, VM의 네트워크 기능은 하이퍼바이저 커널 기반의 가상화 모듈(vhost/virtio-net)로 구현됩니다. VM의 네트워크는 하이퍼바이저의 커널을 거쳐서 BasicNIC으로 전달되기 때문에 패킷의 크기와 빈도에 따라 대역폭과 레이턴시에 제약이 발생합니다.
반면, 카카오 i 클라우드에서 VM의 네트워크 패킷은 하이퍼바이저의 커널을 거치지 않고 VF를 통해서 SmartNIC으로 직접 전달됩니다. VF를 통해서 SmartNIC으로 전달된 패킷은 OVS에 정의된 플로우 룰(Flow Rule) 기반으로 처리되고, 이를 통해 전반적인 네트워크 레이턴시를 낮추고 CPU 효율성을 향상시킬 수 있습니다.
실제 카카오 i 클라우드에 SmartNIC을 적용한 결과, 네트워크 성능이 대폭 향상되었습니다. SmartNIC이 적용된 VM에서 64 Byte Packet의 경우 8.2 Gbps(12.28 Mpps)에서 256 Byte Packet 이상의 사이즈부터는 SmartNIC의 PF당 Bandwidth인 25G Throughput 성능이 나오는 것을 확인할 수 있습니다.
결과에서 보시다시피 카카오 i 클라우드에서는 SmartNIC을 통해 PM(Physical Machine)의 CPU 리소스를 거의 사용하지 않고 네트워크 성능을 확보합니다. 동시에 CPU의 모든 리소스를 서비스에 할당할 수 있어 고속 네트워크와 더 많은 CPU 리소스가 필요한 VM(Virtual Machine) 서비스를 제공할 수 있습니다. 자체 테스트 결과에 따르면 클라우드 CPU 사용률을 50% 이상 낮추는 동시에 애플리케이션 성능을 최대 600%까지 높일 수 있을 것으로 예상합니다.
“클라우드 데이터센터 성능, 따라올 테면 따라와 봐!”
마치며
카카오 i 클라우드는 2021년 글로벌 FPGA No.1 기업 ‘자일링스’와의 기술 협력으로 글로벌 CSP 최초 SmartNIC을 공동 개발하였고, 현재 공공 클라우드 신규 리전에 SmartNIC을 적용하여 서비스하고 있습니다. 저희는 네트워크 이외에도 다양한 기능들을 오프로드 하기 위해 연구 개발 중입니다. 더불어 클라우드 성능 최적화를 위한 다양한 하드웨어 개발을 진행하고 있습니다.
저희의 클라우드에 대한 진심이 느껴지시나요? 카카오엔터프라이즈에서는 진심으로 클라우드를 함께 만들어갈 크루를 기다립니다. FPGA 기반 하드웨어를 개발하는 이 멋진 도전에 함께 하실 분을 찾고 있습니다.
마지막으로 카카오 i 클라우드에 많은 기대와 관심 부탁드립니다! 고맙습니다.