Puppet has support for timing and profiling execution through the Puppet::Util::Profiler::WallClock class, used for profiling Puppet Server operations, and the Puppet::Util.thinmark method, used for measuring things like resource application. Historically these methods have measured time by calling Time.now. However, this method returns a value from the OS REALTIME clock, which can be affected by events like NTP updates. Since the puppet agent often initiates a NTP update, these jumps can create confusing profile results.
In 2.1.0, Ruby added methods to access a monotonic clock which isn't affected by things like NTP updates. We should prefer this clock for profiling timers when it is available: