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
(→Results) |
|||
(5 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 |