Snabbguide för Infiniband på Fedora 24
Först kontrollerar jag om Fedora har upptäckt infinibandkorten.
# dmesg | grep mth
Med dmesg, som visar vad som har hänt när Linux startar, ska vi få svar på om Linux har hittat infiniband-korten. Om du ser något i stil med vad min terminal meddelar har korten hittats. Det betyder att drivrutinerna också är laddade.
Men för säkerhets skull ska vi kontrollera det med lsmod, som visar vilka drivrutiner Linux-kärnan har laddat.
# lsmod | grep mthca
Då blir det så här om kärnan laddat drivrutinerna.
Nu ska vi installera de behövliga paketen; med dem kommer också flera beroenden att åtgärdas. Totalt blev det 99 paket som installerades i Fedora 24. Givetvis kan det variera beroende på vad som tidigare installerats.
Sen är det dags att skriva konfigurationsfilen för infiniband i /etc/sysconfig/networks-scripts. Som ni ser kallar jag min ifcfg-mlx4_ib4 men jag har också en ib3 på samma maskin eftersom varje kort har två portar. Jag har valt att köra 0.1-adresser på slutet för två av portarna, 1.1-adresser på två andra portar och till slut 2.1-adresser på de två sista portarna. Jag skulle rita en nätverkskarta så blir det enklare att förstå. Men jag har tre fysiska maskiner, och var och en av dem har ett infiniband-kort med två portar i varje. Så i och med det har har varje maskin kontakt med två maskiner via de två infiniband-portarna. Jag nämner också att för varje anslutning behövs det en opensm-manager. För att det ska fungera ska alltså varje server ha en egen opensm-manager. Jag kommer snart in på hur opensm ska konfigureras. Om vi skulle ha en infiniband-switch skulle vi inte behöva opensm-manager. Men detta är ju en snikvariant så det är därför uppsättningen är så här. Följ bara kommandona i den första bilden nedanför. Jag skapar helt enkelt bara konfigurationsfilerna manuellt.
Med text-redigeraren vi kan du sedan skriva in detta i filerna. Givetvis måste du göra en skiss på hur ip-adresserna ska fördelas.
Vissa menar att det också ska stå "CONNECTED_MODE=yes" för att snabba upp infiniband. Men jag har dock inga belägg för det eftersom jag ännu inte speed-testat infiniband. Men det ska jag göra och det ska bli spännande att se hastigheten och hur den kan förbättras. Kanske är detta förslag ett av dem som kan förbättra farten. Vi får se.
Nu ska vi lägga in lite uppgifter i olika konfigurationsfiler för att få det att fungera. Vi börjar med att döpa om enhetsnamnen på infiniband. Normalt heter dem ib0, ib1 och så vidare. Först måste vi ha en del av mac-adressen för infiniband.
# ip a sh
Öppna /etc/udev/rules.d/70-persistent-rules för det är där vi ska lägga de åtta sista bitarna från både ib0 och ib1 för att ändra namnen på våra infiniband-enheter. Så det ska se ut så här efter att vi är klara. Det finns ett ursprungligt exempel i konfigurationsfilen som är enkelt att ta efter. Ändra bara de åtta bitarna och det namn du önskar på enheten. De åtta bitarna ska in efter asterisken, men före citat-tecknet. Håll noga reda på att det blir rätt och i enlighet med det namn du angett tidigare i ifcfg-mlx4_ib3 osv.
Innan vi kan dra igång opensm-tjänsten måste vi ange att IPoIB (IP over infiniband) ska laddas vid start? Det gör man i filen /etc/rdma/rdma.conf
Nu kan vi snart dra igång opensm.service, en tjänst som gör det möjligt för två infiniband-enheter att kommunicera med varandra. Opensm-managern behövs inte om man har en switch, men vid en fattigmanslösning och labbmiljö går det bra med opensm-managern att hantera infiniband. Kom dock ihåg att för varje kabel som är ansluten till en infinibandport måste det finnas en opensm-manager. I mitt fall behövs det alltså tre opensm-tjänster igång, en på varje server, för att det ska fungera. Men innan vi gör det ska vi starta om serverdatorn för att se om allt blir som det ska: t ex att infiniband-enheterna har bytt namn och är uppe.
# init 6
Och det fungerade som ni ser av skärmklippet nedan, enheten heter numera mlx4_ib3. Ni ser att den ena har ändrat namn. Då kan vi göra det samma på den andra porten.
Nu är det dags att gå in /etc/rdma/opensm.conf och ange GUID för den enhet som opensm ska köra på. Ett av kommandona som ger rätt GUID är ibstat. Jag fick installera infiniband-diags för att få tillgång till det verktyget. Det programpaketet innehåller förstås fler program som kan hjälpa en att analysera och felsöka infiniband. Genom ibstat fick jag fram GUID:en och den är markerad på nedanstående bild.
Sen skriver vi in nummer- och bokstavskombinationen i /etc/rdma/opensm.conf
Sen kommer det spännande när vi startar opensm-managern. Efter en del krånglande med NetworkManager där jag inte fick någon ip-adresser på infinibandportarna valde jag att stänga av den tjänsten och i stället köra network.service i stället. Och då fungerar det. Infiniband-enheterna får ip-adresser. Jag kunde få ip-adresser även med NetworkManager i gång men då fick jag ange dem via terminalen. Och så går det inte att ha på en server som kan behöva startas om. Jag kan ju inte ange ip-adresser som bara fungerar så länge som datorn inte har startats om.
# systemctl enable opensm.service
# systemctl start opensm.service
En annan sak som kan behöva tas upp är om man vill köra subnet-managern på båda portarna i samma maskin. Då måste man ange GUID:en i /etc/sysconfig/opensm. Där finns en avkommenterad rad ett färdigtexempel. GUID:erna får man med till exempel kommandot ibstat. Vill man bara köra opensm på en av portarna kan man ange GUID:en i /etc/rdma/opensm.conf.
Det ska vara allt för att få i gång infiniband.