使用dtrace对基于“状态线程”库的C ++代码进行配置文件

时间:2018-08-02 04:18:01

标签: c++ profiling dtrace

我正在使用dtrace来基于SRS来概要分析C ++程序(如果需要的话,它是State Threads),这是一个类似于goroutine的用于编写并发C ++代码的库。 >

我使用的命令:

dtrace -n 'profile-199 /pid == '$PID'/ { @[ustack(100)] = count(); } tick-15s { exit(0); }' -o $OUTPUT_FILE &>/dev/null

采样输出和火焰图显示CPU的大部分时间都花在了“状态线程”的_st_kq_dispatch函数上,并且相应的调用堆栈就像

_st_kq_dispatch
_st_idle_thread_start
_st_thread_main
st_thread_create
st_usleep
...

几乎没有用,因为它没有透露任何有关用户功能执行的信息。但是,如果使用macOS的内置/usr/bin/sample进行了概要分析,则结果与预期的一样。那么我在这里使用dtrace有什么问题? “状态线程”有什么特殊之处,使其无法像其他普通程序一样使用dtrace进行配置? (我的macOS上启用了BTW系统完整性保护,这有问题吗?)

0 个答案:

没有答案