Linux 5.8.18 を使用してパフォーマンス チューニングを行っていますが、混乱に陥りました。
X86 の PMU は限られたリソースであり、perf は PMU を使用してプロファイリング/サンプリングを完了するためのツールです。
IIRC の perf ドキュメントには、PMU リソースが異なるプロセスによって共有されていることが記載されているため、Linux カーネルはプロセスのスケジューリング中に PMC を保持/スナップショットします。
PMU 設定がプロセス固有であることを確認するために、次のテストを行いました。
CPU0 で X86 FIXed_Counter0 (廃止された命令) (MSR 0x309) を有効にして使用するために perf API を呼び出すためにバックグラウンドで実行されているプロセス。
次に、bash で rdmsr -p0 0x309 を実行すると、プロセスがバックグラウンドで実行されているときにカウンターが増加していることがわかりました。
各プロセス (A および Bash) には PMC (この場合は FIXed_Counter0) の独自のスナップショットが必要だと考えていましたが、テストでは PMC がグローバルに表示されることが示されています...
私は本当に混乱しました。