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.31Nota
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âmetro | Tipo | Descrição |
|---|---|---|
| attr | struct perf_event_attr * | Estrutura descrevendo o tipo de evento, formato dos dados retornados e opções de amostragem. |
| pid | pid_t | Processo/thread a monitorar (0 = chamador; -1 com `cpu` >= 0 = todos os processos numa CPU). |
| cpu | int | CPU a monitorar, ou -1 para não restringir por CPU. |
| group_fd | int | Descritor do grupo de eventos ao qual este evento se junta, ou -1 para criar um novo grupo. |
| flags | unsigned long | Opções da chamada, ex.: PERF_FLAG_FD_CLOEXEC. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | attrstruct perf_event_attr * |
| rsi | argumento 2 | pidpid_t |
| rdx | argumento 3 | cpuint |
| r10 | argumento 4 | group_fdint |
| r8 | argumento 5 | flagsunsigned 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
Mesma categoria