# intel DPDkP의 해결책


 패킷처리 성능 저하 요소

DPDK 처리 

CPU 처리속도와 메모리/PCI 인터페이스 사이에서 발생하는 처리속도 차이 

배치 패킷처리 - 다수 패킷을 동시 처리하는 I/O 최적화 기술 

네트워크 패킷마다 동적으로 버퍼메모리를 할당/해제 

패킷마다 고정길이의 메모리를 사전에 할당 

공유데이터 구조로 병목현상 시, 패킷처리 성능저하 

lockless 구현, 불필요한 대기시간 절약 

리눅스 페이지 테이블 사이즈로 인해 TLB Miss 계속 발생 

TLB miss를 줄이기위해 2MB 또는 1GB huge 페이지를 사용 

최적화되지 않은 인터럽트 기반의 물리 NIC, 가상 NIC 드라이버 

최적화된 폴 기반의 NIC 드라이버 (intel NIC only) 

 CPU가 데이터를 기다리는 상황으로인한 패킷처리 성능 저하

메모리 엑세스에 대한 Pre-fetching 기술 및 chche line 사이즈(64byte)로 정렬 

멀티 프로세서를 사용하더라도 성능이 scale 되지 않는 문제 

Run-to-complete 모델을 통해 horizontal scalsbility를 제공 

리눅스 스케줄러의 thread 스위칭 오버헤드 

CPU Core Isolation 기술(S/W thread를 H/W Thread로 매핑)로 성능향상 

호스트 커널 네트워킹 스택 성능의 제약 

KNI(Kernel Network Interface)를 통해 커널 네트워킹 스택 성능 개선 





# Linaro ODP

: LNG에서 플랫폼에 상관없는 네트워킹 데이터 평면에 API를 제공하기 위해 오픈소스로 공개


- 사용자단에서 한개의 프로세서로 동작, 최소한의 API를 호출

- ODP API : 커널의오버헤드를 야기하지 않고, 가용한 하드웨어의 특성을 사용하여 DPA를 실현하고자 함

  (= SDK API)

- 하드웨어 의존적인 SDK API 호출을 배제하지 않음, 플랫폼에 상관없는 소스레벨의 호환성을 제공해주지 못할 수 있음

- 데이터 플레인 응용을 지원하는 플랫폼

- 리눅스 API를 사용하는 리눅스 사용자 평면제어 또는 관리평면 기능을 구현한 응용프로그램과 병렬처리 가능





# Linaro ODP 추상화된 논리적 패킷처리 구조

SW - 소프트웨어 블록

HW - 대부분 하드웨어 블록에 의해 수행되는 부분으록 간주하지만, 소프트웨어에서 수행될수도 있음

빗금 - 낮은 액세스 지연을 가지는 펌웨어와 같은 하드웨어에서 아주 가까운 소프트웨어에 의해 수행되는 기능


1. Packet Input 블럭 - 물리적 입력단의 패킷 포트를 추상화

2. Pre-Processing - 물리 인터페이스와 동일한 속도로 처리, 버퍼 풀의 선택 및 첫번째레벨의 congestion 제어를 위한 패킷분류 수행

3. Input Classification - 구별된 트래픽 플로우 분석 및 분류, 큐에 배정, 분석결과 메타데이터를 추가

4. Ingress Queuing - 실제 페이로드에 대한 메타에이터(descriptor)들의 큐를 제공, 큐에대한 descriptor들은 HW장비 또는 SW에서 도착

5. Delivery/Scheduling - 동기화된 SW/HW 인터페이스, 동작 스케줄링과 한일 수신점에 대한 다수개의 프로세서 코어에 대한 로드밸런싱 수행

* 스케줄러큐 - 우선순위 설정, 큐의 상태, CPU상태를 참조

6. Accelerator - 비동기적 큐기반의 인터페이스에 대해 암호화 또는 압축등 특수 목적 처리를 수행

7. Co-processors - Accelerator과 유사, SW에 대한 동기화된 인터페이스를 가지고 빠른 동작을 수행

8. Egress Queueing - 출력 포트를 향해 동기화된 인터페이스를 제공

* 각각의 큐는 논리적으로 매핑, 설정된 QoS기능을 선택적으로 수행

9. Post Processing - 패ㅣㅅ을 출력포트를 위해 스케줄링, 패킷이 나가면 패킷 버퍼를 해제, 패킷 checksum등 inline가속 기능 제공

10. Packet Output - 물리 출력 포트에대한 인터페이스 제공






+ Recent posts