Estoy ejecutando el servidor ubuntu 16.04. Puedo ver que el subproceso de publicidad se habilita cuando uso el comando lscpu.
Quiero deshabilitarlo Fui a través de foros de ubuntu y aquí y aquí .
Estas son buenas discusiones sobre por qué el hiperprocesamiento puede no ser bueno. Pero no hay una solución definitiva sobre cómo apagarlo.
¿Alguien puede dar los pasos para deshabilitar hyperthreading? Gracias .
Respuestas:
Introducción
Esta es una pregunta interesante. Probablemente uno de los más interesantes en meses para mí personalmente. Al igual que el OP, no hay opción para deshabilitar Hyper Threading en mi BIOS anterior (inventado en 2012, actualizado en 2016 más o menos).
Errores de Hyper-Threading en Intel Skylake y Kaby Lake:
Hay numerosos problemas con Skylake reportados en Ask Ubuntu durante el último año y uno se pregunta cómo discernir qué problemas pueden haber sido causados por los errores de Hyper Threading.
Esta respuesta se divide en tres partes:
Visualización de CPU cuando Hyper-Threading está apagado / encendido
A continuación, puede ver la utilización de la CPU cuando el subproceso múltiple está desactivado y se realiza una prueba de esfuerzo de la CPU. Aproximadamente 10 segundos después, se repite el mismo script con Hyper Threading activado. Finalmente, 10 segundos después de eso, el script se ejecuta con Hyper-Threading desactivado nuevamente:
La pantalla se divide en dos secciones:
set-hyper-threading
con el parámetro 0 (apagado) y luego 1 (encendido).conky
muestra el porcentaje de utilización de CPU de CPUS 1 a 8.El primer script ejecuta Hyper Threading
La primera vez que se ejecuta el script Los números de CPU 2, 4, 6 y 8 (según Conky) se congelan al 3%, 2%, 2% y 2%. Los números 1, 3, 5 y 7 de la CPU aumentan al 100% mientras se ejecuta la prueba de esfuerzo.
La topología de la CPU se muestra con Hyper-Threading desactivado y solo los cuatro núcleos informan:
El segundo script ejecuta Hyper Threading en
La segunda vez que se ejecuta el script, Hyper-Threading se activa y todos los números de CPU 1-8 aumentan al 100% mientras se ejecuta la prueba de esfuerzo.
La topología de la CPU se muestra con Hyper-Threading activado y solo se informan los cuatro núcleos plus y los cuatro núcleos virtuales:
El tercer script ejecuta Hyper Threading
Observe cómo después de que finaliza el segundo script, las CPU 2, 4, 6 y 8 están inactivas al 4%, 2%, 3%, 4%. Esto es importante porque en la tercera prueba, desactivar Hyper-Threading muestra los porcentajes de CPU congelados al 4%, 2%, 3%, 4% en lugar de 3%, 2%, 2% y 2% de la primera prueba.
Por lo tanto, desactivar el hiperprocesamiento parece congelar las CPU virtuales en el estado actual.
Tenga en cuenta que no importa si activa o desactiva Hyper-Threading, el script aún muestra "Hyper Threading Supported".
Bash script para automatizar el encendido / apagado de hyper-threading
Cuando vea el script a continuación, tenga en cuenta que Conky numera las CPU del 1 al 8 pero Linux numera las CPU del 0 al 7.
NOTA: El programa
stress
está integrado en todos los sistemas Debian de los que Ubuntu es un derivado. Por lo tanto, no tiene que descargar ni instalar ningún paquete para ejecutar este script en Ubuntu.Si tiene una CPU de doble núcleo, debe eliminar (o comentar
#
) las líneas que controlan los números de CPU 5 y 7.Crédito a Hi-Angel por la línea bash que
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
muestra la topología de la CPU.Conky se bloquea si Hyper Threading está apagado antes de comenzar
Para obtener las CPU 2, 4, 6, 8 con el menor porcentaje de utilización posible, intenté desactivar Hyper-Threading durante el arranque. Usé este script para hacer eso:
Sin embargo, se
conky
bloquea con un error de segmentación si el hiperprocesamiento se desactiva cuando se inicia. Como tal, tuve que comentar las cuatro@reboot
líneas del guión.Código Conky para mostrar el porcentaje de utilización de la CPU y el factor de carga
Si está interesado en configurar una pantalla similar en Conky, aquí está el fragmento de código relevante:
NOTA: El código de Nvidia anterior nunca se ha probado porque todavía no tengo la GPU de Nvidia funcionando en Ubuntu. Cualquier año pronto ahora :)
fuente
noht
no existe. Incluso busqué la opción a través de las fuentes linux-4.13-rc1 que ocasionalmente tengo. Sin embargo, ciertamente entiendo lo que podría haberlo confundido: dat bugreport se queja de que la opción no funciona, y luego se cierra comonextrelease
, como si arreglaran algo. Sin embargo, si lee los comentarios, verá que el único uso denoht
es para un script hecho a mano que verifica la opción en la línea de comando del kernel, luego deshabilita los núcleos a través del/sys/
sistema de archivos. IOWnoht
es inútil.noht
.Los núcleos recientes admiten el parámetro maxcpus kernel.
Esto le permite establecer el número de cpus en el número de núcleos físicos. Esto puede ser útil para ayudar a mitigar las amenazas causadas por las vulnerabilidades de MDS en las CPU Intel de la familia 6.
Cómo:
con privilegios sudo (root) abra / etc / default / grub con su editor de texto favorito.
Encuentre la línea que comienza con GRUB_CMDLINE_LINUX_DEFAULT =
y agregue maxcpus = n a cualquier parámetro del kernel existente, como los parámetros comunes de splash silencioso (donde n = el número de núcleos físicos que tiene su CPU.
Por ejemplo, en mi confiable Intel (R) Core (TM) i3-3220 CPU @ 3.30GHz dual core con hyperthreading, agregué maxcpus = 2 para desactivar el hyperthreading en el momento del arranque.
Guarde el archivo y luego emita el comando
sudo update-grub
y reinicie.Puede confirmar el éxito emitiendo el comando
lscpu | grep "per core"
que debería proporcionar una salida como esta:Thread(s) per core: 1
Probado en el kernel 4.4.0
Fuentes:
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt
https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html
/unix/145645/disabling-cpu-cores-on-quad-core-processor-on-linux
fuente
Puede deshabilitar hyperthreading en Linux como root o con privilegios de superusuario con:
Puede mostrar el estado actual de hyperthreading con:
Este comando imprime uno de:
Alternativamente, la mayoría de los firmwares de BIOS también incluyen una opción para deshabilitar hyperthreading. Si está deshabilitado en el BIOS, el gato anterior probablemente regrese
forceoff
.fuente
maxcpus=
parámetro del núcleo para deshabilitar hyperthreading. Principalmente porque no puedo encontrar ninguna documentación oficial sobre su interacción con núcleos hyperthreading. ¿Se garantiza deshabilitar siempre el hyperthreading si lo especificamaxcpus=#real_cores
? ¿O podría terminar con la mitad de los núcleos reales con HT todavía habilitado en algunos sistemas? Además, unamaxcpus=
configuración no es portátil entre máquinas con diferentes cuentas de núcleos. Mantener variaciones de este parámetro para diferentes máquinas sería tedioso y propenso a errores.lscpu | grep "per core"
Sin embargo, por otro lado, configurar el parámetro del kernel una vez no parece una tarea demasiado onerosa a mi.Aquí hay un script para identificar los núcleos ht y alternarlos en línea / fuera de línea.
@ WinEunuuchs2Unix , tal vez puedas agregar esto a tu excelente respuesta.
fuente
for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
El
maxcpus=n
parámetro enGRUB_CMDLINE_LINUX_DEFAULT=
no funciona correctamente. Me dejó con 2 núcleos y 4 hilos en lugar de 4 núcleos 4 hilos.Encontré una solución.
Agregar
mitigations=auto,nosmt
a en suGRUB_CMDLINE_LINUX_DEFAULT=
lugarProbado en Ubuntu 16.04 LTS con Linux 4.4.0.
Fuente: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS
fuente
Se necesita una forma un poco más sólida de buscar en el núcleo pares de hyperthread para los sistemas en los que la placa base aloja múltiples zócalos de CPU porque core_id está duplicado. Aquí está mi versión en un sistema con dos chips Xeon de 8 núcleos (ejemplo de Ubuntu 16.04):
Para varios propósitos, es posible que también desee buscar en los archivos
fuente
Si ha leído las discusiones, entonces probablemente sepa que, por lo general, no es razonable deshabilitarlas, por lo que supongo que lo desea con fines de aprendizaje.
La idea de HT es tener múltiples conjuntos de registros de CPU para cada núcleo físico (los llamados núcleos virtuales) . No hay un núcleo virtual "mejor", son idénticos. Armado con este conocimiento, puede deshabilitar los núcleos virtuales, excepto uno para cada físico.
Primero, desea saber qué par de núcleos virtuales pertenecen a qué núcleo físico en el
/sys/
sistema de archivos. Puede usar elcore_id
archivo para eso:De la salida se puede inferir que cpu0 + cpu2 están contenidos en un núcleo físico y cpu1 + cpu3 en el otro. Ahora eleve los privilegios y use el
echo
comando para deshabilitar uno en cada par:Tenga en cuenta que cpu0 no tiene un archivo "en línea" y no se puede deshabilitar, por lo que deshabilité cpu2 en su lugar.
fuente
La respuesta de @ visit1985 no funciona si el separador en thread_siblings_list no es una coma (que es, por ejemplo, el caso en mi sistema AMD Ryzen).
Aquí hay un script para desactivar el hiperprocesamiento que funciona con cualquier separador:
Y aquí hay uno para activar Hyper-Threading:
fuente