【问题标题】:Identify core an Erlang process识别 Erlang 进程的核心
【发布时间】:2013-12-11 05:49:02
【问题描述】:

有什么方法可以识别 Erlang 进程调度的特定核心?

假设您生成了一堆进程来简单地打印出进程正在运行的核心,然后退出。有什么办法吗?

我花了一些时间阅读文档和谷歌搜索,但找不到任何东西。

谢谢。

编辑:“core” = CPU 内核编号(如果不是编号,则为标识 CPU 内核的另一个标识符)。

【问题讨论】:

  • 当你说“核心”时,你是什么意思? CPU核心数?还是 Erlang 节点名称?你找到node()了吗?
  • 我的意思是 CPU 核心数或其他标识符。
  • 嗯,在 Erlang 环境中,node() 返回的节点名称是一个很好的标识符。
  • @Greg Hewgill,我想知道进程安排在哪个 CPU 内核上。 node() 不会给我那个。
  • “当前”CPU 核心不是恒定的,进程可以随时从一个 CPU 核心转移到另一个。这只是正常的操作系统调度行为。

标签: erlang


【解决方案1】:

erlang:system_info(scheduler_id) 在大多数情况下映射到逻辑核心。但此信息非常短暂,因为该进程可能会在任何其他调度程序上暂停和恢复。

您真正需要这类信息的用例是什么?

【讨论】:

  • 用例没有什么深刻的意义。我只是想看看调度程序是否确实在跨内核调度进程,我想看看进程的分布,我想看到它实时发生。你的建议似乎奏效了,所以如果没有更好的答案,我会接受你的正确答案。
【解决方案2】:

不,没有。如果您生成 2000 个进程并且它们很快终止,那么您很可能会在重新平衡发生之前完成工作。在这种情况下,您将只有一个内核一直在运行。

不过,您可以查看调度程序利用率调用,请参阅erlang:statistics(scheduler_wall_time)。它会告诉你每个调度器实际做了多少工作。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多