Prácticas recomendadas para la ejecución de aplicaciones de HPC estrechamente vinculadas en Compute Engine

En este documento, se proporcionan prácticas recomendadas para el ajuste de los recursos de Google Cloud con el fin de obtener un rendimiento óptimo de la interfaz de envío de mensajes (MPI). Con frecuencia, en las cargas de trabajo de computación de alto rendimiento (HPC) estrechamente vinculadas, se usa la MPI para la comunicación entre instancias y procesos. Ajustar la infraestructura de red y los sistemas subyacentes de forma adecuada es esencial para obtener un rendimiento óptimo de la MPI. Si ejecutas código basado en la MPI en Google Cloud, usa estas prácticas para obtener el mejor rendimiento posible.

Suposiciones y requisitos

Por lo general, los programadores de cargas de trabajo como Slurm o HTCondor se usan para la administración de instancias. Las recomendaciones y las prácticas recomendadas que se proporcionan en este documento se aplican a todos los programadores y administradores de flujos de trabajo.

La implementación de estas prácticas recomendadas mediante el uso de los distintos programadores o herramientas de flujo de trabajo está fuera del alcance de este documento. En otros instructivos y documentos, se proporcionan herramientas para la implementación y los lineamientos que se aplican a estas.

Los lineamientos que se indican en este documento son generales y puede que no sean beneficiosos para todas las aplicaciones. Te recomendamos que compares las aplicaciones para encontrar la configuración que sea más eficiente o rentable.

Usa una imagen de VM de HPC preconfigurada

En lugar de aplicar manualmente las recomendaciones que se presentan en este documento, puedes usar la imagen de máquina virtual de HPC (VM) (basada en CentOS), que está optimizada para cargas de trabajo con acoplamiento alto y MPI. La imagen de VM de HPC empaqueta estas prácticas recomendadas y se pone a disposición sin costo adicional a través de Google Cloud Marketplace. Si deseas obtener más información, consulta Crea una instancia de VM lista para HPC.

Aplica configuraciones mediante Bash o Ansible

Google ofrece una opción para aplicar todas o algunas de estas optimizaciones y prácticas recomendadas en una instancia de Compute Engine mediante una secuencia de comandos Bash o Ansible. Estas secuencias de comandos están en el repositorio HPC-Tools GitHub de Google. Las secuencias de comandos admiten varias opciones que te permiten aplicar configuraciones individuales o aplicar varias configuraciones de manera simultánea.

Configuración de Compute Engine

En esta sección, se incluyen prácticas recomendadas para obtener el mejor rendimiento de procesamiento en la aplicación. Usar la configuración y el tipo de máquina adecuados dentro del sistema puede tener un impacto significativo en el rendimiento de la MPI.

Usa la política de posición de compactación

La política de posición te permite controlar la ubicación de las máquinas virtuales (VM) en los centros de datos. La política de posición de compactación proporciona topologías de menor latencia para la ubicación de VM en una única zona de disponibilidad. Las API actuales te permiten crear hasta 22 VM optimizadas para procesamiento (C2) que estén en ubicaciones físicas cercanas entre sí. Si necesitas crear más de 22 instancias C2 (más de 660 núcleos físicos), divide las instancias entre varias políticas de posición. Recomendamos usar la cantidad mínima de políticas de posición que se adapte a la carga de trabajo.

Para usar políticas de posición, primero debes crear una política colocada de posición que tenga la cantidad requerida de VM en una región determinada:

gcloud compute resource-policies create group-placement \
    PLACEMENT_POLICY_NAME --collocation=collocated \
    --vm-count=NUMBER_OF_VMS

Luego, debes crear instancias en la zona requerida mediante el uso de esta política:

gcloud compute instances create instance-1 \
    instance-2...instance-n --zone=us-central1-a \
    --resource-policies=PLACEMENT_POLICY_NAME \
    --maintenance-policy=TERMINATE ...

En algunos casos, es posible que no tengas control directo sobre la forma en que se crean las VM. Por ejemplo, puede que las VM se creen mediante el uso de algunas herramientas de terceros que no estén integradas. Para aplicar una política de posición a las VM existentes, primero debes detenerlas y, luego, ejecutar el siguiente comando:

gcloud compute instances add-resource-policies \
    instance-1 instance-2...instance-n --zone=us-central1-a \
    --resource-policies=PLACEMENT_POLICY_NAME

Usa instancias optimizadas para procesamiento

Recomendamos usar instancias C2 para la ejecución de aplicaciones de HPC. Estas instancias tienen una asignación fija de núcleo virtual a físico y exponen la arquitectura de celdas de NUMA al SO invitado. Esto es fundamental para el rendimiento de las aplicaciones de HPC estrechamente vinculadas.

Las instancias C2 pueden tener hasta 60 CPU virtuales (30 núcleos físicos) y 240 GB de RAM. También pueden tener hasta 3 TB de almacenamiento SSD local y admitir hasta 32 Gbps de capacidad de procesamiento de red. Además, las instancias C2 aprovechan los procesadores escalables Intel Xeon de segunda generación (Cascade Lake), que proporcionan un mayor ancho de banda de memoria y una velocidad de reloj más alta (de hasta 3.8 GHz) en comparación con otros tipos de instancias. Por lo general, las instancias C2 proporcionan una mejora en el rendimiento de hasta un 40% en comparación con los tipos de instancias N1.

Para reducir la sobrecarga de comunicación entre las máquinas, recomendamos consolidar la carga de trabajo en una cantidad menor de VM de tipo C2-standard-60 (que tengan el mismo recuento total de núcleos), en lugar de iniciar una cantidad mayor de VM C2 más pequeñas.

Inhabilita los hipersubprocesos

Algunas aplicaciones de la MPI obtienen un mejor rendimiento si inhabilitas los hipersubprocesos en el SO invitado. Mediante los hipersubprocesos, se asignan dos núcleos virtuales (CPU virtual) por núcleo físico en el nodo. En el caso de que haya muchas tareas generales de procesamiento o tareas que requieren mucha E/S, se puede aumentar la capacidad de procesamiento de la aplicación de manera significativa mediante los hipersubprocesos. En el caso de que haya trabajos vinculados al procesamiento en los que ambos núcleos virtuales estén vinculados al procesamiento, los hipersubprocesos pueden afectar el rendimiento general de la aplicación y agregar una varianza no determinista a los trabajos. Desactivar los hipersubprocesos te permite obtener un rendimiento más predecible y reducir la duración de los trabajos.

Puedes inhabilitar los hipersubprocesos en las instancias C2, N1-Ultramem y N2, ya sea en línea o mediante el reinicio.

Para inhabilitar los hipersubprocesos en línea, debes usar una secuencia de comandos como Manage_Hyperthreading.sh, mediante la cual se configuran las CPU activas sin conexión.

Para inhabilitar los hipersubprocesos mediante el reinicio, debes agregar lo siguiente a la string GRUB_CMDLINE_LINUX en /etc/default/grub, en la que NUM_CPU es la cantidad de CPU virtuales de la instancia dividida por dos. Por ejemplo, en el caso de una instancia de tipo C2-standard-60, NUM_CPU sería 30.

noht nosmt nr_cpus=NUM_CPU

Después de cambiar el archivo grub, ejecuta el siguiente comando para actualizar el archivo de configuración del sistema de GRUB y, luego, reinicia el sistema:

sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Si el sistema tiene un modo de inicio de BIOS heredado, ejecuta el siguiente comando en su lugar:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Para verificar que SMP (los hipersubprocesos) esté inhabilitado en el sistema después del reinicio, usa el siguiente comando:

lscpu | grep -e Socket -e Core -e Thread

El resultado será similar al siguiente, en el que Thread(s) per core es 1 cuando los hipersubprocesos están inhabilitados y 2 cuando están habilitados:

Thread(s) per core:    1
Core(s) per socket:    15
Socket(s):             2

Ajusta los límites del usuario

Los sistemas Unix tienen límites predeterminados sobre los recursos del sistema, como los archivos abiertos, y la cantidad de procesos que cualquier usuario puede usar. Estos límites impiden que un usuario monopolice los recursos del sistema y afecte el trabajo de los demás. Sin embargo, en el contexto de HPC, estos límites suelen ser innecesarios, ya que los nodos de procesamiento del clúster no se comparten de forma directa entre los usuarios.

Puedes ajustar los límites del usuario si editas el archivo /etc/security/limits.conf y vuelves a acceder al nodo. Para la automatización, puedes incorporar estos cambios en una imagen de VM o ajustar los límites en el momento de la implementación mediante herramientas como Deployment Manager, Terraform o Ansible.

Cuando ajustas los límites del usuario, debes cambiar los valores de los siguientes límites:

  • nproc: La cantidad máxima de procesos
  • memlock: El espacio de direcciones máximo fijado en la memoria (en KB)
  • stack: El tamaño máximo de la pila (en KB)
  • nofile: La cantidad máxima de archivos abiertos
  • cpu: El tiempo de CPU máximo (en minutos)
  • rtprio: La prioridad máxima en tiempo real que se permite para los procesos sin privilegios (Linux 2.6.12 y versiones posteriores)

Estos límites se establecen en el archivo de configuración del sistema /etc/security/limits.conf para la mayoría de los sistemas Unix y Linux, incluidos Debian, CentOS y Red Hat.

Si deseas modificar los límites del usuario, usa un editor de texto para cambiar los siguientes valores:

  • En /etc/security/limits.conf:

    *            -     nproc     unlimited
    *            -     memlock   unlimited
    *            -     stack     unlimited
    *            -     nofile    1048576
    *            -     cpu       unlimited
    *            -     rtprio    unlimited
    
  • En /etc/security/limits.d/20-nproc.conf:

    *            -    nproc      unlimited
    

Configura claves de host de SSH

Intel MPI requiere claves de host para todos los nodos del clúster en el archivo ~/.ssh/known_hosts del nodo que ejecuta mpirun. También debes guardar las claves SSH en authorized_keys.

Para agregar claves de host, ejecuta el siguiente comando:

ssh-keyscan -H 'cat HOSTFILE' >> ~/.ssh/known_hosts

Otra manera de hacer esto es agregar StrictHostKeyChecking=no al archivo ~/.ssh/config mediante la ejecución del siguiente comando:

Host *
StrictHostKeyChecking no

Almacenamiento

El rendimiento de muchas aplicaciones de HPC depende en gran medida del rendimiento del sistema de almacenamiento subyacente. Esto sucede en particular en las aplicaciones que leen o escriben una gran cantidad de datos o en aquellas que crean una gran cantidad de objetos o archivos o acceden a ellos. También sucede cuando muchas clasificaciones acceden al sistema de almacenamiento de forma simultánea.

Elige un sistema de archivos NFS o uno paralelo

Las siguientes son las opciones principales de almacenamiento para las aplicaciones estrechamente vinculadas. Cada opción tiene un costo, un perfil de rendimiento, API y una semántica de coherencia propios:

  • Las soluciones basadas en NFS, como Filestore y NetApp Cloud Volumes, son las soluciones más sencillas para la implementación de opciones de almacenamiento compartido. Ambas opciones están completamente administradas en Google Cloud y son mejores cuando la aplicación no tiene requisitos extremos de E/S en un único conjunto de datos y cuando tiene un uso compartido de datos limitado o nulo entre los nodos de procesamiento durante las actualizaciones y la ejecución de aplicaciones. Para conocer los límites de rendimiento, consulta la documentación de Filestore y NetApp Cloud Volumes.
  • Las aplicaciones de la MPI usan con mayor frecuencia los sistemas de archivos paralelos basados en POSIX. Entre las opciones basadas en POSIX, se incluyen Lustre de código abierto y la oferta completamente compatible de Lustre, DDN Storage EXAScaler Cloud. Cuando los nodos de procesamiento generan y comparten datos, suelen confiar en el rendimiento extremo que proporcionan los sistemas de archivos paralelos y en la compatibilidad con la semántica completa de POSIX. Los sistemas de archivos paralelos, como Lustre, entregan datos a las supercomputadoras más grandes y pueden admitir miles de clientes. Lustre también admite bibliotecas de E/S y datos, como NetCDF y HDF5, junto con MPI-IO, lo que permite una E/S paralela en un conjunto amplio de dominios de aplicaciones.

Elige una infraestructura de almacenamiento

Los requisitos de rendimiento de la aplicación deben guiar a la infraestructura o al nivel de almacenamiento del sistema de archivos que elijas. Por ejemplo, si implementas SSD en aplicaciones que no necesitan una gran cantidad de operaciones de E/S por segundo (IOPS), puede que aumentes los costos sin obtener muchos beneficios.

Los servicios de almacenamiento administrado Filestore y NetApp Cloud Volumes ofrecen varios niveles de rendimiento que escalan en función de la capacidad.

Si deseas determinar la infraestructura adecuada para Lustre de código abierto o DDN Storage EXAScaler Cloud, primero debes conocer la CPU virtual y la capacidad que se requiere a fin de lograr el rendimiento necesario con el disco persistente estándar, el disco persistente SSD o el SSD local. Para obtener más información sobre cómo determinar la infraestructura adecuada, consulta la Información sobre el rendimiento del almacenamiento en bloque y Optimiza el rendimiento del disco persistente. Por ejemplo, si usas Lustre, puedes implementar soluciones de bajo costo y con gran ancho de banda mediante el uso del disco persistente SSD para el servidor de metadatos (MDS) y del disco persistente estándar para los servidores de almacenamiento (OSS).

Configuración de red

El rendimiento de las herramientas de redes de la MPI es fundamental para muchas aplicaciones de HPC. Esto sucede en particular en el caso de las aplicaciones estrechamente vinculadas en las que los procesos de la MPI de diferentes nodos se comunican con frecuencia o las que tienen un gran volumen de datos. En esta sección, se incluyen prácticas recomendadas para ajustar la configuración de red con el fin de obtener un rendimiento óptimo de la MPI.

Aumenta la configuración de tcp_*mem

Las máquinas C2 pueden admitir hasta 32 Gbps de ancho de banda, lo que requiere una memoria de TCP mayor que la de la configuración predeterminada de Linux. Para mejorar el rendimiento de la red, debes aumentar el valor tcp_mem.

Para aumentar los límites de memoria de TCP, debes actualizar los siguientes valores en /etc/sysctl.conf:

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216

Para cargar los valores nuevos en /etc/sysctl.conf, ejecuta sysctl -p.

Usa el perfil de latencia de red

Puedes mejorar el rendimiento de algunas aplicaciones si habilitas el sondeo de disponibilidad. El sondeo de disponibilidad ayuda a reducir la latencia en la ruta de recepción de la red, ya que permite que el código de la capa de conexión sondee la cola de recepción de un dispositivo de red y que inhabilite las interrupciones de la red. Evalúa la latencia de la aplicación para verificar si el sondeo de disponibilidad es útil.

El perfil de latencia de red persiste en los reinicios. Si el sistema tiene tuned-adm instalado, puedes habilitar el perfil de latencia de red mediante la ejecución del siguiente comando en CentOS:

tuned-adm profile network-latency

Si el sistema no tiene tuned-adm instalado, puedes habilitar el sondeo de disponibilidad si agregas el siguiente código a /etc/sysctl.conf:

net.core.busy_poll = 50
net.core.busy_read = 50

Para cargar los valores nuevos en /etc/sysctl.conf, ejecuta sysctl -p.

Bibliotecas de la MPI y aplicaciones de usuarios

La configuración de la aplicación de HPC y la biblioteca de la MPI puede afectar el rendimiento de la aplicación. Para lograr el mejor rendimiento de las aplicaciones de HPC, es importante ajustar esta configuración de forma detallada. En esta sección, se incluyen prácticas recomendadas para ajustar las bibliotecas de la MPI y las aplicaciones de usuarios con el fin de obtener un rendimiento óptimo de la MPI.

Usa Intel MPI

Si deseas obtener el mejor rendimiento, te recomendamos que uses Intel MPI.

En las versiones de 2018 de Intel MPI, debes especificar las estructuras de comunicación subyacentes para usar el TCP en el proveedor de solo memoria compartida cuando se ejecuta en Google Cloud:

mpirun -hostfile HOSTFILE -np NUM_PROCESSES \
    -ppn PROCESSES_PER_NODE -genv I_MPI_FABRICS "shm:tcp" APPLICATION

En las versiones de 2019 y posteriores de Intel MPI, debes especificar las estructuras de comunicación subyacentes con el fin de usar el TCP en el proveedor de OFI de RxM para obtener un mejor rendimiento:

mpirun -hostfile HOSTFILE -np NUM_PROCESSES \
    -ppn PROCESSES_PER_NODE -genv I_MPI_FABRICS "ofi_rxm;tcp" APPLICATION

Usa mpitune para realizar ajustes colectivos en la MPI

Las implementaciones de la MPI, como Intel MPI y OpenMPI, tienen muchos parámetros de configuración internos que pueden afectar el rendimiento de la comunicación. Estos parámetros son relevantes en especial para la comunicación colectiva de la MPI, que te permite especificar algoritmos y parámetros de configuración que pueden tener un rendimiento muy diferente en el entorno de Google Cloud. Te recomendamos ajustar los parámetros de configuración en función de las características de tus aplicaciones.

Si deseas especificar los algoritmos y los parámetros de configuración para la comunicación colectiva de la MPI de forma manual, recomendamos usar mpitune. Si deseas ejecutar un comando de mpitune, debes tener acceso de escritura al directorio o ejecutar el comando como raíz.

Cuando usas mpitune, debes ajustar cada combinación de la cantidad de VM y de procesos por VM. Por ejemplo, si usas las versiones de 2018 de Intel MPI, puedes ajustar 22 VM y 30 procesos por VM mediante la ejecución del siguiente comando:

mpitune -hf HOSTFILE -fl 'shm:tcp' -pr 30:30 -hr 22:22

Mediante el comando anterior de mpitune, se genera un archivo de configuración en el directorio de Intel MPI que puedes usar más adelante para ejecutar aplicaciones.

Para usar la configuración de ajuste de una aplicación, debes agregar la opción -tune al comando mpirun:

mpirun -tune -hostfile HOSTFILE -genv I_MPI_FABRICS 'shm:tcp' -np 660 -ppn 30 ./app

Para habilitar el ajuste, debes proporcionar la variable de entorno I_MPI_FABRICS de forma explícita, y la cantidad de nodos por VM y de procesos por nodo debe coincidir con los valores que se usaron durante el ajuste.

Puedes encontrar los archivos de ajuste generados en el directorio de instalación de Intel MPI en intel/mpi/2018.1/etc64.

Los nombres de archivo codifican el dispositivo, la cantidad de nodos y otros tipos de información, como la siguiente:

mpiexec_shm-tcp_nn_22_np_660_ppn_30.conf

Puedes volver a usar el archivo en un conjunto diferente de VM con una configuración similar si lo copias en el directorio correspondiente y agregas la opción -tune al comando mpirun. También puedes agregar el archivo de configuración como un argumento después del parámetro -tune.

Usa el modo híbrido de MPI y OpenMP

Muchas aplicaciones de la MPI admiten un modo híbrido que puedes usar para habilitar OpenMP en aplicaciones de la MPI. En el modo híbrido, cada proceso de la MPI puede usar una cantidad fija de subprocesos para acelerar la ejecución de ciertas estructuras de bucle.

Te recomendamos explorar la opción de modo híbrido cuando quieras optimizar el rendimiento de la aplicación. El uso del modo híbrido puede dar como resultado una cantidad menor de procesos de la MPI en cada VM, lo que genera una menor comunicación entre los procesos y un menor tiempo de comunicación general.

La habilitación del modo híbrido o de OpenMP depende de la aplicación. En muchos casos, puedes habilitar el modo híbrido si configuras la siguiente variable de entorno:

export OMP_NUM_THREADS=NUM_THREADS

Cuando uses este enfoque híbrido, te recomendamos que la cantidad total de subprocesos no supere la cantidad de núcleos físicos en la VM. Las VM de tipo C2-standard-60 tienen 2 sockets de NUMA de 15 núcleos y 30 CPU virtuales cada uno. Recomendamos que no tengas ningún proceso de la MPI en el que haya subprocesos de OpenMP que abarquen varios nodos de NUMA.

Compila aplicaciones mediante el uso de instrucciones vectoriales y Math Kernel Library

Las VM C2 admiten las instrucciones vectoriales AVX2 y AVX512. Puedes mejorar el rendimiento de muchas aplicaciones de HPC si las compilas mediante instrucciones de AVX. Algunas aplicaciones tienen un mejor rendimiento si usas AVX2 en lugar de AVX512. Te recomendamos probar ambas instrucciones de AVX en la carga de trabajo. Si deseas obtener un mejor rendimiento del procesamiento científico, también recomendamos el uso de Intel Math Kernel Library (Intel MKL).

Usa la numeración de CPU adecuada

C2-standard-60 tiene dos sockets de NUMA, y las CPU están numeradas en función de los nodos de NUMA de la siguiente manera:

NUMA node0 CPU(s):     0-14,30-44
NUMA node1 CPU(s):     15-29,45-59

En el siguiente diagrama, se ilustra la asignación de números de CPU a cada una de las CPU en los nodos de NUMA de una instancia de tipo C2-standard-60. El socket 0 corresponde al nodo 0 de NUMA y tiene desde la CPU 0 a la 14 y desde la 30 a la 44. El socket 1 corresponde al nodo 1 de NUMA y tiene desde la CPU 15 a la 29 y desde la 45 a la 59.

Numeración de núcleo virtual para los nodos de tipo C2-standard-60.

Los grupos de hipersubprocesos que se asignan a un único núcleo en la VM son (0,30)(1,31)..(29,59).

Intel MPI usa los números de CPU de NUMA para fijar los procesadores de los trabajos de la MPI. Si quieres usar un solo hipersubproceso por núcleo en todos los nodos que sea coherente en todas las ejecuciones, usa los números de CPU del 0 al 29.

Open MPI usa números lógicos de CPU, como lo informa la localidad de hardware portátil (hwloc). Si usas Open MPI, los grupos de hipersubprocesos se enumeran de forma consecutiva como se muestra a continuación:

  • Socket 0: 0 (núcleo 0, HT 0), 1 (núcleo 0, HT 1), 2 (núcleo 1, HT 0), (…), 28 (núcleo 14, HT 0), 29 (núcleo 14, HT 1)

  • Socket 1: 30 (núcleo 0, HT 0), 31 (núcleo 0, HT 1), 2 (núcleo 1, HT 0), (…), 58 (núcleo 14, HT 0), 59 (núcleo 14, HT 1)

El resultado se verá de la siguiente manera:

lstopo-no-graphics
Machine (240GB total)
  NUMANode L#0 (P#0 120GB) + Package L#0 + L3 L#0 (25MB)
    L2 L#0 (1024KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
      PU L#0 (P#0)
      PU L#1 (P#30)
    L2 L#1 (1024KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
      PU L#2 (P#1)
      PU L#3 (P#31)

Cuando usas Open MPI, puedes usar un solo hipersubproceso por núcleo en todos los nodos que sea coherente en las ejecuciones mediante el uso de los números de CPU 0,2,4,..58. Si deseas forzar a la MPI para que fije un proceso en un núcleo, usa la opción --bind-to core cuando ejecutes openMPI y, luego, valida la vinculación adecuada mediante la opción --report-bindings.

Configuración de seguridad

Puedes mejorar el rendimiento de la MPI si inhabilitas algunas funciones de seguridad integradas de Linux. El beneficio de rendimiento que se obtiene de la inhabilitación de cada una de estas funciones varía. Si estás seguro de que tus sistemas están bien protegidos, puedes evaluar la opción de inhabilitar las siguientes funciones de seguridad.

Inhabilita firewalls de Linux

En el caso de las imágenes de CentOS Linux de Google Cloud, el firewall se encuentra activado de forma predeterminada. Para inhabilitarlo, detén el daemon firewalld y, luego, inhabilítalo mediante la ejecución de los siguientes comandos:

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld

Inhabilita SELinux

SELinux en CentOS se encuentra activado de forma predeterminada. Para inhabilitar SELinux, edita el archivo /etc/selinux/config y reemplaza la línea SELINUX=enforcing o SELINUX=permissive por SELINUX=disabled.

Debes realizar un reinicio para que se aplique este cambio.

Desactiva la mitigación de Meltdown y Spectre

Los siguientes parches de seguridad se encuentran habilitados de forma predeterminada en los sistemas Linux:

  • Variante 1, Spectre: CVE-2017-5753
  • Variante 2, Spectre: CVE-2017-5715
  • Variante 3, Meltdown: CVE-2017-5754
  • Variante 4, Speculative Store Bypass: CVE-2018-3639

Puede que encuentres las vulnerabilidades de seguridad que se describen en estas CVE en microprocesadores modernos, incluidos los procesadores implementados en Google Cloud. Puedes inhabilitar una o más de estas mitigaciones, y contraer los riesgos de seguridad asociados, si usas la línea de comandos del kernel durante el inicio (que persiste durante los reinicios) o si usas debugfs en el entorno de ejecución (que no persiste durante los reinicios).

Para inhabilitar las mitigaciones de seguridad anteriores de forma permanente, sigue estos pasos:

  1. Modifica el archivo /etc/default/grub:

    sudo sed -i 's/^GRUB_CMDLINE_LINUX=\"\(.*\)\"/GRUB_CMDLINE_LINUX=\"\1 spectre_v2=off nopti spec_store_bypass_disable=off\"/' /etc/default/grub
    
  2. Después de cambiar el archivo grub, ejecuta el siguiente comando para actualizar el archivo de configuración del sistema de GRUB y, luego, reinicia el sistema:

    sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
    

    Si el sistema tiene un modo de inicio de BIOS heredado, ejecuta el siguiente comando en su lugar:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Reinicia.

Si un sistema ya se encuentra en ejecución, puedes inhabilitar las mitigaciones de seguridad anteriores mediante la ejecución de los siguientes comandos. Esta acción no persiste durante los reinicios.

echo 0 > /sys/kernel/debug/x86/pti_enabled
echo 0 > /sys/kernel/debug/x86/retp_enabled
echo 0 > /sys/kernel/debug/x86/ibrs_enabled
echo 0 > /sys/kernel/debug/x86/ssbd_enabled

Si deseas obtener información sobre cómo pueden afectar los sistemas las diferentes mitigaciones y cómo controlarlas, consulta la documentación de Red Hat Controla el impacto en el rendimiento de los microcódigos y los parches de seguridad y Ataque de canal lateral al kernel mediante Speculative Store Bypass.

Para conocer las vulnerabilidades afectadas de una CPU, ejecuta el siguiente comando:

grep . /sys/devices/system/cpu/vulnerabilities/*

Para descubrir qué mitigaciones se encuentran habilitadas, ejecuta el siguiente comando:

grep . /sys/kernel/debug/x86/*_enabled

Resumen de la lista de tareas

En la siguiente tabla, se resumen las prácticas recomendadas para el uso de la MPI en Compute Engine.

Área Tareas
Configuración de Compute Engine
Almacenamiento
Configuración de red
Bibliotecas de la MPI y aplicaciones de usuarios
Configuración de seguridad

¿Qué sigue?