BCC-CPU模块梳理

libbpf-tools/hardirqs

统计各类型硬中断消耗时间

# /usr/share/bcc/libbpf-tools/hardirqs 
Tracing hard irq event time... Hit Ctrl-C to end.
^C
HARDIRQ                    TOTAL_usecs
ens32                              124
vmwgfx                              65
ioc0                               854
ata_piix                           463

部分类型的中断处理分上半部和下半部,如网络,网络硬中断只负责唤醒软中断,硬中断只会耗时非常短。
部分类型的中断处理和cpu数量成倍关系。

原理

irq_handler_entry追踪点记录时间开始,在irq_handler_exit追踪点记录时间差

场景

硬中断的开销和硬件、负载相关,如果CPU过多时间消耗在硬中断应检查是否异常。
/proc/status中有开销更小的实时检测硬中断耗时的工具(使用定时器定时检查,可能因定时器频率问题误差)。

参考

tools/llcstat

统计任务cache miss,缓存命中率,

# tools/llcstat 20 -c 5000
Running for 20 seconds or hit Ctrl-C to end.
PID      NAME             CPU     REFERENCE         MISS   HIT%
0        swapper/15       15        3515000       640000  81.79%
238      migration/38     38           5000            0 100.00%
4512     ntpd             11           5000            0 100.00%
150867   ipmitool         3           25000         5000  80.00%
150895   lscpu            17         280000        25000  91.07%
151807   ipmitool         15          15000         5000  66.67%
150757   awk              2           15000         5000  66.67%
151213   chef-client      5         1770000       240000  86.44%
151822   scribe-dispatch  12          15000            0 100.00%
123386   mysqld           5            5000            0 100.00%
[...]
Total References: 518920000 Total Misses: 90265000 Hit Rate: 82.61%
  • 该数据由CPU的PMU性能计数器提供,虚拟机机器中可能不含有性能计数器。
  • 性能计数器触发频率较高,可能有额外的性能开销
  • 不同架构的PMU提供的“缓存”代指的区域可能不一样。

原理

在perf硬件事件中捕获,统计引用和缓存未命中。

bcc/libbpf-tools/llcstat.c: 234

	if (open_and_attach_perf_event(PERF_COUNT_HW_CACHE_MISSES,
					env.sample_period,
					obj->progs.on_cache_miss, mlinks))
		goto cleanup;
	if (open_and_attach_perf_event(PERF_COUNT_HW_CACHE_REFERENCES,
					env.sample_period,
					obj->progs.on_cache_ref, rlinks))

场景

较高的缓存命中率代表缓存“热”,可以有效减少内存的读取频率,缓存速度比内存快。程序经常访问随机内存或频繁迁移CPU可能导致缓存命中率较低。通常业务负载保值一致时缓存应保持较高的数值可提升性能表现。

参考

libbpf-tools/softirqs

# /usr/share/bcc/libbpf-tools/softirqs 
Tracing soft irq event time... Hit Ctrl-C to end.
^C
SOFTIRQ          TOTAL_usecs
timer                   1114
net_tx                     1
net_rx                   225
block                     61
sched                    872
rcu                      853

原理

部分类型的硬件中断事件不能在硬件中断中及时完成,所以一些中断被设计为部分在硬中断中完成(上半部)部分在内核任务软中断中完成(下半部)。如网络类型的硬中断回调仅仅是标记对应的事件唤醒软中断,主要的网络事件均在软中断中完成。

linux-5.10.202/include/linux/interrupt.h: 531

enum
{
	HI_SOFTIRQ=0,
	TIMER_SOFTIRQ,
	NET_TX_SOFTIRQ,
	NET_RX_SOFTIRQ,
	BLOCK_SOFTIRQ,
	IRQ_POLL_SOFTIRQ,
	TASKLET_SOFTIRQ,
	SCHED_SOFTIRQ,
	HRTIMER_SOFTIRQ,
	RCU_SOFTIRQ,    /* Preferable RCU should always be the last softirq *

软中断是内核态中的常规任务,命名为ksoftirqd/<cpu id>,可在任务管理器中看到,该任务的主要工作是循环执行__do_softirq函数根据当前的软中断事件调用对应的软中断回调。

linux-5.10.202/kernel/softirq.c: 255

asmlinkage __visible void __softirq_entry __do_softirq(void)
	while ((softirq_bit = ffs(pending))) {
		trace_softirq_entry(vec_nr);
		h->action(h);
		trace_softirq_exit(vec_nr);

softirqs工具统计软中断回调事件h->action(h)的耗时,在softirq_entry跟踪点中开始计时,在softirq_exit跟踪点中记录时间差并计算时间总和。

场景

不同于/proc/stat中根据cpu定时采样获取的软中断耗时,/proc/stat因为定时采样原因有可能有误差,且统计的是整个软中断任务的cpu消耗,而softirqs排除了定时中断的影响、软中断任务非软中断回调的影响,统计更准确。

参考

在这里插入图片描述

### BCC-CSM2-MR气候模型的技术文档、下载与使用教程 #### 获取BCC-CSM2-MR模式输出的数据 对于获取由BCC-CSM2-MR模式产生的数据,可以通过特定网站进行下载。具体而言,有关于如何下载这些数据的方法可以在一篇CSDN博客文章中找到说明[^1]。 #### CIMP6-BCC-CSM2-MR数据资源 针对CIMP6框架下的BCC-CSM2-MR模型,在不同时间段有多个版本的数据集可供研究者利用。一个便捷的方式是从指定链接访问到包含此模型在内的多组数据包,这有助于快速获得所需实验材料[^2]。 #### 使用工具处理和分析数据 为了更好地理解和操作来自该气候模型的数据,可以借助专门开发的软件工具——BCC-Tool来进行辅助工作。可以从GitHub上找到这个项目的发布页面来获取最新版的应用程序以及其源码压缩包[^3]。 #### 实际案例:通过bcc-tools执行基本命令 当涉及到实际的操作层面时,比如想要监控系统的I/O活动情况,则可以直接调用位于`bcc/tools`目录下名为`biosnoop.py`脚本文件完成这项任务;当然在此之前需确保已经按照官方指南完成了必要的环境配置步骤[^4]。 #### 学习更多关于bcc-tools的知识 考虑到bcc-tools在Linux系统管理和性能优化方面的重要性,《BPF之巅 洞悉Linux系统和应用性能》这本书籍提供了深入浅出的内容讲解,帮助读者掌握背后原理和技术细节。此外还有其他相关书籍也值得参考学习[^5]。 ```bash # 示例:运行biosnoop.py查看磁盘IO延迟 sudo ./biosnoop.py ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值