PowerFlex: Compilación según demanda de controladores de SDC de PowerFlex en Linux
Resumen: En este artículo de la base de conocimientos, se describe cómo habilitar la compilación según demanda de los controladores de la controladora definida por software (SDC) de PowerFlex en sistemas Linux. ...
Instrucciones
Esta función está diseñada para adaptarse a los cambios de la interfaz binaria de aplicaciones (ABI) en el kernel de Linux, lo que puede provocar que un controlador de SDC, precompilado para un kernel diferente, no se cargue.
Históricamente, un paquete de instalación de SDC para Linux (RPM/DEB) contenía varios módulos de kernel de SDC para varios kernels de esa distribución de Linux. Para los usuarios que instalan distribuciones como Ubuntu, que lanza actualizaciones frecuentes del kernel, existe la opción de configurar el servicio SDC para conectarse al repositorio remoto de controladores de SDC de Dell e intentar descargar un SDC desde él.
Con la nueva función, los usuarios pueden compilar una coincidencia perfecta del controlador de SDC para su kernel en ejecución sin depender de la disponibilidad de un SDC coincidente en el repositorio del controlador.
Público objetivo: Los usuarios que actualizan sus kernels con frecuencia por razones de seguridad y que ejecutan kernels personalizados especializados pueden beneficiarse de la función.
Requisitos previos:
Para que el procedimiento de compilación se realice correctamente, se deben instalar los siguientes paquetes en el host del servicio de SDC:
- La versión más reciente del compilador de C de GNU (GCC), GCC
- GNU make (1).
- El paquete de desarrollo del kernel para el kernel en ejecución. Por lo general, este paquete está disponible con los siguientes nombres:
kernel-develpara las distribuciones que utilizan el administrador de paquetes RPM. (Red Hat, SUSE, etc.)linux-headerspara distribuciones que usan el administrador de paquetes Debian (Debian, Ubuntu, etc.)
Compilación
automática bajo demandaPara permitir la compilación automática y según demanda del controlador de SDC, el host debe cumplir con todos los requisitos previos enumerados en la sección Requisitos previos anterior. Cuando se abre el controlador de SDC, el servicio de SDC intenta compilar el controlador de SDC si se cumplen todas las siguientes condiciones:
-
Un SDC que coincida con el kernel en ejecución no está disponible en la caché del controlador.
Para obtener detalles sobre la caché del controlador, consulte Caché del controlador a continuación. -
Un archivo denominado
/etc/emc/scaleio/scini_sync/.build_sciniexiste.
Se ignora el contenido del archivo. Sin embargo, los usuarios deben mantenerlo vacío para posibles mejoras futuras.
El archivo se puede crear mediante la ejecución de untouch(1)comando.
Compilación
manualEl controlador de SDC, el host de compilación debe cumplir con todos los requisitos previos enumerados en la sección Requisitos previos anterior.
Para compilar manualmente el controlador de SDC, siga estos pasos:
-
Copie el paquete de compilación de su directorio en la caché del controlador a un directorio temporal. La ubicación del paquete depende de la versión de PowerFlex y de la distribución de Linux.
Por ejemplo, el paquete del SDC PowerFlex 3.6.3 para distribuciones basadas en Red Hat Enterprise Linux 9 es el siguiente:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Para obtener detalles sobre la caché del controlador, consulte Caché del controlador a continuación. -
Vaya al directorio temporal y extraiga el paquete de compilación.
Ejemplo:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Ejecute el comando
build_driver.shscript, ubicado en el nivel superior del contenido extraído. Sin argumentos, el script intenta compilar el controlador para el kernel en ejecución.
Para compilar para un kernel diferente, proporcione la ruta a los directorios de encabezado de ese kernel con "-o” y “-s" argumentos de la línea de comandos.
Para obtener más información acerca de la invocación, ejecute:build_driver.sh -h
-
La salida del proceso de compilación se imprime en la salida estándar.
Después de una compilación correcta, el archivo del controlador de SDC resultante,scini.ko, se puede encontrar en./ini/scini.ko. -
Copie el archivo de controlador del host de compilación al host de SDC de destino, a un directorio que coincida con la versión del kernel de destino, en la misma ubicación que el paquete de compilación, en la caché del controlador.
Por ejemplo, para un controlador que cumple con la versión del kernel5.14.0-362.24.1.el9_3.x86_64, la ruta de destino para el archivo del controlador es/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko.
Información adicional
Caché
del controladorUn controlador de SDC compilado correctamente para un kernel específico se copia en el directorio de caché del controlador correspondiente y su compilación no se volverá a activar.
La ubicación de la caché del controlador es /bin/emc/scaleio/scini_sync/drive_cache.
Registro de compilación
Cuando se habilita la compilación automática según demanda, todos los registros de compilación se anexan a /bin/emc/scaleio/scini_sync/driver_build.log.
Una compilación correcta finaliza con mensajes similares a los siguientes:
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
Contenedor
de inicialización de SDCLa COSUDE init El contenedor viene preconfigurado para usar la característica. Incluye el GCC y hace paquetes, y el /etc/emc/scaleio/scini_sync/.build_scini El archivo está presente. Sin embargo, para que las compilaciones se realicen correctamente, el directorio de encabezados de kernel para el kernel host debe asignarse al contenedor, a /usr/src. Por ejemplo, para ejecutar el contenedor manualmente con Docker, después de instalar el kernel-devel paquete en el host, agregue -v/usr/src:/usr/src a la línea de comandos, para que el directorio de encabezados del kernel esté disponible para el script de compilación.
Limitación
Puede haber situaciones en las que el compilador GCC disponible en la distribución de Linux del host no sea lo suficientemente avanzado como para compilar el SDC en algún kernel. Esta situación debería ser poco frecuente, ya que probablemente implicará un kernel personalizado y no uno común a esa distribución. En este caso, el usuario debe instalar un GCC más avanzado desde un repositorio de paquetes no estándar y la ubicación de ese GCC se debe especificar en $PATH. No hay ninguna manera automática de proporcionar una ruta de GCC alternativa al servicio de SDC.
Versiones
3.6.3 o posterior
4.5.2 o posterior
Instrucciones en video