Ubuntu > タイマー精度の評価

更新日 2014-12-06
広告
Linuxマシンのタイマー精度を評価する方法を紹介します。 rt-testsというツールを使います。

インストール

gitからダウンロードしてコンパイルします。
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
$ cd rt-tests/
$ make all
コンパイル時にエラーができる場合があります。
$ make all
cc -D VERSION_STRING=0.89 -c src/cyclictest/cyclictest.c -Wall -Wno-nonnull -O2 -DNUMA -D_GNU_SOURCE -Isrc/include
In file included from src/cyclictest/cyclictest.c:39:0:
src/cyclictest/rt_numa.h:29:18: fatal error: numa.h: No such file or directory
 #include <numa.h>
                  ^
compilation terminated.
make: *** [cyclictest.o] Error 1
この場合は、libnuma-devをインストールしてから再コンパイルします。
$ sudo apt-get install libnuma-dev
yumなら以下です。
$ sudo yum install numactl-devel

テスト

コンパイル完了すると、cyclictestというコマンドが生成されます。 このコマンドは、nanosleepを定期的に繰り返し、「スリープから起きる理想的な時刻」と「実際に起きた時刻」の差分(遅延時間)を計算します。 つまり、差分が小さいほど、タイマーの精度が良いことになります。

以下のようにテストします。

$ sudo cyclictest -n -p 70 -i 500 -l 3000
この場合、priority 70で、500マイクロ秒のnanosleepを3000回実施します。 しばらくすると、以下のような結果が表示されます。
T: 0 (30114) P:70 I:500 C:   3000 Min:     67 Act:   68 Avg:   68 Max:     118
Maxはが重要な値です。最大の遅延です。単位はマイクロ秒。 上記の結果だと、最大遅延が118マイクロ秒なので、1ミリ秒よりは高い精度でカーネルが動作していることがわかります。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system