Erlang VM: информация о времени выполнения планировщика - PullRequest
5 голосов
/ 25 ноября 2011

Я искал способ получить информацию о том, как планирование выполняется во время выполнения программы: какие процессы в каком планировщике, если они изменяются, какой процесс активен в каждом планировщике, если каждый планировщик работает в одном ядре и т. Д. ...

Есть идеи или сопутствующая документация / статьи / что-нибудь?

Ответы [ 2 ]

6 голосов
/ 25 ноября 2011

Я бы посоветовал вам взглянуть на следующие опции трассировки / профилирования:

Эрл: system_profile / 2

Имеются опции для мониторинга планировщика и активности очереди выполнения (runnable_procs). Опция планировщика сообщит

{profile, scheduler, Id, State, NoScheds, Ts}

где State сообщит вам, активен он или нет. NoScheds сообщает о количестве текущих активных планировщиков (если я правильно помню).

Опция runnable_procs сообщит вам, помещен ли процесс в очередь выполнения определенного планировщика или удален из нее.

4 голосов
/ 25 ноября 2011

Если у вас есть система, которая поддерживает DTrace, вы можете использовать разрабатываемые пробники erlang dtrace, чтобы точно знать, когда происходят события планирования процесса.

Например, я написал простой однострочный , который показывает количество наносекунд, которые проходят между отправкой сообщения процессу и наличием процесса-получателя, запланированного для выполнения (± несколько наносекунд для дисперсии тактов между процессорами и процессов и т. Д.).

...