Como posso saber o total de processadores usados por usuário no Linux?

0

Como posso saber o total de processadores usados por usuário no Linux? Por exemplo:       O usuário "X" executa 2 (ou mais) processos que usam no total 3 processadores.       Como posso saber? Se isso for impossível, então como posso saber quantos processadores podem ser usados pelo usuário? Por exemplo:       Usuário "X" abriu sessão com 2 processadores (de 8 possíveis).

Eu preciso escrever a função Perl que obtém o nome de usuário (por exemplo, "root") e retorna um número escalar - um dos possíveis: 1. Total de processadores de usuários usados (por exemplo, 2 a 8) 2. Núcleos totais do usuário usados 3. Processadores disponíveis para o usuário No meu caso, os usuários executam um (talvez mais, mas não muito) processo grande que roda alguns dias e eu quero saber como os processos (do usuário especial) carregam a máquina ... Porque se ele usa muitos recursos, então eu vai precisar pará-lo ...

    
por user259543 03.10.2013 / 14:38

2 respostas

3

Não é possível dizer quais núcleos um determinado programa utilizou. A CPU atribui threads para os núcleos de forma invisível e automática, com base em um grande número de fatores, e executa uma pequena mão para fazer parecer que tudo está sendo executado de forma síncrona, mesmo que haja algum tempo na forma como atribui o tempo de processamento para cada thread.

o que acontece é que uma sessão não pode ser mapeada para um conjunto de núcleos. você pode mapear uma sessão para o uso de programas que executam threads em um ou mais núcleos, mas isso é estritamente necessário com base no estado atual de todos os processos.

não é como você atribuir 2 núcleos para sally, 2 núcleos para bob e 4 núcleos para tom, fazendo com que você 'esgotar' deles. Os programas de Sally, Bob e Tom podem usar até 8 núcleos, e o sistema decidirá como melhor atribuir os threads a um recurso de processamento.

    
por 03.10.2013 / 15:07
0

Você pode usar sched_getaffinity e sched_setaffinity para pesquisar em qual núcleo um processo de usuários pode ser executado. No entanto, isso não significa que será executado em todos eles.

Você pode limitar os núcleos nos quais um processo pode ser executado iniciando-o em um cpuset ( uma parte específica de um cgroup )

por exemplo. Consulte este guia sobre como adicionar processo para um cgroup no Red Hat 6 e este guia sobre como efetivamente fazer uma divisão por grupo (ou, portanto, por usuário) de cpu e memória.

Se você está apenas interessado em obter o cpu% que um usuário específico está usando, você pode usar este oneliner:

top -b -n 1 -u <username> | awk 'NR>7 { sum += $9; } END { print sum; }'
    
por 03.10.2013 / 16:41

Tags