mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-11-03 14:15:17 +08:00
feat: add native RAPL support for real-time energy measurements in energy monitor
This commit is contained in:
@@ -361,6 +361,46 @@ sudo ./compare_monitors.sh -d 10 -w "stress --cpu 2 --timeout 10"
|
||||
- 传统采样以固定间隔(100ms)
|
||||
```
|
||||
|
||||
### 硬件 RAPL 能源测量
|
||||
|
||||
能源监控器现已内置**对 Intel RAPL(运行平均功率限制)硬件计数器的原生支持**,可直接从 CPU 硬件获取实时能源测量,而无需依赖软件估算。RAPL 在 Intel Sandy Bridge(2011 年)之后的处理器和 AMD Zen+(2019 年)之后的处理器上可用。
|
||||
|
||||
当 RAPL 可用时,工具会通过 Linux `perf_event` 接口自动检测并使用硬件能源计数器。相比软件估算,这提供了几个显著优势:它能够捕获实际功耗,包括动态频率调节(DVFS)、CPU 空闲状态(C 状态)和电压变化,这些是简单的基于时间的估算无法考虑的。RAPL 可以测量多个能源域,包括整个 CPU 封装、单独的核心、集成显卡(uncore)和 DRAM,为您提供系统能源消耗的完整画面。
|
||||
|
||||
使用 RAPL 硬件测量:
|
||||
|
||||
```bash
|
||||
# 自动 RAPL 检测(默认行为)
|
||||
sudo ./energy_monitor -d 10
|
||||
|
||||
# 禁用 RAPL 并使用软件估算
|
||||
sudo ./energy_monitor -d 10 --no-rapl -p 15.0
|
||||
|
||||
# 检查系统上的 RAPL 可用性
|
||||
ls /sys/bus/event_source/devices/power/events/
|
||||
```
|
||||
|
||||
启用 RAPL 的示例输出:
|
||||
|
||||
```
|
||||
RAPL initialized with 2 domains
|
||||
Using hardware RAPL energy counters
|
||||
Energy monitor started... Hit Ctrl-C to end.
|
||||
|
||||
=== Energy Usage Summary ===
|
||||
PID COMM Runtime (ms) Energy (mJ)
|
||||
...
|
||||
|
||||
=== RAPL Hardware Energy Measurements ===
|
||||
pkg : 231.716422 J (231716.42 mJ)
|
||||
cores : 159.937200 J (159937.20 mJ)
|
||||
|
||||
Total RAPL energy: 391.653622 J (391653.62 mJ)
|
||||
Measurement method: Hardware RAPL counters
|
||||
```
|
||||
|
||||
RAPL 测量显示所有进程的总系统能源消耗,而每个进程的 CPU 时间细分有助于识别哪些应用程序消耗了最多的 CPU 周期。有关 RAPL 和功率限制的更多信息,请参阅 [Linux Powercap 框架文档](https://docs.kernel.org/power/powercap/powercap.html)。
|
||||
|
||||
## 理解能源监控权衡
|
||||
|
||||
虽然我们的能源监控器提供了有价值的见解,但了解其局限性和权衡很重要:
|
||||
@@ -421,17 +461,17 @@ eBPF 能源监控作为一种强大的研究和教育工具,弥合了理论理
|
||||
|
||||
## 扩展能源监控器
|
||||
|
||||
当前的实现为构建更复杂的能源监控功能提供了坚实的基础,有多个扩展方向值得探索。**硬件计数器集成**是最有影响力的增强方向,通过 `PERF_TYPE_POWER` 事件集成 RAPL 计数器,可以用实际的硬件测量来替换我们的估算模型,大幅提升精度。**每核功率建模**在处理异构处理器时尤为重要,通过跟踪进程的核心分配并建模性能核心(P 核)与效率核心(E 核)之间的功耗差异,能够实现更准确的能源归因。**工作负载分类**功能可以识别 CPU 密集型、内存绑定、I/O 绑定和空闲模式等不同工作负载类型,从而实现针对特定工作负载的功率优化策略。**容器运行时集成**使得系统能够按容器或 pod 聚合 Kubernetes 环境中的能源消耗,支持云原生的能源归因和计费。**实时可视化**通过提供带有能源消耗图表的 Web 仪表板,为能源优化提供即时的视觉反馈。
|
||||
当前实现已包含**原生 RAPL 硬件计数器支持**以实现实时能源测量,并为构建更复杂的能源监控功能提供了坚实的基础。多个扩展方向为不同的部署场景提供了重要价值。
|
||||
|
||||
**硬件计数器集成**代表了最有影响力的增强,通过 RAPL(运行平均功率限制)接口用实际硬件测量替换我们的简化估计模型。现代处理器提供详细的能源计数器,可以通过性能事件读取,提供精确到单个 CPU 封装的能源测量。
|
||||
| 扩展领域 | 实现状态 | 价值主张 |
|
||||
|---------|---------|---------|
|
||||
| **硬件计数器集成** | ✅ **已实现** - 通过 `perf_event_open()` 的 RAPL 计数器 | 实际硬件测量,自动回退功能 |
|
||||
| **每核功率建模** | 未来增强 | 异构处理器上的准确归因(P 核与 E 核) |
|
||||
| **工作负载分类** | 未来增强 | 实现特定工作负载的功率优化 |
|
||||
| **容器运行时集成** | 未来增强 | 云原生能源归因和计费 |
|
||||
| **实时可视化** | 未来增强 | 能源优化的即时反馈 |
|
||||
|
||||
```c
|
||||
// 读取 RAPL 计数器以获取实际能源测量
|
||||
struct perf_event_attr attr = {
|
||||
.type = PERF_TYPE_POWER,
|
||||
.config = PERF_COUNT_HW_POWER_PKG,
|
||||
};
|
||||
```
|
||||
**硬件计数器集成(✅ 已实现)**:能源监控器现已包含完整的 RAPL 支持,通过 Linux `perf_event` 接口读取实际的硬件能源计数器。这提供了跨多个域(封装、核心、DRAM)的精确能源测量,并在 RAPL 不可用时自动回退到软件估算。详情请参阅上面的[硬件 RAPL 能源测量](#硬件-rapl-能源测量)部分。
|
||||
|
||||
**每核功率建模**在异构处理器上变得至关重要,其中性能核心和效率核心具有截然不同的功率特性。跟踪每个进程在哪个核心上运行可以实现准确的能源归因:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user