Hello again. I have the following code: ======================================== clock_t c_sum, j, p; cputime_t j_tmp; ... c_sum = cputime64_to_clock_t(task->utime) + cputime64_to_clock_t(task->stime); cur_j = jiffies; j_tmp = jiffies64_to_cputime64(cur_j); j = cputime64_to_clock_t(j_tmp); p = (c_sum * 100) / j; ========================================
And if I check the p value of a certain process it gives wrong results. For example for a process using 99% of the CPU it shows 20. What am I doing wrong? Greets, Luka Jan Engelhardt pravi: > On Aug 24 2007 07:34, linux-os (Dick Johnson) wrote: >>> I'm new to kernel development and have some questions. >>> >>> 1. Why can't I divide with regular casting to double ((double)a / >>> (double)b)? It gives me strange errors when compiling: >>> >>> WARNING: "__divdf3" [/root....] undefined! >>> WARNING: "__addf3" [/root/...] undefined! >>> WARNING: "__floatsidf" [/root/...] undefined! >>> >>> And if I compile with normal integers, I get zero as the result. >>> >>> 2. I'm trying to get the percentage of CPU used for a certain >>> task_struct and figured the following formula: >>> >>> (task->utime + task->stime) / jiffies >>> >>> Before calculating I convert all the variables to jiffies. Is this correct? > > * So use integer math: (task->utime + task->stime) * 100 / jiffies > and you get the 'common' percentage. In integer, that is. > > * I am not sure about the use of jiffies when it comes to CONFIG_NO_HZ=y. > >> Floating point operations are not allowed in the kernel. Often, > > IIRC they are allowed since ... recently (2.6.16, .17? can't remember). When > the kernel tries to execute an FP instruction (and traps as a result), more > kernel code will enable that the FP stack gets properly switched when a > process > changes between userspace-kernelspace. > >> You can use "long long" for high precision math if necessary. > > That will give link failure for __udivdi3. Use do_div(). > > > Jan - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/