Só estou me perguntando como posso descobrir no bash quantos núcleos de CPU um usuário está usando agora em um servidor Linux?
Estou enviando uma quantidade razoável de trabalhos em segundo plano para o servidor, portanto, gostaria de escrever um script bash para verificar antes de enviar um trabalho se os trabalhos em execução (processos) enviados por mim são muitos, porque tenho que permitir que outros os usuários têm núcleos suficientes para usar em seus trabalhos. Gostaria de saber qual comando bash pode me dizer quantos núcleos meus trabalhos estão usando agora.
Obrigado e cumprimentos!
Não sei se isso ajuda, mas você pode usar o
mpstat
utilitário para obter uma análise detalhada do uso da CPU por processador individual (ou núcleo). Por exemplo:Neste exemplo, você pode ver que de CPU
0
,1
e6
estão fazendo mais trabalho do que o resto deles. Às vezes, você verá que uma única CPU está próxima (ou a) 100%, enquanto outras estão em zero. Isso pode ser um indicador de programa (ou parte de um programa) que é de thread único e capaz de usar apenas uma única CPU por vez.Para instalar
mpstat
em um sistema Fedora, RHEL ou CentOS, useyum install sysstat
.fonte
# aptitude search mpstat #
.aptitude search systat
vez disso.sysstat
no Debian e no Ubuntu . Eu esperaria que a maioria das distribuições derivadas do Debian usasse o mesmo nome de pacote. Nas distribuições derivadas do Debian, comece porapt-cache search --full mpstat
.A menos que seja explicitamente configurado para não (fixar um processo a uma CPU específica), todos os núcleos podem ser considerados em uso o tempo todo. O planejador alocará os processos no próximo núcleo disponível. Caso em questão, "System Monitor" (parte do GNOME) está mostrando minha carga quase a mesma em todos os quatro núcleos da minha máquina.
fonte
Então, você verá aqui algumas respostas que lhe dirão como seus núcleos estão sendo utilizados.
NO ENTANTO - isso realmente não está lhe prestando um serviço. Você fez uma suposição básica que simplesmente não se sustenta - que seus trabalhos tenderão a se agrupar em algum subconjunto dos núcleos.
Em vez disso, seus trabalhos serão espalhados por todos os núcleos, a menos que você implemente algo que os mantenha "escritos" de alguma forma. (Observação: não estou recomendando isso; apenas digo "a menos que")
Aqui está uma estratégia alternativa: identifique para o seu sistema em particular qual é o nível LOAD quando achar que é "aceitável" que outros usuários estejam adicionando mais trabalhos. Em seguida, crie algo que somente envie um novo trabalho em segundo plano quando o nível de carga estiver abaixo desse limite.
Dessa forma, a solução será independente da contagem de núcleos, mais portátil, mais flexível e mais fácil de "ajustar".
fonte
Se você quiser fazer isso para que ele funcione no linux e no OS X, você pode:
fonte
Você pode obter uma estimativa aproximada executando
top
, pressionando 'U
' e especificando seu nome de usuário e, em seguida, adicionando a utilização da CPU dos seus principais processos.fonte
top
pode ser executado em modo batch com a opção -b. Combine-o com a opção -n para obter o número de iterações necessárias.top
saída ou o google para ver se alguém já fez isso. No entanto, não estou convencido de que valha a pena o esforço, pois acho que receberei diferentes resultados para cada execução, dada a velocidade com que a alternância de contexto ocorre. O sistema não carrega um indicador suficientemente bom? Ele informa com eficiência quantos núcleos virtuais são necessários para lidar com a fila de processos (processos aguardando na CPU).