Skip to content

Instantly share code, notes, and snippets.

@koonwen
Last active April 9, 2024 12:54
Show Gist options
  • Save koonwen/b69867422bc49bd10cf61932e41da362 to your computer and use it in GitHub Desktop.
Save koonwen/b69867422bc49bd10cf61932e41da362 to your computer and use it in GitHub Desktop.
Bpftrace program for strace-like monitoring of io-uring
BEGIN {
time("[%H:%M:%S]");
printf("Tracing IO_uring ...\n");
}
tracepoint:syscalls:sys_exit_io_uring_register {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, %ld\n", comm, probe, args->__syscall_nr, args->ret);
}
tracepoint:syscalls:sys_exit_io_uring_enter {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, %ld\n", comm, probe, args->__syscall_nr, args->ret);
}
tracepoint:syscalls:sys_enter_io_uring_setup {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, %lu, 0x%llx\n", comm, probe, args->__syscall_nr, args->entries, args->params);
}
tracepoint:syscalls:sys_enter_io_uring_register {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, %u, %u, 0x%llx, %u\n", comm, probe, args->__syscall_nr, args->fd, args->opcode, args->arg, args->nr_args);
}
tracepoint:syscalls:sys_enter_io_uring_enter {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, %u, %lu, %lu, %lu, 0x%llx, %ld\n", comm, probe, args->__syscall_nr, args->fd, args->to_submit, args->min_complete, args->flags, args->argp, args->argsz);
}
tracepoint:io_uring:io_uring_task_work_run {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, %u, %u\n", comm, probe, args->tctx, args->count, args->loops);
}
tracepoint:io_uring:io_uring_task_add {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, %d, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->mask, args->op_str);
}
tracepoint:io_uring:io_uring_submit_sqe {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, %lu, %d, %d, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->flags, args->force_nonblock, args->sq_thread, args->op_str);
}
tracepoint:io_uring:io_uring_short_write {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, %lu, %lu, %lu\n", comm, probe, args->ctx, args->fpos, args->wanted, args->got);
}
tracepoint:io_uring:io_uring_req_failed {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, %u, %u, %lu, %lu, %lu, %lu, %u, %u, %lu, %lu, %lu, %d, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->flags, args->ioprio, args->off, args->addr, args->len, args->op_flags, args->buf_index, args->personality, args->file_index, args->pad1, args->addr3, args->error, args->op_str);
}
tracepoint:io_uring:io_uring_register {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, 0x%llx, 0x%llx, %ld\n", comm, probe, args->ctx, args->opcode, args->nr_files, args->nr_bufs, args->ret);
}
tracepoint:io_uring:io_uring_queue_async_work {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %lu, %u, %u, 0x%llx, %d, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->flags, args->work, args->rw, args->op_str);
}
tracepoint:io_uring:io_uring_poll_arm {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, %d, %d, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->mask, args->events, args->op_str);
}
tracepoint:io_uring:io_uring_local_work_run {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, %d, %u\n", comm, probe, args->ctx, args->count, args->loops);
}
tracepoint:io_uring:io_uring_link {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, 0x%llx\n", comm, probe, args->ctx, args->req, args->target_req);
}
tracepoint:io_uring:io_uring_file_get {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %lu, %d\n", comm, probe, args->ctx, args->req, args->user_data, args->fd);
}
tracepoint:io_uring:io_uring_fail_link {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, 0x%llx, 0x%llx\n", comm, probe, args->ctx, args->req, args->user_data, args->opcode, args->link, args->op_str);
}
tracepoint:io_uring:io_uring_defer {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %llu, %u, 0x%llx\n", comm, probe, args->ctx, args->req, args->data, args->opcode, args->op_str);
}
tracepoint:io_uring:io_uring_create {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: %d, 0x%llx, %lu, %lu, %lu\n", comm, probe, args->fd, args->ctx, args->sq_entries, args->cq_entries, args->flags);
}
tracepoint:io_uring:io_uring_cqring_wait {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, %d\n", comm, probe, args->ctx, args->min_events);
}
tracepoint:io_uring:io_uring_cqe_overflow {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, %llu, %ld, %lu, 0x%llx\n", comm, probe, args->ctx, args->user_data, args->res, args->cflags, args->ocqe);
}
tracepoint:io_uring:io_uring_complete {
@reads[probe] = count();
time("[%H:%M:%S]");
printf(" (%s) %s: 0x%llx, 0x%llx, %lu, %d, 0x%llx, %lu, %lu\n", comm, probe, args->ctx, args->req, args->user_data, args->res, args->cflags, args->extra1, args->extra2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment