¿Es posible obtener dicha información mediante alguna API o función, en lugar de analizar el /proc/cpuinfo
?¿Cómo obtener información de CPU en C en Linux, como el número de núcleos?
Respuesta
De man 5 proc
:
/proc/cpuinfo This is a collection of CPU and system architecture dependent items, for each supported architecture a different list. Two common entries are processor which gives CPU number and bogomips; a system constant that is calculated during kernel initialization. SMP machines have information for each CPU.
Aquí es código de ejemplo que lee e imprime la información a la consola, stolen from forums - Realmente es simplemente un comando especializado cat
.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *cpuinfo = fopen("/proc/cpuinfo", "rb");
char *arg = 0;
size_t size = 0;
while(getdelim(&arg, &size, 0, cpuinfo) != -1)
{
puts(arg);
}
free(arg);
fclose(cpuinfo);
return 0;
}
Tenga en cuenta que es necesario analizar y comparar la physical id
, core id
y cpu cores
para obtener un resultado preciso, si realmente se preocupan por el número de CPU vs núcleos de CPU. También tenga en cuenta que si hay un htt
en flags
, está ejecutando una CPU Hyper-Threading, lo que significa que su kilometraje puede variar.
Tenga en cuenta que si ejecuta su kernel en una máquina virtual, solo verá los núcleos de la CPU dedicados al invitado de la VM.
Pregunta curiosa. ¿Quién actualiza este archivo? – Laz
@RamBhat - no es _file_ en sentido general. Ver la Wikipedia [artículo sobre procfs] (http://en.wikipedia.org/wiki/Procfs) – Kimvais
Encontré este artículo muy útil, en términos de comprensión del archivo/proc/cpuinfo - http: //www.richweb. com/cpu_info – warunapww
Leer /proc/cpuinfo
Ejemplo de salida
processor : 0
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
processor : 1
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
processor : 2
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
processor : 3
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
show_cpuinfo es la función que en realidad implementa la funcionalidad /proc/cpuinfo
analizar el archivo/proc/cpuinfo. Esto te dará muchos detalles sobre la CPU. Extraiga los campos relevantes en su archivo C/C++.
¿Alguna vez ha visto la salida de este comando de shell "cat/proc/cpuinfo"? Creo que allí puedes obtener toda la información que necesitas. Para leer la información en un programa C, preferiría las funciones de manipulación de archivos como fopen, fgets, etc.
libcpuid
proporciona una API simple que devolverá directamente todas las funciones de la CPU, incluida la cantidad de núcleos. Para obtener el número de núcleos en tiempo de ejecución, se podría hacer algo como esto:
#include <stdio.h>
#include <libcpuid.h>
int main(void)
{
if (!cpuid_present()) {
printf("Sorry, your CPU doesn't support CPUID!\n");
return -1;
}
struct cpu_raw_data_t raw;
struct cpu_id_t data;
if (cpuid_get_raw_data(&raw) < 0) {
printf("Sorry, cannot get the CPUID raw data.\n");
printf("Error: %s\n", cpuid_error());
return -2;
}
if (cpu_identify(&raw, &data) < 0) {
printf("Sorrry, CPU identification failed.\n");
printf("Error: %s\n", cpuid_error());
return -3;
}
printf("Processor has %d physical cores\n", data.num_cores);
return 0;
}
Agregar la línea siguiente en el código fuente ..
system("cat /proc/cpuinfo | grep processor | wc -l");
Esto imprimirá el número de CPU en el sistema. Y si desea utilizar esta salida de este sistema, llame a su programa antes que usar la llamada al sistema popen.
No, no, esto contará también los hyperthreads, por favor lea - http://www.richweb.com/cpu_info para obtener información detallada sobre el archivo de decodificación/proc/cpuinfo. – warunapww
No, no lo es. O bien debe analizar el archivo cpuinfo, o alguna biblioteca lo hará por usted.
Dependiendo de su sabor de Linux obtendrá diferentes resultados de/proc/cpuid.
Esto funciona para mí en CentOS para obtener el número total de núcleos.
cat /proc/cpuinfo | grep -w cores | sed -e 's/\t//g' | awk '{print $3}' | xargs | sed -e 's/\ /+/g' | bc
Lo mismo no funciona en Ubuntu. Para Ubuntu puedes usar el siguiente comando.
nproc
Uso inútil de 'cat'. Lo siguiente funcionará bien: 'grep -m1" núcleos "/ proc/cpuinfo | tr -d '[a-z]: [: espacio:]' ' – Yokai
Usted puede utilizar esto para casi todo tipo de distribución Linux
Para el código C
num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
(En los sistemas de QNX, puede utilizar num_cpus = sysinfo_numcpu()
)
Por shell scripting, puede usar cat /proc/cpuinfo
o use lscpu
o nproc
comandos en linux
- 1. Obtener el número de núcleos de CPU en JavaScript?
- 2. Obtenga el número de CPU en Linux utilizando C
- 3. Cómo obtener información de hardware en Linux usando C++
- 4. ¿Cómo obtener el uso de la CPU en C?
- 5. C API para obtener carga de la CPU en Linux
- 6. Encontrar el número de núcleos en Java
- 7. ¿Cómo puedo obtener la información de la CPU en .net?
- 8. ¿Cómo genero hilos en diferentes núcleos de CPU?
- 9. Cómo obtener el uso total de la CPU en Linux (C++)
- 10. Orden de CPU en Linux (con hiperamientaje)
- 11. Cómo encontrar el número de núcleos en tiempo de ejecución en Haskell
- 12. Recopilación de información sobre la programación de subprocesos en Linux
- 13. Por subproceso Estadísticas de CPU en Linux
- 14. ¿Cómo obtener la información de temperatura de la CPU desde Bios usando C#?
- 15. Programación en Linux C: ¿Cómo obtener la información de partición de un dispositivo?
- 16. ¿Cómo obtener programáticamente el tamaño de página de caché de CPU en C++?
- 17. CPU TSC operación de recuperación, especialmente en el entorno de múltiples núcleos de procesadores múltiples
- 18. Cómo obtener CPU de serie en Linux sin permisos de root
- 19. Cómo contar el uso de CPU de aplicación multiproceso en Linux
- 20. Regulación de la CPU en C++
- 21. Cómo obtener la frecuencia de la CPU en C#
- 22. Cómo obtener el número de filas con SqlDataReader en C#
- 23. Cómo obtener las métricas de uso de CPU de subprocesos en Redhat Linux
- 24. ¿Cómo obtener el número de páginas en un documento de Word en Linux?
- 25. Obtener información de hardware en el servidor
- 26. ¿Cómo ejecutar diferentes hilos en diferentes núcleos?
- 27. ¿Cómo obtener la temperatura de la CPU?
- 28. ¿elasticsearch tiene el equivalente de 'núcleos' como en solr?
- 29. ¿Cómo puedo detectar la cantidad de núcleos en el ensamblaje x86?
- 30. Obtener directorio de inicio en Linux, C++
posible duplicado de [¿Cómo puedo recuperar la cantidad de procesadores en C/Linux?] (Http://stackoverflow.com/questions/2693948/how-do-i-retrieve-the- number-of-processorors-on-c-linux) –