#freebsd #counter #cpu #pmc #safe-abstraction #api-bindings

pmc-rs

FreeBSD上性能监控计数器的安全抽象

5个版本

0.2.2 2023年11月2日
0.2.1 2021年6月20日
0.2.0 2021年6月20日
0.1.1 2021年2月4日
0.1.0 2018年4月30日

#258 in Unix APIs

每月 39 次下载
用于 benchpmc

BSD-3-Clause

22KB
317

crates.io docs.rs

pmc-rs

pmc-rs为在FreeBSD上与libpmc/hwpmc的性能监控计数器进行交互提供了一个安全抽象。

PMCs是CPU硬件的一部分,通常用于分析特定应用程序或算法的CPU微架构事件,例如L1/L2/L3缓存命中与缺失、每CPU时钟周期的指令数、TLB查找、分支预测错误等,以优化性能。

事件由CPU制造商定义(可以在Intel 64和IA-32架构软件开发者手册:第3B卷中找到,其中事件位于第18.2.1.2节“预定义架构性能事件”和“预定义架构性能事件的掩码和事件选择编码”表中)。

pmc-rs利用libpmc用户空间接口和hwpmc内核模块在FreeBSD上。

版本兼容性

pmc-rs的最新版本通常针对最新的FreeBSD版本。由于FreeBSD版本之间libpmc的变化,与旧版FreeBSD的兼容性可能需要将pmc-rs锁定到旧版发布。

FreeBSD版本 最新pmc-rs发布
FreeBSD 11 v0.1.1
FreeBSD 12 不受支持
FreeBSD 13 v0.2.0

FreeBSD 11之前的版本未经测试,但可能可以使用。

FreeBSD 12将C++链接到libpmc堆栈中,导致与Rust不兼容(见此问题)。幸运的是,FreeBSD 13并非如此。

未来改进

  • 支持采样PMCs。
  • 使用RDPMC指令读取计数器,以避免上下文切换。

依赖项

~170KB