49 votes

Comment faire pour obtenir l'utilisation totale du cpu sous Linux (c++)

Je suis en train d'essayer d'obtenir l'utilisation totale du cpu en %. D'abord je dois commencer par dire que "le dessus" tout simplement pas le faire, comme il y a un délai entre le cpu décharges, il nécessite 2 dumps et de plusieurs secondes, ce qui bloque mon programme (je ne veux pas lui donner son propre thread)

la prochaine chose que ce que j'ai essayé est "ps" qui est instantané, mais donne toujours de très haut nombre total (+20) et quand j'ai eu mon cpu à faire quelque chose, il est resté à environ 20...

Est-il un autre moyen que je puisse obtenir un total d'utilisation de l'uc? Il n'importe pas si c'est plus d'une seconde ou plus longues périodes de temps... de Plus longues périodes serait plus utile, bien que.

105voto

Hitobat Points 554

cat /proc/stat

http://www.linuxhowtos.org/System/procstat.htm

Je suis d'accord avec cette réponse ci-dessus. Le cpu ligne dans ce fichier donne le nombre total de "jiffies" votre système a passé à faire différents types de traitement.

Ce que vous devez faire est de prendre 2 lectures de ce fichier, séparés par l'intervalle de temps dont vous avez besoin. Les nombres sont des valeurs croissantes (sous réserve entier de roulement) de sorte à obtenir le %de cpu, vous devez calculer le nombre de jiffies ont écoulé plus de votre intervalle, comparativement au nombre de jiffies ont été passé à travailler.

par exemple Supposons à 14:00:00 vous avez

cpu 4698 591 262 8953 449 916 531

total_jiffies_1 = (somme de toutes les valeurs) = 16400

work_jiffies_1 = (somme de l'utilisateur,de nice,de système = les 3 premières valeurs) = 5551

et à 14:00:05 vous avez

cpu 4739 591 289 9961 936 449 541

total_jiffies_2 = 17506

work_jiffies_2 = 5619

Donc le %d'utilisation du processeur au cours de cette période est la suivante:

work_over_period = work_jiffies_2 - work_jiffies_1 = 68

total_over_period = total_jiffies_2 - total_jiffies_1 = 1106

%de cpu = work_over_period / total_over_period * 100 = 6.1%

Espère que ça aide un peu.

6voto

wdebeaum Points 2116

Essayez de lire /proc/loadavg. Les trois premiers nombres sont le nombre de processus fonctionne réellement (c'est à dire, à l'aide d'un PROCESSEUR), en moyenne, au cours de la dernière 1, 5 et 15 minutes, respectivement.

http://www.linuxinsight.com/proc_loadavg.html

6voto

Dummy00001 Points 6088

Lire /proc/cpuinfo pour trouver le nombre de processeurs/cœurs disponibles pour les systèmes. Appel de l' getloadavg() (ou, alternativement, lire l' /proc/loadavg), prendre la première valeur, de le multiplier par 100 pour convertir de pourcentage), et diviser par le nombre de processeurs/cœurs. Si la valeur est supérieure à 100, tronquer à 100. Fait.

Documentation: man getloadavg et man 5 proc

N. B. Charge moyenne, d'habitude pour les systèmes *NIX, peut être supérieur à 100% (par CPU/core), car il mesure en réalité le nombre de processus prêts à être exécuté par le planificateur. Avec Windows-comme le CPU métrique, lorsque la charge est à 100% vous ne savez pas vraiment si c'est une utilisation optimale des ressources de l'UC ou le système est surchargé. Sous *NIX, l'optimisation de l'utilisation de la CPU loadavg serait vous donner la valeur de ~1.0 (ou 2.0 pour le système dual). Si la valeur est beaucoup plus grande que le nombre de CPU/cœurs, alors vous voudrez peut brancher extra Cpu dans la boîte.

Sinon, creuser l' /proc système de fichiers.

1voto

Anycorn Points 20521

0voto

olarva Points 716

Je suggère deux fichiers à partir...

/proc/stat et /proc/cpuinfo.

http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X