Fedora17でcyclictestを実行した際のメモ

Fedora17でリアルタイム性能テストプログラムcyclictestを動かしてみた。

計測対象

対象のカーネルは以下の通り。

  • デフォルト: Fedora17のデフォルトカーネル3.4.0
  • PREEMPT有効: 3.4.0でCONFIG_PREEMPT=y, CONFIG_NO_HZを無効にしてビルドしたカーネル

Fedoraでのやり方でカーネルrpmを作る方法は http://fedoraproject.org/wiki/Building_a_custom_kernel にあります。

計測環境

以下のスクリプトを実行してから計測した。

#!/bin/sh

for pid in `ps -eo pid`
do
	echo $pid
	taskset -p 0x01 $pid
done

割り込みアフィニティは変更していない。

cyclictest実行結果

以下のコマンドを実行して計測を行った。

#taskset 1 ./cyclictest -t1 -p 80 -n -i 1000 -l 1000000

計測結果は以下の通り。

カーネル 最小 平均 最大
デフォルト 2 3 781
PREEMPT有効 2 3 1387

ftraceでfunction_graphを実行中にcyclictestを実行した場合

最大遅延の発生原因を追求する場合に、ftraceとfunction_graphを使いたい。
ftraceの実行がどの程度影響するか確認するためにftrace実行時でも計測を行った。

ftraceの実行手順は以下の通り。

# echo 1000000 > /sys/kernel/debug/tracing/buffer_size_kb 
# echo function_graph > /sys/kernel/debug/tracing/current_tracer 
# echo 1 > /sys/kernel/debug/tracing/tracing_on
# echo 1 > /sys/kernel/debug/tracing/tracing_enabled

実行結果は以下の通り。

カーネル 最小 平均 最大
デフォルト 31 61 7599
PREEMPT有効 44 66 3553

結果について

PREEMPT有効にしたカーネルの方が遅延が大きく出るように見える。
計測時間が15分程度と短かったため、たまたまPREEMPT有効の方が最大遅延が大きく出てしまったものと思われる。
一晩くらい計測を実行すれば、PREEMPT有効の方が遅延の発生頻度と最大遅延が小さく出るはず。

ftraceで最大遅延が跳ね上がっているのが気になる。
追跡したい箇所がftraceのせいで埋もれてしまうかも。