Wednesday, May 25, 2011

Telemetry 1.0M released!

This is mostly a maintenance release to get some bug fixes, polish, etc. out there.

This WILL require another full rebuild! Sorry about the inconvenience (again), the APIs have been tweaked to be a little friendlier, specifically the tmEntryEx and tmTryLockEx APIs take a pointer to a matchid instead of a reference.
  • tmEnterEx and tmTryLockEx have slightly different signatures
  • TMZF_FILTER has been removed since it's no longer necessary
  • callstack propagation bug fixed when callstacks were only 1 deep
  • Visualizer crash bug fixed if a session ended unexpectedly while the Visualizer was trying to load it
  • Track minimization state is now persistent between sessions -- no more constantly minimizing unwanted tracks!
  • Currently loaded session is highlighted in the session selector
  • Some server exception handling propagation issues fixed
  • Memory utilization in the Visualizer reduced considerably for lock events
  • Very simple text-only memory reporting available by right clicking on a timeline bar or a memory event. This is just to show some of the data we're acquiring and processing as we move towards memory management feature enhancement.

Tuesday, May 17, 2011

RAD Telemetry 1.0L Released!

Lots of changes big and small. Hit us up if you want access to the update!

WARNING: You must do a full rebuild with this version since some APIs have changed!

The big changes are that you can now filter zones out on the client based on a time threshold specified in tmEnterEx or tmZoneFiltered. In addition, tmTryLockEx has a time threshold for the same reason.

Unfortunately the overhead for boosting priority in an attempt to solve some customer's priority inversion problems was too high, so we've reverted to not boosting priority by default, but you can still enable it with TMO_BOOST_PRIORITY in tmSetOption.

Linux had two significant bug fixes leading to either server crashes or corrupted plot values, those should be fixed now as well.

Other changes:

  • (Linux) renamed static lib to libtelemetry32.a so you can do "-ltelemetry32" link flags
  • tmLeaveThread and tmEnterThread have been removed -- the same functionality is available via tmEnterEx and tmLeaveEx
  • tmEnterEx and tmLeaveEx have new parameters, so if you use those there's a chance that you'll have to update your code in some places for it to compile
  • timestamps are sampled in slightly different places than before so that the overhead of Telemetry isn't misattributed to your code
  • (Windows) PDB names weren't being properly sent to the server
  • Visualizer: you can now delete sessions from within the Visualizer!
  • Visualizer: if there are no memory events then the mem event track will not appear
  • Visualizer: timeline backgrounds have significantly more contrast with the new color scheme
  • Visualizer: default generated plot window size is now 1s instead of 100ms
  • Visualizer: lock events were not always reaching the Visualizer during live captures
  • Visualizer: filename wasn't being quoted in the "%F" portion of the editor command line option
  • Visualizer: we now specify /edit by default in the editor command line
  • Examples: example_basic_threads.cpp updated to handle Linux better
  • Server: massive performance improvements while writing frames to disk
As always, your comments, questions, and bug reports are greatly appreciated!

Friday, May 6, 2011

Telemetry 1.0k released! Linux support!

The big news with 1.0k is that we now have beta support for 32-bit Linux (x86) as a run-time platform. If you've wanted to check out Telemetry but didn't because we didn't support Linux, drop us a line and we'll get you hooked up with a trial!

Another major change we did was a partial fix for priority inversion issues on platforms that don't have schedulers that can detect that. Priority inversion is a nasty deadlock that can occur because of inefficient scheduling -- a common case is where a low priority work thread grabs the Telemetry lock via an API call but is then switched away. At that point if multiple higher priority threads take over and then never relinquish control back to the lower priority thread, while also attempting to enter Telemetry, they'll hang. A worst case situation might be a time critical thread that spin waits (i.e. never yields) on others while also trying to enter Telemetry, thus never letting the kernel switch to a lower priority thread.

We have a fix for this that handles many cases, but it's still possible to deadlock on Telemetry if your threading code is misbehaved. Consider this a benefit of Telemetry -- if you're deadlocking Telemetry then that's likely showing a latent bug in your threading implementation if you share resources between different priority threads!

Note that you'll have to recompile your Telemetry enabled applications with this build since some constants have changed.

Some other changes:

  • Bugfix: tmEnterEx declaration was wrong, resulting in compile time error

  • Bugfix: context switch thread would occasionally crash when shutting down

  • Change: maximum zone depth is now 32 in the Visualizer

  • Change: changed color scheme a bit in Visualizer

  • Bugfix: by-frame % calculations were wrong in some cases in profiler view in Visualizer

  • Enhancement: highlighting a plot now highlights its label as well

  • Enhancement: you can invert sense of mousewheel vs. control-mousewheel

  • Bugfix: fixed some server crash issues

  • Enhancement: updated documentation