Nem todos os programas podem usar vários segmentos. php é um por exemplo. Se um processo php precisar de muito CPU, apenas 1 CPU estará no máximo. E os outros estarão ociosos.
Recentemente, descobri que nosso servidor não utiliza mais todos os 80 segmentos no sistema. Parece que 16 núcleos estão sempre ociosos, apesar da alta carga do sistema.
É um servidor Dell powerEdge R900, com 4 soquetes, 4 vezes um Xeon de 10 núcleos. Então, 40 núcleos, com HT seus 80 segmentos. (CPU Intel (R) Xeon (R) E7-4850 @ 2.00GHz). Memória do sistema é 512GB Rodando o Ubuntu 14.04.1 LTS. Ainda não reiniciei o servidor, esperava evitar isso.
uname -a Linux assembly 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Eu vou verificar o seguinte:
Temperatura medida com i7z: (não é possível exibir 4 soquetes
Cpu speed from cpuinfo 1994.00Mhz True Frequency (without accounting Turbo) 1994 MHz Socket [0] - [physical cores=10, logical cores=20, max online cores ever=10] CPU Multiplier 15x || Bus clock frequency (BCLK) 132.93 MHz TURBO ENABLED on 10 Cores, Hyper Threading ON Max Frequency without considering Turbo 2126.93 MHz (132.93 x [16]) Max TURBO Multiplier (if Enabled) with 1/2/3/4/5/6 cores is 0x/0x/0x/0x/0x/0x Real Current Frequency 1994.02 MHz (Max of below) Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp Core 1 [1]: 1994.01 (15.00x) 100 0 0 0 75 Core 2 [5]: 1994.00 (15.00x) 100 0 0 0 77 Core 3 [9]: 1994.02 (15.00x) 100 0 0 0 76 Core 4 [13]: 1994.00 (15.00x) 100 0 0 0 77 Core 5 [17]: 1994.00 (15.00x) 100 0 0 0 77 Core 6 [21]: 1994.00 (15.00x) 97.7 0.404 0 1.86 77 Core 7 [25]: 1994.00 (15.00x) 94.5 0 1 5.27 77 Core 8 [29]: 1994.00 (15.00x) 100 0 0 0 76 Core 9 [33]: 1994.00 (15.00x) 99.8 0 1 1 75 Core 10 [37]: 1994.00 (15.00x) 100 0 0 0 73 Max Frequency without considering Turbo 2126.93 MHz (132.93 x [16]) Max TURBO Multiplier (if Enabled) with 1/2/3/4/5/6 cores is 0x/0x/0x/0x/0x/0x Real Current Frequency 1994.02 MHz (Max of below) Core [core-id] :Actual Freq (Mult.) C0% Halt(C1)% C3 % C6 % Temp Core 1 [1]: 1994.02 (15.00x) 100 0 0 0 74 Core 2 [5]: 1994.00 (15.00x) 100 0 0 0 76 Core 3 [9]: 1994.02 (15.00x) 100 0 0 0 76 Core 4 [13]: 1994.00 (15.00x) 100 0 0 0 77 Core 5 [17]: 1994.00 (15.00x) 100 0 0 0 76 Core 6 [21]: 1994.00 (15.00x) 97 0 1 2.43 77 Core 7 [25]: 1994.00 (15.00x) 92.9 0 1 6.81 77 C0 = Processor running without halting00x) 100 0 0 0 75 C1 = Processor running with halts (States >C0 are power saver) 1 1 75 C3 = Cores running with PLL turned off and core cache turned off 0 0 73 C6 = Everything in C3 + core state saved to last level cache Above values in table are in percentage over the last 1 sec [core-id] refers to core-id number in /proc/cpuinfo 'Garbage Values' message printed when garbage values are read Ctrl+C to exit
Idle: os últimos 16 núcleos são 100% ociosos:
mpstat -p ALL 1: Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61 Average: 0 92.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.07 Average: 1 94.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.00 Average: 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 3 83.33 0.00 2.08 0.00 0.00 0.00 0.00 0.00 0.00 14.58 Average: 4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 5 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 .......................................................... Average: 64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 66 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 67 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 71 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Números de carregamento principais:
top - 17:41:48 up 35 days, 6:28, 15 users, load average: 77.69, 70.48, 62.73 Tasks: 1327 total, 44 running, 1281 sleeping, 2 stopped, 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+used, 2847524 free, 535660 buffers KiB Swap: 78124032 total, 2105608 used, 76018416 free. 40637328+cached Mem
Às vezes, o% inativo não é mais 100, mas um pouco menos, como você pode ver aqui, mas a maioria fica 100% inativa.
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61 Average: 64 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.87 Average: 65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 66 0.00 0.00 2.63 0.00 0.00 0.00 0.00 0.00 0.00 97.37 Average: 67 0.00 0.00 0.13 0.13 0.00 0.00 0.00 0.00 0.00 99.75 Average: 68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 71 0.00 0.00 0.12 0.00 0.00 0.00 0.00 0.00 0.00 99.88 Average: 72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 77 0.00 0.00 0.13 0.00 0.00 0.00 0.00 0.00 0.00 99.87 Average: 78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Também executei este comando para me certificar de que estão todos online:
for COUNT in 'seq 01 79';do echo 1 > /sys/devices/system/cpu/cpu${COUNT}/online;
Com o programa HTop, posso visualizar uma barra de uso de CPU por thread e ver 64 barras preenchidas e 16 vazias (as últimas 16).
Quando tento iniciar um processo em um núcleo, o > 63 também falha:
root@server:~# taskset -c 63 time Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...] root@server:~# taskset -c 64 time taskset: failed to set pid 0's affinity: Invalid argument root@server:~# taskset -c 65 time taskset: failed to set pid 0's affinity: Invalid argument
Tópico relacionado: link
EDITAR: Acontece que os núcleos são desligados na hora, mas não são inicializados corretamente. Parece que há processos sendo executados nesses núcleos indisponíveis, mas é impossível iniciar qualquer novo processo neles. De acordo com o log dmesg, os núcleos são desativados e ativados rapidamente um após o outro. Eu tenho que dizer que foi a intenção de desligar esses núcleos, então desativamos esse 'recurso'. Registro de exemplo DMESG:
[Mon Jan 12 12:42:40 2015] kvm: disabling virtualization on CPU79 [Mon Jan 12 12:42:40 2015] smpboot: CPU 79 is now offline .... [Mon Jan 12 12:43:12 2015] smpboot: Booting Node 0 Processor 79 APIC 0xf3 [Mon Jan 12 12:43:12 2015] kvm: enabling virtualization on CPU79
Ativamos / desativamos os núcleos por meio de:
for COUNT in 'seq 64 79';do echo 1 > /sys/devices/system/cpu/cpu${COUNT}/online;done
Nunca vinculamos esses comandos com nossos 16 núcleos indisponíveis, pois normalmente os comandos acima funcionam corretamente. (também tentamos desabilitar o powermanager, mas isso não ajudou)
Nem todos os programas podem usar vários segmentos. php é um por exemplo. Se um processo php precisar de muito CPU, apenas 1 CPU estará no máximo. E os outros estarão ociosos.