JSOR zero copy, funkcja (tylko systemLinux )

Domyślnie przesyłanie danych JSOR wiąże się z używaniem pośrednich operacji kopiowania buforu. W przypadku dużych transferów danych można zwiększyć wydajność poprzez włączenie funkcji kopiowania zerowego. Ta funkcja kopiuje dane bezpośrednio z pamięci aplikacji Java™ na jednym hoście do pamięci aplikacji Java na innym hoście, bez użycia procesora na żadnym hoście.

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.
Jak pokazano na poniższym diagramie, proces kopiowania buforu zawsze korzysta z systemu operacyjnego hosta, co powoduje wiele kopii pośrednich i obliczeniowo kosztownych przełączeń kontekstu między przestrzenią użytkownika a przestrzenią jąder. Proces kopiowania zerowego korzysta z procesora hosta tylko wtedy, gdy bufory są zarejestrowane do użycia w operacjach kopiowania bezpośredniego. Po zarejestrowaniu buforu przesyłanie danych odbywa się bezpośrednio.
Ten diagram przedstawia przegląd komunikacji JSOR między dwoma hostami. Na każdym hoście aplikacja Java z buforem działa na instancji pakietu IBM Developer Kit, który zawiera funkcję JSOR. Pakiet IBM Developer Kit współdziała z adapterem RDMA za pośrednictwem systemu operacyjnego hosta. Ten proces jest procesem kopiowania buforu. Funkcja kopiowania zerowego jest opisana w poniższym tekście za pomocą kopii buforu i przy użyciu zerowej kopii. Obie strony komunikacyjne są połączone na najniższym poziomie przez kanał RDMA, używany przez adapter RDMA z każdej strony. Na najwyższym poziomie każda strona ma aplikację Java z buforem.

Gdy aplikacja 2, na diagramie, ma dostępny bufor do odbierania danych, aplikacja reklamuje tę dostępność, rejestrując bufor w celu uzyskania bezpośredniego rozmieszczenia danych. Gdy aplikacja 1 ma dane do wysłania, zapisuje dane bezpośrednio do zarejestrowanego bufora. Po zakończeniu operacji zapisu wiadomość o zakończeniu zapisu jest wysyłana przez aplikację 1 na drugą stronę. Gdy aplikacja 2 odbierze ten komunikat, może przetwarzać przesłane dane. Po zakończeniu przesyłania danych aplikacja 2 może wyrejestrować bufor odbiorczy.

Ze względu na koszty związane z rejestracją buforu, oczekiwane zmniejszenie liczby cykli procesora jest osiągane tylko wtedy, gdy wielkość transferu danych jest duża. Na przykład w przypadku pojedynczego połączenia może nie zostać wyświetlone zmniejszenie, dopóki wielkość transferu danych nie przekroczy 256 kB. Jeśli wiele połączeń równoległych współużytkuje ten sam bufor dla bezpośredniego rozmieszczania danych, ten próg danych może zostać zmniejszony.

Ponieważ korzyści z wydajności są osiągane tylko dla dużych wielkości danych, funkcja kopiowania zera nie jest domyślnie włączona. Aby włączyć tę funkcję, należy użyć właściwości -Dcom.ibm.net.rdma.zeroCopy= true .

Ograniczenie: komunikacja w trybie pełnego dupleksu nie jest obecnie obsługiwana. Gdy jedna strona jest wysyłana, druga strona musi być odbierana tylko.
Ograniczenie: Początek zmian dla odświeżenia usługi 2 z pakietem poprawek 10Funkcja JSOR zero copy nie jest obsługiwana dla kanałów NIO. Koniec zmian dla odświeżenia usługi 2 z pakietem poprawek 10