Xcode 分析器:sigprocmask 和 __sigaltstack 开销

Posted

技术标签:

【中文标题】Xcode 分析器:sigprocmask 和 __sigaltstack 开销【英文标题】:Xcode profiler: sigprocmask & __sigaltstack overhead 【发布时间】:2021-09-10 01:40:06 【问题描述】:

我正在使用 Xcode 和 iPhone X 设备分析我的应用程序(使用 Codename One 构建)。我注意到,在繁重的计算(单线程或多线程)中,sigprocmask__sigaltstack(来自libsystem_kernel.dylib)是最大的时间消费者,各占 20% 以上。这是一个巨大的开销。有谁知道这是从哪里来的,是否有办法减少开销?

【问题讨论】:

【参考方案1】:

不是这些方面的专家,但据我所知,它们是低级内核调用。我认为这两个都是探查器开销,因此如果您在没有探查器的情况下运行,它们将不会成为列表的顶部。

同样,不是专家,但这是有道理的。分析器需要定期查找有关当前方法和堆栈的信息。

【讨论】:

谢谢,是的,一定是这样。 (我可能应该检查 Call Tree > Hide system libraries。)起初我以为 profiling 和 running 之间的性能差异只有 10-20% 左右,但似乎我还必须将设备的热状态纳入帐户,使用 6 个线程运行 1-2 分钟。仔细测试(让设备在每次运行后冷却下来)我发现 'build for profiling; 之间的平均性能差异为 40%; profile' 和 'build for running;安装;跑步'。这几乎完全解释了分析时系统功能的 2x 20%。

以上是关于Xcode 分析器:sigprocmask 和 __sigaltstack 开销的主要内容,如果未能解决你的问题,请参考以下文章

10.12 sigprocmask函数

10.12 sigprocmask函数

Linux进程间通信 -- 信号集函数 sigemptyset()sigprocmask()sigpending()sigsuspend()

Linux__进程信号

Xcode编译器里有鬼 – XcodeGhost 样本分析

XCode编译器里有鬼 – XCodeGhost样本分析