1#include <sys/taskq.h>
2
3kprobe:trace_zfs_taskq_ent__birth
4{
5        $tqent = (struct taskq_ent *)arg0;
6
7        $tqent_id = $tqent->tqent_id;
8        $tq_name = str($tqent->tqent_taskq->tq_name);
9
10        @birth[$tq_name, $tqent_id] = nsecs;
11}
12
13kprobe:trace_zfs_taskq_ent__start
14{
15        $tqent = (struct taskq_ent *)arg0;
16
17        @tqent_id[tid] = $tqent->tqent_id;
18        @tq_name[tid] = str($tqent->tqent_taskq->tq_name);
19
20        @start[@tq_name[tid], @tqent_id[tid]] = nsecs;
21}
22
23kprobe:trace_zfs_taskq_ent__start
24/ @birth[@tq_name[tid], @tqent_id[tid]] /
25{
26        @queue_lat_us[@tq_name[tid]] =
27                hist((nsecs - @birth[@tq_name[tid], @tqent_id[tid]])/1000);
28        delete(@birth[@tq_name[tid], @tqent_id[tid]]);
29}
30
31kprobe:trace_zfs_taskq_ent__finish
32/ @start[@tq_name[tid], @tqent_id[tid]] /
33{
34        $tqent = (struct taskq_ent *)arg0;
35
36        @exec_lat_us[@tq_name[tid], ksym($tqent->tqent_func)] =
37                hist((nsecs - @start[@tq_name[tid], @tqent_id[tid]])/1000);
38        delete(@start[@tq_name[tid], @tqent_id[tid]]);
39}
40
41kprobe:trace_zfs_taskq_ent__finish
42{
43        delete(@tq_name[tid]);
44        delete(@tqent_id[tid]);
45}
46
47END
48{
49        clear(@birth);
50        clear(@start);
51
52        clear(@tq_name);
53        clear(@tqent_id);
54}
55