Cichy zabójca wydajności baz danych — błędna konfiguracja MPIO i NPIV w środowiskach IBM VIOS
Problem
Błędna konfiguracja MPIO NPIV VIOS to scenariusz, który widziałem wielokrotnie: firma kupuje nową macierz SAN, bo „baza działa wolno”. Migracja przebiega poprawnie, a wydajność… nie zmienia się wcale. Do tego przy każdym przełączeniu ścieżek (failover) — na przykład podczas aktualizacji firmware kontrolera — aplikacja zawiesza się na 60 sekund, co przy systemie transakcyjnym oznacza realne straty.
Sprzęt jest nowy i szybki. Problem siedzi warstwę niżej — w konfiguracji ścieżek między LPAR-em a macierzą.
Przyczyna
W środowisku z VIOS i NPIV ścieżka I/O przechodzi przez kilka warstw: adapter wirtualny w LPAR, mapowanie NPIV na VIOS, fizyczne HBA, fabric SAN, kontrolery macierzy. Wystarczy jeden słaby punkt:
- Algorytm MPIO ustawiony na
fail_overzamiastround_robin/shortest_queue— cały ruch idzie jedną ścieżką, pozostałe stoją bezczynnie. Macierz może być najszybsza na rynku; LPAR i tak korzysta z ułamka jej możliwości. - Domyślne
queue_depthna hdiskach i HBA — dziesiątki równoległych żądań bazy ustawiają się w kolejkę do urządzenia, które przyjmuje ich kilka naraz. - Timeouty pozostawione na wartościach fabrycznych (
rw_timeout,fc_err_recov) — stąd właśnie 60-sekundowe „zamrożenie” przy failoverze: system grzecznie czeka pełny timeout, zanim porzuci martwą ścieżkę. Po zmianiefc_err_recov=fast_faili włączeniudyntrkprzełączenie trwa sekundy. - Niesymetryczne mapowania NPIV — np. wszystkie wirtualne adaptery FC zmapowane przez jeden fizyczny port VIOS; drugi port „dla równowagi” istnieje tylko na schemacie.
Inżynieryjne rozwiązanie
Przegląd całej ścieżki I/O, od LPAR po kontroler macierzy, zawsze w tej kolejności:
- Inwentaryzacja ścieżek —
lspath,lsmap -all -npivna VIOS: czy każda ścieżka logiczna ma pokrycie w niezależnej ścieżce fizycznej (osobne HBA, osobne fabric)? - Algorytm i atrybuty MPIO —
round_robin/shortest_queuetam, gdzie macierz to wspiera (aktywne wszystkie ścieżki), poprawne ODM-owe atrybuty dla danego typu macierzy. - Dostrojenie kolejek —
queue_depthna hdiskach inum_cmd_elemsna adapterach dobrane do charakterystyki obciążenia i możliwości macierzy — po pomiarze, nie „na oko”. - Szybkie wykrywanie awarii ścieżki —
fc_err_recov=fast_fail,dyntrk=yesna adapterach FC; test kontrolowanego failoveru w oknie serwisowym z pomiarem czasu przełączenia. - Pomiar przed i po —
iostat,fcstat, statystyki kolejek: różnicę widać w liczbach, nie w odczuciach.
Wniosek biznesowy
W żadnym z takich przypadków rozwiązaniem nie był nowy sprzęt. Poprawna konfiguracja MPIO/NPIV potrafi zwielokrotnić realną przepustowość I/O istniejącej infrastruktury i skrócić failover z minuty do sekund — kosztem kilku godzin pracy inżyniera i jednego okna serwisowego. Zanim zaplanujesz zakup macierzy, warto zmierzyć, ile wydajności zostawiasz w konfiguracji.
Środowisko IBM Power działa wolniej, niż powinno? Zamów audyt ścieżki I/O.
Najczęstsze pytania o MPIO NPIV VIOS
Czy zmiana algorytmu MPIO wymaga restartu LPAR-a?
Zwykle nie — zmianę atrybutu algorithm na hdisku wykonuje się poleceniem chdev i w większości przypadków wystarczy, że dysk nie jest w danym momencie aktywnie używany przez zapisujący proces. Pełny restart LPAR-a bywa potrzebny tylko przy zmianach na poziomie samego adaptera wirtualnego, nie samego MPIO.
Skąd wiadomo, że problem jest w MPIO, a nie w samej macierzy?
Prosty test: sprawdź w iostat lub fcstat, czy obciążenie faktycznie rozkłada się na wszystkie zmapowane ścieżki, czy tylko na jedną. Jeśli jedna ścieżka przenosi niemal cały ruch, a pozostałe stoją bezczynnie mimo aktywnej konfiguracji round_robin — to prawie zawsze konfiguracja MPIO, nie ograniczenie samej macierzy.
Czy to samo dotyczy dysków wirtualnych (VSCSI), nie tylko NPIV?
Nie — to ważne rozróżnienie. Przy klasycznym VSCSI, gdzie VIOS prezentuje LPAR-owi wirtualny dysk SCSI, dostępny jest tylko jeden algorytm MPIO: fail_over. Nie ma tam możliwości balansowania ruchu między ścieżkami, niezależnie od konfiguracji. Opisana tu optymalizacja dotyczy wyłącznie NPIV, gdzie LPAR dostaje bezpośredni dostęp do LUN-ów przez własny wirtualny WWPN i korzysta z pełnego multipath drivera właściwego dla danej macierzy — dopiero wtedy round_robin czy shortest_queue są w ogóle opcją.
Czy zmiana na round_robin jest bezpieczna na każdej wersji AIX/VIOS?
Nie zawsze bezrefleksyjnie. IBM opisuje w APAR IV54907 przypadki błędów I/O przy algorytmach round_robin i shortest_queue na konkretnych poziomach — m.in. AIX 6.1 TL9, AIX 7.1 TL3 i VIOS 2.2.3.x — jeśli brakuje odpowiedniej poprawki. Zanim zmienisz algorytm na produkcji, sprawdź poziom Technology Level i najnowsze biuletyny IBM dla swojej wersji, a samą zmianę przetestuj najpierw na LPAR-ze nieprodukcyjnym z kontrolowanym failoverem.