summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.samples/queue_demo.stp
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/systemtap.samples/queue_demo.stp')
-rw-r--r--testsuite/systemtap.samples/queue_demo.stp32
1 files changed, 32 insertions, 0 deletions
diff --git a/testsuite/systemtap.samples/queue_demo.stp b/testsuite/systemtap.samples/queue_demo.stp
new file mode 100644
index 00000000..61a3b6d1
--- /dev/null
+++ b/testsuite/systemtap.samples/queue_demo.stp
@@ -0,0 +1,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") }