<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;feed=atom&amp;action=history</id>
		<title>System Tap Timestamp Notes - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;action=history"/>
		<updated>2013-05-23T22:35:05Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.21alpha</generator>

	<entry>
		<id>http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;diff=69877&amp;oldid=prev</id>
		<title>Adushistova at 10:05, 27 October 2011</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;diff=69877&amp;oldid=prev"/>
				<updated>2011-10-27T10:05:36Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr style='vertical-align: top;'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 10:05, 27 October 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 332:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 332:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Development Tools]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key elinux:diff:version:1.11a:oldid:2098:newid:69877 --&gt;
&lt;/table&gt;</summary>
		<author><name>Adushistova</name></author>	</entry>

	<entry>
		<id>http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;diff=2098&amp;oldid=prev</id>
		<title>RBot: Bot (Edward's framework)</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/index.php?title=System_Tap_Timestamp_Notes&amp;diff=2098&amp;oldid=prev"/>
				<updated>2007-03-06T03:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bot (Edward&amp;#039;s framework)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This information was copied from the System Tap file tapsets/timestamp/timeset_tapset.txt,&lt;br /&gt;
in May, 2006.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Application name: sequence numbers and timestamps&lt;br /&gt;
&lt;br /&gt;
* Contact:&lt;br /&gt;
    Martin Hunt         hunt@redhat.com&lt;br /&gt;
    Will Cohen          wcohen@redhat.com&lt;br /&gt;
    Charles Spirakis    charles.spirakis@intel.com&lt;br /&gt;
&lt;br /&gt;
* Motivation:&lt;br /&gt;
    On multi-processor systems, it is important to have a way&lt;br /&gt;
    to correlate information gathered between cpu's. There are two&lt;br /&gt;
    forms of correlation:&lt;br /&gt;
&lt;br /&gt;
        a) putting information into the correct sequence order&lt;br /&gt;
        b) providing accurate time deltas between information&lt;br /&gt;
&lt;br /&gt;
    If the resolution of the time deltas is high enough, it can&lt;br /&gt;
    also be used to order information.&lt;br /&gt;
&lt;br /&gt;
* Background:&lt;br /&gt;
    Discussion started due to relayfs and per-cpu buffers, but this&lt;br /&gt;
    is neede by many people.&lt;br /&gt;
&lt;br /&gt;
* Target software:&lt;br /&gt;
    Any software which wants to correlate data that was gathered&lt;br /&gt;
    on a multi-processor system, but the scope will be defined&lt;br /&gt;
    specifically for systemtap's needs.&lt;br /&gt;
&lt;br /&gt;
* Type of description:&lt;br /&gt;
    General information and discussion regarding sequencing and timing.&lt;br /&gt;
&lt;br /&gt;
* Interesting probe points:&lt;br /&gt;
    Any probe points where you are trying to get the time between two&lt;br /&gt;
    probe points. For example, timing how long a function takes and&lt;br /&gt;
    putting probe points at the function entry and function exit.&lt;br /&gt;
&lt;br /&gt;
* Interesting values:&lt;br /&gt;
    Possible ways to order data from multiple sources include:&lt;br /&gt;
&lt;br /&gt;
Retrieve the sequence/time from a global area&lt;br /&gt;
&lt;br /&gt;
  High Precision Event Timer (HPET)&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    multimedia/HPET timer&lt;br /&gt;
    arch/i386/kernel/timer_hpet.c&lt;br /&gt;
    Advantages:&lt;br /&gt;
    granularity can vary (HPET spec says minimum freq of HPET timer&lt;br /&gt;
    is 10Mhz =~100ns resolution), can be treated as read-only,&lt;br /&gt;
    can bypass cache update and avoid being caced at all if desired,&lt;br /&gt;
    desigend to be used as an smp timestamp (see specification)&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    may not be available on all platforms, may not be synchronized on&lt;br /&gt;
    NUMA systems (ie counts for all processors within a numa node is&lt;br /&gt;
    comparable, but counts for processors between nodes may not be&lt;br /&gt;
    comparable), potential resource conflict if timers used by&lt;br /&gt;
    other software&lt;br /&gt;
&lt;br /&gt;
  Real Time Clock (RTC)&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    &amp;quot;external&amp;quot; chip (clock chip) which has time information, accessed via&lt;br /&gt;
    ioport or memory-mapped io&lt;br /&gt;
    Advantages:&lt;br /&gt;
    can be treated as read-only, can bypass cache update and avoid being&lt;br /&gt;
    cached at all if desired&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    may not be available on all platforms, low granularity (for rtc,&lt;br /&gt;
    ~1ms), usually slow access&lt;br /&gt;
&lt;br /&gt;
  ACPI Power Management Timer (pm timer)&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    implemented as part of the ACPI specification at 3.579545Mhz&lt;br /&gt;
    arch/i386/kernel/timers/timer_pm.c&lt;br /&gt;
    Advantages:&lt;br /&gt;
    not affected by throttling, halting or power saving states, moderate&lt;br /&gt;
    granularity (3.5Mhz ~ 300ns resolution), desigend for use by an OS&lt;br /&gt;
    to keep track of time during sleep/power states&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    may not be available on all platforms, slower access than hpet timer&lt;br /&gt;
    (but still much faster than RTC)&lt;br /&gt;
&lt;br /&gt;
  Chipset counter&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    timer on a processor chipset, ??SGI implementation??, do we know of any&lt;br /&gt;
    other implementations ?&lt;br /&gt;
    Advantages:&lt;br /&gt;
    likely to be based on pci bus clock (33Mhz = ~30ns) or front-side-bus&lt;br /&gt;
    clock (200Mhz = ~5ns)&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    may not be available on all platforms&lt;br /&gt;
&lt;br /&gt;
  Sequence Number&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    atomic_t global variable, cache aligned, placed in struct to keep&lt;br /&gt;
    variable on a cache line by itself&lt;br /&gt;
    Advantages:&lt;br /&gt;
    guaranteed correct ordering (even on NUMA systems), architecure&lt;br /&gt;
    independent, platform independent&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    potential for cache-line ping-pong, doesn't scale, no time&lt;br /&gt;
    information (ordering data only), access can be slower on NUMA systems&lt;br /&gt;
&lt;br /&gt;
  Jiffies&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    OS counts the number of &amp;quot;clock interrupts&amp;quot; since power on.&lt;br /&gt;
    Advantages:&lt;br /&gt;
    platform independent, architecture independent, one writer, many&lt;br /&gt;
    readers (less cache ping-pong)&lt;br /&gt;
    cached at all if desired&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    low resolution (usually 10ms, sometimes 1ms).&lt;br /&gt;
&lt;br /&gt;
  Do_gettimeofday&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    arch/i386/kernel/time.c&lt;br /&gt;
    Advantages:&lt;br /&gt;
    platform independent, architecture independent, 1 writer, many&lt;br /&gt;
    readers (less cache ping-pong), accuracy of micro-seconds&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    the time unit increment value used by this routine changes&lt;br /&gt;
    based on information from ntp (i.e if ntp needs to speed up / slow&lt;br /&gt;
    down the clock, then callers to this routine will be affected). This&lt;br /&gt;
    is a disadvantage for timing short intervals, but an advantage&lt;br /&gt;
    for timing long intervals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retrieve the sequence/time from a cpu-unique area&lt;br /&gt;
&lt;br /&gt;
  Timestamp counter (TSC)&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    count of the number of core cycles the processor has executed since&lt;br /&gt;
    power on, due to lack of synchronization between cpus, would also&lt;br /&gt;
    need to keep track of which cpu the tsc came from&lt;br /&gt;
    Advantages:&lt;br /&gt;
    no external bus access, high granularity (cpu core cycles),&lt;br /&gt;
    available on most (not all) architectures, platform independent&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    not synchronized between cpus, since it is a count of cpu cycles&lt;br /&gt;
    count can be affected by throttling, halting and power saving states,&lt;br /&gt;
    may not correlate to &amp;quot;actual&amp;quot; time (ie, just because a 1G processor&lt;br /&gt;
    showed a delta of 1G cycles, doesn't mean 1 second has passed)&lt;br /&gt;
&lt;br /&gt;
  APIC timer&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    timer implemented within the processor&lt;br /&gt;
    Advantages:&lt;br /&gt;
    no external bus access, moderate to high granularity (usually&lt;br /&gt;
    counting based front-side bus clock or core clock)&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    not synchronized between cpus, may be affected by throttling,&lt;br /&gt;
    halting/power saving states, may not correlate to &amp;quot;actual&amp;quot; time.&lt;br /&gt;
&lt;br /&gt;
  PMU event&lt;br /&gt;
    Possible implementation:&lt;br /&gt;
    program a perfmonance counter with a specific event related to time&lt;br /&gt;
    Advantages:&lt;br /&gt;
    no external bus access, moderate to high granularity (usually&lt;br /&gt;
    counting based front-side bus clock or core clock), can be&lt;br /&gt;
    virtualized to give moderate to high granularity for individual&lt;br /&gt;
    thread paths&lt;br /&gt;
    Disadvantages:&lt;br /&gt;
    not synchronized between cpus, may be affected by throttling,&lt;br /&gt;
    halting/power saving states, may not correlate to &amp;quot;actual&amp;quot; time,&lt;br /&gt;
    processor dependent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    For reference, as a quick baseline, on Martin's dual-processor system,&lt;br /&gt;
    he gets the following performance measurements:&lt;br /&gt;
&lt;br /&gt;
    kprobe overhead:             1200-1500ns (depending on OS and processor)&lt;br /&gt;
    atomic read plus increment:    40ns (single processor access, no conflict)&lt;br /&gt;
    monotonic_clock()             550ns&lt;br /&gt;
    do_gettimeofday()             590ns&lt;br /&gt;
&lt;br /&gt;
* Dependencies:&lt;br /&gt;
    Not Applicable&lt;br /&gt;
&lt;br /&gt;
* Restrictions:&lt;br /&gt;
    Certain timers may already be in use by other parts of the kernel&lt;br /&gt;
    depending on how it is configured (for example, RTC is used by the&lt;br /&gt;
    watchdog code). Some kernels may not compile in the necessary code&lt;br /&gt;
    (for example, if using the pm timer, need ACPI). Some platforms&lt;br /&gt;
    or architectures may not have the timer requested (for example,&lt;br /&gt;
    there is no HPET timer on older systesm).&lt;br /&gt;
&lt;br /&gt;
* Data collection:&lt;br /&gt;
   For data collection, it is probably best to keep the concept&lt;br /&gt;
   between sequence ordering and timestamp separate within&lt;br /&gt;
   systemtap (for both the user as well as the implementation).&lt;br /&gt;
&lt;br /&gt;
   For sequence ording, the initial implementation should use ?? the&lt;br /&gt;
   atomic_t form for the sequence ordering (since it is guaranteed&lt;br /&gt;
   to be platform and architecture neutral)?? and modify/change the&lt;br /&gt;
   implementation later if there is a problem.&lt;br /&gt;
&lt;br /&gt;
   For timestamp, the initial implementation should use&lt;br /&gt;
   ?? hpet timer ?? pm timer ?? do_gettimeofday ?? cpu # + tsc ??&lt;br /&gt;
   some combination (do_gettimeofday + cpu # &amp;amp; low bits of tsc)?&lt;br /&gt;
&lt;br /&gt;
   We could do something like what LTT does (see below) to&lt;br /&gt;
   generate 64-bit timestamps containing the nanoseconds&lt;br /&gt;
   since Jan 1, 1970.&lt;br /&gt;
&lt;br /&gt;
   Assuming the implementation keeps these concepts separate now&lt;br /&gt;
   (ordering data vs. timing deltas), it is always possible to&lt;br /&gt;
   merge them in the future if a high granularity, numa/smp&lt;br /&gt;
   synchronized timesource becomes available for a large number&lt;br /&gt;
   of platforms and/or processors.&lt;br /&gt;
&lt;br /&gt;
* Data presentation:&lt;br /&gt;
   In general, users prefer output which is based on &amp;quot;actual&amp;quot; time (ie,&lt;br /&gt;
   they prefer an output that says the delta is XXX nanoseconds instead&lt;br /&gt;
   of YYY cpu cycles). Most of the time users want delta's (how long did&lt;br /&gt;
   this take), but occasionally they want absolute times (when / what time&lt;br /&gt;
   was this information collected)&lt;br /&gt;
&lt;br /&gt;
* Competition:&lt;br /&gt;
    DTRACE has output in nanoseconds (and it is comparable between&lt;br /&gt;
    processors on an mp system), but it is unclear what the actual&lt;br /&gt;
    resolution is.  Even if the sparc machine does have hardware&lt;br /&gt;
    that provides nanosecond resolution, on x86-64 they are likely&lt;br /&gt;
    to have the same problems as discussed here since the solaris&lt;br /&gt;
    opteron box tends to be a pretty vanilla box.&lt;br /&gt;
&lt;br /&gt;
    From Joshua Stone (joshua.i.stone at intel.com):&lt;br /&gt;
&lt;br /&gt;
    == BEGIN ===&lt;br /&gt;
    DTrace gives you three built-in variables:&lt;br /&gt;
&lt;br /&gt;
    uint64_t timestamp: The current value of a nanosecond timestamp&lt;br /&gt;
    counter. This counter increments from an arbitrary point in the&lt;br /&gt;
    past and should only be used for relative computations.&lt;br /&gt;
&lt;br /&gt;
    uint64_t vtimestamp: The current value of a nanosecond timestamp&lt;br /&gt;
    counter that is virtualized to the amount of time that the current&lt;br /&gt;
    thread has been running on a CPU, minus the time spent in DTrace&lt;br /&gt;
    predicates and actions. This counter increments from an arbitrary&lt;br /&gt;
    point in the past and should only be used for relative time computations.&lt;br /&gt;
&lt;br /&gt;
    uint64_t walltimestamp: The current number of nanoseconds since&lt;br /&gt;
    00:00 Universal Coordinated Time, January 1, 1970. &lt;br /&gt;
&lt;br /&gt;
    As for how they are implemented, the only detail I found is that&lt;br /&gt;
    timestamp is &amp;quot;similar to the Solaris library routine gethrtime&amp;quot;.&lt;br /&gt;
    The manpage for gethrtime is here:&lt;br /&gt;
    http://docs.sun.com/app/docs/doc/816-5168/6mbb3hr8u?a=view&lt;br /&gt;
    == END ==&lt;br /&gt;
&lt;br /&gt;
    What LTT does:&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;Cycle counters are fast to read but may reflect time&lt;br /&gt;
    inaccurately.  Indeed, the exact clock frequency varies&lt;br /&gt;
    with time as the processor temperature changes, influenced&lt;br /&gt;
    by the external temperature and its workload. Moreover, in&lt;br /&gt;
    SMP systems, the clock of individual processors may vary&lt;br /&gt;
    independently.&lt;br /&gt;
&lt;br /&gt;
    LTT corrects the clock inaccuracy by reading the real time&lt;br /&gt;
    clock value and the 64 bits cycle counter periodically, at&lt;br /&gt;
    the beginning of each block, and at each 10ms. This way, it&lt;br /&gt;
    is sufficient to read only the lower 32 bits of the cycle&lt;br /&gt;
    counter at each event. The associated real time value may&lt;br /&gt;
    then be obtained by linear interpolation between the nearest&lt;br /&gt;
    full cycle counter and real time values. Therefore, for the&lt;br /&gt;
    average cost of reading and storing the lower 32 bits of the&lt;br /&gt;
    cycle counter at each event, the real time with full resolution&lt;br /&gt;
    is obtained at analysis time.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Cross-references:&lt;br /&gt;
    The profile_tapset is very dependent on sequencing and time when&lt;br /&gt;
    ordering of data (i.e. taking a trace history) as well as high&lt;br /&gt;
    granularity (when calculating time deltas).&lt;br /&gt;
&lt;br /&gt;
* Associated files:&lt;br /&gt;
&lt;br /&gt;
    Profile tapset requirements&lt;br /&gt;
    .../src/tapsets/profile/profile_tapset.txt&lt;br /&gt;
&lt;br /&gt;
    Intel high precision event timers specification:&lt;br /&gt;
    http://www.intel.com/hardwaredesign/hpetspec.htm&lt;br /&gt;
&lt;br /&gt;
    ACPI specification:&lt;br /&gt;
    http://www.acpi.info/DOWNLOADS/ACPIspec-2-0b.pdf&lt;br /&gt;
&lt;br /&gt;
    From an internal email sent by Tony Luck (tony.luck at intel.com)&lt;br /&gt;
    regarding a clustered environment. For the summary below, hpet and&lt;br /&gt;
    pm timer were not an option. For systemtap, they should be considered,&lt;br /&gt;
    especially since pm timer and hpet were designed to be a timestamp.&lt;br /&gt;
&lt;br /&gt;
    == BEGIN ===&lt;br /&gt;
    For extremely short intervals (&amp;lt;100ns) get some h/w help (oscilloscope&lt;br /&gt;
    or logic analyser).  Delays reading TSC and pipeline effects could skew&lt;br /&gt;
    your results horribly.  Having a 2GHz clock doesn't mean that you can&lt;br /&gt;
    measure 500ps intervals.&lt;br /&gt;
&lt;br /&gt;
    For short intervals (100ns to 10 ms) TSC is your best choice ... but you&lt;br /&gt;
    need to sample it on the same cpu, and converting the difference between&lt;br /&gt;
    two TSC values to real time will require some system dependent math to find&lt;br /&gt;
    the nominal frequency of the system (you may be able to ignore temperature&lt;br /&gt;
    effects, unless your system is in an extremely hostile environment).  But&lt;br /&gt;
    beware of systems that change the TSC rate when making frequency&lt;br /&gt;
    adjustments for power saving.  It shouldn't be hard to measure the&lt;br /&gt;
    system clock frequency to about five significant digits of accuracy,&lt;br /&gt;
    /proc/cpuinfo is probably good enough.&lt;br /&gt;
&lt;br /&gt;
    For medium intervals (10 ms to a minute) then &amp;quot;gettimeofday()&amp;quot; or&lt;br /&gt;
    &amp;quot;clock_gettime()&amp;quot; on a system *NOT* running NTP may be best, but you will&lt;br /&gt;
    need to adjust for systematic error to account for the system clock running&lt;br /&gt;
    fast/slow.  Many Linux systems ship with a utility named &amp;quot;clockdiff&amp;quot; that&lt;br /&gt;
    you can use to measure the system drift against a reference system&lt;br /&gt;
    (a system that is nearby on the network, running NTP, prefereably a&lt;br /&gt;
    low &amp;quot;stratum&amp;quot; one).&lt;br /&gt;
&lt;br /&gt;
    Just run clockdiff every five minutes for an hour or two, and plot the&lt;br /&gt;
    results to see what systematic drift your system has without NTP. N.B. if&lt;br /&gt;
    you find the drift is &amp;gt; 10 seconds per day, then NTP may have&lt;br /&gt;
    trouble keeping this system synced using only drift corrections,&lt;br /&gt;
    you might see &amp;quot;steps&amp;quot; when running NTP.  Check /var/log/messages for&lt;br /&gt;
    complaints from NTP.&lt;br /&gt;
&lt;br /&gt;
    For long intervals (above a minute). Then you need &amp;quot;gettimeofday()&amp;quot; on a&lt;br /&gt;
    system that uses NTP to keep it in touch with reality.  Assuming reasonable&lt;br /&gt;
    network connectivity, NTP will maintain the time within a small number of&lt;br /&gt;
    milliseconds of reality ... so your results should be good for&lt;br /&gt;
    4-5 significant figures for 1 minute intervals, and better for longer&lt;br /&gt;
    intervals.&lt;br /&gt;
    == END ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>RBot</name></author>	</entry>

	</feed>