Java中的内核旁路网络
有人知道如何在Java中绕过内核吗?任何地方有hello world或这是rocket science吗?搜索“Java零拷贝缓冲区”或“Java NIO”或“Java Netty” 这是一个关于和零拷贝的幻灯片:。下面是一个Netty的示例项目Java中的内核旁路网络,java,sockets,networking,tcp,real-time,Java,Sockets,Networking,Tcp,Real Time,有人知道如何在Java中绕过内核吗?任何地方有hello world或这是rocket science吗?搜索“Java零拷贝缓冲区”或“Java NIO”或“Java Netty” 这是一个关于和零拷贝的幻灯片:。下面是一个Netty的示例项目 或者,您可以转到较低的级别并使用这些类,您可以在这里阅读这些类如果您使用的是solarflare,您可以使用它们的API进行内核绕过(我不是直接使用它,因此无法提供更多细节)。您还可以使用诸如29West LBM或IBM LLM之类的消息传递代理,它们
或者,您可以转到较低的级别并使用这些类,您可以在这里阅读这些类如果您使用的是solarflare,您可以使用它们的API进行内核绕过(我不是直接使用它,因此无法提供更多细节)。您还可以使用诸如29West LBM或IBM LLM之类的消息传递代理,它们支持各种硬件上的丰富功能
正如@eSniff所提到的,JRE具有
transferFrom()
/transferTo()
API,目前用于为支持它的系统公开sendfile(2)
等效文件。API的语义已经定义,因此可以透明地实现,以支持任意2个通道之间的DMA传输。这太棒了。我使用的是Java NIO,但这并没有绕过内核。我已经多年没有用Java编程了,所以我不确定答案的相关性。但是为什么最近的投票被否决了呢?嘿,但是transferFrom和transferTo都与FileChannel有关!我在这里谈论的是用于联网的SocketChannel和DatagramChannel:(@chrisapotek a SocketChannel既是可写的ByTechannel,也是可读的ByTechannel,所以…someFileChannel.transferFrom(someSocketChannel,pos,count)/someFileChannel.transferTo(pos,count,someSocketChannel)我自己只使用过Netty包装器,但这应该可以工作。transferXxx是用于公开DMA风格功能的标准API。在Oracle HotSpot JRE中,从版本7开始,它只针对文件和套接字实现。我认为它不会在用户空间内存缓冲区和套接字(即RDMA)之间工作也就是说,代码有扩展点,如果我没有弄错的话,第三方的提供者库可以添加新的通道类型。关闭此代码的人对网络一无所知。干得好!这个问题存在的原因很好。内核没有给我们与用户API相同的数据包吞吐量。我诚实地说我会向@Makoto,John Palmer,Don Roby,rene,Ben求助。