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

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

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

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

Responder1

Não é possível dizer quais núcleos um determinado programa utilizou. A CPU atribui threads aos núcleos de forma invisível e automática com base em um grande número de fatores, e executa uma grande quantidade de gestos manuais para fazer parecer que tudo está sendo executado de forma síncrona, mesmo que haja alguma redução de tempo na forma como ele atribui o tempo de processamento para cada tópico.

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 se você atribuísse 2 núcleos para Sally, 2 núcleos para Bob e 4 núcleos para Tom, fazendo com que você ficasse sem eles. Os programas de Sally, Bob e Tom podem usar até 8 núcleos, e o sistema decidirá a melhor forma de atribuir os threads a um recurso de processamento.

Responder2

Você pode usarsched_getaffinity e sched_setaffinitypara verificar qual núcleo um processo do usuário pode ser executado. No entanto, isso não significa que será executado em todos eles.

Você pode limitar os núcleos em que um processo pode ser executado iniciando-o em umcpuset(uma parte específica de umcgrupo)

por exemplo, vejaeste guiasobre como adicionar um processo a um cgroup no Red Hat 6 eeste guiasobre como fazer efetivamente uma divisão por grupo (ou, portanto, por usuário) de CPU e memória.

Se você estiver interessado apenas em obter a% da 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; }'

informação relacionada