Jest to polecenie ibdmsh, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
ibdmsh MODEL DANYCH IB - Rozszerzona powłoka TCL
OPIS
ibdmsh to powłoka TCL rozszerzona o interfejs dla modelu danych IB. Aby użyć tej powłoki
napiszesz kod TCL, który bezpośrednio uzyska dostęp do obiektów i funkcji modelu danych IB.
Poniższe podsekcje zawierają szczegółową definicję tych obiektów i interfejsu API.
IBDM Stałe
Node rodzaje
W polu typu obiektu węzła używane są następujące stałe
[ Stała: int ] $IB_UNKNOWN_NODE_TYPE = IB_UNKNOWN_NODE_TYPE
[ Stała: int ] $IB_SW_NODE = IB_SW_NODE
[ Stała: int ] $IB_CA_NODE = IB_CA_NODE
Zaloguj Gadatliwość Flagi
Następujące stałe są używane jako bity argumentów zmiennej globalnej
$FabricUtilsVerboseLevel
[Stała: int] $FABU_LOG_NONE = 0x0
[Stała: int] $FABU_LOG_ERROR = 0x1
[ Stała: int ] $FABU_LOG_INFO = 0x2
[ Stała: int ] $FABU_LOG_VERBOSE = 0x4
IBDM Globals
Poziom dziennika: ustawiony na wartości FABU_LOG*
[ Globalnie : int ] $FabricUtilsVerboseLevel
IBDM Obiekty
W tej sekcji opisano różne typy obiektów udostępniane przez IBDM.
IBDM ujawnia niektóre ze swoich wewnętrznych obiektów. Identyfikatory obiektów zwracane przez różne
wywołania funkcji są formatowane według następujących zasad:
Tkanina: tkanina:
System: system: :
SysPort: sysport: : :
Węzeł: węzeł: :
Port: port: : /
Obiekty IBDM to standardowe obiekty Swig-Tcl. W związku z tym mają dwa smaki do użycia:
Zmienne, obiekty.
Zmienne/wskaźniki:
Dla każdego atrybutu obiektu dostępne są metody „get” i „set”.
Format metod jest następujący: _ _ .
Metoda „set” jest dostępna tylko dla atrybutów do odczytu/zapisu.
Przykład:
ustaw węzły [ibdm_get_nodes]
ustaw węzeł [lindex $nodes 0]
IBNode_numPorts_get $węzeł
Obiekty:
Biorąc pod uwagę wskaźnik obiektu, można go przekonwertować na „Obiekt” Tcl
za pomocą następującego polecenia:
-Ten
Raz zadeklarowany można używać w połączeniu z
za pomocą standardowych poleceń „configure” i „cget”.
Przykład (po poprzednim):
IBFabric VaTech -ta tkanina
VaTech cget -NodeByName
Aby usunąć symbol obiektu (i włączyć jego mapowanie na inny
wskaźnik) użyj:
Przemianować „”
Na przykład:
zmień nazwę VaTech „”
klasa Port IB
Poniżej przedstawiono różne pola i metody klasy IB Port, która opisuje
Fizyczny port urządzenia IB (chip).
[ Dane członkowskie: zwraca IBPort * ] -p_remotePort
Port podłączony po drugiej stronie łącza
[ Dane członkowskie: zwraca IBSysPort * ] -p_sysPort
Port systemowy (jeśli istnieje), do którego jest podłączony
[ Dane członkowskie: zwraca IBNode * ] -p_node
Węzeł, którego częścią jest port.
[ Dane członkowskie: zwraca int ] -num
Porty fizyczne są identyfikowane poprzez numer.
[ Dane członkowskie: zwraca unsigned int ] -base_lid
Pokrywa podstawy przypisana do portu.
[ Dane członkowskie: zwraca IBLinkWidth * ] -width
Szerokość łącza portu
[ Dane członkowskie: zwraca IBLinkSpeed * ] -prędkość
Szybkość łącza portu
[Dane członkowskie: zwraca unsigned int] -licznik1
Wartość ogólna, która będzie używana przez różne algorytmy
[ Konstruktor: zwraca IBPort * ] Nazwa IBPort p_nodePtr numer
Konstruktor IBPort
[Członek: zwraca new_uint64_t] guid_get
Zdobądź przewodnik po porcie
[Członek: zwraca nieważność] guid_set guid
Zmodyfikuj przewodnik portu
[Członek: zwraca nowy_ciąg] getName
Uzyskaj nazwę portu: Port urządzenia podłączony do portu systemowego (panel przedni) powraca
nazwa portu na panelu przednim.
[Członek: zwraca nieważność] connect p_otherPort ?szerokość? ?prędkość?
Podłącz port do innego portu węzła z opcjonalnymi parametrami szerokości i szybkości
[Członek: zwraca int] rozłącz
Odłącz port. Zwróć 0, jeśli się powiedzie
klasa IBNode
Klasa IB Node reprezentuje pojedyncze urządzenie IB (chip)
[ Dane członkowskie: zwraca ciąg * ] -nazwa
Nazwa węzła (nazwa instancji chipa)
[ Dane członkowskie: zwraca IBNodeType ] -type
Albo $IB_SW_NODE, albo $IB_CA_NODE
[ Dane członkowskie: zwraca uint16_t * ] -devId
Identyfikator urządzenia węzła
[ Dane członkowskie: zwraca uint16_t * ] -revId
Identyfikator wersji urządzenia.
[ Dane członkowskie: zwraca uint16_t * ] -vendId
Identyfikator dostawcy urządzenia.
[ Dane członkowskie: zwraca ciąg * ] -atrybuty
Przecinek-sep ciąg dowolnych atrybutów k=v
[ Dane członkowskie: zwraca uint8_t ] -rank
Ranga węzła (0 to pierwiastek)
[ Dane członkowskie: zwraca IBSystem * ] -p_system
Do jakiego systemu należymy
[ Dane członkowskie: zwraca IBFabric * ] -p_fabric
Do jakiej tkaniny należymy.
[ Dane członkowskie: zwraca unsigned int ] -numPorts
Liczba portów fizycznych
[ Dane członkowskie: zwraca vec_pport * ] -Porty
Wektor wszystkich portów
[ Dane członkowskie: zwraca vec_vec_byte * ] -MinHopsTable
Tabela liczby przeskoków wymaganych do uzyskania dostępu z każdego portu do każdego docelowego LID
[ Dane członkowskie: zwraca vec_byte * ] -LFT
LFT tego węzła (tylko dla przełączników), który jest długim wektorem portów docelowych -
indeks to LID
[Członek: zwraca new_uint64_t] guid_get
Uzyskaj identyfikator GUID węzła
[Członek: zwraca nieważność] guid_set guid
Ustaw identyfikator GUID węzła
[ Konstruktor: zwraca IBNode * ] Nazwa IBNode n p_fab p_sys t np
Konstruktor
[Członek: zwraca IBPort *] makePort num
Utwórz nowy port według jego numeru (jeśli jest to wymagane) i zwróć wskaźnik portu
[Członek: zwraca IBPort *] getPort num
Uzyskaj port według numeru num = 1..N:
[Członek: zwraca void] setHops p_port przeskoki pokrywy
Ustaw minimalny przeskok dla danej pary pokryw portu (* to wszystko).
[Członek: zwraca int] getHops p_port lid
Uzyskaj minimalną liczbę przeskoków zdefiniowaną dla danego portu lub wszystkich
[Członek: zwraca IBPort *] getFirstMinHopPort pokrywa
Zeskanuj porty węzła i znajdź pierwszy port z minimalnym przeskokiem do pokrywy
[Członek: zwraca void] setLFFTPortForLid lid portNum
Ustaw tabelę przekazywania liniowego dla danego LID
[Członek: zwraca int] getLFTPortForLid lid
Uzyskaj LFT dla danego LID
[Członek: zwraca nieważność] repHopTable
Zrzuć tabelę minimalnych przeskoków węzła
klasa IBSysPort
Klasa IBSysPort reprezentuje wtyczkę IB na panelu przednim lub tylnym systemu
[ Dane członkowskie: zwraca ciąg * ] -nazwa
Nazwa portu na panelu przednim (silk).
[ Dane członkowskie: zwraca IBSysPort * ] -p_remoteSysPort
Jeśli podłączony jest drugi port sys
[ Dane członkowskie: zwraca IBSystem * ] -p_system
System, do którego należy
[ Dane członkowskie: zwraca IBPort * ] -p_nodePort
Port węzła, z którym się łączy.
[ Konstruktor: zwraca IBSysPort * ] Nazwa IBSysPort n p_sys
Konstruktor
[Członek: zwraca nieważność] connect p_otherSysPort ?szerokość? ?prędkość?
Podłącz dwa porty SysPort
[Członek: zwraca int] rozłącz
Odłącz SysPort (i porty). Zwróć 0, jeśli się powiedzie
klasa System IB
Klasa IBSystem reprezentuje całą obudowę
[ Dane członkowskie: zwraca ciąg * ] -nazwa
Nazwa „hosta” systemu
[ Dane członkowskie: zwraca ciąg * ] -typ
Jaki jest typ, np. Cougar, Buffalo, MTS2400 itp. Odpowiedni plik IBNL
powinien istnieć - definiując ten typ systemu
[ Dane członkowskie: zwraca IBFabric * ] -p_fabric
Tkanina, do której należy system
[ Dane członkowskie: zwraca map_str_pnode * ] -NodeByName
Podaj wskaźnik węzła według jego nazwy
[ Dane członkowskie: zwraca map_str_psysport * ] -PortByName
Mapa zawierająca wskaźnik do SysPort według nazwy
[ Konstruktor: zwraca IBSystem * ] Nazwa IBSystem n p_fab t
Konstruktor
[Członek: zwraca new_uint64_t] guid_get
Uzyskaj identyfikator GUID obrazu systemu
[Członek: zwraca nieważność] guid_set guid
Ustaw identyfikator GUID obrazu systemu
[Członek: zwraca IBSysPort *] makeSysPort pName
Upewnij się, że zdefiniowaliśmy port (więc zdefiniuj go, jeśli nie)
[Członek: zwraca IBPort *] getSysPortNodePortByName sysPortName
Uzyskaj port węzła dla danego portu systemowego według nazwy
[Członek: zwraca IBSysPort *] getSysPort nazwa
Uzyskaj port Sys według nazwy
klasa IBFabric
Reprezentuje całą podsieć IB złożoną z systemów
[ Dane członkowskie: zwraca map_str_pnode * ] -NodeByName
Podaj listę par nazw węzłów i wskaźników
[ Dane członkowskie: zwraca map_str_psys * ] -SystemByName
Podaj listę par nazw systemowych i wskaźników
[ Dane członkowskie: zwraca vec_pport * ] -PortByLid
Zawiera listę par nazw portów systemowych i wskaźników
[ Dane członkowskie: zwraca map_guid_pnode * ] -NodeByGuid
Zawiera listę par identyfikatorów węzłów i wskaźników węzłów
[ Dane członkowskie: zwraca map_guid_psys * ] -SystemByGuid
Zawiera listę par identyfikatorów obrazu systemu i wskaźników systemu
[ Dane członkowskie: zwraca map_guid_pport * ] -PortByGuid
Zawiera listę par identyfikatorów portów i wskaźników portów
[ Dane członkowskie: zwraca unsigned int ] -minLid
Śledź min. użycie pokrywy.
[ Dane członkowskie: zwraca unsigned int ] -maxLid
Track max używana pokrywa.
[ Dane członkowskie: zwraca unsigned int ] -lmc
Zastosowana wartość LMC
[Członek: zwraca IBNode *] makeNode n p_sys wpisz numPorts
Pobierz węzeł według jego nazwy (utwórz jeden z nieistniejących)
[Członek: zwraca IBNode *] getNode name
Pobierz węzeł według jego nazwy
[Członek: zwraca list_pnode *] typ getNodesByType
Zwróć listę wskaźników węzłów pasujących do wymaganego typu
[Członek: zwraca IBSystem *] nazwa makeGenericSystem
Utwórz nowy system ogólny - w zasadzie pusty kontener na węzły...
[Członek: zwraca IBSystem *] makeSystem typ nazwy
Utwórz nowy system - typ musi mieć zarejestrowaną fabrykę.
[Członek: zwraca IBSystem *] getSystem name
Pobierz system według nazwy
[Członek: zwraca IBSystem *] getSystemByGuid guid
pobierz system za pomocą przewodnika
[Członek: zwraca IBNode *] Guid getNodeByGuid
pobierz węzeł według jego przewodnika
[Członek: zwraca IBPort *] Przewodnik getPortByGuid
zdobądź port przez jego przewodnika
[Członek: zwraca nieważność] addCable t1 n1 p1 t2 n2 p2 ?szerokość? ?prędkość?
Dodaje kabel, biorąc pod uwagę dwa zestawy typu węzła, nazwy węzła i numeru portu. Opcjonalnie
użyj danej szerokości i szybkości połączenia
[Członek: zwraca int] parseCables fn
Przeanalizuj plik kabli i zbuduj strukturę
[Członek: zwraca int] parseTopology fn
Przeanalizuj plik topologii i zbuduj strukturę
[Członek: zwraca int] addLink type1 numPorts1 sysGuid1 nodeGuid1 portGuid1 vend1
devId1 rev1 desc1 lid1 portNum1 typ2 numPorts2 sysGuid2 węzełGuid2 portGuid2 vend2 devId2
rev2 desc2 pokrywa2 portNum2 ?szerokość? ?prędkość?
Dodaj łącze do struktury — spowoduje to utworzenie systemu i węzłów zgodnie z wymaganiami.
[Członek: zwraca int] parseSubnetLinks fn
Przeanalizuj plik subnet.lst OpenSM i zbuduj z niego szkielet.
[Członek: zwraca int] parseFdbFile fn
Przeanalizuj plik zrzutu OpenSM FDB i wypełnij tabele LFT przełączników
[Członek: zwraca int] parseMCFdbFile fn
Przeanalizuj plik MCFDB OpenSM i odpowiednio ustaw tabelę MFT
[Członek: zwraca int] parsePSLFile fn
Przeanalizuj ścieżkę do pliku mapowania SL. Każda linia z: src_node_guid DLID SL
Używany podczas sprawdzania pętli kredytowej
[Członek: zwraca int] parseSLVLFile fn
Przeanalizuj plik tabel SLVL. Każda linia zawiera: sw_node_guid in_port out_port 0x(sl0)(sl1)
0x(sl2)(sl3)...
[Członek: zwraca nieważność] setLidPort pokrywa p_port
Ustaw port pokrywy
[Członek: zwraca IBPort *] getPortByLid pokrywka
Zdobądź port za pokrywką
[zwraca IBFabric * ] new_IBFabric
Skonstruuj nową tkaninę
[ zwraca nieważność ] usuń_IBFabric p_fabric
Zniszczyć tkaninę
IBDM Funkcje
W tej sekcji znajdują się szczegółowe informacje na temat funkcji udostępnianych przez IBDM. Kolejność jest zgodna z
oczekiwany porządek w regularnym przepływie IBDM. Wszyscy zwracają 0 w przypadku sukcesu.
Subnet Użytkowe
Plik zawiera zestaw narzędzi do uruchomienia w podsieci w celu naśladowania inicjalizacji OpenSM
i przeanalizuj wyniki:
[ zwraca int ] ibdmAssignLids p_smNodePort ?lmc?
Przypisz LID za pomocą opcjonalnego LMC (wiele LID na port)
[zwraca int ] ibdmCalcMinHopTables p_fabric
Oblicz i wypełnij tabele MinHopTable wymagane do uruchomienia routingu w stylu OpenSM.
[ zwraca int ] ibdmCalcUpDnMinHopTbls p_fabric rootNodesNameRex
Oblicz i wypełnij tabele MinHopTables zgodnie z regułą Góra/Dół.
[zwraca int ] ibdmOsmRoute p_fabric
Poprowadź tkaninę za pomocą routingu w stylu OpenSM
[zwraca int ] ibdmEnhancedRoute p_fabric
Trasuj strukturę za pomocą routingu w stylu OpenSM ulepszonego z lepszą obsługą LMC > 0
[zwraca int ] ibdmFatTreeRoute p_fabric rootNodes
Poprowadź tkaninę za pomocą algorytmu, który pasuje tylko do drzew pełnotłustych
[ zwraca int ] ibdmFatTreeAnalytics p_fabric
Przeanalizuj tkaninę, aby sprawdzić, czy jest to grube drzewo i poprowadź je, jeśli tak
[zwraca int ] ibdmVerifyCAtoCARoutes p_fabric
Upewnij się, że wszystkie (H)CA są ze sobą połączone w oparciu o ustawienia LFT
[zwraca int ] ibdmVerifyAllPaths p_fabric
Upewnij się, że wszystkie przełączniki i (H)CA są ze sobą połączone w oparciu o LFT
w panelu ustawień
[zwraca int ] ibdmAnalyzeLoops p_fabric
Rygorystyczna kontrola pętli kredytowych. Algorytm ten przeprowadza pełną i dokładną kontrolę
jednak zawarte w nim sprawozdania dotyczące ścieżek pętli kredytowych są trudne do zinterpretowania. Jeśli znasz korzenie
drzewa (lub drzewo jest symetryczne) lepiej jest użyć
ibdmReportNonUpDownCa2CaPaths
[zwraca węzeł list_pnode ] ibdmFindSmetricTreeRoots p_fabric
Przeanalizuj topologię drzewa i znajdź korzenie drzewa na podstawie jego symetrii
[zwraca list_pnode ] ibdmFindRootNodesByMinHop p_fabric
Na podstawie MinHopTable znajdź korzenie drzewa. Dopuszczalna asymetria wynosi 5%.
[zwraca int ] ibdmRankFabricByRoots p_fabric rootNodes
Biorąc pod uwagę listę węzłów głównych (nazw), uszereguj węzły (root = 0)
[ zwraca int ] ibdmReportNonUpDownCa2CaPaths p_fabric rootNodes
Przeanalizuj trasy, aby upewnić się, że zasada Góra/Dół jest zachowana
[zwraca int ] ibdmCheckMulticastGroups p_fabric
Sprawdź łączność routingu multiemisji
[ zwraca int ] ibdmCheckFabricMCGrpsForCreditLoopPotential p_fabric rootNodes
Przeanalizuj routing multiemisji, aby upewnić się, że jest on zgodny z regułą góra/dół
[ zwraca int ] ibdmLinkCoverageAnalytic p_fabric rootNodes
Przygotuj harmonogram transmisji ze zbioru źródeł do miejsc docelowych, tak aby
na każdym etapie nie ma linków, które są nadmiernie subskrybowane i po wszystkich etapach
ogniwa tkaniny zostały wzmocnione
Rysunek kalkowy Użytkowe
Funkcje te umożliwiają śledzenie ścieżek i raportowanie odwiedzonych węzłów
[ zwraca int ] ibdmTraceDRPathRoute p_smNodePort drPathPortNums
Prześledź wyznaczoną ścieżkę trasy z danego portu
[ zwraca int ] ibdmTraceRouteByMinHops p_fabric slid dlid
Śledź ścieżkę wzdłuż MinHop od źródłowego do docelowego LID-u
[ zwraca int ] ibdmTraceRouteByLFT p_fabric slid dlid przeskoki p_nodesList
Śledź ścieżkę po LFT aktualizując zmienne listy przeskoków i węzłów
Topologia Dopasowywanie Użytkowe
Poniższe narzędzia dopasowują dwie struktury, dostarczając zarówno komunikaty o niezgodnościach, jak i a
jednolita tkanina
[ zwraca int ] ibdmMatchFabrics p_spec_fabric p_discovered_fabric kotwicaNodeName
kotwicaPortNum kotwicaPortGuid
Dopasuj strukturę opartą na topologii do odkrytej, zaczynając od portu enchor
[ zwraca int ] ibdmBuildMergedFabric p_spec_fabric p_discovered_fabric p_merged_fabric
Po dopasowaniu za pomocą ibdmMatchFabrics zapełnij „scaloną tkaninę” informacjami
połączone dla dopasowanych węzłów
Przekrwienie Analiza Użytkowe
Zapewnij możliwość śledzenia i raportowania nadsubskrypcji linków
[zwraca int ] ibdmCongInit p_fabric
Zainicjuj system śledzenia
[zwraca int ] ibdmCongCleanup p_fabric
Wyczyść liczniki i usuń alokację
[zwraca int ] ibdmCongClear p_fabric
Liczniki sprzątania
[zwraca int ] ibdmCongTrace p_fabric srcLid dstLid
Śledź ścieżkę pomiędzy LID-ami aktualizującymi informacje o użyciu łącza
[zwraca int ] ibdmCongReport p_fabric
Zgłaszaj powstałe informacje o zatorach
[zwraca int ] ibdmCongDump p_fabric
Zrzuć wszystkie informacje o śledzeniu zatorów
Korzystaj z ibdmsh online, korzystając z usług onworks.net