[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] How to get CPU time?



Hi!

It should be like on Linux. If not it's a bug or it's missing. The idea was to simplify porting of Linux apps that use /proc. You just need to replace /proc with /kern (as already mentioned we couldn't use /proc as this was already in use under FreeMiNT; otherwise we had for sure choosen /proc :-)).

Ok, but something is strange, maybe a MiNT's bug.. look at my code:

------------------------
int16 get_cpu_usage( void)
{
    static int32 pre_used = 0, pre_total = 0;
    int16 usage = 0, factor = 100;
    int32 cpu, nice, system, idle, used = 0, total = 0;

    FILE *fp;

    if ( !( fp = fopen("U:/kern/stat", "r")))
        return usage;

    fscanf( fp, "%*s %ld %ld %ld %ld", &cpu, &nice, &system, &idle);

    fclose(fp);

    used  = cpu + system + nice;
    total = used + idle;

    /* calc CPU usage */
    if( total - pre_total > 0)
usage = ( int16)(( factor * ( double)( used - pre_used)) / (double)( total - pre_total));

    if( usage < 0)
        usage = 0;

    pre_used = used;
    pre_total = total;

    return usage;
}
-----------------------

It works on linux ( of course with /proc/stat) but on MiNT, I must set the 'factor' variable at 20 to have the good CPU load in percent. ( ??)

It seems that the idle's value is 5 times superior that it should be.

Nevertheless, it works like a charm, thanks again for your help !



We also have some FreMiNT specific extension like the cookijar list, sysdir and such things. Ideas and improvements welcome.

Well, the real lacks aren't in MiNT itself but in the Mintlib.

I dream at a shareable mintlib because actually, deal with threads or externals libraries like SLB or LDG using libc functions is impossible :/

But that's another story...



2) This data are updated every second or faster( every 'clock tick')?

The data are updated if you read it :-)

Ask and MiNT gives :)


MiNT is really a "strange" Unix system.. some stuffs are like in Linux and others like in BSD :)

Don't know what you mean. BSD and Linux are both Unix systems.

I mean that, for example, MiNT is a monolithic kernel with external extentions like linux but it's provide a BSD socket, etc etc..

It's a "mix" of Linux and BSD.


Ciao,
Zorro