xeonやi7の用にマルチコア構成になっているCPUにはコア間を制御するアンコア部がある。
アンコア部がL3キャッシュやDRAM等へのアクセス制御を行う。
DRAMへのアクセス性能を評価する場合はアンコアのイベントを取得する。
xeonのアンコア部分のパフォーマンスモニタについては以下のドキュメントに記載されていた。
xeon-e5-2600-v2-uncore-manual
メモリ帯域を評価したいので、DRAMとQPIのカウンタを使用することにした。
DRAMはCAS_COUNTのREADとWRITE
QPIはTxL_FLITS_G0のDATAとNON_DATA
測定に使用するマシンはマルチソケットのnuma構成になっているので、
ソケットごとのカウンタを取得し、各ソケットの動作状況を測定した。
コマンドは以下のようになる。
$ perf stat -a --per-socket -e
"uncore_imc_0/event=0x04,umask=0x0F,name=IMC0_ALL/","uncore_imc_1/event=0x04,umask=0x0F,name=IMC1_ALL/",
"uncore_imc_2/event=0x04,umask=0x0F,name=IMC2_ALL/","uncore_imc_3/event=0x04,umask=0x0F,name=IMC3_ALL/",
"uncore_qpi_0/event=0x00,umask=0x02,name=QPI0_DATA/","uncore_qpi_0/event=0x00,umask=0x04,name=QPI0_NONDATA/"
./test
-aを指定は必須。-aを指定するとroot権限がないと動作しない。
結果は以下。
----------------------------------------------------
S0 1 152,662,593 IMC0_ALL
S0 1 300,257,069 IMC1_ALL
S0 1 468,061,436 IMC2_ALL
S0 1 314,609,460 IMC3_ALL
S0 1 2,017,971,144 QPI0_DATA (100.00%)
S0 1 2,308,366,536 QPI0_NONDATA
S1 1 113,422,561 IMC0_ALL
S1 1 122,583,629 IMC1_ALL
S1 1 130,274,692 IMC2_ALL
S1 1 195,739,059 IMC3_ALL
S1 1 208,651,932 QPI0_DATA (100.00%)
S1 1 1,876,664,190 QPI0_NONDATA
----------------------------------------------------
これで、メモリ帯域とソケット間通信の帯域が測定できるようになりました。