微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-每1毫秒从PMU收集一个partiulcar进程的数据

我想每1毫秒访问一次特定PID的硬件性能计数器,并将输出保存到文本文件中.

下面的代码收集在一定时间内并行运行的系统中所有进程的数据,然后将其输出到文本文件.

    #!/bin/sh 
    #set -x 
    ps -ef | awk '{printf($2)"\n";}' > out.txt 
    sed '1d' out.txt > tmp 
    IFS=$'\n'
    while read tmp 
    do  
    3>results-$tmp perf stat -p $tmp --log-fd 3 sleep 5 > /dev/null &
    done <tmp

为了每1毫秒收集一个进程的统计信息,应该如何编写一个循环?

解决方法:

以这种速率读取性能计数器在开销方面有些困难.这正是perf stat的下限为10 ms周期的原因.它运行一个用户空间任务,以在这些间隔中读取计数器.

另一方面,性能记录将设​​置性能事件,以便内核自身在计数器溢出时记录它们.优点是它具有较少的开销,但是事件不一定按规则的时间间隔记录.如果将perf record –frequency设置为1000,则内核将调整计数器的溢出率,以尝试达到请求的1毫秒间隔.除非事件发生率真正稳定,否则产生的时间间隔将不会恒定.如果您的事件发生率变化很大,时间间隔也会变化.

请注意,有一个mechanism in the kernel会尝试防止perf引起过多的开销.以您要求的速率,您可能会实现目标.

另外,您不应设置过多的pid记录,而应设置系统范围的记录,例如:

perf record --all-cpus --timestamp --freq 1000 

您得到一个可以根据pid处理的结果文件.性能脚本.除了文本输出外,perf脚本还允许您处理python或perl中的事件(请参见man perf-script-python,man perf-script-perl).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐