TSC(Time Stamp Counter)の取得と設定 - 備忘録
TSC(Time Stamp Counter)の取得と設定 - 備忘録
仕事でちょっと調べることになったのでメモしておく。
モデル固有レジスタ(MSR)
IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・ マニュアル 下巻:システム・プログラミング・ガイドには以下のように記載されています。(P.832)
レジスタアドレス (10進) |
レジスタ名 (フィールド) |
モデル利用 | 共有 | ビット説明 |
---|---|---|---|---|
0x10H (16) | IA32_TIME_STAMP_ COUNTER (63:0) | 0, 1, 2, 3 | 独自 | タイムスタンプ・カウンタ。15.7. 節「タイムスタンプ・カウンタ」を参照のこと。タイムスタンプ・カウント値。(R/W) 現在のタイムスタンプ・カウント値を返す。 全64ビットが読み取り可能だが、書き込みできるのは下位32ビットだけである。下位32ビットに書き込みを行なうときは、上位32ビットがクリアされる。 |
msr-toolsを取得してコンパイルする
- kernel.orgからmsr-toolsを取得する。
- コンパイルする
# tar zxf msr-tools-1.1.2.tar.gz && cd msr-tools-1.1.2 # make gcc -Wall -g -O2 -fomit-frame-pointer -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -o wrmsr wrmsr.c gcc -Wall -g -O2 -fomit-frame-pointer -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -o rdmsr rdmsr.c
- rdmsr,wrmsrコマンドのできあがり
# ls -lart total 68 -rwxrwxr-x. 1 1026 1026 231 Oct 10 2001 MAKEDEV-cpuid-msr -rw-rw-r--. 1 1026 1026 2719 Jul 21 2004 wrmsr.c -rw-rw-r--. 1 1026 1026 104 Jul 21 2004 version.h -rw-rw-r--. 1 1026 1026 7105 Jul 21 2004 rdmsr.c -rw-rw-r--. 1 1026 1026 1030 Jul 21 2004 Makefile dr-xr-x---. 4 root root 4096 Jan 5 03:23 .. -rwxr-xr-x. 1 root root 14013 Jan 5 03:24 wrmsr <--コレと... drwxrwxr-x. 2 1026 1026 4096 Jan 5 03:24 . -rwxr-xr-x. 1 root root 19370 Jan 5 03:24 rdmsr <--コレね
MSRからTSCの値を取得する
rdmsrコマンドでMSRからTSCの値を取得する
- この例ではCPU0(-p0)からTSC(0x10h)の値を取得する
# ./rdmsr -u -p0 0x10h 10781437437367
MSRにTSCの値を設定する
wrmsコマンドでMSRにTSCの値をセットする
- この例ではTSCを0に設定する
# ./wrmsr -p0 0x10h 0
じゃ、休み明けから再現テストしようかな。