Presentation is loading. Please wait.

Presentation is loading. Please wait.

Time Sources and Timing

Similar presentations


Presentation on theme: "Time Sources and Timing"— Presentation transcript:

1 Time Sources and Timing
David Ferry, Chris Gill CSE 422S - Operating Systems Organization Washington University in St. Louis St. Louis, MO 63143

2 CSE 422S – Operating Systems Organization
What is meant by Time? Absolute time since some fixed past event, e.g.: Seconds since start of the Unix Epoch (00:00:00 UTC on 1 January 1970) Seconds since system boot Relative time, E.g.: Seconds between two events Ten seconds into the future (from now) Execution time of a program segment World time, E.g.: February 4th, 10:37 AM An OS must approximate time to provide time-based functions for users. CSE 422S – Operating Systems Organization

3 CSE 422S – Operating Systems Organization
Time Sources RTC (Real-Time Clock) Available on most computers (not on RPi 2 or 3 unless you add it) Low precision (as low as 0.5 seconds) Hardware Timers Might be used to generate interrupts, might be queryable Run at a variety of frequencies Programmable Interval Timer (PIT) High-Performance Event Timer (HPET) Programmable Interrupt Controller (PIC) Advanced Programmable Interrupt Controller (APIC) Processor Cycles Timestamp Counter (TSC) on x86, 64-bit Cycle Counter (CCNT) on ARM, 32-bit, 64-cycle divider, not accessible in user mode Potentially very high accuracy Can generate interrupts on x86 with TSC-deadline CSE 422S – Operating Systems Organization

4 How does the kernel schedule services?
Three approaches: Timer interrupts to regularly provide service e.g.: task scheduling, current time update Kernel timers (hrtimers, legacy timers) Kernel threads (not time dependent) A portable OS must use whatever timer hardware is available to support actions #1 and #2. CSE 422S –Operating Systems Organization

5 Basic Timer Interrupt in Linux
Historically the OS would run periodically: Fundamental timestep is variable HZ found in /include/asm-generic/param.h OS function tick_periodic() runs each 1/HZ seconds jiffies variable tracks number of ticks since boot xtime variable tracks wall-clock time Current time since boot: jiffies * 1/HZ Current wall time: boot_time + jiffies * 1/HZ Timers are checked for expiry each tick Concerns with this approach: Excessive power consumption (can’t really idle processors) Inappropriate for highly virtualized systems Might be appropriate for real-time systems CSE 422S –Operating Systems Organization

6 Problems with legacy time system
Legacy timers could only expire each tick Latency problems: with 10ms tick a timeout might be delivered 9.9ms late Resolution problems: with a 10ms tick all we know was that timeout was 0-9.9ms ago Legacy timer wheel implementation problems: Bad worst case expiration running time (O(N)) 95-99% of timers never actually expire (e.g. http timeouts, error checking) but still incur overhead Thus, not optimized for “millions of network timers” case CSE 422S –Operating Systems Organization

7 Modern Timer Interrupt in Linux
Two fundamental operating modes: Periodic (CLOCK_EVT_MODE_PERIODIC) One-shot (CLOCK_EVT_MODE_ONESHOT) One-shot mode (CONFIG_NO_HZ): All timer events are independent (not periodic) Next timer event is scheduled for: Next hrtimer expiration (or jiffie, whichever is sooner) Not rescheduled if no runnable tasks jiffies is maintained as though periodic Big power savings in idle CSE 422S –Operating Systems Organization

8 CSE 422S –Operating Systems Organization
hrtimers subsystem The kernel now provides a high resolution timing subsystem: hrtimers Not bound to jiffies Can use multiple time sources High resolution (nanosecond representation) Implementation: Per-CPU timer list stored as a sorted red-black tree for fast expiration Separate list for fast removal (no tree walking) Expiration handled by dedicated interrupts CSE 422S –Operating Systems Organization

9 Time Measurement Nuances
The timespec struct is declared in <time.h> Stores time info (in seconds and nanoseconds) struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; May need to normalize when adding, subtracting, etc. temp.tv_sec = t2.tv_sec - t1.tv_sec; // ok: monotonically non-decreasing temp.tv_nsec = t2.tv_nsec - t1.tv_nsec; // could give negative value Watch out for overflow (use unsigned long long etc.) Today’s studio will give you experience measuring time (and timer resolution) in user space programs CSE 422S –Operating Systems Organization


Download ppt "Time Sources and Timing"

Similar presentations


Ads by Google