PassThru QLogic FC-HBA VPort

antubis

Renowned Member
Apr 20, 2012
16
0
66
Ist es irgendwie möglich, einen einzelnen VPort (eine WWN) eines QLogic Fiber Channel HBA an eine VM durchzureichen? Der HBA unterstützt NPIV und das Anlegen von VPorts funktioniert problemlos.

Wir archivieren für verschieden Kunden große Datenmengen (noch) auf Tape und haben dazu mehrere große TapeLibraries mit jeweils mehreren Laufwerken. Ziel ist dass mehrere VMs den HBA des Hostsystems mit jeweils eigenen dedizierten WWNs nutzen können.
Diese dedizierten WWNs sollen dann sicherstellen (über das Zoning auf dem FC-Switch), dass jede VM nur die ihr explizit zugewiesenen TapeDrives sehen kann.

Falls das so nicht geht, gibt es alternative Lösungen?
 
Der HBA unterstützt NPIV und das Anlegen von VPorts funktioniert problemlos.
Das klingt verdächtig nach SR-IOV.
Ist dir der Unterschied zu komplettem passthrough bekannt?

Schau mal, was du mit lspci bzw. lspci -vv zu dem HBA angezeigt bekommst und ob da Info ablesbar bezüglich VF (virtual functions) ist. Entweder gibt sich der HBA bereits so schon als Mehrfachgerät mit mehreren PCI-IDs bekannt oder es erscheinen dann danach die IDs, wenn du mit dem HBA die virtual functions geschaltet hast (oft kann man das im UEFI-BIOS aktivieren, aber da fehlt mir die Erfahrung). In beiden Fällen dann proxmoxseitig Hardware->PCI passthrough entweder auf eine VF oder auf eine Unter-ID vom HBA. (Siehst du nur den HBA als single-ID ist das noch nicht das, was du willst)
 
Hallo mr44er,

danke für deine Antwort.

Das klingt verdächtig nach SR-IOV.
Ist dir der Unterschied zu komplettem passthrough bekannt?
Wenn du so fragst, dann tatsächlich nicht wirklich. PCI-Passthrough hatte ich bisher garnicht benötigt und seitdem ich jetzt angefangen hab, das zu nutzen hab ich eben einfach das entsprechende Device ausgewählt und gut war.
Dass wir jetzt auf unserem neuen Cluster mit der nun nötigen FC-Fabric quasi "Virtuelle" HBAs benötigen ist was ganz Neues für mich.

Vor dem Anlegen der VPorts:
Code:
# ls -la /sys/class/fc_host/
total 0
drwxr-xr-x  2 root root 0 Dec 20 12:20 .
drwxr-xr-x 80 root root 0 Dec 20 12:20 ..
lrwxrwxrwx  1 root root 0 Jan  8 15:04 host34 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.0/host34/fc_host/host34
lrwxrwxrwx  1 root root 0 Jan  8 15:04 host37 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.1/host37/fc_host/host37

Nach dem Anlegen der VPorts (hier mal 3 Stück zur Demonstration):
Code:
# ls -la /sys/class/fc_host/
total 0
drwxr-xr-x  2 root root 0 Dec 20 12:20 .
drwxr-xr-x 80 root root 0 Dec 20 12:20 ..
lrwxrwxrwx  1 root root 0 Jan  8 15:04 host34 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.0/host34/fc_host/host34
lrwxrwxrwx  1 root root 0 Jan  8 15:04 host37 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.1/host37/fc_host/host37
lrwxrwxrwx  1 root root 0 Jan  9 13:48 host38 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.1/host37/vport-37:0-1/host38/fc_host/host38
lrwxrwxrwx  1 root root 0 Jan  9 13:48 host39 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.1/host37/vport-37:0-2/host39/fc_host/host39
lrwxrwxrwx  1 root root 0 Jan  9 13:48 host40 -> ../../devices/pci0000:c0/0000:c0:01.1/0000:c1:00.1/host37/vport-37:0-3/host40/fc_host/host40

lspci zeigt bisher immer noch nur die 2 physikalischen Ports an:
Code:
c1:00.0 Fibre Channel: QLogic Corp. ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (rev 01)
c1:00.1 Fibre Channel: QLogic Corp. ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (rev 01)

hier noch der Port mit den VPorts mit lspci -vv:
Code:
c1:00.1 Fibre Channel: QLogic Corp. ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (rev 01)
        Subsystem: QLogic Corp. QLE2692 Dual Port 16Gb Fibre Channel to PCIe Adapter
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 64 bytes
        Interrupt: pin B routed to IRQ 1214
        NUMA node: 0
        IOMMU group: 14
        Region 0: Memory at 20020004000 (64-bit, prefetchable) [size=4K]
        Region 2: Memory at 20020000000 (64-bit, prefetchable) [size=8K]
        Region 4: Memory at 2001fe00000 (64-bit, prefetchable) [size=1M]
        Expansion ROM at b8900000 [disabled] [size=256K]
        Capabilities: [44] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [4c] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 2048 bytes, PhantFunc 0, Latency L0s <4us, L1 <1us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 75W
                DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 512 bytes, MaxReadReq 4096 bytes
                DevSta: CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
                LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L1 <2us
                        ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
                LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 8GT/s, Width x8
                        TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range B, TimeoutDis+ NROPrPrP- LTR-
                         10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
                         EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
                         FRS- TPHComp- ExtTPHComp-
                         AtomicOpsCap: 32bit- 64bit- 128bitCAS-
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- 10BitTagReq- OBFF Disabled,
                         AtomicOpsCtl: ReqEn-
                LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
                         EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
                         Retimer- 2Retimers- CrosslinkRes: unsupported
        Capabilities: [88] Vital Product Data
                Product Name: QLogic 16Gb 2-port FC to PCIe Gen3 x8 Adapter
                Read-only fields:
                        [PN] Part number: QLE2692
                        [SN] Serial number: RFD2341F75826
                        [EC] Engineering changes: BK3210407-05  H
                        [V9] Vendor specific: 010606
                        [RV] Reserved: checksum good, 0 byte(s) reserved
                End
        Capabilities: [90] MSI-X: Enable+ Count=16 Masked-
                Vector table: BAR=2 offset=00000000
                PBA: BAR=2 offset=00001000
        Capabilities: [9c] Vendor Specific Information: Len=0c <?>
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO+ CmpltAbrt- UnxCmplt+ RxOF+ MalfTLP+ ECRC+ UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
                AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
                        MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
                HeaderLog: 00000000 00000000 00000000 00000000
        Capabilities: [154 v1] Alternative Routing-ID Interpretation (ARI)
                ARICap: MFVC- ACS-, Next Function: 0
                ARICtl: MFVC- ACS-, Function Group: 0
        Capabilities: [1f4 v1] Vendor Specific Information: ID=0001 Rev=1 Len=014 <?>
        Kernel driver in use: qla2xxx
        Kernel modules: qla2xxx

zum Prüfen/Anpassen der UEFI-BIOS-Settings brauch ich noch ne Downtime, das kann ich vmtl. morgen machen.
 
Wenn du so fragst, dann tatsächlich nicht wirklich. PCI-Passthrough hatte ich bisher garnicht benötigt und seitdem ich jetzt angefangen hab, das zu nutzen hab ich eben einfach das entsprechende Device ausgewählt und gut war.
Komplettes passthrough heißt wortwörtlich, dass das ganze Gerät vom Host verschwindet, in der VM auftaucht und auch von dort aus gesteuert wird. Flapsig ausgedrückt: die Karte wird in die VM gesteckt. ;)
Jetzt kommt dir die Karte noch entgegen und meldet sich mit 2 IDs. Das heißt, du könntest sogar einen der Ports getrennt komplett durchreichen (und vom Host verschwinden lassen) oder je einen Port in unterschiedliche VMs. Je nach Anwendungszweck kann das schon ausreichen und auf jeden Fall ist das komplette passthrough die performanteste Variante. (was nicht heißt, dass SR-IOV schnarchig ist)

Bei SR-IOV verbleibt die Karte auf dem Host (und da auch die Kontrolle), die virtual functions sind dann virtuelle Geräte, die man auf die gleiche Art durchreicht. Wie man die dann von außen verbindet oder mit IPs erreicht, weiß ich nicht. Da muss wer anders was dazu sagen, mir fehlt da die Erfahrung. (wahrscheinlich ähnlich eines vlans, nur eben am Host vorbei?)

Nach dem Anlegen der VPorts (hier mal 3 Stück zur Demonstration):
Ah, schau an, das ist das und die müsstest du eigentlich auch jetzt bei lspci sehen. So sind die "greifbar" fürs Durchreichen. Wenn du das live machen kannst, dann weißt du mehr als ich und brauchst dann nicht extra ins BIOS. Es kann aber nicht schaden, dass du da trotzdem beim nächsten geplanten reboot mal reinschaust.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!