Spec-Zone.ru › OCaml 5.0

Модуль Runtime_events

module Runtime_events: sig .. end

События времени выполнения — трассировка времени выполнения на основе кольцевого буфера

Этот модуль позволяет пользователям включать и подписываться на события трассировки от сборщика мусора и других частей среды выполнения OCaml. Это может быть полезно для диагностики или мониторинга производительности. Этот модуль может использоваться для подписки на события для текущего процесса или внешних процессов асинхронно.

Когда включен (либо с помощью установки переменной среды OCAML_RUNTIME_EVENTS_START, либо вызова Runtime_events.start), будет создан файл с идентификатором процесса и расширением .events. По умолчанию он находится в текущем каталоге, но может быть переопределен переменной среды OCAML_RUNTIME_EVENTS_DIR. Каждый домен поддерживает свой собственный кольцевой буфер в разделе большего файла, в который он отправляет события.

Существует также набор C API в runtime_events.h, который может обеспечить мониторинг текущего процесса без влияния или привязки для других языков.

Поведение системы событий времени выполнения можно контролировать с помощью следующих переменных среды:

  • OCAML_RUNTIME_EVENTS_START, если установлено, запустит систему событий времени выполнения как часть инициализации среды выполнения OCaml.
  • OCAML_RUNTIME_EVENTS_DIR устанавливает каталог, в котором будут расположены кольцевые буферы событий времени выполнения. Если его нет, будет использоваться рабочий каталог программы.
  • OCAML_RUNTIME_EVENTS_PRESERVE, если установлено, предотвратит удаление средой выполнения OCaml своих кольцевых буферов при завершении работы. Это может помочь при мониторинге очень коротких программ.
type runtime_counter = 
| EV_C_FORCE_MINOR_ALLOC_SMALL
| EV_C_FORCE_MINOR_MAKE_VECT
| EV_C_FORCE_MINOR_SET_MINOR_HEAP_SIZE
| EV_C_FORCE_MINOR_MEMPROF
| EV_C_MINOR_PROMOTED
| EV_C_MINOR_ALLOCATED
| EV_C_REQUEST_MAJOR_ALLOC_SHR
| EV_C_REQUEST_MAJOR_ADJUST_GC_SPEED
| EV_C_REQUEST_MINOR_REALLOC_REF_TABLE
| EV_C_REQUEST_MINOR_REALLOC_EPHE_REF_TABLE
| EV_C_REQUEST_MINOR_REALLOC_CUSTOM_TABLE

Тип для событий счетчика, генерируемых средой выполнения

type runtime_phase = 
| EV_EXPLICIT_GC_SET
| EV_EXPLICIT_GC_STAT
| EV_EXPLICIT_GC_MINOR
| EV_EXPLICIT_GC_MAJOR
| EV_EXPLICIT_GC_FULL_MAJOR
| EV_EXPLICIT_GC_COMPACT
| EV_MAJOR
| EV_MAJOR_SWEEP
| EV_MAJOR_MARK_ROOTS
| EV_MAJOR_MARK
| EV_MINOR
| EV_MINOR_LOCAL_ROOTS
| EV_MINOR_FINALIZED
| EV_EXPLICIT_GC_MAJOR_SLICE
| EV_FINALISE_UPDATE_FIRST
| EV_FINALISE_UPDATE_LAST
| EV_INTERRUPT_REMOTE
| EV_MAJOR_EPHE_MARK
| EV_MAJOR_EPHE_SWEEP
| EV_MAJOR_FINISH_MARKING
| EV_MAJOR_GC_CYCLE_DOMAINS
| EV_MAJOR_GC_PHASE_CHANGE
| EV_MAJOR_GC_STW
| EV_MAJOR_MARK_OPPORTUNISTIC
| EV_MAJOR_SLICE
| EV_MAJOR_FINISH_CYCLE
| EV_MINOR_CLEAR
| EV_MINOR_FINALIZERS_OLDIFY
| EV_MINOR_GLOBAL_ROOTS
| EV_MINOR_LEAVE_BARRIER
| EV_STW_API_BARRIER
| EV_STW_HANDLER
| EV_STW_LEADER
| EV_MAJOR_FINISH_SWEEPING
| EV_MINOR_FINALIZERS_ADMIN
| EV_MINOR_REMEMBERED_SET
| EV_MINOR_REMEMBERED_SET_PROMOTE
| EV_MINOR_LOCAL_ROOTS_PROMOTE
| EV_DOMAIN_CONDITION_WAIT
| EV_DOMAIN_RESIZE_HEAP_RESERVATION

Тип для событий интервала, генерируемых средой выполнения

type lifecycle = 
| EV_RING_START
| EV_RING_STOP
| EV_RING_PAUSE
| EV_RING_RESUME
| EV_FORK_PARENT
| EV_FORK_CHILD
| EV_DOMAIN_SPAWN
| EV_DOMAIN_TERMINATE

Жизненные события для самого кольца

val lifecycle_name : lifecycle -> string

Возвращает строковое представление заданного типа события жизненного цикла

val runtime_phase_name : runtime_phase -> string

Возвращает строковое представление заданного типа события фазы времени выполнения

val runtime_counter_name : runtime_counter -> string

Возвращает строковое представление заданного типа счетчика времени выполнения

type cursor 

Тип курсора, используемого при потреблении

module Timestamp: sig .. end
module Callbacks: sig .. end
val start : unit -> unit

start () начнет сбор событий во время выполнения, если он еще не запущен.

События могут быть обработаны путем создания курсора с помощью create_cursor и предоставления набора обратных вызовов, которые будут вызываться для каждого типа события.

val pause : unit -> unit

pause () приостановит сбор событий во время выполнения. Трассировки собираются, если программа вызвала Runtime_events.start () или установлена переменная среды OCAML_RUNTIME_EVENTS_START.

val resume : unit -> unit

resume () возобновит сбор событий во время выполнения. Трассировки собираются, если программа вызвала Runtime_events.start () или установлена переменная среды OCAML_RUNTIME_EVENTS_START.

val create_cursor : (string * int) option -> cursor

create_cursor path_pid создаёт указатель для чтения из runtime_events. Указатели могут быть созданы для runtime_events внутри и вне процесса. Буфер-кольцо runtime_events может иметь несколько указателей, читающих данные в любой момент времени, и программа может иметь несколько одновременно открытых указателей (например, если несколько потребителей хотят различные наборы событий). Если path_pid равно None, то указатель создаётся для текущего процесса. В противном случае пара содержит строку path к каталогу, содержащему файл pid.events, и целое число pid для runtime_events внешнего процесса для мониторинга.

val free_cursor : cursor -> unit

Освободить ранее созданный указатель runtime_events

val read_poll : cursor -> Callbacks.t -> int option -> int

read_poll cursor callbacks max_option вызывает соответствующие функции в callbacks для чтения до max_option событий из runtime_events cursor и возвращает количество прочитанных событий.

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Runtime_events.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API