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:
Ken Sato
2019-09-25 21:14:35 +09:00
committed by Masamichi Takagi
parent bc06d68d84
commit 309145587f
18 changed files with 2360 additions and 22 deletions

77
test/issues/1025/README Normal file
View 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していることを確認した