En Linux, ¿cómo saber cuántos núcleos de la máquina están activos?

13

En Linux, ¿cómo saber cuántos núcleos de la máquina están activos? Supongo que una prueba para esto también funcionaría para Android. Necesito saber si más de un núcleo está activo alguna vez. Me preguntaba si probar esto haciendo que un proceso cree muchos hilos. ¿Es posible que un hilo consulte en qué procesador está? de esa manera se puede saber si alguna vez se usarán múltiples núcleos bajo una carga pesada. No estoy seguro si estoy en el camino correcto.

likejudo
fuente
Por "activo", supongo que quiere decir cuántos núcleos están actualmente en uso. ¿O quieres decir cuántos núcleos tiene el sistema?
Mikel
sí, me gustaría decir cuántos están actualmente en uso

Respuestas:

19

Puede usar toppara enumerar la utilización de cada núcleo. Presione 1 si es necesario para dividir la fila de la CPU en una fila separada para cada núcleo.

También puede agregar una columna que muestre el núcleo utilizado por última vez para cada proceso. Presione f para abrir la lista de campos, luego j para activar la columna "P". Luego presione la barra espaciadora para volver a la vista en vivo.

Brian
fuente
Entonces, ¿tal vez debería escribir y ejecutar un programa que genere muchos hilos y luego ejecutar el comando 'superior' en la consola?
likejudo
Creo que eso debería funcionar. Simplemente presione H cuando esté en la toplista de hilos por separado. O podría escribir un programa con un bucle infinito y ejecutarlo varias veces.
Brian
Digamos que escribo el programa para generar 100 hilos, cada uno realizando un cálculo largo e intenso. Si lo escribo en Java (Android), ¿hay una garantía de que JVM / KVM ejecutará los hilos en diferentes núcleos y los ejecutará en todos los núcleos?
likejudo
1
No sé, ¿no es eso lo que se supone que debe resolver tu experimento?
Brian
Necesito probar un programa que dice que restringirá la cantidad de núcleos de procesador que se utilizan. Buscaré un poco más. ¡Gracias!
likejudo
6

pstiene un campo llamado psrpara indicarle en qué procesador se está ejecutando un trabajo.

Entonces podrías usar algo como:

ps -e -o psr= | sort | uniq | wc -l

Tenga en cuenta que el simple hecho de ejecutarlo de psesta manera activará al menos un núcleo.

Probablemente mejor es ejecutar esto:

tmp=/tmp/ps.$$
ps -e -o psr= > /tmp/ps.$$
sort -u "$tmp" | wc -l
rm "$tmp"

de esa manera sorty wcno aumentan el conteo.

Mikel
fuente
¿Qué pasa si el sistema tiene 16 núcleos y nadie los está usando?
Luego imprime 0 porque ninguno de ellos está en uso. Creo que eso es lo que pregunta.
Mikel
No vi nuevos comentarios a la pregunta.
1
Por supuesto, al ejecutar psestamos activando al menos 1 núcleo. ;-)
Mikel
Gracias por tu respuesta. La desventaja es que necesito saber si más de un núcleo está activo alguna vez. Me preguntaba si probar esto haciendo que un proceso cree muchos hilos. ¿Es posible que un hilo consulte en qué procesador está? de esa manera se puede saber si alguna vez se usarán múltiples núcleos bajo una carga pesada. No estoy seguro si estoy en el camino correcto.
3
htop

Este comando funciona bien tanto en ubuntu como en centos y muestra gráficamente cuántas CPU y cómo se utilizan.

para centos:

yum install htop

para ubuntu:

apt-get install htop
Srihari Karanth
fuente
2

Intenta lo siguiente:

cat /proc/cpuinfo

Aquí hay un enlace a un ejemplo de Android Java.

Amir Afghani
fuente
1
Por "activo", supongo que Anil quiere decir cuántos núcleos están actualmente en uso y cuántos están inactivos, es decir, una aproximación de qué tan ocupado está el sistema. /proc/cpuinfosolo le dice cuántos núcleos tiene el sistema, e incluso tendría que hacer más que cat /proc/cpuinfodar cuenta de HyperThreading.
Mikel
OK, eso no estaba claro, pero tienes razón.
Amir Afghani el
0

Puede usar cat / sys / devices / system / cpu / possible o cat / sys / devices / system / cpu / online. Posible es principalmente en caso de que haya aislado una CPU para ejecutar algún programa en particular.

Sabster
fuente