读书笔记,只记录核心要点,书中的核心例子
1、runqslower
列出运行队列中等待延迟超过阈值的线程,默认是超过了10毫秒
记录的距离是ttwu_do_wakeup()到finish_task_switch的时间。也就是说是发起唤醒某一个线程到这个线程被唤醒的延迟
唤醒5号任务,从ttwu_do_wakeup发起,一直到完成5号任务finish_task_switch,完成切换的时间延迟。
2、cpudist
唤醒之后在cpu上执行的时长
在cpu运行的时间
3、cpufreq
展示cpu的频率信息
4、profile
定时采集调用栈出现频率的bcc 工具,可以采集到cpu使用高的栈
5、offcputime
用于统计线程阻塞和脱离cpu运行的时间,同时输出调用栈信息,来理解阻塞的原因
统计从调度出去,进入睡眠,一直到io完成唤醒经历的时间
6.syscount
可以统计哪一些系统调用在某一时刻使用的比较多
7.argdist和trace
如果我们通过syscount 找到调用比较多的系统调用,可以使用tplist找到参数列表,然后通过argdist统计出参数出现的频率
8、funccount
统计事件和函数调用频率,可以看那些函数调用频率比较高
9、softirqs
软中断消耗的cpu时间。
10、hardirqs
硬中断消耗cpu时间
11、smpcalls
跟踪跨cpu调用时间,跟踪的是smp_call_function* 到 smp_send_reschedule 的时间
1. 远程cpu执行任务调度
本地cpu端的Linux核心层通过函数smp_send_reschedule,向指定cpu发送“执行任务调度”需求。
void smp_send_reschedule(int cpu)
{
smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
}
12、llcstat
输出最后一级缓存命中率