Как использовать DMA или RDMA в Java?

«DMA» здесь означает: прямой доступ к памяти, а «RDMA» — удаленный прямой доступ к памяти.

Я использовал Java для создания приложения для передачи биржевых данных, но обнаружил, что задержка больше, чем я ожидал. Я слышал, что кто-то разработал приложение такого же типа, использующее «DMA/RDMA», которое имеет хорошую производительность, поэтому мне интересно, могу ли я использовать «DMA/RDMA» в Java?

Если нет, то какой язык мне использовать и есть ли какие-нибудь хорошие библиотеки?


person Freewind    schedule 19.10.2011    source источник


Ответы (6)


Эта статья от разработчиков IBM дает отличный обзор того, как доступ к DMA может быть достигается с помощью java

person LordDoskias    schedule 19.10.2011
comment
В статье показано, как разрешить другим частям ОС выполнять DMA для данных, созданных Java, и добиться передачи данных с нулевым копированием. (Круто, если вы спросите меня.) - person 9000; 19.10.2011
comment
@LordDoskias, спасибо, нулевая копия - хороший совет, попробую позже - person Freewind; 19.10.2011
comment
Ну, чтобы получить доступ к DMA любого типа, вам ДОЛЖЕН полагаться на базовую ОС. Таким образом, каждая версия JVM имеет специфичный для платформы код, который предоставляет эту возможность через файловые каналы. Так что в каком-то смысле вы получаете все преимущества использования DMA. - person LordDoskias; 19.10.2011

У вас есть два варианта (о которых я знаю):

  1. Java SDP -- объявлен устаревшим
  2. JXIO [1], высокопроизводительная библиотека обмена сообщениями, построенная на RDMA и поддерживаемая Mellanox.

[1] https://github.com/accelio/JXIO

person JC1    schedule 24.02.2016
comment
Также JSOR от IBM: ibm.com/support/knowledgecenter/en/SSYKE2_7.1.0/ - person Mike Argyriou; 19.09.2019

Существует DiSNI, новая библиотека для программирования RDMA на Java. DiSNI — это вариант jVerbs от IBM с открытым исходным кодом. Есть несколько показателей производительности здесь, которые иллюстрируют как RDMA с Java сравнивается с сокетами в C и Java, а также с RDMA в C.

person pstuedi    schedule 09.08.2016

Насколько мне известно, RDMA является свойством сетевой инфраструктуры (вместе с соответствующими модулями ядра и т. д.), а не языка программирования уровня приложения.

Другими словами, вам потребуется специальный комплект, чтобы использовать RDMA для уменьшения задержки в сети. Вот пример сетевой карты 10GbE, поддерживающей RDMA: ссылка< /а>.

person NPE    schedule 19.10.2011

Java-приложения могут отображать файлы через пакеты nio. К этим файлам mmaped могут обращаться несколько программ - боюсь, это закрывает доступ к DMA, доступному в java.

person Konstantin Pribluda    schedule 19.10.2011

Java 7 поддерживает протокол SDP в Solaris и Linux (с драйверами OpenFabrics.org). К сожалению, протокол SDP устарел в версии 2.x OFED. Люди прибегают к оболочкам JNI, таким как jVerbs.

person Andy Malakov    schedule 05.03.2015