Files
mckernel/test/issues/1025
Ken Sato 309145587f perf_event_open: Add support for counting REF_CPU_CYCLES
Using thread's tsc count instead of performance counter

Refs: #1025
Change-Id: I1d7a18f1c52f1d52087002d31818638a6b206014
2019-09-26 07:38:04 +00:00
..

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

【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していることを確認した