茱莉亚·伊万斯

使用perf而不是strace查看系统调用

今晚我在当地的一个黑客空间,我决定去珀尔夫又在我的电脑上工作了。你们现在都知道我很正常,但是,系带并不总是一个好的选择!如果程序运行太多的系统调用,稻草会减慢速度。很多。

让我们试试看:

$time du-sh~/work0.04秒$time strace-out du-sh~/work2.66秒

慢65倍!这是因为需要使用260,000个系统调用,嗯,很多。如果您将程序与lesssystem调用绑定在一起,就不会那么麻烦了。但是如果我们还想知道什么正在做,和实际上是像数据库之类的真正重要的程序吗??

我们将要使用PERF=D=D。

我一直在看布莱登·格雷格的PRF页面以及org教程差不多一年了,去年五月我们了解到perf允许您计算CPU周期,太酷了!但是perf可以做更多的事情。

以下是如何记录系统调用的正在使用:

sudo perf.-e'syscalls:sys_.*'du-sh~/work

这马上就结束了,除了perf将记录的数据拖放到办公桌上要花费一点额外的时间。然后我们可以看到系统调用sudo perf脚本,它向我们展示了这样的东西:

du 25156[003]142769.540801:syscalls:sys_._newfstatat: dfd:0x00000006,文件名:0x021b0b58,statbuf:0x021b0ac8,标志:0x0du 25156[003]142769.540802:syscalls:sys_._close: fd:0x00000006du 25156[003]142769.540804:syscalls:sys_._newfstatat: dfd:0x00000005,文件名:0x021b4708,statbuf:0x021b4678,标志:0x0

这是我们的系统调用!您可以看到文件描述符–FD:0x000.但它没有给我们文件名,只是……文件名的地址?我不知道如何得到实际的文件名,这让我很难过。

它叫PARF脚本因为可以使用输出编写脚本(如下所示火焰记录脚本!(也许你可以把它弄得很漂亮,并且有一个类似于strace的脚本,但是不会放慢你的程序)。显然perf脚本-g python将自动为Python表单中的perf脚本生成样板!但它不起作用,因为我需要重新编译perf。所以我们来看看:)

我现在只想说这些!我写这篇文章主要是希望有人能告诉我,如何获得许可,给我戏剧性的文件名,或b)告诉我为什么期望perf为零是不合理的。