2013-03-29 2 views
4

:Linux의 UDP 및 TCP 커널 바이 패스 - 그게 무슨 관련이 있습니까? <a href="http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networking" rel="nofollow">http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networking</a> 당

[...] 사용자 공간에서 함께 응용 프로그램 및 네트워크 드라이버를 실행하고 "커널 바이 패스"기술를 사용하는 네트워크 드라이버라는 OpenOnload이 잘 커널을 우회. 이를 통해 연결의 응용 프로그램 측은 더 낮고 일관된 대기 시간으로 더 많은 초당 메시지를 처리 ​​할 수 ​​있습니다.

[...]

당신이 상황이 부정 행위처럼 느낄 수 년 커널 바이 패스 스위치와 싸워왔다 개발자 나 설계자,하지만 다행히도 규칙 내에서 완전히 있다면

.

커널 바이 패스를 수행하는 데 필요한 기능은 무엇입니까?

+0

rcomputer에 첨부 된 NIC 용 네트워크 드라이버를 직접 작성하는 것 외에 다른 방법은 없습니다. – JosephH

+1

@JosephH 당신은 커널 바이 패스가 "드라이버 우회"라고 말하고 있습니까? 어떤 시점에서 "드라이버"가 필요합니까? 아니면 커널 외부에서 드라이버를 다시 작성해야합니까? – user997112

+0

커널을 거치지 않고 어떻게 NIC를 직접 조작 할 수 있다고 생각하십니까? – JosephH

답변

1

커널이 네트워크 스택을 처리하는 방법을 모른 채 질문에 대답하는 것은 간단합니다.

generel에서 네트워크 스택은 많은 계층으로 구성되어 있으며 실제 하드웨어가 가장 낮습니다. 일반적으로이 하드웨어는 드라이버 (각 네트워크 인터페이스마다 하나씩)를 통해 지원되며 NIC는 일반적으로 매우 단순합니다. 인터페이스, 생각하고 원시 데이터를 보낼 생각.

데이터를 수신하고 보내는 능력은 계층화 된 많은 프로토콜입니다. bottem 근처에는 기본적으로 정보 수신자를 지정할 수있는 ip 프로토콜이 있습니다. 상단에는 안정적인 연결을 지원하는 TCP가 있습니다.

질문에 대답하려면 네트워크 스택의 어느 부분을 교체해야하는지, 무엇을해야하는지 알아야합니다. 귀하의 질문에 대한 나의 이해에서 당신은 원래의 네트워크 스택을 유지하기를 원하고, 때로는 자신의 네트워크 스택을 사용하는 것처럼 보이며,이 경우에는 전략 패턴을 실제로 구현해야하고 어떤 패킷을 사용해야하는지 네트워크 스택의 최상위 레벨이 처리해야합니다.

리눅스에서 네트워크 스택을 구현하는 방식에 따라 커널을 변경하지 않고도이 기능을 구현할 수도 있고 구현하지 못할 수도 있습니다. 네트워크 스택의 각 부분이 자체 서비스로 구현되는 마이크로 커널 아키텍처에서는 네트워크 스택의 하위 부분을 전략 패턴으로 간단하게 파이프하고 필요한 경우이 파이프를 입력으로 사용하는 것이 쉽습니다. 네트워크 최상층.

+1

그렇다면 커널 바이 패스는 사용자 공간에 자체 네트워크 스택을 작성한다는 의미입니다. OS 소스 코드에 들어가서 패킷이 커널 네트워크 스택으로 보내지는 줄에서 사용자 공간의 "응용 프로그램"으로 직접 보내겠습니까? – user997112

+0

이렇게하면 전체 네트워크 연결이 망가져 응용 프로그램 만 "인터넷에 액세스"할 수 있으므로 필자가 필요로하는 패키지 만 앱에 연결되도록 제안하고 싶습니다. 그리고 현재 네트워크 스택의 상당 부분을 재사용 할 수 있어야합니다. 그러나 구현하고자하는 패키지에 따라 간단하게 인터럽트없이 문자 버퍼 드라이버를 설치하면됩니다. nic 드라이버에 연결하고 서비스 호출을 자신의 것으로 바꾸십시오. 그러면 정보를 덤프 한 다음 호출을 NIC 자체로 전달합니다. – Skeen

1

TCP offload engine "그냥 작동합니다", 특별한 응용 프로그래밍이 필요하지 않습니다. 전체 커널을 우회하지 않고 커널에서 네트워크 카드로 일부 TCP/IP 스택을 이동하기 때문에 드라이버가 약간 높은 수준입니다. 커널 API는 동일합니다.

TCP 오프로드 엔진은 대부분의 최신 기가비트 인터페이스에서 지원됩니다.

"SolarFlare 네트워크 어댑터의 임베디드 프로세서/FPGA 'Application Onload Engine'에서 코드를 실행하는 것을 의미하는 경우, 카드 관련 사항입니다. 기본적으로 임베디드 시스템 용 코드를 작성하므로 사용중인 카드의 종류를 밝혀야합니다.

+1

TOE와 커널 바이 패스의 차이점을 궁금해하기 때문에이 점에 대해 언급 해주십시오. 커널 바이 패스는 사용자 공간에 커널 기능을 구현하고 커스터마이징하는 반면 TOE는 카드 처리에 관한 것이라고 생각했습니다. – user997112

+0

그럼 ... "커널 바이 패스"란 무엇입니까? 어떤 언급이 없다면, 나는 그 질문을 분명히하기 위해 투표 할 것이다. – user9876

+0

@ user9876, "커널 바이 패스"는 커널을 우회하는 기술입니다. "[* 커널 우회는 OS 우회 (bypass)라고도하며, 커널이나 OS를 돌아 다니면서 네트워크 성능을 향상시키는 개념입니다. 따라서"우회 (bypass) "라는 용어는"우회 (bypass) "전형적인 시스템에서 커널은 TCP와 같은 네트워크 패킷을 디코딩하고이를 복사하여 커널 공간의 데이터를 사용자 공간으로 전달합니다. *] (http://ttthebear.blogspot.sg/2008/07/ linux-kernel-bypass-and-performance.html # post-body-136740617070080811) – Pacerier

1

원시 IP 패킷을 보내고 받기를 원합니까?

기본적으로 IP 패킷에 헤더와 데이터를 채워야합니다. : 몇 가지 예 원시 이더넷 패킷을 전송하는 방법 여기에 있습니다 자신에 TCP/IP를 처리 할 수 ​​http://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/

, 난 당신이 쓰는 다음 맞춤 커널의 TCP 드라이버를 사용하지 않도록해야하고, 할 수 있다고 생각하여 raw ip를 읽는 자신의 사용자 공간 서버.

아마도 그렇게 효율적이지는 않겠지 만 ...

+0

더 자세한 정보가 있습니까? – Pacerier