He pasado varios días en esto ahora y he logrado que SR-IOV funcione con la tarjeta Mellanox Infiniband utilizando el último firmware.
Las funciones virtuales aparecen en Dom0 como
06: 00.1 Controlador de red: familia Mellanox Technologies MT27500 [Función virtual ConnectX-3] 06: 00.2 Controlador de red: Familia Mellanox Technologies MT27500 [Función virtual ConnectX-3] 06: 00.3 Controlador de red: Familia Mellanox Technologies MT27500 [Función virtual ConnectX-3 ] 06: 00.4 Controlador de red: familia Mellanox Technologies MT27500 [Función virtual ConnectX-3]
Luego separé 06: 00.1 de Dom0 y lo asigné a xen-pciback.
He pasado esto a un dominio de prueba Xen.
lspci dentro de la prueba muestra que DomU:
00: 01.1 Controlador de red: Mellanox Technologies MT27500 Family [Función virtual ConnectX-3]
Tengo los siguientes módulos cargados en DomU
mlx4_ib
rdma_ucm
ib_umad
ib_uverbs
ib_ipoib
La salida dmesg para controladores mlx4 muestra:
[ 11.956787] mlx4_core: Mellanox ConnectX core driver v1.1 (Dec, 2011)
[ 11.956789] mlx4_core: Initializing 0000:00:01.1
[ 11.956859] mlx4_core 0000:00:01.1: enabling device (0000 -> 0002)
[ 11.957242] mlx4_core 0000:00:01.1: Xen PCI mapped GSI0 to IRQ30
[ 11.957581] mlx4_core 0000:00:01.1: Detected virtual function - running in slave mode
[ 11.957606] mlx4_core 0000:00:01.1: Sending reset
[ 11.957699] mlx4_core 0000:00:01.1: Sending vhcr0
[ 11.976090] mlx4_core 0000:00:01.1: HCA minimum page size:512
[ 11.976672] mlx4_core 0000:00:01.1: Timestamping is not supported in slave mode.
[ 12.068079] <mlx4_ib> mlx4_ib_add: mlx4_ib: Mellanox ConnectX InfiniBand driver v1.0 (April 4, 2008)
[ 12.184072] mlx4_core 0000:00:01.1: mlx4_ib: multi-function enabled
[ 12.184075] mlx4_core 0000:00:01.1: mlx4_ib: operating in qp1 tunnel mode
Incluso tengo el dispositivo ib0 apareciendo.
ib0 Link encap:UNSPEC HWaddr 80-00-05-49-FE-80-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.10 Bcast:10.10.10.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:2044 Metric:1
RX packets:117303 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:256
RX bytes:6576132 (6.5 MB) TX bytes:0 (0.0 B)
Incluso puedo hacer ping localmente 10.10.10.10.
Sin embargo, esos pings no se envían en la tela infiniband.
Parece ser porque el enlace está inactivo. ibstat muestra:
CA 'mlx4_0'
CA type: MT4100
Number of ports: 1
Firmware version: 2.30.3000
Hardware version: 0
Node GUID: 0x001405005ef41f25
System image GUID: 0x002590ffff175727
Port 1:
State: Down
Physical state: LinkUp
Rate: 10
Base lid: 9
LMC: 0
SM lid: 1
Capability mask: 0x02514868
Port GUID: 0x0000000000000000
¿Cómo lo consigo UP? el enlace domU está ARRIBA pero no el VF?
Y la respuesta se encuentra realmente aquí: según este enlace: http://www.spinics.net/lists/linux-rdma/msg13307.html
¿Qué necesito para que el puerto del VF esclavo se active? Estoy ejecutando opensm 3.3.13 en una caja diferente, ¿es eso lo suficientemente nuevo? (¿SR-IOV requiere algún soporte SM?)
Sí, como señaló Hal, como mínimo necesita opensm 3.3.14 ( http://marc.info/?l=linux-rdma&m=133819320432335&w=2 ), ya que es la primera versión que admite alias-guid y otros elementos necesarios para SRIOV, 3.3.15 también está disponible ahora, por lo que desea la segunda versión que lo admita ... básicamente necesita un enlace IB para el PPF y el esclavo para obtener un alias guid registrado para él en el SM. Nosotros (el equipo de IL) estábamos fuera los martes / miércoles de vacaciones, trataremos de obtener más detalles esta noche y si no, mañana, seguro.
Ahora he actualizado OpenSM e informaré pronto.
EDITAR: OK, ahora está funcionando. Sin embargo, estoy obteniendo una explosión de registro para opensm. El proceso OpenSM está escribiendo cientos de entradas por segundo del formulario:
Sep 30 20:36:26 707784 [7DC1700] 0x01 -> validate_requested_mgid: ERR 1B01: Wrong MGID Prefix 0x8000 must be 0xFF
Sep 30 20:36:26 707810 [7DC1700] 0x01 -> mcmr_rcv_create_new_mgrp: ERR 1B22: Invalid requested MGID
Sep 30 20:36:26 708096 [8DC3700] 0x01 -> validate_requested_mgid: ERR 1B01: Wrong MGID Prefix 0x8000 must be 0xFF
Sep 30 20:36:26 708119 [8DC3700] 0x01 -> mcmr_rcv_create_new_mgrp: ERR 1B22: Invalid requested MGID
Sep 30 20:36:26 708391 [FF5B0700] 0x01 -> validate_requested_mgid: ERR 1B01: Wrong MGID Prefix 0x8000 must be 0xFF
Sep 30 20:36:26 708421 [FF5B0700] 0x01 -> mcmr_rcv_create_new_mgrp: ERR 1B22: Invalid requested MGID
Sep 30 20:36:26 708696 [3DB9700] 0x01 -> validate_requested_mgid: ERR 1B01: Wrong MGID Prefix 0x8000 must be 0xFF
Sep 30 20:36:26 708719 [3DB9700] 0x01 -> mcmr_rcv_create_new_mgrp: ERR 1B22: Invalid requested MGID
Y los mensajes de error anteriores desaparecieron cuando reinicié y le di a Dom0 más memoria. Actualmente tengo 2 GB asignados con la desactivación automática. Desafortunadamente, están de vuelta sin una razón obvia. Entonces hice una nueva pregunta que se relaciona con eso aquí
No estoy realmente seguro de por qué funciona en dom0, pero en mi caso tengo que tener OpenSM ejecutándose en Dom0, que tiene los VF. Supongo que esto se debe a que la instancia de OpenSM que se ejecuta en Dom0 conoce los VF y puede anunciarlos mientras que un administrador de subred en otro nodo no. Esa es mi suposición. Espero que el otro nodo xen recoja también sus VF. Eso puede terminar convirtiéndose en otra pregunta. Por ahora está trabajando con un solo nodo Xen.