Здравствуйте, Golovach Ivan, Вы писали:
GI>Вопрос к тем, кто силен и в Java и в Linux:
GI>Есть ли возможность организовать "zero copy" из SocketChannel/AsynchronousSocketChannel в SocketChannel/AsynchronousSocketChannel средствами Java под Linux не используя JNI? Т.е. передачу данных из сокета в сокет, при котором:
GI>1) мы не вытаскиваем данные из user space в kernel space
GI>2) соответственно делаем только два копирования при помощи DMA и никаких копирования при помощи CPU
GI>---
GI>FileChannel.transferTo(long position, long count, WritableByteChannel target) как говорят тут под Linux делается через zero-copy. Вопрос в том, могу ли организовать что-то подобное socket-to-socket? Видимо, надо использовать ByteBuffer.allocateDirect.
ну я так понимаю суть в том, чтобы получить память в kernel space, что сделает ByteBuffer.allocateDirect.
Вероятно запись в сокет области памяти аллоцированной подобным образом позволит избежать дополнительного копирования. Почему бы не попробовать на тестовом примере и не сравнить с традиционным вариантом?