summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.samples/queue_demo.stp
blob: 61a3b6d188b2d8ffd02bc2715bbcdddf20c9070b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

probe begin {
  qsq_start ("block-read")
  qsq_start ("block-write")
}

probe timer.ms(3500), end {
  qsq_print ("block-read")
  qsq_start ("block-read")
  qsq_print ("block-write")
  qsq_start ("block-write")
}

probe timer.ms(10000) { exit () }


# synthesize queue work/service using three randomized "threads" for each queue.

global tc
function qs_doit (thread, name) {
  n = tc[thread] = (tc[thread]+1) % 3 # per-thread state counter
  if (n==1) qs_wait (name)
  else if (n==2) qs_run (name)
  else if (n==0) qs_done (name)
}

probe timer.ms(100).randomize(100) { qs_doit (0, "block-read") }
probe timer.ms(100).randomize(100) { qs_doit (1, "block-read") }
probe timer.ms(100).randomize(100) { qs_doit (2, "block-read") }
probe timer.ms(100).randomize(100) { qs_doit (3, "block-write") }
probe timer.ms(100).randomize(100) { qs_doit (4, "block-write") }
probe timer.ms(100).randomize(100) { qs_doit (5, "block-write") }