The Open Lighting Project has moved!

We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.

OLA Thread Scheduling

From wiki.openlighting.org
Jump to: navigation, search

Since 0.9.4, OLA provides options to control the thread scheduling algorithms, when supported by the host kernel.

Besides the default scheduling policy (SCHED_OTHER), OLA supports SCHED_RR and SCHED_FIFO. You can read about the differences on The Linux Journal.

Configuration

If you're on Linux you need to edit /etc/security/limits.conf and add:

<username>            hard    rtprio   99
<username>            soft    rtprio   50

Replace <username> with the user you run olad as.

Running OLA

Start olad with --scheduler-policy and --scheduler-priority. You must provide both flags.

$ olad --scheduler-policy fifo --scheduler-priority 10

The --scheduler-priority flag must be a value less than or equal to the soft rtprio limit set in /etc/security/limits.conf.

Results

The test setup was as follows:

  • Intel i5-3450, running Debian Wheezy, set to send ArtNet traffic on universe 1
  • Raspberry Pi, configured to receive ArtNet traffic and convert to sACN traffic on universe 1.
  • Both hosts connect to a netgear 5 port switch. The Pi was connected at 100Mbps, the Debian host at 1Gbps.

On the Debian host, the traffic was generated with:

$  i=0; while :; do echo "$i"; i=$((i+1)); if [ $i == 256 ] ; then i=0; fi ; sleep 0.025; done | ola_streaming_client  -u 1

And the packets captured with:

tcpdump  -n '(port 5568 or port 6454)  and (dst host 239.255.0.1 or dst host 192.168.3.115)' -c 10000 -s0 -w /tmp/savefile-fifo

On the Pi, the control was with no scheduling options. Then the fifo scheduler was enabled with

$ olad  --scheduler-policy fifo --scheduler-priority 10

From the tcpdump, we can find the time between sending the ArtNet packet and receiving the E1.31 packet, and then plot these on a histogram:

Scheduler Mean (ms) Standard Deviation 90 percentile (ms) 99 percentile (ms) 99.9 percentile (ms) Max (ms)
Control 0.880 ms 5.64791e-02 0.920 ms 1.018 ms 1.842 ms 2.252 ms
Fifo 0.868 ms 2.819106e-02 0.909 ms 0.958 ms 1.010 ms 1.132 ms

Thread-scheduling-control.png

Thread-scheduling-fifo.png