Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

odczytanie danych z /proc/stat

Ostatnio zmodyfikowano 2014-01-23 15:15
Autor Wiadomość
tookie009
Temat założony przez niniejszego użytkownika
» 2014-01-22 14:22:06
niestety nie dziala tak jak powinno, potem wkleje kod, ale poki co robie to w nastepujacy sposob:

-biore 1 linijke z pliku /proc/stat
-rozdzielam to na spacje
-sumuje wszystkie wartosci (liczby, napisu "cpu" nie uwzgledniam)
-dziele wartosc idle przez sume
 
potem powinienm jeszcze odjac ta wartosc od 1, ale poki co tego nie robie, bo juz teraz mi sie nie podoba... Mianowicie dostaje zawsze wartosc 0,592..., przy pokazuje sobie  to z 20 miejscami po przecinku, takze na koncu moge widziec, ze ta wartosc ciagle rosnie. Nie jest mozliwe zeby ciagle bylo wykorzystanie prozesorra na poziomie 41%
P-102821
alixir
» 2014-01-22 14:32:04
Aż z ciekawości klepnełem w konsoli krótki programik. Możesz sobie sprawdzić i przeanalizować. Program działa 10s i co sekundę wyświetla wynik.

C/C++
#include <fstream>
#include <iostream>
#include <string>

int main() {
   
    std::ifstream plik;
    std::string temp;
    unsigned long int tab[ 4 ];
    unsigned long int total, idle, diff_idle, diff_total, diff_usage;
    unsigned long int prev_idle = 0;
    unsigned long int prev_total = 0;
   
    for( int t = 0; t < 10; t++ ) {
        plik.open( "/proc/stat" );
        if( !plik.good() ) {
            std::cout << "Nie udalo sie otworzyc pliku" << std::endl;
            return 1;
        }
       
        plik >> temp >> tab[ 0 ] >> tab[ 1 ] >> tab[ 2 ] >> tab[ 3 ];
        idle = tab[ 3 ];
        total = tab[ 0 ] + tab[ 1 ] + tab[ 2 ] + tab[ 3 ];
       
        diff_idle = idle - prev_idle;
        diff_total = total - prev_total;
        diff_usage =( 1000 *( diff_total - diff_idle ) / diff_total + 5 ) / 10;
       
        std::cout << "CPU: " << diff_usage << std::endl;
       
        prev_idle = idle;
        prev_total = total;
        plik.close();
        sleep( 1 );
    }
   
    return 0;
}
P-102824
tookie009
Temat założony przez niniejszego użytkownika
» 2014-01-22 17:13:01
Wielkie dzieki, jestes niesamowity, takiego czegos sie nawete nie spodziewalem (ze ktos da mi praktycznie rozwiazanie do tego problemu).

poki co nie mam juz dzis gdzie sprawdzic, jutro sie znowu bede bawil, musze to skorelowac z innymi danymi, ktore zapisuje do csv.  ale 1. co mi sie rzuca w oko:

jest mnozone x1000 i dzielone /10, czyli mozna zastapic x100. a ta 5 wydaje sie, ze nie ma znaczenia wlasciwie.


P-102843
alixir
» 2014-01-22 20:59:38
Twoje wnioski wydają się być właściwe, lecz jak napisałem wcześniej nie zastanawiałem się nad poprawnością tego wzoru, gdyż znalazłem go w jednym ze skryptów powłoki. Program który napisałem jest tylko przykładem, który miał za cel naprowadzenie na właściwy tor.
P-102882
tookie009
Temat założony przez niniejszego użytkownika
» 2014-01-23 08:02:25
moze ta 5 ma jakies znaczenie, ale ja tego nie umiem wytlumaczyc. aczkolwiek gdy to z top porownuje, bez tej 5 tez idzie ladnie i realnie. Sumuje wszystkie wartosci (wszystkie 10). Wielkie dzieki, teraz zabieram sie do sprawdzania, ile pamieci zuzywa sie.
P-102912
Monika90
» 2014-01-23 15:15:44
Celem dodawania 5 jest zaokrąglanie wyniku
P-102958
1 « 2 »
Poprzednia strona Strona 2 z 2