2017-04-23 11 views
0

DPDK 설명서의 좋은 부분을 읽었지만 인터럽트를 지원하는지 또는 권장하는지 혼란 스럽습니다. DPDK는 인터럽트를 사용하지 않지만 인터럽트를 등록하고 성공적으로받을 수 있다고 나와 있습니다.DPDK 응용 프로그램에서 선점 형 사용자 수준 스레드 스케줄러를 작성할 때의 고려 사항

특히 DPDK 응용 프로그램에 대한 사용자 수준 선점 형 스레드 스케줄러를 작성할 수 있는지 여부를 조사하고 있습니다. 이걸 만들려면 타이머 인터럽트를 등록해야합니다. 설명서에 DPDK가 스케줄러를 지원하지 않는다고 나와 있습니다.

DPDK에는 lthread 추상화가 있지만 스케줄러 구현을 위해서는 타이머 인터럽트를 기반으로 스케줄러로 자동 전송되도록 제어하지 않고 각 개별 스레드가 수동으로 스케줄러에 제어권을 부여해야합니다.

폴링을 기반으로 타이머 인터럽트를 시뮬레이트하는 알람 기능 (rte_alarm)이 있습니다. 그러나 폴링을 수행하는 또 다른 pthread가 필요하며 현재 폴링 pthread는 콜백 함수를 실행하는 pthread입니다 (반면 콜백 함수를 실행하기 위해 원래 타이머를 설정 한 pthread를 원합니다).

DPDK가 OS에서 실제 인터럽트에 등록 할 수있을 때 선점을 지원하지 않는 lthread 추상화를 구현하는 이유를 알지 못합니다. 잠금이없는 링 버퍼와 같은 특정 객체를 사용할 때는 좀 더 조심해야 할 수도 있지만 관리가 쉽습니다.

누군가가 DPDK가 지원하는 것에 대한 설명을 제공 할 수 있습니까?

답변

0

DPDK는 UIO로 매핑 된 장치의 인터럽트를 지원하지만 현재는 링크 상태 변경이나 워치 독을위한 것입니다.

사용자 수준 선점 형 스레드 스케줄러를 작성할 수도 있지만 DPDK의 주요 요점 중 하나는 인터럽트 및 컨텍스트 전환을 방지하는 것입니다.

이 DPDK는 OS 스케줄러를 사용하여 지원 lcore 선점을 수행의 --lcores 명령 행 인수를 참조하십시오 : 일부 성능 트레이드 오프와

http://dpdk.org/doc/guides/testpmd_app_ug/run_app.html

, 당신이 동적으로 생성의 pthreads에서 DPDK를 사용할 수 있습니다 설명 된대로 여기 :

http://dpdk.org/doc/guides/prog_guide/env_abstraction_layer.html#non-eal-pthread-support