Re: How to measure time accurately.

2005-03-30 Thread Jan Engelhardt

> For ppc this only gives 32-bit values, which overflow every 129 seconds on my
> G5.  Depending on how long you're trying to time, this could be a problem.

Just take an extra measure to "record" overflows (2^32-1 => 0) and you're set.



Jan Engelhardt
-- 
No TOFU for me, please.
-
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: How to measure time accurately.

2005-03-30 Thread Jan Engelhardt

 For ppc this only gives 32-bit values, which overflow every 129 seconds on my
 G5.  Depending on how long you're trying to time, this could be a problem.

Just take an extra measure to record overflows (2^32-1 = 0) and you're set.



Jan Engelhardt
-- 
No TOFU for me, please.
-
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: How to measure time accurately.

2005-03-29 Thread Chris Friesen
Peter Chubb wrote:
"Chris" == Chris Friesen <[EMAIL PROTECTED]> writes:

Chris> Most cpus have some way of getting at a counter or decrementer
Chris> of various frequencies.  Usually it requires low-level hardware
Chris> knowledge and often it needs assembly code.
As a device driver is inside the linux kernel (unless you're writein a
user-mode device driver :-)) you can use the getcycles() macro that's
defined for most architectures.  It provides a snapshot of the
cycle-counter.
For ppc this only gives 32-bit values, which overflow every 129 seconds 
on my G5.  Depending on how long you're trying to time, this could be a 
problem.

Chris
-
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: How to measure time accurately.

2005-03-29 Thread Peter Chubb
>>>>> "Chris" == Chris Friesen <[EMAIL PROTECTED]> writes:

Chris> krishna wrote:
>> Hi All,
>> 
>> Can any one tell me how to measure time accurately for a block of C
>> code in device drivers.  For example, If I want to measure the time
>> duration of firmware download.

Chris> Most cpus have some way of getting at a counter or decrementer
Chris> of various frequencies.  Usually it requires low-level hardware
Chris> knowledge and often it needs assembly code.

As a device driver is inside the linux kernel (unless you're writein a
user-mode device driver :-)) you can use the getcycles() macro that's
defined for most architectures.  It provides a snapshot of the
cycle-counter.

Caveats:
1.  If you're running with power management, the  cycle
counter ticks at a  variable rate.
2.  If you're on a multiprocessor, the cycle counters of
different processors need not be synchronised.
-- 
Dr Peter Chubb  http://www.gelato.unsw.edu.au  peterc AT gelato.unsw.edu.au
The technical we do immediately,  the political takes *forever*
-
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: How to measure time accurately.

2005-03-29 Thread Jan Engelhardt

>In some cases you can simply count jiffies - depending on how accurate you 
>need to time things I'd say that often something like this is adequate :

These "some cases" exclude this one:
If interrupts are disabled, a jiffy might be missed. Take care.

If you are on UP and want to measure within
- a tick [when using preempt]
- kernel space [no preempt]
disabled interrupts should usually not be the case.


Jan Engelhardt
-- 
No TOFU for me, please.
-
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: How to measure time accurately.

2005-03-29 Thread Jesper Juhl
On Mon, 28 Mar 2005, Chris Friesen wrote:

> Date: Mon, 28 Mar 2005 23:07:14 -0600
> From: Chris Friesen <[EMAIL PROTECTED]>
> To: krishna <[EMAIL PROTECTED]>
> Cc: Linux Kernel 
> Subject: Re: How to measure time accurately.
> 
> krishna wrote:
> > Hi All,
> > 
> > Can any one tell me how to measure time accurately for a block of C code in
> > device drivers.
> > For example, If I want to measure the time duration of firmware download.
> 
> Most cpus have some way of getting at a counter or decrementer of various
> frequencies.  Usually it requires low-level hardware knowledge and often it
> needs assembly code.
> 
> 
> On ppc you'd use the mftbu/mftbl instructions, as suggested by Lee on x86
> you'd use the rdtsc instruction.
> 

In some cases you can simply count jiffies - depending on how accurate you 
need to time things I'd say that often something like this is adequate :


unsigned long start, time_spent;

start = jiffies;
/* do stuff */
time_spent = jiffies - start;
printk("stuff took %d jiffies (%d seconds)\n", time_spent, time_spent/HZ);


-- 
Jesper Juhl

-
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: How to measure time accurately.

2005-03-29 Thread Jesper Juhl
On Mon, 28 Mar 2005, Chris Friesen wrote:

 Date: Mon, 28 Mar 2005 23:07:14 -0600
 From: Chris Friesen [EMAIL PROTECTED]
 To: krishna [EMAIL PROTECTED]
 Cc: Linux Kernel linux-kernel@vger.kernel.org
 Subject: Re: How to measure time accurately.
 
 krishna wrote:
  Hi All,
  
  Can any one tell me how to measure time accurately for a block of C code in
  device drivers.
  For example, If I want to measure the time duration of firmware download.
 
 Most cpus have some way of getting at a counter or decrementer of various
 frequencies.  Usually it requires low-level hardware knowledge and often it
 needs assembly code.
 
 
 On ppc you'd use the mftbu/mftbl instructions, as suggested by Lee on x86
 you'd use the rdtsc instruction.
 

In some cases you can simply count jiffies - depending on how accurate you 
need to time things I'd say that often something like this is adequate :


unsigned long start, time_spent;

start = jiffies;
/* do stuff */
time_spent = jiffies - start;
printk(stuff took %d jiffies (%d seconds)\n, time_spent, time_spent/HZ);


-- 
Jesper Juhl

-
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: How to measure time accurately.

2005-03-29 Thread Jan Engelhardt

In some cases you can simply count jiffies - depending on how accurate you 
need to time things I'd say that often something like this is adequate :

These some cases exclude this one:
If interrupts are disabled, a jiffy might be missed. Take care.

If you are on UP and want to measure within
- a tick [when using preempt]
- kernel space [no preempt]
disabled interrupts should usually not be the case.


Jan Engelhardt
-- 
No TOFU for me, please.
-
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: How to measure time accurately.

2005-03-29 Thread Peter Chubb
 Chris == Chris Friesen [EMAIL PROTECTED] writes:

Chris krishna wrote:
 Hi All,
 
 Can any one tell me how to measure time accurately for a block of C
 code in device drivers.  For example, If I want to measure the time
 duration of firmware download.

Chris Most cpus have some way of getting at a counter or decrementer
Chris of various frequencies.  Usually it requires low-level hardware
Chris knowledge and often it needs assembly code.

As a device driver is inside the linux kernel (unless you're writein a
user-mode device driver :-)) you can use the getcycles() macro that's
defined for most architectures.  It provides a snapshot of the
cycle-counter.

Caveats:
1.  If you're running with power management, the  cycle
counter ticks at a  variable rate.
2.  If you're on a multiprocessor, the cycle counters of
different processors need not be synchronised.
-- 
Dr Peter Chubb  http://www.gelato.unsw.edu.au  peterc AT gelato.unsw.edu.au
The technical we do immediately,  the political takes *forever*
-
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: How to measure time accurately.

2005-03-29 Thread Chris Friesen
Peter Chubb wrote:
Chris == Chris Friesen [EMAIL PROTECTED] writes:

Chris Most cpus have some way of getting at a counter or decrementer
Chris of various frequencies.  Usually it requires low-level hardware
Chris knowledge and often it needs assembly code.
As a device driver is inside the linux kernel (unless you're writein a
user-mode device driver :-)) you can use the getcycles() macro that's
defined for most architectures.  It provides a snapshot of the
cycle-counter.
For ppc this only gives 32-bit values, which overflow every 129 seconds 
on my G5.  Depending on how long you're trying to time, this could be a 
problem.

Chris
-
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: How to measure time accurately.

2005-03-28 Thread Chris Friesen
krishna wrote:
Hi All,
Can any one tell me how to measure time accurately for a block of C code 
in device drivers.
For example, If I want to measure the time duration of firmware download.
Most cpus have some way of getting at a counter or decrementer of 
various frequencies.  Usually it requires low-level hardware knowledge 
and often it needs assembly code.

On ppc you'd use the mftbu/mftbl instructions, as suggested by Lee on 
x86 you'd use the rdtsc instruction.

Chris
-
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: How to measure time accurately.

2005-03-28 Thread Lee Revell
On Mon, 2005-03-28 at 08:58 +0530, krishna wrote:
> Hi All,
> 
> Can any one tell me how to measure time accurately for a block of C code 
> in device drivers.
> For example, If I want to measure the time duration of firmware download.

rdtsc()



-
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: How to measure time accurately.

2005-03-28 Thread Lee Revell
On Mon, 2005-03-28 at 08:58 +0530, krishna wrote:
 Hi All,
 
 Can any one tell me how to measure time accurately for a block of C code 
 in device drivers.
 For example, If I want to measure the time duration of firmware download.

rdtsc()



-
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: How to measure time accurately.

2005-03-28 Thread Chris Friesen
krishna wrote:
Hi All,
Can any one tell me how to measure time accurately for a block of C code 
in device drivers.
For example, If I want to measure the time duration of firmware download.
Most cpus have some way of getting at a counter or decrementer of 
various frequencies.  Usually it requires low-level hardware knowledge 
and often it needs assembly code.

On ppc you'd use the mftbu/mftbl instructions, as suggested by Lee on 
x86 you'd use the rdtsc instruction.

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


How to measure time accurately.

2005-03-27 Thread krishna
Hi All,
Can any one tell me how to measure time accurately for a block of C code 
in device drivers.
For example, If I want to measure the time duration of firmware download.

Regards,
Krishna Chaitanya
-
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/


How to measure time accurately.

2005-03-27 Thread krishna
Hi All,
Can any one tell me how to measure time accurately for a block of C code 
in device drivers.
For example, If I want to measure the time duration of firmware download.

Regards,
Krishna Chaitanya
-
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/