2015年11月7日土曜日

TSC を読み出すことができるコマンド

今さら、古い話題ですが、Xeon E5 で reboot 時に TSC (Time Stamp Counter) がリセットされない(ゼロに初期化されない)という動作が影響して発生する 新208.5日問題 というのがあります。キーワード「208.5日問題」で検索すると、いろいろ情報が出てくるので、問題の詳細はそちらを参照。
TSC の値を読み出すには RDTSC 命令を使えばよいので、C言語でインラインアセンブラを使って、少々記述すれば出来そうですが、既成のコマンドがありますので、備忘録として書いておきます。
[root@hoge ~]# date
2015年 11月  7日 土曜日 16:19:50 JST
[root@hoge ~]# uptime
 16:19:53 up  6:52,  3 users,  load average: 0.06, 0.10, 0.13
[root@hoge ~]# lsmsr -r TSC
TSC = 0x00003836cd3926f0
このマシン(ThinkPad W520)の CPU は、Core i7 ですが、reboot するとリセットされる様子が読み取れます。
[root@hoge ~]# date
2015年 11月  7日 土曜日 16:22:18 JST
[root@hoge ~]# uptime
 16:22:20 up 1 min,  3 users,  load average: 0.12, 0.07, 0.03
[root@hoge ~]# lsmsr -r TSC
TSC = 0x0000003e244cb997    ※もしリセットされないなら、reboot 前より大きな値が見えるはず
このコマンドは、x86info というパッケージに収録されています。
[root@hoge ~]# which lsmsr
/usr/sbin/lsmsr
[root@hoge ~]# rpm -qf /usr/sbin/lsmsr
x86info-1.30-6.el7.x86_64
実際に Xeon E5 のマシンで、実験してみたいところですが、もちろん手元にはありませんので、以上です。

2018-04-20追記
すっかり忘れてましたが、最近 ThinkPad 25 (Core i7 7500U) を使っており、このマシンの場合はどうかなとやってみましたが、リセットされる動きでした。つまらんですが。
[root@hoge ~]# cat TSC-2018-04-20-0523 ※リブートする前に保存しておいた値
TSC = 0x000031fdec83f39e
[root@hoge ~]# date
2018年  4月 20日 金曜日 05:29:00 JST
[root@hoge ~]# lsmsr -r TSC
TSC = 0x000000d8b709a561
[root@hoge ~]# grep i7 /proc/cpuinfo 
model name : Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
...
実際にリセットされないマシンを見てみたいものですが。。。
なお、lsmsr 以外に turbostat でも TSC を出せるようです。
[root@hoge ~]# date
2018年  4月 20日 金曜日 05:37:48 JST
[root@hoge ~]# turbostat --Dump | grep TSC
TSC: 0000023D87874404
TSC: 0000023D87881627
TSC: 0000023D878A4FB2
TSC: 0000023D878AF768  ※4つの論理CPU分出力されてます。当然ですが、読み出しタイミングがちょっとずつ後ろになってます。
人気ブログランキングへ にほんブログ村 IT技術ブログへ