ablog

不器用で落着きのない技術者のメモ

Linux で clocksource が xen と tsc で gettimeofday(2) の性能を比較する

Linux で clocksource が xentsc で 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 でユーザーモードで実行されるため