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.


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.


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.


¿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

2

Intenta lo siguiente:

cat /proc/cpuinfo

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.