为什么arg0何时可以表示它是内核堆栈?

时间:2019-02-25 11:54:10

标签: dtrace

使用dtrace时arg0和arg1有什么区别。

dtrace -n 'profile-997 /arg0/ { @[stack()] = count() }
dtrace -n 'profile-997 /arg1/ { @[ustack()] = count() }

例如,上面的两个脚本记录每个堆栈的编号。我只是想知道为什么arg0表示它是内核堆栈,而arg1表示用户空间堆栈。

1 个答案:

答案 0 :(得分:2)

那是设计使然。

配置文件提供程序收到两个参数,如果CPU以内核模式运行,则将arg0设置为PC;如果CPU以用户态运行,则arg1拥有PC。另一个参数设置为零,因此可以很简单地检测CPU状态。