2017-05-19

Real-Time Linux

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