Tengo un Intel i7 2700k aquí, y me gustaría saber cómo puedo saber qué procesadores son físicos y cuáles son virtuales (es decir, hyperthreading). Actualmente estoy ejecutando un script Conky para mostrar las temperaturas, frecuencias y cargas de mi CPU, pero no estoy seguro de haberlo hecho bien:
He escrito mi propio guión para obtener temperaturas y frecuencias i7z
, pero estas solo corresponden a núcleos físicos. Actualmente estoy mostrando cada núcleo de esta manera:
${cpu cpu1} ${lua display_temp 0} ${lua display_load 0}
${cpu cpu2}
${cpu cpu3} ${lua display_temp 1} ${lua display_load 1}
${cpu cpu4}
# ...
No estoy seguro de que esto sea correcto, debido a las cargas y temperaturas que veo a veces. En /proc/cpuinfo
, ¿cómo se clasifican los núcleos? ¿Primero todo físico y luego todo virtual? ¿Cada núcleo físico entonces sus núcleos virtuales? ¿Cómo se ordenan?
ht
indicador solo indica que la CPU admite múltiples subprocesos (HTT), no si está habilitado o no. Incluso entonces, no siempre se puede confiar en él, por ejemplo, indica falsamente que un i5 i5-6500 es compatible con HTT: ark.intel.com/content/www/us/en/ark/products/88184/…La respuesta anterior es muy interesante.
Después de buscar en Google, encontré algunos temas relacionados:
/server/235825/disable-hyperthreading-from-within-linux-no-access-to-bios
/programming/7274585/linux-find-out-hyper-threaded-core-id
¿Verifica si HyperThreading está habilitado o no?
En el último enlace, el script de Python no funciona cuando su host tiene muchas ID físicas. Intenté modificarlo con una condición diferente al final:
Cambiando:
a
Pero no funciona como se esperaba, según el mensaje anterior. Por cierto, puedes hacer algo más completo que:
con:
[...]
Lo que es interesante en un host de muchos núcleos con habilitación hyperthreading es la distribución de núcleos lógicos en el hardware.
Por ejemplo, en una de mi computadora (48 núcleos lógicos, 2 procesadores físicos, 24 (12 * 2) 'núcleos reales' (entonces, también 24 núcleos virtuales)):
Significa que cpu0 y cpu24 comparten la misma "dirección" de hardware físico. Lo mismo para cpu1 y cpu25 ...
Entonces, básicamente, si quisiera deshabilitar hyperthreading desde mi sistema operativo Linux, debería poner '0' en la CPU {24..47} / en línea con
Notarás lo interesante que es mi sistema para numerar los núcleos.
fuente
también puedes usar lscpu:
aquí los núcleos lógicos 0 y 4 van al núcleo 0
fuente