Re: JVM Internals: socket-to-socket "zero copy"
От: A13x США  
Дата: 29.06.12 13:44
Оценка:
Здравствуйте, 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.
Вероятно запись в сокет области памяти аллоцированной подобным образом позволит избежать дополнительного копирования. Почему бы не попробовать на тестовом примере и не сравнить с традиционным вариантом?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.