2012-08-25 3 views
6

Java로 커널 우회를 수행하는 방법을 알아 낸 사람이 있습니까? 어딘가에 안녕하세요, 아니면 로켓 과학입니까?Java에서 커널 우회를 통한 네트워킹

+11

이 문제를 종결시킨 사람들은 네트워킹에 대해 단서가 없습니다. 좋은 직업들! – chrisapotek

+0

이 질문이있는 좋은 이유가 있습니다. 커널은 사용자 API와 동일한 양의 패킷 처리량을 제공하지 않습니다. 솔직히 @Makoto, John Palmer, Don Roby, rene, Ben에게 호소합니다. –

답변

1

"Java Zero-Copy Buffers"또는 "Java NIO"또는 "Java Netty"를 검색하십시오.

슬라이드 쇼는 Netty이고 제로는 약 http://www.slideshare.net/danbim/zerocopy-eventdriven-servers-with-netty입니다. 다음은 Netty의 예제 프로젝트입니다.

아니면 낮은 수준을 가서 당신이 솔라 플레어를 사용하는 경우 여기에 대해 http://www.ibm.com/developerworks/linux/library/j-zerocopy/

+0

좋은 정보 eSniff입니다. Java NIO를 사용하고 있지만 커널을 우회하지는 않습니다. – chrisapotek

+0

나는 몇 년 동안 자바에서 프로그래밍하지 않았으므로 더 많은 답변이 더 관련이 있는지 잘 모르겠습니다. 하지만 왜 최근에 downvotes? – eSniff

5

, 당신은 내가 직접 사용하고 있지 않다 (커널 바이 패스를 할 자신의 API를 사용하여 읽을 수있는 java.nio.channels 클래스를 사용할 수 있습니다, 그래서 더 자세한 내용을 제공 할 수는 없습니다). 다양한 하드웨어에서 다양한 기능을 지원하는 29West LBM 또는 IBM LLM과 같은 메시징 제품을 사용할 수도 있습니다.

@eSniff가 언급했듯이 JRE에는 현재 transferFrom()/transferTo() API가 있으며이 API는이를 지원하는 시스템에 해당하는 sendfile(2)에 해당합니다. API의 의미는 정의되어 2 채널 간의 DMA 전송을 지원하도록 투명하게 구현 될 수 있습니다.

+0

안녕하세요,하지만 transferFrom과 transferTo는 FileChannel과 관련이 있습니다! 나는 네트워킹을 위해 SocketChannel과 DatagramChannel에 대해 말하고있다 : ( – chrisapotek

+0

@chrisapotek socketChannel은 WritableByteChannel과 ReadableByteChannel이므로, someFileChannel.transferFrom (someSocketChannel, pos, count)/someFileChannel.transferTo (pos, count, someSocketChannel) Netty 래퍼 만 사용했지만 작동해야합니다. – eSniff

+1

transferXxx는 DMA 스타일 기능을 노출하기위한 표준 API로 Oracle HotSpot JRE에서는 버전 7부터 파일 및 소켓에 대해서만 구현됩니다. 즉, 사용자 공간 메모리 버퍼와 소켓 (즉, RDMA) 사이에서 작동하지 않을 것이라고 생각합니다. 즉, 코드에 확장 점이 있으며 실수가 아니라면 새 채널 유형을 제 3 자에 의해 공급자 라이브러리에 추가 할 수 있습니다. – ddimitrov