Como obter o parâmetro do kernel do isolcpus trabalhando com o Precise 12.04 amd64?

5

Eu tenho testado essas coisas tentando reservar algumas CPUs em um host com dois processadores Intel E5645, mas não consigo fazê-lo funcionar por algum motivo. Etapas que segui:

  1. Edite / etc / default / grub e adicione isolcpus = 0,1 a GRUB_CMDLINE_LINUX_DEFAULT

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=0,1"

  2. Execute update-grub

  3. Reinicializar

Depois disso, cat / proc / cmdline revela:

BOOT_IMAGE=/boot/vmlinuz-3.2.0-26-generic root=UUID=52cfedad-40be-41b9-9f88-c282a7ae3f24 ro quiet splash isolcpus=0,1 vt.handoff=7

Testado usando estresse:

apt-get install stress && stress -c 24

Monitorado usando a parte superior e pressionando 1 para exibir estatísticas individuais da CPU. Até o momento, nenhuma CPU está isolada do escalonador e todas estão presas de estresse.

Cpu0  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu8  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu9  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu10 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu11 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu12 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu13 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu14 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu15 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu16 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu17 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu18 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu19 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu20 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu21 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu22 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu23 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa

Testado o mesmo material no CentOS 6 x86_64 e funciona como esperado.

Pesquisou o banco de dados do Ubuntu e do Linux no launchpad, mas não encontrou nada até agora.

Sou eu burro ou sinto falta de alguma coisa? Dicas?

Obrigado!

Refs:

link

    
por rubiojr 18.07.2012 / 14:55

2 respostas

4

Desativado SMT (Hyper-Threading) no BIOS, ligado, testado novamente com o HT desligado e o isolcpus funciona como esperado.

O SMT reativado no BIOS, ligado e ligado, ainda funciona como esperado.

Definitivamente não é a melhor resposta que você poderia esperar, mas funcionou para mim mesmo assim.

    
por rubiojr 19.07.2012 / 12:56
2

isolcpus apenas isloate da atividade ceratin-user-space e não isolará a CPU da atividade do kernel (watchdogs, kworkers, linux stack ...). Além disso, você não deve isolar a cpu 0 (que possui inúmeras atividades dedicadas como descoberta usb, configuração de timer acpi, envio de wrmsr / rdmsr .... que tendem a atingir 2% com distro padrão onde todos os drivers são habilitados por padrão)

Você pode verificar quais processos estão sendo executados em quais núcleos, exibindo todos os encadeamentos classificados por número de núcleo.

ps -aFeL | cut -c 48- | sort -n

Você também precisa verificar e modificar as afinidades em / proc / irq / *, para tentar alterar as afinidades de interrupção.

Você pode dinamicamente poupar cpus e remover "a maioria" da tarefa do kernel do Linux usando a ferramenta cpuset.

em vez de

taskset -c 3-7,11-15 program args

tente isso

sudo apt install cpuset
cset set --list
cset shield -c 3-7,11-15
cset set --list
cset shield -e program -- args  

E então, você pode apreciar a diferença

ps -aFeL | cut -c 48- | sort -n

Ao executar esses dois comandos

cset shield -e stress -- -c 16
stress -c 16
    
por Pierre 20.02.2017 / 19:03