Re: division and cpu usage

2007-08-28 Thread Luka Napotnik
How about this:
===
old_stime = task->stime;
old_utime = task->utime
old_j = jiffies;

set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1 * HZ);

new_stime = task->stime;
new_utime = task->utime;
new_j = jiffies;
sum = ((new_stime - old_stime) + (new_utime - old_utime)) * 100 / (new_j
- old_j)
===

I get how much time the task has spent in 1 sec in the scheduler and
then get the percentage?

Greets,
Luka

Jan Engelhardt pravi:
> On Aug 28 2007 00:07, Luka Napotnik wrote:
>>>>> 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
>> This formula just doesn't work. I have a task with 99% CPU (top) but the
>> result of that formula is random (4, sometimes 8). What am I doing
>> wrong? Please help.
> 
> You are calculating the CPU time the process has used since the start.
> That is definitely not the same as the "%CPU" that top shows, more like
> the "TIME+" top shows by default.
> 
> 




signature.asc
Description: OpenPGP digital signature


Re: division and cpu usage

2007-08-28 Thread Luka Napotnik
How about this:
===
old_stime = task-stime;
old_utime = task-utime
old_j = jiffies;

set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1 * HZ);

new_stime = task-stime;
new_utime = task-utime;
new_j = jiffies;
sum = ((new_stime - old_stime) + (new_utime - old_utime)) * 100 / (new_j
- old_j)
===

I get how much time the task has spent in 1 sec in the scheduler and
then get the percentage?

Greets,
Luka

Jan Engelhardt pravi:
 On Aug 28 2007 00:07, Luka Napotnik wrote:
 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
 This formula just doesn't work. I have a task with 99% CPU (top) but the
 result of that formula is random (4, sometimes 8). What am I doing
 wrong? Please help.
 
 You are calculating the CPU time the process has used since the start.
 That is definitely not the same as the %CPU that top shows, more like
 the TIME+ top shows by default.
 
 




signature.asc
Description: OpenPGP digital signature


Re: division and cpu usage

2007-08-27 Thread Luka Napotnik
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

This formula just doesn't work. I have a task with 99% CPU (top) but the
result of that formula is random (4, sometimes 8). What am I doing
wrong? Please help.

>>>
>>> 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/


Re: division and cpu usage

2007-08-27 Thread Luka Napotnik
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

This formula just doesn't work. I have a task with 99% CPU (top) but the
result of that formula is random (4, sometimes 8). What am I doing
wrong? Please help.


 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/


Re: division and cpu usage

2007-08-25 Thread Luka Napotnik
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/


Re: division and cpu usage

2007-08-25 Thread Luka Napotnik
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/


division and cpu usage

2007-08-23 Thread Luka Napotnik
Hello.

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?

Please help.

Greets,
Lukla
-
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/


division and cpu usage

2007-08-23 Thread Luka Napotnik
Hello.

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?

Please help.

Greets,
Lukla
-
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/