Como extrair o número de processadores físicos e encadeamentos por núcleo? (Nenhum texto, apenas o número para usar como entrada em outro lugar)

1

Eu quero usar o número de núcleos em um script e não tenho certeza qual é a melhor abordagem para extrair o número em si.

Por exemplo, o abaixo extrai o número de núcleos físicos, no entanto, como o número real deve ser extraído para que possa ser usado como uma entrada em outro lugar?

lscpu | grep "Core(s) per socket" 
Core(s) per socket:    4

Estou ciente do tail -c N, mas estou preocupado com a fragilidade dessa abordagem ao trabalhar em máquinas com mais núcleos.

Qual é a melhor abordagem para obter com segurança o número de núcleos físicos e segmentos por núcleo para uso como entrada de um parâmetro em outro lugar?

    
por Greg 25.06.2017 / 12:56

2 respostas

3

Poderíamos usar awk ou sed ou até grep com regexes Perl para selecionar apenas o número dessa linha, por exemplo,

$ lscpu | sed -n 's/^Core(s) per socket: *//p'
2

Mas você quer aquele número, o número de núcleos em um soquete? E se você tiver mais de um soquete na máquina:

$ lscpu |grep -i socket
Core(s) per socket:    2
Socket(s):             2

Poderíamos usar awk para obter os dois números e multiplicá-los:

$ lscpu | awk '/^Core.s. per socket:/ {cores=$NF} /^Socket.s.:/ {sockets=$NF} END {print cores * sockets}'
4

Não tenho certeza se eles contam ou não hyperthreads, e se queremos hyperthreads ou não, mas poderíamos apenas obter o número na linha CPU(s) :

lscpu | awk '/^CPU.s.:/ { print $NF; exit }'

Ou use nproc para obter o número total de CPUs no sistema .

$ nproc --all
4 
    
por 25.06.2017 / 13:22
3

Você pode usar o utilitário getconf para isso. Isso deve funcionar para você

$ getconf _NPROCESSORS_ONLN
8
    
por 25.06.2017 / 13:24