#!/usr/bin/env bpftrace
/*
 * runqlat.bt	CPU scheduler run queue latency as a histogram.
 *		For Linux, uses bpftrace, eBPF.
 *
 * This is a bpftrace version of the bcc tool of the same name.
 *
 * Copyright 2018 Netflix, Inc.
 * Licensed under the Apache License, Version 2.0 (the "License")
 *
 * 17-Sep-2018	Brendan Gregg	Created this.
 * 07-Apr-2020	Andreas Gerstmayr	Modified for usage with PCP bpftrace PMDA.
 */
// include: @usecs

#include <linux/sched.h>

tracepoint:sched:sched_wakeup,
tracepoint:sched:sched_wakeup_new
{
	@qtime[args->pid] = nsecs;
}

tracepoint:sched:sched_switch
{
	if (args->prev_state == TASK_RUNNING) {
		@qtime[args->prev_pid] = nsecs;
	}

	$ns = @qtime[args->next_pid];
	if ($ns) {
		@usecs = hist((nsecs - $ns) / 1000);
	}
	delete(@qtime[args->next_pid]);
}
