CONFIG_PREEMPT_RT を試すべく,kernel をコンパイルするなどの回り道をしたのち,Ubuntu の kernel が「CONFIG_PREEMPT_RT」パッチの成果である「force threaded irq-handler」が取り込まれた
ものであることを知り,Ubuntu Desktop 16.04.2 と lowlatency kernel
(パッケージ) とを用いることにした.cyclictest (パッケージ) の結果は以下だった.
$ uname -r ; uname -v
4.4.0-77-lowlatency
#98-Ubuntu SMP PREEMPT Wed Apr 26 09:25:21 UTC 2017
$ sudo cyclictest -t 5 -i 5000 -d 5000 -c CLOCK_REALTIME -D 1m -q
# /dev/cpu_dma_latency set to 0us
T: 0 ( 1524) P: 0 I:5000 C: 12000 Min: 4 Act: 46 Avg: 5 Max: 4003
T: 1 ( 1525) P: 0 I:10000 C: 6000 Min: 4 Act: 47 Avg: 7 Max: 4008
T: 2 ( 1526) P: 0 I:15000 C: 4000 Min: 4 Act: 55 Avg: 8 Max: 4025
T: 3 ( 1527) P: 0 I:20000 C: 3000 Min: 4 Act: 53 Avg: 7 Max: 4030
T: 4 ( 1528) P: 0 I:25000 C: 2400 Min: 4 Act: 6 Avg: 6 Max: 3052
$ sudo cyclictest -t 5 -n -i 5000 -d 5000 -c CLOCK_REALTIME -D 1m -q
# /dev/cpu_dma_latency set to 0us
T: 0 ( 1588) P: 0 I:5000 C: 12000 Min: 17 Act: 117 Avg: 51 Max: 117
T: 1 ( 1589) P: 0 I:10000 C: 6000 Min: 18 Act: 110 Avg: 52 Max: 110
T: 2 ( 1590) P: 0 I:15000 C: 4000 Min: 23 Act: 103 Avg: 54 Max: 103
T: 3 ( 1591) P: 0 I:20000 C: 3000 Min: 27 Act: 91 Avg: 55 Max: 91
T: 4 ( 1592) P: 0 I:25000 C: 2400 Min: 33 Act: 58 Avg: 56 Max: 62
$ sudo cyclictest -t 5 -p 99 -i 5000 -d 5000 -c CLOCK_REALTIME -D 1m -q
# /dev/cpu_dma_latency set to 0us
T: 0 ( 1598) P:99 I:5000 C: 12000 Min: 4 Act: 4 Avg: 4 Max: 41
T: 1 ( 1599) P:99 I:10000 C: 6000 Min: 4 Act: 5 Avg: 4 Max: 8
T: 2 ( 1600) P:99 I:15000 C: 4000 Min: 4 Act: 5 Avg: 4 Max: 9
T: 3 ( 1601) P:99 I:20000 C: 3000 Min: 4 Act: 5 Avg: 4 Max: 8
T: 4 ( 1602) P:99 I:25000 C: 2400 Min: 4 Act: 4 Avg: 4 Max: 10
$ sudo cyclictest -t 5 -n -p 99 -i 5000 -d 5000 -c CLOCK_REALTIME -D 1m -q
# /dev/cpu_dma_latency set to 0us
T: 0 ( 1609) P:99 I:5000 C: 12000 Min: 2 Act: 3 Avg: 3 Max: 9
T: 1 ( 1610) P:99 I:10000 C: 6000 Min: 2 Act: 3 Avg: 3 Max: 5
T: 2 ( 1611) P:99 I:15000 C: 4000 Min: 2 Act: 3 Avg: 2 Max: 5
T: 3 ( 1612) P:99 I:20000 C: 3000 Min: 2 Act: 2 Avg: 2 Max: 4
T: 4 ( 1613) P:99 I:25000 C: 2400 Min: 2 Act: 5 Avg: 2 Max: 5
この間,以下を実行していた.CPU 数は 4.
$ for cpu in 1 2 3 4; do ( while true; do true; done; ) & done