środa, 1 kwietnia 2020

IBM TS4500 + IBM 24B + QLogic 2562

Kolejna notatka z placu boju, tym razem z pewnego wdrożenia.

Klocki

Ugryzł mnie ostatanio w (_*_) taki zestaw:

  • IBM TS4500 z napędami LTO8
  • Dwa przełączniki Brocade (IBM 24B)
  • Dwa serwery Supermicro zgodne z IBM PC XT. Wyposażone w karty Qlogic QLE2562. Dwuportowe, 8 Gbit.
  • Maszyny pod RHEL 7.7 do tego dograny najnowszy (3.0.51-1) lin_tape.
  • Na jednym serwerze IBM Spectrum Protect 8.1.9.0, na obu klient BA + Storage Agent.
  • Oba serwery mają na sobie sporo dysków spiętych w rozproszony filesystem, a w zasadzie nakładkę na filesystem o nazwie dCache. Całość przechowuje sporo dużych, około 10GIB plików obrazowych (nie kompresują się). 
  • Wspomniany dCache, według zdefiniowanych reguł, woła sobie klienta B/A, żeby archiwizować bądź odtwarzać pliki z tego filesystemu. Taki HSM tylko Open Source.


Proste nie ? Gdyby było proste nie byłoby ciekawe. Zaraz po poskładaniu klocków okazało się, że performance jest tak... 3000 razy słabszy niż spodziewany: 100 KB/s zamiast spodziewanych 300 MB/s.

Diagnostyka

W takiej sytuacji zwykle zaczynam od najprostszych rzeczy: kable. Uszkodzone, z syndromem niedopchnięcia itd. 
Najpierw zajrzałem na przełączniki. portErrShow pokazał takie cuda:


fc-2:admin> porterrshow 
          frames      enc    crc    crc    too    too    bad    enc   disc   link   loss   loss   frjt   fbsy  c3timeout    pcs
       tx     rx      in    err    g_eof  shrt   long   eof     out   c3    fail    sync   sig                  tx    rx     err
  0:   13.0m   9.2m   9.2k   9.2k   9.2k   0      0     17     23.0m  14     12      0     12      0      0      0      0      0   
  1:    2.2k   1.4k   0      0      0      0      0      0    133.7k   2      6      0      6      0      0      0      0      0   
  2:  132.2k  11.9m   0      5      5      0      0      0     15.3m  10      4      0      3      0      0      0      0      0   
  3:   36.2k  34.8k   0      5      5      0      0      0     84.1k   8      5      0      4      0      0      0      0      0   
  4:    6.2m 136.7k   0      5      5      0      0      0    300.3k   8      5      0      5      0      0      0      0      0   
  5:    2.7m 285.4k   0      6      6      0      0      0     91.0k  10      3      0      5      0      0      0      0      0   
  6:   43.4k 625.0k   0      4      4      0      0      0     24.5k   6      1      0      3      0      0      0      0      0 

Na porcie 0 na 13 milionów ramek 23 miliony błędnych ?!? Zerknijmy na kabel:

2:admin> sfpshow 0
[...]
                                            Alarm                  Warn
                                    low         high       low         high
Temperature: 47      Centigrade      -5         85         0           80
Current:     7.098   mAmps           2.500      10.500     2.500       10.500 
Voltage:     3370.0  mVolts          3000.0     3600.0     3130.0      3460.0 
RX Power:    -10.9   dBm (80.4 uW)   31.5   uW  2000.0 uW  31.5   uW   790.0  uW
TX Power:    -2.2    dBm (600.1 uW)  126.0  uW  2000.0 uW  317.0  uW   790.0  uW


OK. Port wyłączony, urządzenia przeskanowane na nowo (odkryte na nowych ścieżkach, bo u klientu nie ma licencji na DPF). Następny test (drugi switch, bo pierwszy "port disabled"):

portErrShow pokazał, że większość błędów to "disc c3". Bez innych błędów, zwykle oznacza to, że ktoś nie chce odebrać pakietów, bo się np nie wyrabia. 
Patrząc na to co się działo na hoscie: podczas testu jeden korek całkowicie zawalony IO/Waitem, zacząłem podejrzewać karty FC..

Firmłer Qlogic

Jeśli do portu jest podłączony SAN to będzie działać takie zaklęcie:

# systool  -c fc_host -v -d host14
Class = "fc_host"

  Class Device = "host14"
  Class Device path = "/sys/devices/pci0000:ae/0000:ae:00.0/0000:af:00.0/host14/fc_host/host14"
    dev_loss_tmo        = "30"
    fabric_name         = "0x1000889471f05674"
    issue_lip           = <store method only>
    max_npiv_vports     = "254"
    node_name           = "0x20000024ff4e2996"
    npiv_vports_inuse   = "0"
    port_id             = "0x010100"
    port_name           = "0x21000024ff4e2996"
    port_state          = "Online"
    port_type           = "NPort (fabric via point-to-point)"
    speed               = "8 Gbit"
    supported_classes   = "Class 3"
    supported_speeds    = "1 Gbit, 2 Gbit, 4 Gbit, 8 Gbit"
    symbolic_name       = "QLE2562 FW:v8.07.00 DVR:v10.00.00.12.07.7-k"
    system_hostname     = ""
    tgtid_bind_type     = "wwpn (World Wide Port Name)"
    uevent              = 
    vport_create        = <store method only>
    vport_delete        = <store method only>

    Device = "host14"
    Device path = "/sys/devices/pci0000:ae/0000:ae:00.0/0000:af:00.0/host14"
      fw_dump             = 
      issue_logo          = <store method only>
      nvram               = "ISP "
      optrom_ctl          = <store method only>
      optrom              = 
      reset               = <store method only>
      sfp                 = ""
      uevent              = "DEVTYPE=scsi_host"
      vpd                 = "�)"

Od serwisu dowiedziałem się o istnieniu QConvergeConsole CLI/GUI, które potrafi pokazać coś takiego (tu wydruk po aktualizacji firmłeru):

# qaucli -i
Using config file: /opt/QLogic_Corporation/QConvergeConsoleCLI/qaucli.cfg
Installation directory: /opt/QLogic_Corporation/QConvergeConsoleCLI
Working dir: /root/ibm
--------------------------------------------------------------------------------
Host Name                      : arch1
HBA Instance                   : 0
HBA Model                      : QLE2562-S
HBA Description                : QLE2562 SUN StorageTek Enterprise 8Gb PCI-Express HBA Dual Port
HBA ID                         : 0-QLE2562-S
HBA Alias                      : 
HBA Port                       : 1
Port Alias                     : 
Node Name                      : 20-00-00-24-FF-4E-76-F2
Port Name                      : 21-00-00-24-FF-4E-76-F2
Port ID                        : 01-00-00
Principal Fabric WWN           : 10-00-88-94-71-F0-56-74
Adjacent Fabric WWN            : 20-00-88-94-71-F0-56-74
Serial Number                  : 0402T00-1318132856
Driver Version                 : 10.00.00.12.07.7-k
BIOS Version                   : 3.29
Running Firmware Version       : 8.08.01 (90d5)
Flash BIOS Version             : 3.29
Flash FCode Version            : 3.23
Flash EFI Version              : 6.09
Flash Firmware Version         : 8.01.02
Actual Connection Mode         : Point to Point
Actual Data Rate               : 8 Gbps
Supported Speed(s)             : 2 4 8 Gbps
Chip Model Name                : ISP2532-based 8Gb Fibre Channel to PCI Express HBA
PortType (Topology)            : NPort
Target Count                   : 5
PCI Bus Number                 : 175
PCI Device Number              : 0
PCI Function Number            : 0
PCI Device ID                  : 0x2532
Subsystem Device ID            : 0x0171
Subsystem Vendor ID            : 0x1077
PCIe Max Bus Width             : x8
PCIe Negotiated Width          : x4
PCIe Max Bus Speed             : 5.0 Gtps
PCIe Negotiated Speed          : 5.0 Gtps
HBA Temperature (C)            : N/A
HBA Status                     : Online
--------------------------------------------------------------------------------

No właśnie. W Linuxie jest tak śmiesznie zrobione, że potrafi zapakować firmware, bez zapisywania ich do flash'a karty. Takie firmłery w dużej mierze (np wszystkie QLAxxxx) przychodzą w systemowym pakiecie linux-firmware. Na stronie QLogic'a jest nowszy firmware niż w tym pakiecie. Założenie go wygląda na banalnie proste:
  • sciągamy pakiet qlogic-firmware
  • instalujemy z opcją --force, bo pliki gryzą się z tymi z linux-firmware
  • dokładamy konfig modułu qla2xxx tak, żeby chciał ładować firmare z pliku
# cat /etc/modprobe.d/qla2xxx.conf 
options qla2xxx ql2xfwloadbin=2
  • reboot
i... nic. 

Dlaczego? Bo qla2xxx jest ładowane z initrd. Czyli pik /etc/modprobe.d/qla2xxx.conf trzeba skopiować do /usr/lib/modprobe.d/qla2xxx.conf. A potem puścić:

# dracut -f

I gotowe. Nie mam za to pojęcia jak wrzucić ten firmware na stałe do pamięci flash karty. Myślałem, że może fwupdmgr to umie, ale nie. Przynajmniej nie w RHEL 7.


TS4500

W miedzyczasie założyłem support case w IBM i dostałem kilka dodatkowych wskazówek:
  • Zmienić domyślną topologię portów biblioteki z L-auto na N-port
  • Na przełącznikach, na portach napędów wyłączyć 
  • Kabelki mają być OM-3 (turkusowe). Na razie nie wiem na ile to ważne, mam pomarańczowe OM-1 albo 2. 

Przełączniki SAN

Wśród zaleceń jest taki cenny link. A sprowadza się on do ustawień:
  • Prędkość 8Gbit na sztywno.
  • Wyłączyć trunk port na portach które trunkiem być nie muszą.
  • Wyłączenie DFE, poprzez włączenie non-DFE: 
portCfgNonDfe --enable <port>
  • Czekam jeszcze na zalecenia co do wersji FOS'a

Morał


Jest taki: 

Zawsze sprawdzaj firmłery kart FC.  

To po wgraniu najnowszego, w pierwszym teście osiągnąłem 90 MB/s. Zadka nie urwało, bo LTO8 bez kompresji powinno szarpnąć 300. Po zaaplikowaniu większości poprawek zaleconych przez serwis, ten sam test pokazał 168 MB/s... zanim skończyły się dane testowe. 
Patrząc na portperfshow napęd się dopiero rozpędzał, bo pod koniec testu pokazywał transfery na poziomie 280 MB/s na porcie.