Linux で clocksource が xen と tsc で gettimeofday(2) の性能を比較したメモ。
テストプログラムをコンパイルする
- 1億回 gettimeofday(2) を実行するテストプログラム(gettimeofday.c)
#include <stdio.h> #include <sys/time.h> int main(void) { struct timeval tv; int count; for (count = 1; count <= 10000000; count++) { gettimeofday(&tv, NULL); } return 1; }
- コンパイルする
$ gcc -o gettimeofday gettimeofday.c
性能比較する
xen の場合
- clocksource を確認する。
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen ★
- テストプログラムを実行する。
$ time ./gettimeofday real 0m8.815s user 0m2.196s sys 0m6.616s ★カーネルモードにコンテキストスイッチするため sys が高い
TSC の場合
- clocksource を TSC に変更する。
$ sudo su - Last login: Sun Jan 7 23:49:22 UTC 2018 on pts/0 # echo "tsc" > /sys/devices/system/clocksource/clocksource0/current_clocksource # exit logout $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc ★クロックソースが tsc の場合
- テストプログラムを実行する。
$ time ./gettimeofday
real 0m0.180s ★ 約50倍速い
user 0m0.176s
sys 0m0.000s ★ vDSO でユーザーモードで実行されるため