>>>> jif * smp_num_cpus - (user + nice + system)
>>> Changing the line to this:
>>> jif * smp_num_cpus - user - nice - system
>>> should avoid the overflow.
>> True. It still might be a good idea to make them longs, though,
>> because they are really totals of all the CPUs, as in:
>> user += kstat.per_cpu_user[cpu];
>> Now ultimately, kstat.per_cpu_user[cpu] will overflow, and I don't
>> know what to do about that, but making user, nice, and system unsigned
>> long will at least allow SMP systems to last a little while longer.
>> (Actually I don't know why Procps needs these values at all -- the
>> claim in the code is that all of this is just to compute the HZ value,
>> which is presumably needed to be able to interpret jiffies. It'd be a
>> lot simpler just to have /proc/stat export the HZ value directly.)
Yeah, it would be a lot simpler. Try telling that to Linus. :-(
> I'd still prefer to export only 32 bit of user, nice, and system. This
> way they overflow in a clearly defined way - the 32 bits we export are
> exact, only the higher bits are missing.
The higher bits are absolutely required.
There are ways to push the work of doing a 64-bit counter out into the
proc filesystem and a timer that goes off every 31 bits worth of time.
I've posted an explanation before; you may search for it if you like.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to firstname.lastname@example.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/