OpenDataPlane

Page content

Network 장비를 만드는 방법 중 가장 흔한 방법이 Networking에 최적화된 processor를 제공하는 업체로부터 processor를 구입하고, 그 processor와 함께 제공되는 SDK를 사용하는 것이다. 그러다보니 특정 업체의 processor를 위해 만든 S/W를 다른 processor로 포팅하는 경우 많은 부분을 수정해야 하는 경우가 많다.

당연한 이야기지만, 특정 processor에 종속적인 부분은 해당 processor가 제공하는 H/W accelerator 를 이용하는 코드나 해당 processor의 특성에 맞게 설계된 구조 등이다. 다른 processor로 포팅하는 경우 전자의 경우는 새로운 processor에서 대응되는 API등이 제공되면 비교적 쉽게 변경할 수 있다. 후자의 경우는 좀 더 근본적인 문제라 다른 차원의 문제가 되지만. 예를 들어 특정 업체는 processor 차원에서 packet ordering을 제공하는 경우가 있다. 그러므로 이 경우 multi-core 환경에서 여러 core들은 서로 다른 core가 같은 flow(순서가 보장되어야 하는 패킷들의 흐름)에 속하는 패킷을 처리하는 지 신경 쓸 필요없이 패킷을 처리하고, 패킷을 최종적으로 전송할 때만 순서를 맞추는 작업을 H/W 기능을 이용해서 수행하면 된다. 반면 이런 H/W 기능이 없는 경우 근본적으로 flow별로 서로 다른 core에게 전달되도록 하는 등의 고려가 필요할 수 있다.

아무튼 특정 processor 하나만 사용하는 경우가 아니라 동시에 여러 가지 processor를 이용하거나, 특정 processor가 단종되거나 성능이나 기능상의 이유로 다른 processor로 대체되는 경우 기존에 해당 processor를 위해 작성한 S/W를 포팅해야 하는 고통을 피할 수 없다.

통상 이렇게 processor의 H/W 기능을 활용하여 고속으로 패킷을 처리하는 부분을 Data Plane이라고 하고, Data Plane의 동작에 필요한 작업이 수행하는 부분을 Control Plane이라고 한다. 예를 들면 패킷 처리에 필요한 라우팅 테이블 설정 등이 Control Plane이 수행하는 대표적인 업무 중 하나다.

OpenDataPlane은 각 processor에서 제공하는 SDK와 이를 이용해 개발한 S/W간의 의존성을 제공할 수 있도록 abstraction layer를 하나 정의한 것이다.

그림 출처 : http://www.opendataplane.org/

그러므로 ODP의 성공은 SDK를 제공하는 업체의 협력이 핵심이다. 만일 업체의 협력이 없다면 누군가는 매번 업체의 SDK가 나올 때마다 해당 업체의 SDK를 ODP API에 맞게 수정하는 작업을 해야 할 것이다.

현재 ODP는 다음과 같은 업체 들이 지원하고 있다. 주로 Silicon vendor가 핵심이고, 이를 이용할 업체도 몇 몇 있다.

  • applied micro

  • ARM

  • Broadcom (XLP processor를 개발한 RMI를 현재 보유)

  • Cavium (Multi-Core 환경에서 많이 사용하는 Octeon Processor 개발)

  • Freescale

  • Texas Instruments

  • Linaro (ARM의 확대를 위한 다양 분야에서의 S/W를 ARM 으로 포팅하기 위해 노력하고 있는 open source community. Linux Kernel 3.14 기준으로 3번째 Contributor라고. ARM을 이용한 가상화 역시 Linaro가 주축으로 밀고 있다.)

  • LSI

  • Montavista(Cavium에서 인수했으므로 당연히 Octeon Processor의 M/S 확대를 위해서라도 열심히 할 듯)

  • NSN

  • CISCO

참고로 Intel DPDK는 없다.

재밌는(?) 건 openDataplane.org도 wordpress를 기반으로 하고 있다는. 정말 WP가 blog가 아니라 CMS 계를 평정했다고 들었는데 실감된다.

참고로 홈페이지가 접속되지 않는 곳을 위해 소스 코드나 문서등은 git repository를 통해 접근할 수 있다.

[1] http://www.opendataplane.org/supporters/
[2] https://wiki.linaro.org/LEG/Engineering/Virtualization
[3] http://www.linaro.org/projects/