IntelのハイブリッドアーキテクチャCPUでperfを使う

実験用ミニPCを第8世代から第12世代のものに買い換えたんだけれども、 perf topThe cycles:P event is not supported. というエラーを吐いて動かなくなった。 ハイブリッドアーキテクチャーになって、複数の種類のコアのPMUを同時に扱えないようだ。

対策として、e-coreを無効にした。まずe-coreがどれか調べる。

methane@skyland:~$ sudo lscpu --all --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ       MHZ
  0    0      0    0 0:0:0:0          yes 4400.0000 400.0000  919.2490
  1    0      0    0 0:0:0:0          yes 4400.0000 400.0000  400.0000
  2    0      0    1 4:4:1:0          yes 4400.0000 400.0000 1297.6600
  3    0      0    1 4:4:1:0          yes 4400.0000 400.0000  649.7930
  4    0      0    2 8:8:2:0          yes 4400.0000 400.0000  400.0000
  5    0      0    2 8:8:2:0          yes 4400.0000 400.0000 1354.7159
  6    0      0    3 12:12:3:0        yes 4400.0000 400.0000  803.8330
  7    0      0    3 12:12:3:0        yes 4400.0000 400.0000  400.0000
  8    0      0    4 20:20:5:0        yes 3300.0000 400.0000  400.0000
  9    0      0    5 21:21:5:0        yes 3300.0000 400.0000  400.0000
 10    0      0    6 22:22:5:0        yes 3300.0000 400.0000  623.8150
 11    0      0    7 23:23:5:0        yes 3300.0000 400.0000  625.3300

最大クロックが3.3GHzの8-11コアがe-coreだろう。これを無効にしてやる。

methane@skyland:~$ sudo chcpu -d 8-11
CPU 8 disabled
CPU 9 disabled
CPU 10 disabled
CPU 11 disabled

これで無事に perf top が動くようになった。さらば効率コア。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。