We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.
Difference between revisions of "OLA Thread Scheduling"
From wiki.openlighting.org
(Created page with "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 sup...") |
(→Results) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Since 0.9.4, OLA provides options to control the thread scheduling algorithms, when supported by the host kernel. | 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 [http://www.linuxjournal.com/article/3910 | + | Besides the default scheduling policy (SCHED_OTHER), OLA supports SCHED_RR and SCHED_FIFO. You can read about the differences on [http://www.linuxjournal.com/article/3910 The Linux Journal]. |
== Configuration == | == Configuration == | ||
Line 25: | Line 25: | ||
== Results == | == 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: | ||
+ | |||
+ | <pre> | ||
+ | $ 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 | ||
+ | </pre> | ||
+ | |||
+ | And the packets captured with: | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | On the Pi, the control was with no scheduling options. Then the fifo scheduler was enabled with | ||
+ | |||
+ | <pre> | ||
+ | $ olad --scheduler-policy fifo --scheduler-priority 10 | ||
+ | </pre> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! 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 | ||
+ | |} | ||
+ | |||
+ | [[File:Thread-scheduling-control.png]] | ||
+ | |||
+ | [[File:Thread-scheduling-fifo.png]] |
Latest revision as of 20:43, 28 December 2014
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 |