// 使能hard lockup探测
// 调用路径:watchdog_enable->watchdog_nmi_enable
// 函数任务:
// 1.初始化hard lockup检测事件
// 2.hard lockup阈值为10s
// 2.向performance monitoring子系统注册hard lockup检测事件
// 3.使能hard lockup检测事件
// 注:
// performance monitoring,x86中的硬件设备,当cpu clock经过了指定个周期后发出一个NMI中断。
1.1 static int watchdog_nmi_enable(unsigned int cpu)
{
//hard lockup事件
struct perf_event_attr *wd_attr;
struct perf_event *event = per_cpu(watchdog_ev, cpu);
....
wd_attr = &wd_hw_attr;
//hard lockup检测周期,10s
wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);
//向performance monitoring注册hard lockup检测事件
event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
....
//使能hard lockup的检测
per_cpu(watchdog_ev, cpu) = event;
perf_event_enable(per_cpu(watchdog_ev, cpu));
return 0;
}
// 换算hard lockup检测周期到cpu频率
1.2 u64 hw_nmi_get_sample_period(int watchdog_thresh
时间子系统17_hard lockup机制
最新推荐文章于 2024-02-21 21:47:59 发布
本文详细介绍了Linux内核中硬锁up(hard lockup)的检测机制,包括初始化hard lockup事件,设置10秒的检测阈值,通过performance monitoring子系统进行监测,并在检测到hard lockup时触发回调函数进行信息打印或警告。同时,还讨论了关闭hard lockup检测的流程。
摘要由CSDN通过智能技术生成