该命令使用什么流perf
!?我一直在尝试捕捉它
(perf stat -x, -ecache-misses ./a.out>/dev/null) 2> results
下列的https://stackoverflow.com/q/13232889/50305,但无济于事。为什么我无法捕获输入...就像让一些鱼逃脱一样!
答案1
旧版本的 perf ~2.6.x
我正在使用性能版本:2.6.35.14-106。
捕获所有输出
我的 Fedora 14 系统上没有-x
开关,所以我不确定这是否是您的实际问题。稍后我将研究较新的 Ubuntu 12.10 系统,但这对我有用:
$ (perf stat -ecache-misses ls ) > stat.log 2>&1
$
$ more stat.log
maccheck.txt
sample.txt
stat.log
Performance counter stats for 'ls':
13209 cache-misses
0.018231264 seconds time elapsed
我只想要 perf 的输出
您可以尝试这个,输出ls
将被重定向到/dev/null
.输出形式perf
(STDERR 和 STDOUT)转到文件stat.log
.
$ (perf stat -ecache-misses ls > /dev/null ) > stat.log 2>&1
[saml@grinchy 89576]$ more stat.log
Performance counter stats for 'ls':
12949 cache-misses
0.022831281 seconds time elapsed
较新版本的 perf 3.x+
我使用的性能版本:3.5.7
仅捕获 perf 的输出
在较新的版本中,perf
有专门的选项用于控制消息的发送位置。您可以选择通过该-o|--output
选项将它们发送到文件。只需给这些开关一个文件名即可捕获输出。
-o file, --output file
Print the output into the designated file.
另一种方法是将输出重定向到备用文件描述符,3
例如 。您需要做的就是在流式传输之前定向此备用文件句柄。
--log-fd
Log output to fd, instead of stderr. Complementary to --output, and
mutually exclusive with it. --append may be used here. Examples:
3>results perf stat --log-fd 3 — $cmd
-or-
3>>results perf stat --log-fd 3 --append — $cmd
因此,如果我们想收集命令perf
的输出,ls
您可以使用以下命令:
$ 3>results.log perf stat --log-fd 3 ls > /dev/null
$
$ more results.log
Performance counter stats for 'ls':
2.498964 task-clock # 0.806 CPUs utilized
0 context-switches # 0.000 K/sec
0 CPU-migrations # 0.000 K/sec
258 page-faults # 0.103 M/sec
880,752 cycles # 0.352 GHz
597,809 stalled-cycles-frontend # 67.87% frontend cycles idle
652,087 stalled-cycles-backend # 74.04% backend cycles idle
1,261,424 instructions # 1.43 insns per cycle
# 0.52 stalled cycles per insn [55.31%]
<not counted> branches
<not counted> branch-misses
0.003102139 seconds time elapsed
如果您使用该--append
版本,则在我们的例子中,多个命令的内容将被附加到同一个日志文件中results.log
。
安装性能
安装非常简单:
软呢帽
$ yum install perf
Ubuntu/Debian
$ apt-get install linux-tool-common linux-tools
参考
答案2
这最终对我有用:
3>results perf stat -x, -ecache-misses --log-fd 3 --append -- ./a.out
根据man perf-stat
,log-fd
旗帜。