anchor.diff:  
   Below is a comparison of the two Linux variants.
   
  +[.text-center]
   .Linux vs. RT Linux hiccups (24h)
   image::os/ubuntu-scl_24h.png[Linux vs. RT Linux hiccups (24h), link="/images/os/ubuntu-scl_24h.png"]
   
   Looking at the 24 hour chart (above) and the 10 minute chart (below), we can see that worst case has gone down significantly. While Ubuntu 16.04 was barely visible when compared to Windows, it looks very noisy compared to the real-time variant. All measurements were within a 150us range, which is good enough for most applications.
   
  +[.text-center]
   .Linux vs. RT Linux hiccups (10 min)
   image::os/ubuntu-scl_10m.png[Linux vs. RT Linux hiccups (10 min), link="/images/os/ubuntu-scl_10m.png"]
   
   I've also added the 24 hour chart for the real-time variant by itself to provide a better scale. Note that this resolution is getting close to the resolution of what we can measure and record.
   
  +[.text-center]
   .RT Linux hiccups (24h)
   image::os/scl_24h.png[RT Linux hiccups (24h), link="/images/os/scl_24h.png"]
   
  
positive.code: 
  Now that we have an understanding of how traditional systems without tuning perform, let's take a look at the performance of Linux with a real-time kernel. The rt kernel (PREEMPT_RT patch) can preempt lower priority tasks, which results in worse overall performance, but more deterministic behavior with respect to latency.
  
  I've chosen Scientific Linux 6 because of it's support for link:https://access.redhat.com/products/red-hat-enterprise-mrg-realtime[Red Hat(R) Enterprise MRG Realtime(R)]. You can download the  link:http://ftp.scientificlinux.org/linux/scientific/[ISO] and find instructions for installing MRG Realtime link:http://linux.web.cern.ch/linux/mrg/[here]. The version I've tested was,
  
  * Scientific Linux 6.6, kernel 3.10.0-327.rt56.194.el6rt.x86_64
  
  
negative.code: 
  The figure below compares the data's actual distribution for Windows to a theoretical gaussian distribution. Rather than a classic 'bell-curve', it shows several spikes that are spread apart in regular intervals. The distance between these spikes is almost exactly one millisecond, which matches the Windows timer interrupt interval that was set while gathering the data. Interestingly, the spikes at above 2ms all seem to happen at roughly the same likelihood.
  
  [.text-center]
  .Actual Distribution compared to Gaussian-fit (Windows)
  image::os/windows-gaussian_distribution_24h.png[Actual vs Gaussian Distribution for Windows, link="/images/os/windows-gaussian_distribution_24h.png"]
  
  