perf 支持的最大采样频率
Maximum sampling frequency supported by perf
linux内核如何确定最大采样频率的值?如果在同一台机器上执行 perf,为什么这个值会改变?
在使用 perf 时,我注意到 perf_event_max_sample_rate 的值发生了变化?为什么?这个值不应该保持不变吗?
Linux 内核跟踪 perf 的不可屏蔽中断 (NMI) 处理程序执行了多长时间。如果采样持续时间超过可配置的阈值 (perf_cpu_time_max_percent),它会降低采样率。这可以防止系统挂起,因为它会将所有时间都花在处理采样过程上。在这种情况下,您将在内核日志中看到以下消息:
perf samples too long (2506 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
您可以通过将 perf_cpu_time_max_percent 设置为 0 来禁用此限制机制:
sysctl -w kernel.perf_cpu_time_max_percent=0
有用的链接:
- sysctl 文件的文档perf_cpu_time_max_percent
- Linux kernel sources
- 另请参阅 this patch,其中介绍了这种节流机制
linux内核如何确定最大采样频率的值?如果在同一台机器上执行 perf,为什么这个值会改变?
在使用 perf 时,我注意到 perf_event_max_sample_rate 的值发生了变化?为什么?这个值不应该保持不变吗?
Linux 内核跟踪 perf 的不可屏蔽中断 (NMI) 处理程序执行了多长时间。如果采样持续时间超过可配置的阈值 (perf_cpu_time_max_percent),它会降低采样率。这可以防止系统挂起,因为它会将所有时间都花在处理采样过程上。在这种情况下,您将在内核日志中看到以下消息:
perf samples too long (2506 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
您可以通过将 perf_cpu_time_max_percent 设置为 0 来禁用此限制机制:
sysctl -w kernel.perf_cpu_time_max_percent=0
有用的链接:
- sysctl 文件的文档perf_cpu_time_max_percent
- Linux kernel sources
- 另请参阅 this patch,其中介绍了这种节流机制