pcm-pcie 解析
简介
pcm 全称为 Performance Counter Monitor,该项目是针对 intel 平台处理器的资源利用率进行监控的工具。在现代 Intel 处理器已经提供了监视处理器内部性能事件的功能,pcm 通过读取性能监视单元(PMU),从而获得的动态数据。
pcm-pcie.x 运行
pcm-pcie.x 为 pcm 软件中监控 pcie 带宽工具。软件运行时需要 root 权限,在当前平台(Cascade Lake)可以输出包括如下指标内容。

除此之外,pcm-pcie.x 还支持使用参数 -B
输出 PCIe 总读写带宽
$ ./pcm-pcie.x -B
...
Detected Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz "Intel(r) microarchitecture codename Cascade Lake-SP" stepping 6 microcode level 0x4000017
Skt | PCIRdCur | RFO | CRd | DRd | ItoM | PRd | WiL | PCIe Rd (B) | PCIe Wr (B)
0 18 K 2478 0 0 826 2688 1092 1313 K 211 K
1 0 0 0 0 0 2282 560 0 0
--------------------------------------------------------------------------------------------------
* 18 K 2478 0 0 826 4970 1652 1313 K 211 K
pcm-pcie 代码
下面将对 Cascade Lake 平台上 pcm-pcie.x 运行过程进行介绍。
初始化
在 purley 平台,通过以下代码生成对应平台 platform 指针
unique_ptr<IPlatform> platform(IPlatform::getPlatform(
m, csv, print_bandwidth, print_additional_info,
(uint)delay)); // FIXME: do we support only integer delay?
这句话声明了一个 unique_ptr<IPlatform>
类型指针,初始化使用 IPlatform
的静态函数 IPlatform::getPlatform
执行。在 purley 平台,IPlatform::getPlatform
会返回 PurleyPlatform