Voltar à lista
Linux x86_64Depuração & tracing#298

perf_event_open

Cria um descritor de arquivo para monitorar um evento de performance (contadores de hardware, tracepoints, etc.).

Descrição

Interface central do subsistema `perf`: configura um contador de desempenho — de hardware (ciclos de CPU, cache misses), de software (page faults, context switches) ou baseado em tracepoints do kernel — e retorna um descritor de arquivo usado para ler os valores, mapear um buffer de amostragem via `mmap`, ou receber notificações via `poll`.

Header: linux/perf_event.hman 2Desde o kernel 2.6.31

Nota

O acesso a contadores de hardware para usuários sem privilégio é controlado pelo sysctl `kernel.perf_event_paranoid`.

Assinatura

int perf_event_open(
    struct perf_event_attr * attr,
    pid_t pid,
    int cpu,
    int group_fd,
    unsigned long flags
);

Parâmetros

ParâmetroTipoDescrição
attrstruct perf_event_attr *Estrutura descrevendo o tipo de evento, formato dos dados retornados e opções de amostragem.
pidpid_tProcesso/thread a monitorar (0 = chamador; -1 com `cpu` >= 0 = todos os processos numa CPU).
cpuintCPU a monitorar, ou -1 para não restringir por CPU.
group_fdintDescritor do grupo de eventos ao qual este evento se junta, ou -1 para criar um novo grupo.
flagsunsigned longOpções da chamada, ex.: PERF_FLAG_FD_CLOEXEC.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1attrstruct perf_event_attr *
rsiargumento 2pidpid_t
rdxargumento 3cpuint
r10argumento 4group_fdint
r8argumento 5flagsunsigned long

Valor de retorno

Um novo descritor de arquivo em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EBUSY(16)
Dispositivo ou recurso ocupado.
EINVAL(22)
Argumento inválido.
EMFILE(24)
Limite de arquivos abertos do processo atingido.
ENODEV(19)
Dispositivo inexistente.
EPERM(1)
Operação não permitida (falta de privilégio).

Relacionadas