Home

News

About

Download

 Current version

Documentation

 Module timers

 HOWTO: Module usage

 Performances

References

Credits

Contributing


Author's homepage

APIC timer Module for Linux


News

2001 IBM Linux Scholar Challenge Winner!

on Tuesday January 22 2002, @5:00PM

Uwe Walter wrote a paper presenting the APIC Timer module and his traffic shaper for the 2001 IBM Linux Scholar Challenge and we won!
Klasse!

Sorry, maintaining suspended.

on Tuesday October 9 2001, @5:00PM

Since I don't have a computer with Linux currently, I cannot update the module. Sorry for the inconvenience.

Release 1.0.4 of the module.

on Tuesday June 26 2001, @5:00PM

Disable interrupts whenever the timer list is modified, in order to eliminate race conditions when the APIC Timer is used by multiple thread of execution (see comments in uka_apic_timer.c).
Important change - Thanks for writing me at vincent at oberle dot org to report problems.
Get it.

Release 1.0.3 of the module.

on Tuesday Mai 8 2001, @9:00PM

Bug-fixes, some cleaning, merging of some of Ryan Barnett patchs.
Bug-fixes in start_apic_timer:
 With some expires values, the division produced 0, blocking the modul (timer loss problem).
 Use of do_div of asm/div64.h for the 64-bits division.
 start_apic_timer returns a boolean now.
Changed the way of reacting when start_apic_timer returns 0 to avoid stack overhead
Deleted optimized version run_apic_timer (and APIC_TIMER_OPTIMIZED_RUN config option). Added a lot of mess in the module, was not used anyway.
Deleted APIC_TIMER_AUTO_FREQ option (default is auto now).
Deleted APIC_TIMER_ERROR_ADJUSTMENT (always used).
Get it.

Old news


About the module

The APIC timer module is an implementation of precise timers for the Linux 2.4 kernels and further. The module provides microsecond precision timers that are programmed with a TSC value.

It is accomplished by using the timer of the local APIC, availaible on P6 processors.


Download

The current release for the 2.4 kernel branch is 1.0.4

All code is placed under the GPL.

List of releases.

  • Older releases
  • 1.0.0 Version for the 2.4.0 kernel.
  • 1.0.1 Version for 2.4.3 kernel
    Updated calibrate_apic_timer, trying to correct incorrect bus frequency
    Test code for the "loosing timers" problem.
  • 1.0.2 Important bug-fix release:
    There were problems under heavy-load (lot of timers), should be fixed now (thanks to Uwe Walter for noticing it).
  • 1.0.3 Bug-fixes in start_apic_timer:
     With some expires values, the division produced 0, blocking the modul (timer loss problem).
     Use of do_div of asm/div64.h for the 64-bits division.
     start_apic_timer returns a boolean now.
    Changed the way of reacting when start_apic_timer returns 0 to avoid stack overhead
    Deleted optimized version run_apic_timer (and APIC_TIMER_OPTIMIZED_RUN config option). Added a lot of mess in the module, was not used anyway.
    Deleted APIC_TIMER_AUTO_FREQ option (default is auto now).
    Deleted APIC_TIMER_ERROR_ADJUSTMENT (always used).
  • 1.0.4 Disable interrupts whenever the timer list is modified, in order to eliminate race conditions when the APIC Timer is used by multiple thread of execution (see comments in uka_apic_timer.c).
    Important change - Thanks for writing me at vincent at oberle dot org to report problems.


Documentation

Timers of the APIC timer module.

Purpose: This document describes how timers are managed in the APIC timer module in order to get the less latency possible.

HOWTO: Usage of the APIC timer module.

Purpose: This document shows how to use the APIC timer module. The test module from the distribution is an example.

Performances of the APIC timer module.

Purpose: This document presents some performance tests in various configurations of the APIC Timer module.


References

Karlsruhe Implementation of Differentiated Services

Kernel programming
Linux Kernel Module Programming Guide
And of course the source itself (use LXR).

Intel Pentium documentation
Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture
Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual
Intel Architecture Software Developer's Manual, Volume 3: System Programming Guide


Credits

The main author of this module is Vincent Oberle (vincent at oberle dot org)

It was developped at the University of Karlsruhe, in the Institute of Telematics.

Other credits to

Klaus Wehrle and Hartmut Ritter for the help during the project and the idea of using the APIC timer.

and to:

  • Mikael Pettersson for the APIC enabling code and his kernel APIC patch.
  • John Levon for testing the APIC enabling code and solving the problem with disabling the APIC.
  • Olaf Titz for his kernel patch that I used to make a correct Makefile.
  • Guillaume Legoupil for using the module :) and sending bug report / test program.
  • Uwe Walter for his active using and testing, and for his bug reports.
  • and all kernel developers!


Contributing

vincent at oberle dot org