So I’ve merged in the new high-accuracy performance code into the mainline trunk. Depending on your operating system you may or may not notice any improvement, but here’s the rundown of the changes:
- Add support for OS X’s AbsoluteTime() functions which are *really* accurate!
- Add support for the Intel RDTSC which is pretty good
- Add support for IO Port 80, another method which is decent, but not great
- Add support for select() which is pretty much worthless so far
- Internally track packet timing with nanosecond accuracy (necessary for sub 1usec accuracy)
- Add support for rounding sleep times for non-absolute timing methods (Mbps, etc)
- Track time since last packet was sent rather then just calculating intervals
- Give users the ability to accelerate time by using a sleep modifier
Note: Linux users wanting the most accurate timing should use a recent 2.6 kernel with the HPET timer code enabled for gettimeofday() and specify –timer=gtod. OS X users should definitely use –timer=abstime for the AbsoluteTime() methods. Other operating systems should try different settings and let me know what works!