先日作った Raspberry Pi 向け CentOS 用 Real-Time Kernel を検証してみた。
■RT Kernel のテスト
Cyclictest というもので、タイマー精度を測定できるそうだ。
https://rt.wiki.kernel.org/index.php/Cyclictest
■タイマー精度
通常の Kernel だとスループットはでるが、レイテンシーが割とぶれてるそうだ。
Real-Time Kernel (PREEMPT) になると、レイテンシーがぶれなくなるらしい。
■Real-Time Kernel は万能か?
Real-Time Kernel だからと言って、レイテンシーが最高によくなるわけではない。
大事なのは、レイテンシーが予測可能になることらしい。
ぶっちゃけスループットなら、通常 Kernel のがよい場面のが多い。
Red Hat:レイテンシを最適化するためになぜ MRG Realtime を使用するのか
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_MRG/2/html/Realtime_Installation_Guide/chap-Realtime_Installation_Guide-Why_Use_RT_to_Optimize_Latency.html
■Cyclictest を使って実際にテスト
・rt-tests をビルド
何も考えず、Cyclictest のページどおりビルド。
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git $ cd ./rt-tests/ $ make all # cp -piav ./cyclictest /usr/bin/
・Cyclictest の実行
次のように実行。
なお、出力結果をリダイレクトで残して後程集計に使った。
Priority 90
Interval 200
Loops 50000
で設定。
# cyclictest -p 90 -m -c 0 -i 200 -n -v -q -l 50000 > `uname -r`_default.log
・測定結果
通常Kernel
T: 0 ( 2054) P:90 I:200 C:50000 Min:5 Act:6 Avg:6 Max:120
通常Kernel + チューニング
T: 0 ( 3696) P:90 I:200 C:50000 Min:5 Act:5 Avg:5 Max: 63
Real-Time Kernel
T: 0 ( 2308) P:90 I:200 C:50000 Min:6 Act:7 Avg:6 Max: 24
Real-Time Kernel + チューニング
T: 0 ( 1790) P:90 I:200 C:50000 Min:6 Act:7 Avg:6 Max: 22
■実行結果を絵にしてみた
・レイテンシー分布図
想定通り、通常 Kernel に比べて、RT Kernel は確かにレイテンシーは一定のゾーンに集中している。
ただびっくりしたのは、自分がいつも入れているチューニング項目が予想以上にいい成績出していたところ。
でもやっぱり、RT Kernel のぶれなさには感動できる。
・レイテンシーサマリ
各モードごとにどのくらいのレイテンシーがカウントされたのかを集計してみた。
こうしてみると、やはり通常利用には RT Kernel は不要であるような気がしてきてる。
・レイテンシーサマリ拡大
通常 Kernel の値がつぶれてるので、拡大した図も作った。
RT Kernel の凄さと、通常 Kernel の特徴がよく見えてる気がする。
■感想
Real-Time Kernelになると、確かにレイテンシーはぶれなくなった。
ただ、私にはこれを有効利用できるシステムを作る技巧はなかった。
■おまけ:Raspberry Pi に入れているカーネルチューニング
tuned のプロファイルから、スループットのプロファイルにレイテンシーのプロファイルを被せたものを作って使っている。
/etc/sysctl.d/tune.conf
kernel.sched_min_granularity_ns=10000000 vm.dirty_ratio=10 vm.dirty_background_ratio=3 vm.swappiness=10 kernel.sched_migration_cost_ns=5000000 net.core.busy_read=50 net.core.busy_poll=50 net.ipv4.tcp_fastopen=3
ピンバック: Raspberry Pi 2 / 3 向け CentOS 7 RT Kernel の評価@Kernel 4.9.13 | まこぴかっと
ピンバック: Raspberry Pi 2 / 3 向け CentOS 7 RT Kernel の評価@Kernel 4.9.76 | まこぴかっと
ピンバック: Raspberry Pi 2 / 3 向け CentOS 7 RT Kernel の評価@Kernel 4.14.27 | まこぴかっと
ピンバック: Raspberry Pi 2 / 3 向け CentOS 7 RT Kernel の評価@Kernel 4.14.34 | まこぴかっと
ピンバック: Raspberry Pi 2 / 3 向け CentOS 7 RT Kernel の評価@Kernel 4.14.59 | まこぴかっと