如何屏蔽perf的Events enabled/disabled日志,仅显示zstd进度条?
如何屏蔽perf的Events enabled/disabled日志,仅显示zstd进度条?
我明白你的困扰——perf反复输出的Events enabled/disabled消息完全盖过了zstd的进度条,而且两者都往stderr写,确实头疼。这里有个可靠的解决思路,核心是把perf自身的stderr和zstd的stderr分开处理,让perf的冗余消息被丢弃,同时保留zstd的进度条输出。
你只需要调整脚本中启动perf的那一行,利用文件描述符的重定向技巧就能解决问题,修改后的代码如下:
# 先保存当前终端的stderr到文件描述符3,留作zstd输出用 exec 3>&2 # 启动perf:将perf自身的stderr重定向到/dev/null丢弃,同时让zstd的stderr指向原来的终端 perf stat -D -1 -o perf_out --control fd:${ctl_fd},${ctl_fd_ack} -- sh -c './zstd -kf ../DataSets/enwik9 2>&3' 2>/dev/null # 用完后关闭临时文件描述符 exec 3>&-
原理说明:
exec 3>&2:把当前终端的标准错误输出(文件描述符2)复制到文件描述符3,相当于“备份”了原来的终端输出通道。2>/dev/null:让perf自己输出的所有stderr内容(包括那些Events enabled/disabled状态消息)直接被丢弃,不会显示在终端上。sh -c './zstd ... 2>&3':通过shell启动zstd进程,把zstd的stderr重定向到我们备份的fd3,这样zstd的进度条就能正常输出到原来的终端,不受perf消息干扰。
如果之后需要排查perf的控制状态,也可以把2>/dev/null改成2>perf_control.log,这样这些状态消息会被保存到日志文件里,既不干扰终端显示,也能留底备查。
修改后运行脚本,你应该只会看到zstd的进度条正常更新,perf的那些冗余状态消息完全消失,同时perf的性能统计结果依然会正确写入perf_out文件,完全不影响你的性能分析需求。
备注:内容来源于stack exchange,提问作者Sai Aravind
相关产品推荐
相关产品推荐

