Biblioteka produktu jVerbs (tylko systemLinux )

Biblioteka jVerbs zawiera interfejs API verbs i interfejs API produktu endpoint , które umożliwiają tworzenie aplikacji Java™ , które korzystają z infrastruktur sieciowych o wysokiej wydajności, takich jak InfiniBand, iWARPlub RoCE. Interfejs verbs jest alternatywnym interfejsem API w sieci do interfejsu sockets . Interfejs czasowników udostępnia komunikację wysyłania i odbierania, a interfejs endpoint jest uproszczonym interfejsem API, który udostępnia abstrakcję punktu końcowego jVerbs .

Uwaga: Implementacja RDMA jest nieaktualna i prawdopodobnie zostanie usunięta w przyszłym wydaniu pakietu IBM® SDK, Java Technology Edition, wersja 8. Możliwa alternatywa jest biblioteką Libfabric Open Source.

Produkt jVerbs jest zaimplementowany jako biblioteka Java, która jest oparta na bibliotekach użytkowników RDMA Open Fabrics Enterprise Distribution (OFED). Produkt jVerbs używa cienkiej warstwy JNI do utworzenia mostu między kodem Java a bibliotekami użytkowników OFED. Aby uniknąć wpływu na wydajność, które są powiązane z przekazywaniem złożonych parametrów RDMA i tablic za pomocą interfejsu JNI, biblioteka jVerbs implementuje koncepcję o nazwie stateful verbs method (SVM). W przypadku tego podejścia każdy stan serializacji JNI dla wywołania verb jest buforowany w kontekście obiektu SVM i może być wielokrotnie wykorzystywany wielokrotnie.

Na poniższym diagramie przedstawiono ogólny projekt implementowania komunikacji RDMA za pomocą biblioteki jVerbs .
Diagram przedstawia działającą aplikację Java, która wymaga wirtualnej maszyny języka Java i interfejsu wiersza komend jVerbs lub interfejsu punktu końcowego jVerbs do komunikacji z adapterem RDMA. Do komunikacji między tymi interfejsami i adapterem RDMA używane są dwie różne ścieżki: szybka ścieżka danych i powolna ścieżka sterująca.
Powolna ścieżka sterująca jest używana dla operacji RDMA, takich jak rejestrowanie pamięci i tworzenie par kolejek dla komunikacji. Szybka ścieżka danych jest używana do przesyłania danych.

verbsinterfejs API

Celem interfejsu verbs jest oddzielne dane i sterowanie. Dzięki wstępnie przydzielaniu zasobów komunikacyjnych, takich jak pamięć pinning dla bezpośredniego dostępu do pamięci (Direct Memory Access-DMA), dane są przesyłane bez angażowania systemu operacyjnego lub maszyny JVM. Ta zasada zwiększa wydajność operacji przesyłania danych, co stanowi kluczowy czynnik w osiąganiu niskich opóźnień i wysokiej przepustowości w infrastrukturze sieciowej obsługując RDMA.

Interfejs verbs udostępnia funkcje API dla następujących funkcji:
Typy komunikacji wysyłania i odbierania RDMA
Komunikacja wysyłania i odbierania RDMA to operacje dwustronne. Nadawca wysyła komunikat, podczas gdy odbiornik tworzy bufor aplikacji i wskazuje, gdzie mają być odbierane dane. Ten mechanizm jest podobny do tradycyjnej komunikacji opartej na gnieździe TCP.
Operacje RDMA
Operacje RDMA są operacjami jednostronnymi, w których tylko jeden węzeł równorzędny odczytuje, zapisuje lub manipuluje buforami aplikacji zdalnych.
W przypadku wszystkich funkcji przesyłanie danych jest wydajne, ponieważ sprzęt sieciowy uzyskuje dostęp do buforów danych bezpośrednio przy użyciu DMA. Bufory danych aplikacji muszą być zarejestrowane w podsystemie RDMA przy użyciu konkretnych wywołań API verbs . W związku z tym podsystem RDMA zapewnia, że pamięć jest zaczepiona i nie może zostać wyjęta.

endpointinterfejs API

Interfejs endpoint jest prostszy niż interfejs czasowników. Można utworzyć punkt końcowy i połączenie w podobny sposób do komunikacji gniazda TCP, korzystając z operacji łączenia, łączenia i rozłączania. Jednak gdy punkt końcowy jest połączony, reprezentuje prostą parę kolejki RDMA, która może być używana do wykonywania operacji jednostronnego lub dwustronnego.

Więcej informacji na temat programowania za pomocą tych interfejsów API zawiera sekcja Zapisywanie aplikacji Java, które korzystają z biblioteki jVerbs (tylko w systemieLinux ).