16 núcleos no se utilizan de 80 núcleos

11

Recientemente descubrí que nuestro servidor ya no utiliza los 80 hilos en el sistema. Parece que 16 núcleos siempre están inactivos, a pesar de la alta carga del sistema.

Es un servidor Dell powerEdge R900, con 4 sockets, 4 veces un Xeon de 10 núcleos. Entonces 40 núcleos, con HT sus 80 hilos. (Intel (R) Xeon (R) CPU E7-4850 @ 2.00GHz). La memoria del sistema es de 512 GB con Ubuntu 14.04.1 LTS. Todavía no he reiniciado el servidor, esperaba evitar esto.

uname -a
Ensamblaje de Linux 3.13.0-35-generic # 62-Ubuntu SMP vie 15 de agosto 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux

Comprobaré lo siguiente:

Temperatura medida con i7z: (no puede mostrar 4 enchufes

Velocidad de CPU de cpuinfo 1994.00Mhz
Frecuencia verdadera (sin contabilidad Turbo) 1994 MHz

Socket [0] - [núcleos físicos = 10, núcleos lógicos = 20, núcleos en línea máximos siempre = 10]
  Multiplicador de CPU 15x || Frecuencia del reloj del bus (BCLK) 132.93 MHz
  TURBO HABILITADO en 10 núcleos, Hyper Threading activado
  Frecuencia máxima sin considerar Turbo 2126.93 MHz (132.93 x [16])
  El multiplicador TURBO máximo (si está habilitado) con 1/2/3/4/5/6 núcleos es 0x / 0x / 0x / 0x / 0x / 0x
  Frecuencia de corriente real 1994.02 MHz (Máx. De abajo)
        Core [core-id]: Freq real (Mult.) C0% Halt (C1)% C3% C6% Temp
        Núcleo 1 [1]: 1994.01 (15.00x) 100 0 0 0 75
        Núcleo 2 [5]: 1994.00 (15.00x) 100 0 0 0 77
        Núcleo 3 [9]: 1994.02 (15.00x) 100 0 0 0 76
        Núcleo 4 [13]: 1994.00 (15.00x) 100 0 0 0 77
        Núcleo 5 [17]: 1994.00 (15.00x) 100 0 0 0 77
        Núcleo 6 [21]: 1994.00 (15.00x) 97.7 0.404 0 1.86 77
        Núcleo 7 [25]: 1994.00 (15.00x) 94.5 0 1 5.27 77
        Núcleo 8 [29]: 1994.00 (15.00x) 100 0 0 0 76
        Núcleo 9 [33]: 1994.00 (15.00x) 99.8 0 1 1 75
        Núcleo 10 [37]: 1994.00 (15.00x) 100 0 0 0 73
  Frecuencia máxima sin considerar Turbo 2126.93 MHz (132.93 x [16])
  El multiplicador TURBO máximo (si está habilitado) con 1/2/3/4/5/6 núcleos es 0x / 0x / 0x / 0x / 0x / 0x
  Frecuencia de corriente real 1994.02 MHz (Máx. De abajo)
        Core [core-id]: Freq real (Mult.) C0% Halt (C1)% C3% C6% Temp
        Núcleo 1 [1]: 1994.02 (15.00x) 100 0 0 0 74
        Núcleo 2 [5]: 1994.00 (15.00x) 100 0 0 0 76
        Núcleo 3 [9]: 1994.02 (15.00x) 100 0 0 0 76
        Núcleo 4 [13]: 1994.00 (15.00x) 100 0 0 0 77
        Núcleo 5 [17]: 1994.00 (15.00x) 100 0 0 0 76
        Núcleo 6 [21]: 1994.00 (15.00x) 97 0 1 2.43 77
        Núcleo 7 [25]: 1994.00 (15.00x) 92.9 0 1 6.81 77
C0 = Procesador funcionando sin interrupción 00x) 100 0 0 0 75
C1 = Procesador funcionando con paradas (los estados> C0 ahorran energía) 1 1 75
C3 = Núcleos en ejecución con PLL desactivado y núcleo de caché desactivado 0 0 73
C6 = Todo en el estado central C3 + guardado en el caché de último nivel
  Los valores anteriores en la tabla están en porcentaje durante los últimos 1 segundo
[core-id] se refiere al número de core-id en / proc / cpuinfo
Mensaje de "valores basura" impreso cuando se leen valores basura
  Ctrl + C para salir

Inactivo: los últimos 16 núcleos están 100% inactivos:

mpstat -p ALL 1:
Promedio: CPU% usr% nice% sys% iowait% irq% soft% steal% guest% gnice% inactivo
Promedio: todos 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61
Promedio: 0 92.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.07
Promedio: 1 94.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.00
Promedio: 2100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Promedio: 3 83.33 0.00 2.08 0.00 0.00 0.00 0.00 0.00 0.00 14.58
Promedio: 4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Promedio: 5100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
.................................................. ........
Promedio: 64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 66 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 67 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 71 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

Números de carga superiores:

arriba - 17:41:48 hasta 35 días, 6:28, 15 usuarios, promedio de carga: 77.69, 70.48, 62.73
Tareas: 1327 en total, 44 corriendo, 1281 durmiendo, 2 detenidos, 0 zombie
% Cpu (s): 63.7 us, 13.6 sy, 0.0 ni, 22.3 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem: 52837942 + total, 52553190 + usado, 2847524 gratis, 535660 buffers
KiB Swap: 78124032 en total, 2105608 usados, 76018416 gratis. 40637328 + Mem en caché

A veces, el% inactivo ya no es 100, pero un poco menos, como puede ver aquí, pero en su mayoría se mantiene al 100% inactivo.

Promedio: CPU% usr% nice% sys% iowait% irq% soft% steal% guest% gnice% inactivo
Promedio: todos 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61
Promedio: 64 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.87
Promedio: 65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 66 0.00 0.00 2.63 0.00 0.00 0.00 0.00 0.00 0.00 97.37
Promedio: 67 0.00 0.00 0.13 0.13 0.00 0.00 0.00 0.00 0.00 99.75
Promedio: 68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 71 0.00 0.00 0.12 0.00 0.00 0.00 0.00 0.00 0.00 99.88
Promedio: 72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 77 0.00 0.00 0.13 0.00 0.00 0.00 0.00 0.00 0.00 99.87
Promedio: 78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Promedio: 79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

También ejecuté este comando para asegurarme de que todos estén en línea:

para COUNT en `seq 01 79`; echo 1> / sys / devices / system / cpu / cpu $ {COUNT} / en línea; 

Con el programa HTop puedo visualizar una barra de uso de CPU por hilo, y veo 64 barras llenas y 16 vacías (las últimas 16).

Cuando intento iniciar un proceso en un núcleo> 63 también falla al hacerlo:

root @ server: ~ # taskset -c 63 time
Uso: tiempo [-apvV] [-f formato] [-o archivo] [--append] [--verbose]
       [--portabilidad] [--format = formato] [--output = archivo] [--version]
       [--quiet] [--help] comando [arg ...]
root @ server: ~ # taskset -c 64 time
conjunto de tareas: no se pudo establecer la afinidad de pid 0: argumento no válido
root @ server: ~ # taskset -c 65 veces
conjunto de tareas: no se pudo establecer la afinidad de pid 0: argumento no válido

Hilo relacionado: /ubuntu/536541/ubuntu-uses-only-2-out-of-4-processor-cores

EDITAR: Resulta que los núcleos se apagan sobre la marcha, pero no se inician correctamente. Parece que hay procesos que se ejecutan en estos núcleos no disponibles, pero es imposible iniciar un nuevo proceso en ellos. Según el registro de dmesg, los núcleos se deshabilitan y habilitan rápidamente uno tras otro. Tengo que decir que era la intención de apagar estos núcleos, por lo que deshabilitamos esta 'característica'. Registro de ejemplo DMESG:

[Lun 12 de enero 12:42:40 2015] kvm: deshabilitar la virtualización en CPU79
[Lun 12 de enero 12:42:40 2015] smpboot: CPU 79 ahora está fuera de línea
....
[Lun 12 de enero 12:43:12 2015] smpboot: Nodo de arranque 0 Procesador 79 APIC 0xf3
[Lun 12 de enero 12:43:12 2015] kvm: habilitar la virtualización en CPU79

Activamos / desactivamos núcleos a través de:

para COUNT en `seq 64 79`; echo 1> / sys / devices / system / cpu / cpu $ {COUNT} / en línea; hecho

Nunca vinculamos estos comandos con nuestros 16 núcleos no disponibles, ya que normalmente los comandos anteriores funcionan correctamente. (también intentamos deshabilitar powermanager, pero esto no ayudó)

HenrivdGeest
fuente
1
¿Por qué usted o su empresa no eligieron el servidor Ubuntu en lugar de Ubuntu para PC normales?
XperianX
1
No es imposible que 16 de sus núcleos se estén utilizando realmente a su capacidad MÁXIMA, dejando 16 núcleos virtuales sin margen utilizable.
anonymous2
1
¿Están los 8 núcleos (16 virtuales) en una CPU física, o están distribuidos en los 4 zócalos? Si están ubicados en una CPU física, ¿es posible que esos núcleos hayan fallado?
Jibberish51
2
Me pregunto si en algún lugar del sistema hay un código que represente la máscara de afinidad de la CPU con solo 64 bits, lo que impide que los procesos utilicen los últimos 16 núcleos.
kasperd el
Dado que 80-16 = 64, me parece que hay algún límite artificial en algún lugar en el número máximo de núcleos a usar. Posiblemente, el software que esté ejecutando esté configurado en un máximo de 64 núcleos, o posiblemente no pueda generar más de 64 hilos.
Clonkex

Respuestas:

1

No todos los programas pueden usar múltiples hilos. php es uno por ejemplo. Si un proceso php necesita mucha CPU, solo 1 CPU alcanzará el máximo. Y los demás estarán ociosos.

Carl
fuente