8
votes

Comment puis-je obtenir des statistiques Per-CPU (Système, Idle, Nice, ...) comme la commande "Top"?

sur Linux, j'aimerais savoir quelle API "C" à appeler pour obtenir les statistiques Per-CPU.

Je connais et pourrait lire / proc / loaderavg de mon APP, mais il s'agit des avarages de charge à l'échelle du système et non des informations per-CPU. Je veux dire aux cœurs individuels ou à des cœurs.

comme exemple d'une application qui le fait, quand j'exécute haut et appuyez sur "1", je peux voir le 4 ou 8 processeurs / noyaux comme celui-ci: xxx

J'ai essayé de top strace mais cela a conduit à un nid d'un rat. < / p>


3 commentaires

Cette question intéressante aurait dû être migratie vers Unix & Linux.se.


@Vorac euh, non? Il demande à propos de C API. Not Shell ou les fichiers de périphérique du noyau (bien que / proc seront probablement utilisés de toute façon).


@RUBENVB, vous avez bon point. D'autre part. La lecture d'un fichier in / proc remplit de manière égale aux utilisateurs, aux administrateurs et aux programmeurs. Et la question est spécifique à Linux. Mais alors, il y a une balise linux ici. D'autre part, ce site est assez surchargé et il serait bien de répandre certains des sujets à sa sœur SE-ES. Oh, je suis tellement mélangé.


3 Réponses :


2
votes

Ce n'est pas une vraie réponse, mais je jetterais un coup d'œil au code source de haut.


1 commentaires

Le code source pour le haut peut être trouvé ici: sourceforge.net/projects/unixtop



0
votes

Je suppose que le fichier de noyau de noyau.c peut avoir une certaine importance dans ce scénario de calculer les moyennes de charge. À partir du fichier Timer.C Fonction Calc_Load ()

unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks) 
{

    unsigned long active_tasks; /* fixed-point */
    static int count = LOAD_FREQ;

    count -= ticks;
    if (count < 0) {
        count += LOAD_FREQ;
        active_tasks = count_active_tasks();
        CALC_LOAD(avenrun[0], EXP_1, active_tasks);
        CALC_LOAD(avenrun[1], EXP_5, active_tasks);
        CALC_LOAD(avenrun[2], EXP_15, active_tasks);
    }
}


0 commentaires

6
votes

Le fichier que vous voulez est / proc / stat . (Vous voudrez peut-être vous référer à fs / proc / stat.c dans la source du noyau Linux.)


1 commentaires

Exactement ce que je cherchais! Merci.