
¿Cómo puedo saber el total de procesadores usados por usuario en Linux? Por ejemplo: el usuario "X" ejecuta 2 (o más) procesos que utilizan en total 3 procesadores. ¿Cómo puedo saberlo? Si es imposible, ¿cómo puedo saber cuántos procesadores puede utilizar el usuario? Por ejemplo: El usuario "X" abrió sesión con 2 procesadores (de 8 posibles).
Necesito escribir una función de Perl que obtenga el nombre de usuario (por ejemplo, "raíz") y devuelva un número escalar, uno de los posibles: 1. Total de procesadores de usuario utilizados (por ejemplo, 2 de 8) 2. Total de núcleos de usuario utilizados 3. Procesadores disponibles para usuario En mi caso, los usuarios ejecutan un (tal vez más, pero no mucho) proceso grande que se ejecuta durante unos días y quiero saber cómo los procesos (del usuario especial) cargan la máquina... Porque si usa demasiados recursos, entonces Tendré que detenerlo...
Respuesta1
No es posible saber qué núcleos ha utilizado un programa determinado. La CPU asigna subprocesos a los núcleos de forma invisible y automática en función de una gran cantidad de factores, y realiza una gran cantidad de ajustes para que parezca que todo se está ejecutando sincrónicamente, incluso si hay cierta división de tiempo en la forma en que asigna el tiempo de procesamiento. a cada hilo.
Todo se reduce a que una sesión no se puede asignar a un conjunto de núcleos. puede asignar una sesión al uso de programas que ejecutan subprocesos en uno o más núcleos, pero eso es estrictamente según sea necesario según el estado actual de todos los procesos.
No es como si asignaras 2 núcleos a Sally, 2 núcleos a Bob y 4 núcleos a Tom, lo que hace que te quedes sin ellos. Los programas de Sally, Bob y Tom pueden usar hasta 8 núcleos y el sistema decidirá cómo asignar mejor los subprocesos a una instalación de procesamiento.
Respuesta2
Puedes usarsched_getaffinity y sched_setaffinitypara buscar qué procesos centrales pueden ejecutar los usuarios. Sin embargo, eso no significa que se ejecutará en todos ellos.
Puede limitar los núcleos en los que se puede ejecutar un proceso iniciándolo en unconjunto de CPU(una parte particular de ungrupo c)
por ejemplo, veresta guíasobre cómo agregar un proceso a un cgroup en Red Hat 6 yesta guíasobre cómo hacer de manera efectiva una división de CPU y memoria por grupo (o, por lo tanto, por usuario).
Si solo está interesado en obtener el% de CPU que usa un usuario específico, puede usar este delineador:
top -b -n 1 -u <username> | awk 'NR>7 { sum += $9; } END { print sum; }'