# 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 - 물리 출력 포트에대한 인터페이스 제공
'Virtualization + Cloud > Etc.' 카테고리의 다른 글
ssh-keygen -R (0) | 2015.11.27 |
---|---|
[번역] Running Docker.io Under Ubuntu Linux (0) | 2015.11.19 |
[DPA] 데이터플레인 가속화 기술동향 (1) (0) | 2015.04.29 |
[Network Virtualization] OpenStack + SDN (0) | 2015.04.23 |
[DataCenter] Network 구조의 변화 (0) | 2015.04.22 |