2014년 11월 18일 화요일

PMD와 가상 환경에서 DPDK

PMD와 가상 환경에서 DPDK

  • Intel DPDK란?
  • Linux 커널로 네트워크를 처리하려면 오버헤드가 발생한다.
  • 오버헤드를 줄이고 더 간단하고 빠른 네트워크 처리 방식을 위한 도구이다.

Linux 커널의 네트워크 처리 (오버헤드 분석)

  • 왜 Linux 커널의 네트워크 처리에 오버 헤드가 일어날까?
  • 예를 들면
    • Linux 커널은 네트워크 패킷을 "인터럽트'로 구현한다.
    • 네트워크 뿐만아니라 다양한 프로세스를 처리하지만
    • 외부에서 NIC으로 네트워크 패킷이 도착하면 NIC는 커널로 인터럽트를 건다.
    • 커널은 지금 실행하는 처리를 중단하고
    • NIC의 장치 드라이버로 처리를 할당하며
    • 인터럽트가 발생한 네트워크 NIC에서 늘어온 패킷을 처리한다.
    • 따라서 커널이 네트워크 패킷에 대한 인터럽트 처리와 함께
    • 실제 패킷 처리 프로세스로 바뀔때까지 지연이 발생한다.
    • 이런 오버 헤드는 커널의 기존 프로세스였지만,
    • 네트워크를 소프트웨어로 구현하는데는 다소 큰 오버헤드가 된다.

DPDK의 기본 동작

  • DPDK의 동작
    • DPDK는 PMD (Poll Mode Driver)라는 특별한 장치 드라이버를 사용한다.
    • 이 장치 드라이버는 특정 CPU 코어에 상주하며,
    • 외부에서 패킷이 도달하는 지 항상 감시합니다.
    • 네트워크 장치(NIC)에 패킷이 도착하면,
    • 바로 패킷을 처리합니다.
    • 즉 인터럽트의 오버헤드를 줄이는 것이지요.

DPDK의 실행 방식 (2가지)

  • Run-to-Completion
    • PMD를 실행하는 CPU 코어가 네트워크 패킷까지 한꺼번에 실시하는 방식.
  • Pile-line
    • PMD를 실행하는 CPU 코어가 있고 실제 패킷의 처리는 다른 CPU 코어에서 하는 방식.

DPDK의 패킷 처리

  • DPDK를 사용하면
  • Linux 커널이 제공하는 패킷 처리 방식을 무시하고
  • DPDK를 사용하는 사용자 응용 프로그램이 직접 패킷을 처리한다는 것이다.
  • 다시말하면 DPDK의 어플리케이션은 네트워크 패킷의 헤더를 보고
  • TCP / IP 등의 프로토콜을 판별부터 시작해서 자신이 하려는 기능까지
  • 사용자 응용 프로그램에서 전부 구현해야 하는 것을 의미합니다.
  • 즉 DPDK를 사용한다고 해서 네트워크 성능이 향상되는 것만은 아니고.
  • DPDK를 얼마나 잘 이용해서 네트워크 기능을 구현하는지가 중요하게 된다.

DPDK를 사용한 성능 평가

  • 기존의 네트워크 평가처럼
  • NIC과 NIC에 패킷 전달만 가지고
  • DPDK의 성능을 평가하기는 부족하다.
  • RSS (Receive-Side Scaling) 기능을 지원하는 최신 NIC이라면
    • NIC이 수신한 패킷을 여러 그룹으로 나누어
    • 각 그룹별로 CPU 코어를 병렬로 해서 처리할 수 있다.
  • 10Gbps 이상의 고속 NIC을 사용할 경우
    • PMD가 점유된 단일 코어로는 성능이 떨어지므로,
    • 여러 CPU 코어에서 PMD를 실행하여
    • 단일 CPU 코어 성능 병목이되는 것을 방지한다.

가상 환경에서 DPDK

  • Linux KVM 가상 환경에서 두 종류의 커널이 있다.
    • 호스트 Linux 커널
    • 게스트 OS의 커널
  • DPDK 응용 프로그램은 커널을 기반으로 패킷을 처리하기 때문에
    • 호스트 커널이 DPDK를 사용할지.
    • 게스트와 호스트 커널 모두 DPDK를 사용할지.
    • 아니면 어느 커널은 아무것도 안하지만 다른 커널에서 처리할지를 함께 고려해야한다.
  • DPDK는 패킷 처리를 응용 프로그램에서 처리하기 위한 도구이기 때문에
  • 가상 머신 환경에서 어떻게 DPDK를 사용할지는 사용자의 자유이며,
  • 현재 다양한 레이어를 어떻게 구현할지 다양한 구현방법을 제안/검증하는 단계이다.
  • 예시 1 (사용자 어플리케이션이 직접 가상 NIC에 접근)
    • 물리적 장치에 의존하는 환경으로 만든 DPDK 지원 응용 프로그램이라면
    • 게스트 OS의 커널을 생략하고,
    • 사용자 응용 프로그램에서 직접 가상 NIC에 액세스한다.
    • 가상 NIC와 물리 NIC 사이의 패킷 처리는
    • 기존처럼 하이퍼 바이저가 제공하는 가상 스위치를 사용하므로
    • 오버 헤드는 기존과 크게 다르지 않다.
  • 예시 2 (사용자 어플리케이션이 가상 OS의 DPDK를 거쳐 가상 NIC에 접근)
    • 게스트 OS의 DPDK 지원 응용 프로그램에서
    • 물리적 NIC를 직접 조작하는 방법
    • 하이퍼 바이저의 기능은 특정 물리적 NIC를 가상 머신까지 통과시킨다.
    • 하이퍼 바이저가 제공하는 가상 스위치의 기능은 사용할 수 없고,
    • 여러 가상 시스템에서 물리적 NIC를 공유하려 한다면,
    • SR-IOV를 지원하는 특별한 물리적 NIC이 필요하다.
    • SR-IOV란 하나의 물리적 NIC를 가상으로 여러 NIC으로 보여주는 기능을 NIC 하드웨어로 제공한 것이다.
  • 예시 3 (호스트의 가상 NIC을 DPDK가 사용)
    • 다른 가상 머신의 네트워크 기능은 종래대로 게스트 OS의 커널에 맡겨두고,
    • 호스트 Linux 측의 가상 NIC를 DPDK 가 사용하는 방법
    • Linux에서 가상 스위치 기능을 제공하는 오픈 소스 Open vSwitch에 DPDK를 사용하여
    • Open vSwitch와 물리적 NIC 사이의 패킷 처리 속도를 향상시키는 방법입니다.
  • 예시 4
    • 하이퍼 바이저의 가상 스위치 기능 및
    • 게스트 OS 내부의 패킷 처리를 다시 새롭게 구현하여
    • 호스트와 게스트의 네트워크 처리를 터널이 아니어도
    • 빠르게할 수 있는 방법
  • 예시 5 (NetVM)
    • 하이퍼 바이저와 가상 머신이 메모리를 공유하여
    • 메모리 간의 데이터 복사없이 패킷을 교환하는 방식
    • 공유 메모리와 물리적 NIC 사이의 데이터 교환은 DPDK를 사용
    • DPDK는 물리 NIC에서 공유 메모리에 패킷 데이터가 로드 된 후
    • 여러 가상 머신이 협력하여
    • 패킷에 필요한 처리를 해갑니다.
  • 예시 5의 좀더 구체적인 예시 (방화벽 기능이 있는 라우터를 구현)
    • 라우팅 기능을 담당하는 가상 머신과
    • 방화벽 기능을 담당하는 가상 머신으로 역할 분담
    • 이런 두가지 가상 머신 간 패킷 정보를 공유 메모리의 큐를 통해서 전달

요약

  • NFV의 목적은 "기존의 네트워크 장비를 가상 머신에서 실행한다"하는 것이므로
  • "1 가상 머신 = 1 네트워크 장비"라고 가정합니다.
  • DPDK는 PMD가 상주하며, 전달된 패킷 처리에 따라 Run-to-completion과 Pipe-line으로 나뉩니다.
  • 가상머신에서 호스트와 게스트 커널 중에서 어느쪽에서 DPDK를 사용할지 다양항 방식이 이야기 되며.
  • NFV의 목적처럼 여러 가상 시스템을 연계하여 새로운 네트워크 장비를 제공할 수 있습니다.

참조

  • [NetVM: High Performance and Flexible Networking Using Virtualization on Commodity Platforms]

댓글 없음:

댓글 쓰기