2012-02-27 10 views
8

Mam kilka komputerów wielordzeniowych połączonych siecią Infiniband. Chciałbym mieć pewne obliczenia o małej latencji na puli pamięci współdzielonej, ze zdalnymi operacjami atomowymi. Wiem, że RDMA jest drogą do zrobienia. Na każdym węźle rejestrowałbym region pamięci (i domenę ochrony) w celu udostępniania danych.Udostępnianie pamięci RDMA

Przykłady RDMA online często koncentrują się na pojedynczym połączeniu między serwerem jednowątkowym a klientem jednowątkowym. Teraz chciałbym mieć proces wielowątkowy na każdym węźle Infiniband. Ja bardzo zaskoczony o następujących ...

  1. Ile kolejka pary należy przygotować w każdym węźle, dla klastra z n a m węzłów nitek łącznie? Aby być bardziej konkretnym, czy wiele wątków na tym samym węźle może mieć tę samą parę kolejek?

  2. Ile kolejek ukończenia należy przygotować na każdym węźle? Będę miał wiele wątków wydających zdalne operacje odczytu/zapisu/cas dla każdego węzła. Jeśli mieliby udostępnić wspólną kolejkę ukończenia, zdarzenia zakończenia zostaną pomieszane. Jeśli wątki mają własne oddzielone kolejki zakończenia, będzie ich naprawdę dużo.

  3. Czy sugerujesz, abym miał jakiekolwiek istniejące biblioteki zamiast pisać to oprogramowanie? (hmm, czy powinienem napisać jeden i otworzyć go? :-)

Dziękuję za uprzejme sugestie.

Odpowiedz

8

W przypadku Linuksa biblioteka czasowników InfiniBand jest całkowicie wątkowo bezpieczna. Możesz więc używać dowolnej liczby par (QP) w swojej aplikacji wielowątkowej, jak chcesz - wiele wątków może bezpiecznie wysyłać żądania pracy do pojedynczego QP, chociaż oczywiście będziesz musiał upewnić się, że niezależnie od śledzenia wyjątków wnioski itp., które robisz we własnej aplikacji, są bezpieczne dla wątków.

Prawdą jest, że każda kolejka wysyłania i każda kolejka odbiorcza (pamiętaj, że QP to naprawdę para kolejek :) jest dołączona do pojedynczej kolejki do ukończenia (CQ). Jeśli chcesz, aby każdy wątek posiadał własne CQ, każda nić będzie potrzebować własnego QP do przesłania pracy.

Ogólnie rzecz biorąc, QP i CQs nie są tak naprawdę ograniczonym zasobem - możesz bez problemu mieć setki lub tysiące na jednym węźle. Możesz więc zaprojektować swoją aplikację, nie martwiąc się zbytnio o bezwzględną liczbę kolejek, z których korzystasz. Nie oznacza to, że nie musisz się martwić skalowalnością - na przykład, jeśli masz dużo kolejek odbiorczych i dużo buforów w kolejce, możesz związać zbyt dużo pamięci w buforowaniu odbioru, więc skończysz potrzeby korzystania z współdzielonych kolejek odbiorczych (SRQ).

Istnieje wiele bibliotek oprogramowania pośredniego, które używają IB; prawdopodobnie MPI (np. http://open-mpi.org/) jest najbardziej znanym i prawdopodobnie warto to ocenić, zanim przejdzie się zbyt daleko w odkrywanie nowych rzeczy. Deweloperzy MPI opublikowali również wiele badań na temat efektywnego wykorzystania IB/RDMA, co jest prawdopodobnie warte poszukiwania w przypadku, gdy zdecydujesz się na zbudowanie własnego systemu.

+0

A kod źródłowy par kolejek (QP), kolejka uzupełniania (CQ) i udostępnione kolejki odbiorcze (SRQ) muszą pisać własne lub czy mogę przygotować ich implementację (jako najlepszą praktykę) i gdzie mogą brać? – Alex

Powiązane problemy