perf_event_open: Add support for counting REF_CPU_CYCLES
Using thread's tsc count instead of performance counter Refs: #1025 Change-Id: I1d7a18f1c52f1d52087002d31818638a6b206014
This commit is contained in:
committed by
Masamichi Takagi
parent
bc06d68d84
commit
309145587f
77
test/issues/1025/README
Normal file
77
test/issues/1025/README
Normal file
@@ -0,0 +1,77 @@
|
||||
【Issue#1025 動作確認】
|
||||
□ 前提
|
||||
PERF_COUNT_HW_REF_CPU_CYCLESイベントの計測は、aarch64アーキテクチャの
|
||||
Linuxではサポートされていない。
|
||||
しかし、本件の機能追加ではMcKernelのthreadが持つuser_tsc, system_tsc を
|
||||
用いて計測する方式で実装したため、アーキテクチャによらず計測が可能である。
|
||||
|
||||
□ テスト内容
|
||||
1. Issueで報告された再現プログラムでの確認
|
||||
C1025T01: PERF_COUNT_HW_REF_CPU_CYCLES 指定での計測
|
||||
除外なし、ユーザモード除外、カーネルモード除外の3パターンを用いて
|
||||
PERF_COUNT_HW_REF_CPU_CYCLES の計測を行う
|
||||
|
||||
それぞれの計測において、PERF_COUNT_HW_REF_CPU_CYCLESの計測値が
|
||||
アーキテクチャごとの以下の条件を満たした場合にPASSとする
|
||||
[x86_64]
|
||||
- ユーザ時間 :Linuxでのユーザ時間計測値の90% ~ 110%
|
||||
- カーネル時間:McKernelでのユーザ時間計測結果の1% 未満
|
||||
|
||||
[aarch64]
|
||||
LinuxでのPERF_COUNT_HW_REF_CPUの計測が行えないため、
|
||||
計測値が取得できた場合にPASSとする
|
||||
|
||||
2. 計測の基本機能の確認 (x86_64 でのみ実施)
|
||||
perf_event_openでの基本機能の確認として、計測対象の演算処理と、
|
||||
Start, Stop, Reset, Readを以下のフローで実施する
|
||||
CASE-A: 基本計測の確認
|
||||
Start -> 演算 -> Stop -> Read
|
||||
CASE-B: Stop機能の確認
|
||||
Start -> 演算 -> Stop -> 演算 -> Read
|
||||
CASE-C: Reset機能の確認
|
||||
Start -> 演算 -> Stop -> Reset -> Read
|
||||
CASE-D: Read機能の確認
|
||||
Start -> 演算 -> Read -> 演算 -> Read
|
||||
CASE-E: Stop後の再Start機能の確認
|
||||
Start -> 演算 -> Stop -> 演算 -> Start-> 演算 -> Stop -> Read
|
||||
CASE-F: Start後の再Start機能の確認
|
||||
Start -> 演算 -> Start -> 演算 -> Stop -> Read
|
||||
|
||||
また、本テストでは、perf_event_openで取得したfdをグループ化し、
|
||||
グループ内のリーダーとなるfdへの操作でグループ全体の操作が可能な
|
||||
PERF_FORMAT_GROUP の指定を用いる。
|
||||
その上で、PERF_COUNT_HW_REF_CPU_CYCLES の指定を行ったfdがリーダーの場合と
|
||||
リーダー以外の場合で検証を行う。
|
||||
本テストで実行するテストプログラム群(perf_case_X)では、1つ目の計測項目として
|
||||
指定したものがリーダーとなる。
|
||||
|
||||
C1025T02: CASE-A でPERF_FORMAT_GROUPのリーダーの場合
|
||||
C1025T03: CASE-B でPERF_FORMAT_GROUPのリーダーの場合
|
||||
C1025T04: CASE-C でPERF_FORMAT_GROUPのリーダーの場合
|
||||
C1025T05: CASE-D でPERF_FORMAT_GROUPのリーダーの場合
|
||||
C1025T06: CASE-E でPERF_FORMAT_GROUPのリーダーの場合
|
||||
C1025T07: CASE-F でPERF_FORMAT_GROUPのリーダーの場合
|
||||
|
||||
C1025T08: CASE-A でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
C1025T09: CASE-B でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
C1025T10: CASE-C でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
C1025T11: CASE-D でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
C1025T12: CASE-E でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
C1025T13: CASE-F でPERF_FORMAT_GROUPのリーダー以外の場合
|
||||
|
||||
それぞれの計測において、PERF_COUNT_HW_REF_CPU_CYCLESの計測値が
|
||||
以下の条件を満たした場合にPASSとする
|
||||
- ユーザ時間 :Linuxでのユーザ時間計測値の90% ~ 110%
|
||||
- カーネル時間:McKernelでのユーザ時間計測結果の1% 未満
|
||||
|
||||
□ 実行手順
|
||||
$ make test
|
||||
|
||||
McKernelのインストール先や、OSTEST, LTPの配置場所は、
|
||||
$HOME/.mck_test_config を参照している
|
||||
.mck_test_config は、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
|
||||
$HOMEにコピーし、適宜編集する
|
||||
|
||||
□ 実行結果
|
||||
x86_64_result.log aarch64_result.log 参照
|
||||
すべての項目で、PASSしていることを確認した
|
||||
Reference in New Issue
Block a user