Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过perf vs ftrace跟踪Linux上下文切换->;通过性能丢失事件_Linux_Events_Scheduling_Perf_Ftrace - Fatal编程技术网

通过perf vs ftrace跟踪Linux上下文切换->;通过性能丢失事件

通过perf vs ftrace跟踪Linux上下文切换->;通过性能丢失事件,linux,events,scheduling,perf,ftrace,Linux,Events,Scheduling,Perf,Ftrace,因此,我试图在Linux中跟踪上下文切换,我对sched_waking和sched_switch感兴趣,我尝试了两种方法:perf_event_open->mmap和&FTRACE 使用perf,我正在结构perf\u事件\u attr中配置以下内容: config = 305; // 305 for sched_switch / 308 for sched_waking type = PERF_TYPE_TRACEPOINT; sample_period = 1; sample_type =

因此,我试图在Linux中跟踪上下文切换,我对
sched_waking
sched_switch
感兴趣,我尝试了两种方法:
perf_event_open->mmap
和&
FTRACE

使用perf,我正在
结构perf\u事件\u attr
中配置以下内容:

config = 305;  // 305 for sched_switch / 308 for sched_waking
type = PERF_TYPE_TRACEPOINT;
sample_period = 1;
sample_type = PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | PERF_SAMPLE_CPU;
然后,我映射FD并转储类型为
PERF\u RECORD\u SAMPLE
PERF\u RECORD\u LOST
的所有事件。我将FD映射到一个大的缓冲区(8MB),在那里,一旦读取记录,我就将尾部推进到头部。我确实跟踪了头部和尾部,以检查内核是否有可能覆盖,但是,还有很多空间。我还将读取时间从100毫秒改为1秒

使用FTRACE,我同时启用
sched_开关
sched_唤醒

echo sched_switch > set_event
echo sched_waking >> set_event
current_tracer = nop
tracing_on = 1
我得到的结果显示,当报告的事件超过5公里时,perf会丢失事件,而FTRACE不会。 检查每个核心结果,显示收集的事件+通过perf报告的丢失事件与通过FTRACE收集的事件匹配。 现在,FTRACE有
per_cpu/cpuN/stats
,它显示由于覆盖而丢弃的事件,但这是另外一回事,如果我通过FTRACE读取生成的事件,这个计数器保持在0,而perf报告丢失的事件

我还玩了
/proc/sys/kernel/perf\u event\u max\u sample\u rate
&
/proc/sys/kernel/perf\u cpu\u time\u max\u percent
,也完全禁用了后者(=0),这没有帮助

我正在使用内核
4.15.0-112-generic
,运行在AMD Ryzen 2950X、16核、32线程上

当然,我可以开始调试内核,为什么会有丢失的事件,现在我不确定这是因为我没有调整旋钮,或者perf在跟踪ftrace事件时增加了额外的开销,或者,有一个bug。非常感谢您的帮助