XNU线程状态在Xcode / Instruments中进行颜色编码

时间:2012-10-03 13:52:26

标签: xcode multithreading performance instruments xnu

我正在使用Apple Instruments工具对多线程应用程序进行一些分析,这些工具提供了许多我正在尝试理解的信息。我试图找到一个很好的资源来描述在工具中进行颜色编码的线程状态。我一直在研究XNU内核文档和书籍,但没有太多运气。

有很多黄色和紫色对应于“抢先”和“监督”模式(全彩色图表在附图中右上方显示)。鉴于我在这些州花了这么多时间而不是“跑步”状态(蓝色),我会特别感兴趣知道他们所指的是什么以及是否有可能/希望最大限度地减少在这些状态下花费的时间

enter image description here

1 个答案:

答案 0 :(得分:3)

Preempted =您的线程是可运行的,并且已经准备好,愿意并且能够执行,但是被踢出(上下文切换)以支持其他一些线程。这意味着您的线程没有在I / O或事件上休眠,并且实际上正在执行CPU密集型操作。但是,由于量子到期或其他一些优先级更高的线程,它被迫离开了CPU。

Supervisor =您的线程处于内核模式。通常,这意味着内核正在服务于您的线程进行的系统调用。

它们都不严格,但是:

避免抢占:除了优先级之外,你可以在这里做的不多 - 使用负的nice值来增加你的优先级,或者直接使用setpriority API。您还可以使用调度策略来提升线程的首选项,并调用Mach调度程序(线程的基础决策者)将您的线程放在第一位,并为它们提供更多的CPU时间。

避免管理员模式:您可能对系统调用很重视。同样,这不一定是坏事。

希望这有帮助,

TG