From 358979e5a39157dd424f5287063028154ba2c515 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 1 Feb 2019 12:38:52 +0100 Subject: [PATCH 01/77] changed a few names and added space for readability, otherwise nothing wrong with it --- src/tests/stress/savina/3.Counting/Count.enc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/tests/stress/savina/3.Counting/Count.enc b/src/tests/stress/savina/3.Counting/Count.enc index b530b89b1..fb0d94553 100644 --- a/src/tests/stress/savina/3.Counting/Count.enc +++ b/src/tests/stress/savina/3.Counting/Count.enc @@ -1,38 +1,48 @@ active class Counter var count : int + def init() : unit this.count = 0 end + def increment() : unit this.count = this.count + 1 end - def retrieve(p : Producer) : unit + + def query(p : Producer) : unit p!resultMessage(this.count) end end + + active class Producer var counter : Counter var iterations : int + def init(counter : Counter, iterations : int) : unit this.counter = counter this.iterations = iterations end + def increment(max : int) : unit var i = 0 while i < max do this.counter!increment() i = i + 1 end - this.counter!retrieve(this) + this.counter!query(this) end + def resultMessage(count : int) : unit if this.iterations != count then - print("ERROR: expected : {}, found: {}", this.iterations, count) + print("ERROR: expected : {}, found: {}\n", this.iterations, count) else - print("SUCCESS! received: {}", count) + print("SUCCESS! received: {}\n", count) end end + end + active class Main def main(args : [String]) : unit if |args| != 2 then From 50288debe9ac128ae22ec0dc5104ca2a1d40d166 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Sun, 3 Feb 2019 22:22:28 +0100 Subject: [PATCH 02/77] Added newlines for readability, changed some variable names --- src/tests/stress/savina/6.Fib/fib.enc | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/tests/stress/savina/6.Fib/fib.enc b/src/tests/stress/savina/6.Fib/fib.enc index 67cad8f36..482a12449 100644 --- a/src/tests/stress/savina/6.Fib/fib.enc +++ b/src/tests/stress/savina/6.Fib/fib.enc @@ -1,20 +1,26 @@ import Std +-- Trait used by the Request and Response classes. +-- Allows for simple message passing linear trait Action require var msg : String require var number : int + def getMsg() : String this.msg end + def setNumber(n : int) : unit this.number = n end + def getNumber() : int this.number end end active class Main + def main(args : [String]) : unit if |args| != 2 then print("input required: number-th of fibo not specified\n") @@ -27,7 +33,6 @@ active class Main case Nothing => 0 end - end in let @@ -40,39 +45,48 @@ active class Main end end +-- linear class Request : Action - var msg : String - var number : int + var msg : String -- String identifying the actor as a Request + var number : int -- The degree of the Fibonacci number to be computed + def init(n : int) : unit this.msg = "Request" this.number = n end + def request(n : int) : unit this.number = n end end linear class Response : Action - var msg : String - var number : int + var msg : String -- String identifying the actor as a Response + var number : int -- The computed Fibonacci number to be returned + def init(value : int) : unit this.msg = "Response" this.number = value end + def response_one() : unit this.number = 1 end end +-- active class FibonacciActor var result : int var respReceived : int var parent : Maybe[FibonacciActor] + def init(parent : Maybe[FibonacciActor]) : unit this.result = 0 this.respReceived = 0 this.parent = parent end + + -- Method processing either requests from parents or responses from children def process(msg : Action) : unit match msg.getMsg() with case "Request" => @@ -89,6 +103,7 @@ active class FibonacciActor end () end + case "Response" => this.respReceived = this.respReceived + 1 this.result = this.result + msg.getNumber() @@ -99,6 +114,8 @@ active class FibonacciActor end end + + -- Sends result back to parent or in the case of the root FibonacciActor prints the result def processResult(var response : Response) : unit match this.parent with case Just(p) => { p!process(consume response); (); } From 53910b614bcafceaf511c66457e4b9b4f9f57d58 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Tue, 5 Feb 2019 23:15:52 +0100 Subject: [PATCH 03/77] Lifted method calls out of loop conditions to minimize overhead --- .../savina/21.ParallelQuickSort/Main.enc | 103 ++++++++++++------ src/tests/stress/savina/6.Fib/fib.enc | 6 +- 2 files changed, 72 insertions(+), 37 deletions(-) diff --git a/src/tests/stress/savina/21.ParallelQuickSort/Main.enc b/src/tests/stress/savina/21.ParallelQuickSort/Main.enc index 37283e291..eb443c49d 100644 --- a/src/tests/stress/savina/21.ParallelQuickSort/Main.enc +++ b/src/tests/stress/savina/21.ParallelQuickSort/Main.enc @@ -1,19 +1,30 @@ import Random import ArrayList + typedef Position = int + fun left() : Position -(1) end + fun right() : Position 1 end + fun initial() : Position 0 end + +-- Params: borrowed: pivot: +-- Pre: +-- Post: ArrayList containing all elements of 'borrowed' less than 'pivot' +-- Side effects: fun filterLessThan(data : borrowed ArrayList[int], pivot : int) : ArrayList[int] - var result = new ArrayList[int](data.size()) + var n = data.size() -- Keep this out of the loop stop condition to avoid one method call for each list item + var result = new ArrayList[int](n) var i = 0 - while i < data.size() do + + while i < n do let d = data.at(i) in @@ -25,10 +36,16 @@ fun filterLessThan(data : borrowed ArrayList[int], pivot : int) : ArrayList[int] end consume result end + +-- Params: borrowed: pivot: +-- Pre: +-- Post: ArrayList containing all elements of 'borrowed' equal to 'pivot' +-- Side effects: fun filterEqualsTo(data : borrowed ArrayList[int], pivot : int) : ArrayList[int] - var result = new ArrayList[int](data.size()) + var n = data.size() -- Keep this out of the loop stop condition to avoid one method call for each list item + var result = new ArrayList[int](n) var i = 0 - while i < data.size() do + while i < n do let d = data.at(i) in @@ -40,10 +57,16 @@ fun filterEqualsTo(data : borrowed ArrayList[int], pivot : int) : ArrayList[int] end consume result end + +-- Params: borrowed: pivot: +-- Pre: +-- Post: ArrayList containing all elements of 'borrowed' greater than 'pivot' +-- Side effects: fun filterGreaterThan(data : borrowed ArrayList[int], pivot : int) : ArrayList[int] - var result = new ArrayList[int](data.size()) + var n = data.size() + var result = new ArrayList[int](n) var i = 0 - while i < data.size() do + while i < n do let d = data.at(i) in @@ -61,41 +84,47 @@ fun quicksortSeq(data : borrowed ArrayList[int]) : ArrayList[int] dataLength = data.size() in var result = new ArrayList[int](dataLength) + -- Lists with less than two elements are by default sorted if dataLength < 2 then result.addAll(data) consume result else - val pivot = data.at(data.size() / 2) + val pivot = data.at(dataLength / 2) var leftUnsorted = filterLessThan(data, pivot) - var leftSorted = quicksortSeq(leftUnsorted) + + var leftSorted = quicksortSeq(leftUnsorted) var equalElements = filterEqualsTo(data, pivot) - var rightSorted = quicksortSeq(filterGreaterThan(data, pivot)) + var rightSorted = quicksortSeq(filterGreaterThan(data, pivot)) + result.addAll(leftSorted) result.addAll(equalElements) result.addAll(rightSorted) + assertTrue(result.size() == data.size(), "the size of the resulting array is different from the size of the input") consume result end end end -fun checkSorted(data : ArrayList[int]) : bool - true -end -fun randomInitialArray(n : int, s : int, m : int) : ArrayList[int] - var result = new ArrayList[int](n) + + +fun randomInitialArray(size : int, s : int, maxVal : int) : ArrayList[int] + var result = new ArrayList[int](size) val r = new Random(s) - for i <- [0..n - 1] do - result.add(r.random(m)) + for i <- [0..size - 1] do + result.add(r.random(maxVal)) end consume result end -fun printArray(s : String, a : borrowed ArrayList[int]) : unit - if a.size() > 0 then - var result = string_from_int(a.at(0)) + +fun printArray(s : String, list : borrowed ArrayList[int]) : unit + var n = list.size() + + if n > 0 then + var result = string_from_int(list.at(0)) var i = 1 - while i < a.size() do + while i < n do result = result.concatenate(", ") - result = result.concatenate(string_from_int(a.at(i))) + result = result.concatenate(string_from_int(list.at(i))) i = i + 1 end print("{}: {} \n", s, result) @@ -103,18 +132,20 @@ fun printArray(s : String, a : borrowed ArrayList[int]) : unit end active class QuickSortActor : Id - var t : int + var seqThreshold : int var parent : QuickSortActor var result : ArrayList[int] var numFragments : int - var myPosition : Position - def init(parent : QuickSortActor, pos : Position, t : int, n : int) : unit - this.t = t + var myPosition : Position -- The position from the perspective of the parent, left or right part of original list + + def init(parent : QuickSortActor, pos : Position, seqThreshold : int, n : int) : unit + this.seqThreshold = seqThreshold this.parent = parent this.result = new ArrayList[int](n) - this.numFragments = 0 + this.numFragments = 0 -- Number of completed fragments, done when 3 this.myPosition = pos end + def done(var data : ArrayList[int], position : Position) : unit if data != null then if position == left() then @@ -131,6 +162,7 @@ active class QuickSortActor : Id end end end + def notify() : unit if this.parent != null then this.parent!done(consume this.result, this.myPosition) @@ -140,19 +172,20 @@ active class QuickSortActor : Id this.result = consume res end end + def sort(data : ArrayList[int]) : unit let dataLength = data.size() in - if dataLength < this.t then + if dataLength < this.seqThreshold then this.result = quicksortSeq(data) this.notify() else let pivot = data.at(dataLength / 2) in - (new QuickSortActor(this, left(), this.t, data.size()))!sort(filterLessThan(data, pivot)) - (new QuickSortActor(this, right(), this.t, data.size()))!sort(filterGreaterThan(data, pivot)) + (new QuickSortActor(this, left(), this.seqThreshold, dataLength))!sort(filterLessThan(data, pivot)) + (new QuickSortActor(this, right(), this.seqThreshold, dataLength))!sort(filterGreaterThan(data, pivot)) this.result = filterEqualsTo(data, pivot) this.numFragments = this.numFragments + 1 end @@ -160,6 +193,7 @@ active class QuickSortActor : Id end end end + active class Main def argToInt(str : String) : int match str.to_int() with @@ -172,14 +206,15 @@ active class Main end end + def main(args : [String]) : unit let - n = 100 --1000000 - m = 1152921504606846976 -- 2^60 - t = 2048 - s = 1024 + numberOfElements = 1000000 + maxValue = 1152921504606846976 -- 2^60 + seqThreshold = 2048 + randomSeed = 1024 in - (new QuickSortActor(null, initial(), t, n))!sort(randomInitialArray(n, s, m)) + (new QuickSortActor(null, initial(), seqThreshold, numberOfElements))!sort(randomInitialArray(numberOfElements, randomSeed, maxValue)) println("Done!") end end diff --git a/src/tests/stress/savina/6.Fib/fib.enc b/src/tests/stress/savina/6.Fib/fib.enc index 482a12449..7473e5dca 100644 --- a/src/tests/stress/savina/6.Fib/fib.enc +++ b/src/tests/stress/savina/6.Fib/fib.enc @@ -36,9 +36,9 @@ active class Main end in let - fjRunner = new FibonacciActor(Nothing) + handler = new FibonacciActor(Nothing) in - fjRunner!process(new Request(N)) + handler!process(new Request(N)) end end end @@ -119,7 +119,7 @@ active class FibonacciActor def processResult(var response : Response) : unit match this.parent with case Just(p) => { p!process(consume response); (); } - case Nothing => print(" Result = {}\n", this.result) + case Nothing => print("Result = {}\n", this.result) end end end From 1b5be837234a788c363605e23c67a34e8bd1fc24 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Wed, 13 Feb 2019 20:59:10 +0100 Subject: [PATCH 04/77] Added a script to generate a list of all probes available in a program, and a template for a makefile to automate some stuff we probably are going to be do doing a lot --- src/tests/dtrace/Makefile | 19 +++++++++++++++++++ src/tests/dtrace/probes.sh | 14 ++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/tests/dtrace/Makefile create mode 100755 src/tests/dtrace/probes.sh diff --git a/src/tests/dtrace/Makefile b/src/tests/dtrace/Makefile new file mode 100644 index 000000000..8ccce8a05 --- /dev/null +++ b/src/tests/dtrace/Makefile @@ -0,0 +1,19 @@ +SOURCE=None + +build: + encorec -c $(SOURCE) + +compile: + cd $(SOURCE)_src && make && mv $(SOURCE) ../ + +run: + sudo dtrace -s dtrace.d -c ./$(SOURCE) + +clean: + rm $(SOURCE) + +list: + @sudo dtrace -l -P "pony*" -P "encore*" -c ./$(SOURCE) + +gen: + ./probes.sh $(SOURCE) diff --git a/src/tests/dtrace/probes.sh b/src/tests/dtrace/probes.sh new file mode 100755 index 000000000..e2fbdfb1e --- /dev/null +++ b/src/tests/dtrace/probes.sh @@ -0,0 +1,14 @@ +#!/bin/zsh + +sudo dtrace -l -P "encore*" -P "pony*" -c ./$1 > tmp + +enc_probes="$(awk '/encore/ {printf "%s %s\n", $4, $5}' tmp)" +enc_probes="$(echo $enc_probes | awk '!/_enc/ {printf "%s\n", $0}')" +pon_probes="$(awk '/pony/ {printf "%s %s\n", $4, $5}' tmp)" + +echo "Encore probes:" > probes.txt +echo "Name Probe\n $enc_probes" | awk '{printf "%s %s\n", $2, $1}' | column -t >> probes.txt +echo "\nPony probes:" >> probes.txt +echo "Name Probe $pon_probes" | awk '{printf "%s %s\n", $2, $1}' | column -t >> probes.txt + +rm tmp From 2b7f34139ba504ed43eed96c9660cbe5e8c999d0 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Feb 2019 13:59:06 +0100 Subject: [PATCH 05/77] Added folder --- probing-tools/dtrace/.gitkeep | 0 probing-tools/systemtap/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 probing-tools/dtrace/.gitkeep create mode 100644 probing-tools/systemtap/.gitkeep diff --git a/probing-tools/dtrace/.gitkeep b/probing-tools/dtrace/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/probing-tools/systemtap/.gitkeep b/probing-tools/systemtap/.gitkeep new file mode 100644 index 000000000..e69de29bb From 545d0d3e145f57a9d3746dce9d5810ea0d86c7f6 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Feb 2019 14:11:06 +0100 Subject: [PATCH 06/77] Added dtrace script with all probes --- probing-tools/dtrace/.gitkeep | 0 probing-tools/dtrace/dtrace.d | 44 +++++++++++++++++++++++++++++++++++ src/tests/dtrace/Makefile | 19 --------------- src/tests/dtrace/probes.sh | 14 ----------- 4 files changed, 44 insertions(+), 33 deletions(-) delete mode 100644 probing-tools/dtrace/.gitkeep create mode 100644 probing-tools/dtrace/dtrace.d delete mode 100644 src/tests/dtrace/Makefile delete mode 100755 src/tests/dtrace/probes.sh diff --git a/probing-tools/dtrace/.gitkeep b/probing-tools/dtrace/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d new file mode 100644 index 000000000..6d603581b --- /dev/null +++ b/probing-tools/dtrace/dtrace.d @@ -0,0 +1,44 @@ +BEGIN { } + +END { } + +pony$target:::actor-alloc { } +pony$target:::actor-msg-send { } +pony$target:::actor-msg-run { } +pony$target:::actor-scheduled { } +pony$target:::actor-descheduled { } +pony$target:::cpu-nanosleep { } +pony$target:::gc-end {} +pony$target:::gc-send-end {} +pony$target:::gc-send-start {} +pony$target:::gc-recv-end {} +pony$target:::gc-recv-start {} +pony$target:::gc-start {} +pony$target:::gc-threshold {} +pony$target:::heap-alloc {} +pony$target:::rt-init {} +pony$target:::rt-start {} +pony$target:::rt-end {} +pony$target:::work-steal-successful {} +pony$target:::work-steal-failure {} + +encore$target:::closure-create {} +encore$target:::future-block {} +encore$target:::future-chaining {} +encore$target:::future-create {} +encore$target:::future-destroy {} +encore$target:::future-fulfil-start {} +encore$target:::future-fulfil-end {} +encore$target:::future-get {} +encore$target:::future-unblock {} +encore$target:::field-access {} +encore$target:::field-write {} +// encore$target:::method-call {} +encore$target:::method-entry {} +encore$target:::method-exit {} +encore$target:::function-call {} +encore$target:::function-entry {} +encore$target:::function-exit {} +// encore$target:::closure-call {} +// encore$target:::closure-entry {} +// encore$target:::closure-exit {} diff --git a/src/tests/dtrace/Makefile b/src/tests/dtrace/Makefile deleted file mode 100644 index 8ccce8a05..000000000 --- a/src/tests/dtrace/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -SOURCE=None - -build: - encorec -c $(SOURCE) - -compile: - cd $(SOURCE)_src && make && mv $(SOURCE) ../ - -run: - sudo dtrace -s dtrace.d -c ./$(SOURCE) - -clean: - rm $(SOURCE) - -list: - @sudo dtrace -l -P "pony*" -P "encore*" -c ./$(SOURCE) - -gen: - ./probes.sh $(SOURCE) diff --git a/src/tests/dtrace/probes.sh b/src/tests/dtrace/probes.sh deleted file mode 100755 index e2fbdfb1e..000000000 --- a/src/tests/dtrace/probes.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/zsh - -sudo dtrace -l -P "encore*" -P "pony*" -c ./$1 > tmp - -enc_probes="$(awk '/encore/ {printf "%s %s\n", $4, $5}' tmp)" -enc_probes="$(echo $enc_probes | awk '!/_enc/ {printf "%s\n", $0}')" -pon_probes="$(awk '/pony/ {printf "%s %s\n", $4, $5}' tmp)" - -echo "Encore probes:" > probes.txt -echo "Name Probe\n $enc_probes" | awk '{printf "%s %s\n", $2, $1}' | column -t >> probes.txt -echo "\nPony probes:" >> probes.txt -echo "Name Probe $pon_probes" | awk '{printf "%s %s\n", $2, $1}' | column -t >> probes.txt - -rm tmp From b56820063e378c4a73bd5ffbadca32fbf7409681 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Feb 2019 14:17:02 +0100 Subject: [PATCH 07/77] Added quiet option --- probing-tools/dtrace/dtrace.d | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 6d603581b..820826324 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -1,6 +1,12 @@ -BEGIN { } +#pragma D option quiet -END { } +BEGIN { + printf("Dtrace started!"); +} + +END { + printf("Dtrace finished!"); +} pony$target:::actor-alloc { } pony$target:::actor-msg-send { } From b3ca0e13c0ffd91078ce48275f9f6c039023fd42 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Wed, 20 Feb 2019 13:32:57 +0100 Subject: [PATCH 08/77] counting calls --- probing-tools/systemtap/countingCalls.stp | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 probing-tools/systemtap/countingCalls.stp diff --git a/probing-tools/systemtap/countingCalls.stp b/probing-tools/systemtap/countingCalls.stp new file mode 100644 index 000000000..362e7eacc --- /dev/null +++ b/probing-tools/systemtap/countingCalls.stp @@ -0,0 +1,83 @@ +#Counts the frequency of different probes being fired being made + +global actor-alloc +global actor-msg-send +global actor-msg-run +global actor-scheduled +global actor-descheduled +global cpu-nanosleep +global gc-end +global gc-send-end +global gc-send-start +global gc-recv-end +global gc-recv-start +global gc-threshold +global heap-alloc +global heap-alloc +global rt-init +global rt-end +global rt-star +global work-steal-successful +global work-steal-failure + + +probe process.mark("actor-alloc"){ + actor-alloc <<< 1 +} +probe process.mark("actor-msg-send"){ + actor-msg-send <<< 1 +} +pr*obe process.mark("actor-msg-run"){ + actor-msg-run <<< 1 +} +probe process.mark("actor-scheduled"){ + actor-scheduled <<< 1 + +} +probe process.mark("actor-descheduled"){ + actor-descheduled <<< 1 +} +probe process.mark("cpu-nanosleep"){ + cpu-nanosleep <<< 1 +} +probe process.mark("gc-end"){ + gc-end <<< 1 +} +probe process.mark("gc-send-end"){ + gc-send-end <<< 1 +} +probe process.mark("gc-send-start"){ + gc-send-start <<< 1 +} +probe process.mark("gc-recv-end"){ + gc-recv-end <<< 1 +} +probe process.mark("gc-recv-start"){ + gc-recv-start <<< 1 + +} +probe process.mark("gc-start"){ + gc-start <<< 1 + +} +probe process.mark("gc-threshold"){ + gc-threshold <<< 1 +} +probe process.mark("heap-alloc"){ + heap-alloc <<< 1 +} +probe process.mark("rt-init"){ + rt-init <<< 1 +} +probe process.mark("rt-end"){ + rt-end <<< 1 +} +probe process.mark("rt-star"){ + rt-star <<< 1 +} +probe process.mark("work-steal-successful"){ + work-steal-successful <<<1 +} +probe process.mark("work-steal-failure"){ + work-steal-failure <<< 1 +} From 73c3e75d570ce2ee88a0d4561853f05763df872f Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Sun, 24 Feb 2019 12:47:07 +0100 Subject: [PATCH 09/77] added future block information --- .../systemtap/whatTobiasAskedFor.stp | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 probing-tools/systemtap/whatTobiasAskedFor.stp diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp new file mode 100644 index 000000000..e7b669479 --- /dev/null +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -0,0 +1,69 @@ +#Number of messages sent --Done +#Creation of futures ---Done +#Uses of the forward construct...? --Todo +#Future fulfillment -- Working on it +#Getting the results of a future +#Chaining on a future +#Lifetime of a future -- done +#When a chaining funciton is run +#who runs the chaining? + +#Ration of messages vs futures +#How much time ipent blocking a future +#Which classes blocks futures + +#-------------------------------------------Begin +global actor_msg_send +global future_created +global future_list +global blocks +global future_block_list + +probe process.mark("actor-msg-send") +{ + actor_msg_send <<< 1; +} + +probe process.mark("future-create") { + future_created <<< 1; + created_future = sprint($arg2) + future_list[created_future] = $arg2 + future_block_list[created_future] = 0 + start_stopwatch(created_future) + + + +} + +probe process.mark("future-block") { + blocks <<< 1; + blocked_future = sprint($arg2) + future_block_list[blocked_future] += 1 +} + +probe process.mark("future-destroy") { + destroyed_future = sprint($arg2) + if([destroyed_future] in future_list) { + stop_stopwatch(destroyed_future) + } +} + +probe end { + printf("\n") + message_num = @count(actor_msg_send) + future_num = @count(future_created) + total_blocks = @count(blocks) + printf("Amount of messages:\t \t %d\n", message_num) + printf("Amount of futures created:\t %d\n", future_num) + printf("Amount of blocks in total: %d \n", total_blocks) + printf("Ratio future:message \t \t %d:%d \n", 1, message_num/future_num) + + printf("\nfuture ID: \t lifetime (us): \ttimes blocked:\n") + foreach(fut in future_list) { + time = read_stopwatch_us(sprint(fut)) + blocked_num = future_block_list[sprint(fut)] + printf("%s \t %d \t \t %d \n", fut, time, blocked_num) + } + + +} \ No newline at end of file From 8a72325950f12b752f7f408fb9439a5cc5e393a6 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Sun, 24 Feb 2019 13:54:08 +0100 Subject: [PATCH 10/77] =?UTF-8?q?massa=20saker=20om=20futures=20-=20ingen?= =?UTF-8?q?=20chaining=20=C3=A4n=20dock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- probing-tools/systemtap/whatTobiasAskedFor.stp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp index e7b669479..763d26d7c 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -35,10 +35,20 @@ probe process.mark("future-create") { } +global actor_blocked + probe process.mark("future-block") { blocks <<< 1; blocked_future = sprint($arg2) future_block_list[blocked_future] += 1 + + block_block_fut = sprint("block", $arg2) + start_stopwatch(block_block_fut) +} + +probe process.mark("future-unblock") { + fulfilled_fut = sprint("block", $arg2) + stop_stopwatch(fulfilled_fut) } probe process.mark("future-destroy") { @@ -55,14 +65,15 @@ probe end { total_blocks = @count(blocks) printf("Amount of messages:\t \t %d\n", message_num) printf("Amount of futures created:\t %d\n", future_num) - printf("Amount of blocks in total: %d \n", total_blocks) + printf("Amount of blocks in total: \t %d \n", total_blocks) printf("Ratio future:message \t \t %d:%d \n", 1, message_num/future_num) - printf("\nfuture ID: \t lifetime (us): \ttimes blocked:\n") + printf("\nfuture ID: \t lifetime (us): \t blocked num: \t time blocked (us): \n") foreach(fut in future_list) { time = read_stopwatch_us(sprint(fut)) blocked_num = future_block_list[sprint(fut)] - printf("%s \t %d \t \t %d \n", fut, time, blocked_num) + time_waiting = read_stopwatch_us(sprint("block", fut)) + printf("%s \t %d \t \t %d \t \t %d \n", fut, time, blocked_num, time_waiting) } From ee5bee6794f7417e156a7a36acef5ee746bb9809 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Mon, 25 Feb 2019 15:19:44 +0100 Subject: [PATCH 11/77] chaining --- .../systemtap/whatTobiasAskedFor.stp | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp index 763d26d7c..731b7119e 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -13,37 +13,33 @@ #Which classes blocks futures #-------------------------------------------Begin + +# counters global actor_msg_send global future_created -global future_list global blocks -global future_block_list +#list of ID:s +global list_of_futures + +#messages probe process.mark("actor-msg-send") { actor_msg_send <<< 1; } +#futures probe process.mark("future-create") { future_created <<< 1; created_future = sprint($arg2) - future_list[created_future] = $arg2 - future_block_list[created_future] = 0 + list_of_futures[created_future] = $arg2 start_stopwatch(created_future) - - - } -global actor_blocked - probe process.mark("future-block") { blocks <<< 1; blocked_future = sprint($arg2) - future_block_list[blocked_future] += 1 - - block_block_fut = sprint("block", $arg2) - start_stopwatch(block_block_fut) + start_stopwatch(sprint("block", $arg2)) } probe process.mark("future-unblock") { @@ -53,11 +49,20 @@ probe process.mark("future-unblock") { probe process.mark("future-destroy") { destroyed_future = sprint($arg2) - if([destroyed_future] in future_list) { + if([destroyed_future] in list_of_futures) { stop_stopwatch(destroyed_future) } } +#chaining +global chained_actor_list +probe process.mark("future-chaining") { + future_chained = $arg2 + chained_actor_list[sprint(future_chained)] = future_chained +} + + + probe end { printf("\n") message_num = @count(actor_msg_send) @@ -65,15 +70,28 @@ probe end { total_blocks = @count(blocks) printf("Amount of messages:\t \t %d\n", message_num) printf("Amount of futures created:\t %d\n", future_num) - printf("Amount of blocks in total: \t %d \n", total_blocks) + printf("Amount of futures blocked in total: \t %d \n", total_blocks) printf("Ratio future:message \t \t %d:%d \n", 1, message_num/future_num) - printf("\nfuture ID: \t lifetime (us): \t blocked num: \t time blocked (us): \n") - foreach(fut in future_list) { - time = read_stopwatch_us(sprint(fut)) - blocked_num = future_block_list[sprint(fut)] - time_waiting = read_stopwatch_us(sprint("block", fut)) - printf("%s \t %d \t \t %d \t \t %d \n", fut, time, blocked_num, time_waiting) + printf("\nfuture ID: \t lifetime (us): \t time blocked (us): \t chained: \n") + foreach(fut in list_of_futures) { + fut_string = sprint(fut) + + #stopwatches: + time = read_stopwatch_us(fut_string) + time_waiting = read_stopwatch_us(sprint("block", fut_string)) + + #chained: + if(fut_string in chained_actor_list) { + cha = "yes" + } + else { + cha = "no" + } + + + + printf("%s \t %d \t \t \t %d \t \t %s \n", fut, time, time_waiting, cha) } From 84ef51d56b4b33ddc6096c7300c0f1a04c96fed5 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Mon, 25 Feb 2019 21:47:45 +0100 Subject: [PATCH 12/77] actor steal and scheduling count --- probing-tools/dtrace/dtrace.d | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 probing-tools/dtrace/dtrace.d diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d new file mode 100644 index 000000000..7572b5ecf --- /dev/null +++ b/probing-tools/dtrace/dtrace.d @@ -0,0 +1,91 @@ +#pragma D option quiet + +BEGIN { + total_steals = 0; + total_failed_steals = 0; + total_steal_attempts = 0; + total_schedulings = 0; +} + + + +pony$target:::actor-alloc { } +pony$target:::actor-msg-send { } +pony$target:::actor-msg-run { } + +// arg[0] is scheduler, arg[1] is actor +pony$target:::actor-scheduled +{ + total_schedulings++; + @schedulers_for_actor[args[0], args[1]] = count(); +} + +pony$target:::actor-descheduled { } +pony$target:::cpu-nanosleep { } +pony$target:::gc-end {} +pony$target:::gc-send-end {} +pony$target:::gc-send-start {} +pony$target:::gc-recv-end {} +pony$target:::gc-recv-start {} +pony$target:::gc-start {} +pony$target:::gc-threshold {} +pony$target:::heap-alloc {} +pony$target:::rt-init {} +pony$target:::rt-start {} +pony$target:::rt-end {} + +pony$target:::work-steal-successful +{ + total_steals++; + total_steal_attempts++; + @steal_success_count[args[0]] = count(); +} +pony$target:::work-steal-failure +{ + total_failed_steals++; + total_steal_attempts++; + @steal_fail_count[args[0]] = count(); +} + +encore$target:::closure-create {} +encore$target:::future-block {} +encore$target:::future-chaining {} +encore$target:::future-create {} +encore$target:::future-destroy {} +encore$target:::future-fulfil-start {} +encore$target:::future-fulfil-end {} +encore$target:::future-get {} +encore$target:::future-unblock {} +encore$target:::field-access {} +encore$target:::field-write {} +// encore$target:::method-call {} +encore$target:::method-entry {} +encore$target:::method-exit {} +encore$target:::function-call {} +encore$target:::function-entry {} +encore$target:::function-exit {} +// encore$target:::closure-call {} +// encore$target:::closure-entry {} +// encore$target:::closure-exit {} + +END { + printf("Total steal attempts:\t\t %d\n", total_steal_attempts); + printf("Total successful steals:\t %d\n", total_steals); + printf("Total failed steal attempts:\t %d\n", total_failed_steals); + printf("Total schedulings: \t\t%d\n", total_schedulings); + + printf("\n"); + printf("Actors scheduled by Schedulers\n"); + printf("Scheduler ID\tActor ID\tCount\n"); + printa("%d\t%d%@8u\n", @schedulers_for_actor); + + printf("\n"); + printf("Successive steals\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@8u\n", @steal_success_count); + + printf("\n"); + printf("Failed steals\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@8u\n", @steal_fail_count); +} \ No newline at end of file From ffe88ac2155d0730e6475116abfe30950505687b Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Mon, 25 Feb 2019 22:30:24 +0100 Subject: [PATCH 13/77] prettified the output --- probing-tools/dtrace/dtrace.d | 82 ++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 337d65060..9942adada 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -1,27 +1,17 @@ #pragma D option quiet -BEGIN { -<<<<<<< HEAD +BEGIN +{ total_steals = 0; total_failed_steals = 0; total_steal_attempts = 0; total_schedulings = 0; } - -======= - printf("Dtrace started!"); -} - -END { - printf("Dtrace finished!"); -} ->>>>>>> 8a72325950f12b752f7f408fb9439a5cc5e393a6 - pony$target:::actor-alloc { } pony$target:::actor-msg-send { } pony$target:::actor-msg-run { } -<<<<<<< HEAD + // arg[0] is scheduler, arg[1] is actor pony$target:::actor-scheduled @@ -30,9 +20,6 @@ pony$target:::actor-scheduled @schedulers_for_actor[args[0], args[1]] = count(); } -======= -pony$target:::actor-scheduled { } ->>>>>>> 8a72325950f12b752f7f408fb9439a5cc5e393a6 pony$target:::actor-descheduled { } pony$target:::cpu-nanosleep { } pony$target:::gc-end {} @@ -46,24 +33,34 @@ pony$target:::heap-alloc {} pony$target:::rt-init {} pony$target:::rt-start {} pony$target:::rt-end {} -<<<<<<< HEAD + /** + * Fired when a scheduler succesfully steals a job + * @param scheduler is the scheduler that stole the job + * @param victim is the victim that the scheduler stole from + * @param actor is actor that was stolen from the victim + */ pony$target:::work-steal-successful { total_steals++; total_steal_attempts++; @steal_success_count[args[0]] = count(); + @successful_steal_from_scheduler[args[0], args[1]] = count(); + @stolen_actor[args[2]] = count(); } + +/** + * Fired when a scheduler fails to steal a job + * @param scheduler is the scheduler that attempted theft + * @param victim is the victim that the scheduler attempted to steal from + */ pony$target:::work-steal-failure { total_failed_steals++; total_steal_attempts++; @steal_fail_count[args[0]] = count(); + @failed_steal_from_scheduler[args[0], args[1]] = count(); } -======= -pony$target:::work-steal-successful {} -pony$target:::work-steal-failure {} ->>>>>>> 8a72325950f12b752f7f408fb9439a5cc5e393a6 encore$target:::closure-create {} encore$target:::future-block {} @@ -85,28 +82,43 @@ encore$target:::function-exit {} // encore$target:::closure-call {} // encore$target:::closure-entry {} // encore$target:::closure-exit {} -<<<<<<< HEAD -END { - printf("Total steal attempts:\t\t %d\n", total_steal_attempts); - printf("Total successful steals:\t %d\n", total_steals); - printf("Total failed steal attempts:\t %d\n", total_failed_steals); - printf("Total schedulings: \t\t%d\n", total_schedulings); - printf("\n"); - printf("Actors scheduled by Schedulers\n"); - printf("Scheduler ID\tActor ID\tCount\n"); - printa("%d\t%d%@8u\n", @schedulers_for_actor); +END { + printf("==========================================\n\t\tSTEALS\n==========================================\n"); + printf("\nTOTAL\n"); + printf("Attempted\tSuccessful\tFailed\n"); + printf("%d\t\t%d\t\t%d\n", total_steal_attempts, total_steals, total_failed_steals); printf("\n"); - printf("Successive steals\n"); + printf("SUCCESSIVE STEALS\n"); printf("Scheduler ID\tCount\n"); printa("%d%@8u\n", @steal_success_count); printf("\n"); - printf("Failed steals\n"); + printf("FAILED STEALS\n"); printf("Scheduler ID\tCount\n"); printa("%d%@8u\n", @steal_fail_count); + + printf("\nSTEALS BETWEEN SCHEDULERS\n"); + printf("Stolen by\tStolen from\tCount\n"); + printa("%d\t%d%@8u\n", @successful_steal_from_scheduler); + + printf("\nFAILS BETWEEN SCHEDULERS\n"); + printf("Attempted by\tTarget\t\tCount\n"); + printa("%d\t%d%@8u\n", @failed_steal_from_scheduler); + + printf("\nSTOLEN ACTORS\n"); + printf("Actor ID\tTimes stolen\n"); + printa("%d%@8u\n", @stolen_actor); + + printf("\n==========================================\n\t\tSCHEDULING\n==========================================\n"); + printf("\nTOTAL SCHEDULINGS: %d\n", total_schedulings); + + printf("\n"); + printf("DISTRIBUTION\n"); + printf("Scheduler ID\tActor ID\tCount\n"); + printa("%d\t%d%@8u\n", @schedulers_for_actor); + + } -======= ->>>>>>> 8a72325950f12b752f7f408fb9439a5cc5e393a6 From b8fae712ce34ba7083a2dbc1b663a3b9544057e3 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Fri, 1 Mar 2019 21:06:43 +0100 Subject: [PATCH 14/77] added diagnostics and cpu structs --- probing-tools/dtrace/dtrace.d | 69 +++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 9942adada..fe3bc4cd7 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -1,11 +1,25 @@ #pragma D option quiet +struct actor_info { + uint64_t cpu; + uint32_t steals; + uint32_t jumps; +}; + +struct diagnostics { + uint32_t successful_steals; + uint32_t failed_steals; + uint32_t steal_attempts; + uint32_t cpu_jumps; + uint32_t schedulings; +}; + +struct diagnostics diagnostics; +struct actor_info cpus[int64_t]; /* declare cpus as an associative array */ + BEGIN { - total_steals = 0; - total_failed_steals = 0; - total_steal_attempts = 0; - total_schedulings = 0; + } pony$target:::actor-alloc { } @@ -16,6 +30,9 @@ pony$target:::actor-msg-run { } // arg[0] is scheduler, arg[1] is actor pony$target:::actor-scheduled { + + cpus[arg1].cpu = cpu; // current CPU of the actor + diagnostics.schedulings++; total_schedulings++; @schedulers_for_actor[args[0], args[1]] = count(); } @@ -34,6 +51,8 @@ pony$target:::rt-init {} pony$target:::rt-start {} pony$target:::rt-end {} + +pony$target:::core-jump { } /** * Fired when a scheduler succesfully steals a job * @param scheduler is the scheduler that stole the job @@ -42,11 +61,13 @@ pony$target:::rt-end {} */ pony$target:::work-steal-successful { - total_steals++; - total_steal_attempts++; - @steal_success_count[args[0]] = count(); - @successful_steal_from_scheduler[args[0], args[1]] = count(); - @stolen_actor[args[2]] = count(); + diagnostics.cpu_jumps = cpus[arg0].cpu != cpus[arg2].cpu ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; + diagnostics.successful_steals++; + diagnostics.steal_attempts++; + + @steal_success_count[arg0] = count(); + @successful_steal_from_scheduler[arg0, arg1] = count(); + @stolen_actor[arg2] = count(); } /** @@ -56,10 +77,10 @@ pony$target:::work-steal-successful */ pony$target:::work-steal-failure { - total_failed_steals++; - total_steal_attempts++; - @steal_fail_count[args[0]] = count(); - @failed_steal_from_scheduler[args[0], args[1]] = count(); + diagnostics.failed_steals++; + diagnostics.steal_attempts++; + @steal_fail_count[arg0] = count(); + @failed_steal_from_scheduler[arg0, arg1] = count(); } encore$target:::closure-create {} @@ -88,20 +109,21 @@ END { printf("==========================================\n\t\tSTEALS\n==========================================\n"); printf("\nTOTAL\n"); printf("Attempted\tSuccessful\tFailed\n"); - printf("%d\t\t%d\t\t%d\n", total_steal_attempts, total_steals, total_failed_steals); + printf("%d\t\t%d\t\t%d\n", + diagnostics.steal_attempts, + diagnostics.successful_steals, + diagnostics.failed_steals); - printf("\n"); - printf("SUCCESSIVE STEALS\n"); + printf("\nSUCCESSIVE STEALS\n"); printf("Scheduler ID\tCount\n"); printa("%d%@8u\n", @steal_success_count); - printf("\n"); - printf("FAILED STEALS\n"); + printf("\nFAILED STEALS\n"); printf("Scheduler ID\tCount\n"); printa("%d%@8u\n", @steal_fail_count); printf("\nSTEALS BETWEEN SCHEDULERS\n"); - printf("Stolen by\tStolen from\tCount\n"); + printf("Stolen by\tStolen from\tCount\n"); printa("%d\t%d%@8u\n", @successful_steal_from_scheduler); printf("\nFAILS BETWEEN SCHEDULERS\n"); @@ -112,13 +134,12 @@ END { printf("Actor ID\tTimes stolen\n"); printa("%d%@8u\n", @stolen_actor); + printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); + printf("\n==========================================\n\t\tSCHEDULING\n==========================================\n"); - printf("\nTOTAL SCHEDULINGS: %d\n", total_schedulings); + printf("\nTOTAL SCHEDULINGS: %d\n", diagnostics.schedulings); - printf("\n"); - printf("DISTRIBUTION\n"); + printf("\nDISTRIBUTION\n"); printf("Scheduler ID\tActor ID\tCount\n"); printa("%d\t%d%@8u\n", @schedulers_for_actor); - - } From 1ba10fa9e02dd8a9e59167ab388c29b62274701f Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Sat, 2 Mar 2019 17:18:35 +0100 Subject: [PATCH 15/77] =?UTF-8?q?lite=20mer=20p=C3=A5=20future=20delen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../systemtap/whatTobiasAskedFor.stp | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp index 731b7119e..5049131ea 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -3,7 +3,7 @@ #Uses of the forward construct...? --Todo #Future fulfillment -- Working on it #Getting the results of a future -#Chaining on a future +#Chaining on a future --done #Lifetime of a future -- done #When a chaining funciton is run #who runs the chaining? @@ -21,6 +21,9 @@ global blocks #list of ID:s global list_of_futures +global actor_ctx_id_blocked +global actor_being_blocked +global future_fulfil_list #messages probe process.mark("actor-msg-send") @@ -40,6 +43,8 @@ probe process.mark("future-block") { blocks <<< 1; blocked_future = sprint($arg2) start_stopwatch(sprint("block", $arg2)) + actor_being_blocked[blocked_future] = $arg1 + actor_ctx_id_blocked[sprint($arg1)]++ } probe process.mark("future-unblock") { @@ -54,6 +59,18 @@ probe process.mark("future-destroy") { } } +probe process.mark("method-entry") { + name = user_string($arg3) + if(name == "init") { + actor_ctx_id_blocked[sprint($arg1)] = 0 + } +} + +probe process.mark("future-fulfil-end"){ + future_id = sprint($arg2) + future_fulfil_list[sprint(future_id)] = future_id +} + #chaining global chained_actor_list probe process.mark("future-chaining") { @@ -61,8 +78,6 @@ probe process.mark("future-chaining") { chained_actor_list[sprint(future_chained)] = future_chained } - - probe end { printf("\n") message_num = @count(actor_msg_send) @@ -70,28 +85,37 @@ probe end { total_blocks = @count(blocks) printf("Amount of messages:\t \t %d\n", message_num) printf("Amount of futures created:\t %d\n", future_num) - printf("Amount of futures blocked in total: \t %d \n", total_blocks) + printf("Amount of blocked in total: \t %d \n", total_blocks) printf("Ratio future:message \t \t %d:%d \n", 1, message_num/future_num) - printf("\nfuture ID: \t lifetime (us): \t time blocked (us): \t chained: \n") + printf("\nfuture ID: \t lifetime (us): \t time blocked (us): \t chained: \t block act: \t fulfilled:\n") foreach(fut in list_of_futures) { - fut_string = sprint(fut) #stopwatches: - time = read_stopwatch_us(fut_string) - time_waiting = read_stopwatch_us(sprint("block", fut_string)) + time = read_stopwatch_us(fut) + time_waiting = read_stopwatch_us(sprint("block", fut)) + + #ctx id of blocked id: + actor = actor_being_blocked[fut] + + #Fulfilled + ful = "no" + if(fut in future_fulfil_list) { + ful = "yes" + } #chained: - if(fut_string in chained_actor_list) { + cha = "no" + if(fut in chained_actor_list) { cha = "yes" } - else { - cha = "no" - } + printf("%15d %13d %27d %15s %17d %15s \n", list_of_futures[fut], time, time_waiting, cha, actor, ful) + } - - printf("%s \t %d \t \t \t %d \t \t %s \n", fut, time, time_waiting, cha) + printf("\nactor ID: \t tot blocked:\n") + foreach(act in actor_ctx_id_blocked) { + printf("%s \t %d\n", act, actor_ctx_id_blocked[act]) } From 829d5d1fec7707c5b2243c6b2877de7e61e47662 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Tue, 5 Mar 2019 11:22:40 +0100 Subject: [PATCH 16/77] probing core jumps, steals and time spent in functions --- src/runtime/future/future.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/future/future.c b/src/runtime/future/future.c index 597aa9bac..9ad07753b 100644 --- a/src/runtime/future/future.c +++ b/src/runtime/future/future.c @@ -369,7 +369,7 @@ void future_register_callback(pony_ctx_t **ctx, future_t *fut, closure_t *c) { - ENC_DTRACE2(FUTURE_REGISTER_CALLBACK, (uintptr_t) *ctx, (uintptr_t) fut); +// ENC_DTRACE2(FUTURE_REGISTER_CALLBACK, (uintptr_t) *ctx, (uintptr_t) fut); perr("future_chain_actor"); BLOCK; From 591df5829f4f93fd6c6fe617edd6d20bddab995a Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Tue, 5 Mar 2019 11:25:40 +0100 Subject: [PATCH 17/77] tracing core jumps, steals and time spent in functions --- probing-tools/dtrace/dtrace.d | 158 ++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 probing-tools/dtrace/dtrace.d diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d new file mode 100644 index 000000000..3ca4a4c41 --- /dev/null +++ b/probing-tools/dtrace/dtrace.d @@ -0,0 +1,158 @@ +#pragma D option quiet + +struct actor_info { + uint64_t cpu; + uint32_t steals; + uint32_t jumps; +}; + +struct diagnostics { + uint32_t successful_steals; + uint32_t failed_steals; + uint32_t steal_attempts; + uint32_t cpu_jumps; + uint32_t schedulings; +}; + +struct diagnostics diagnostics; +struct actor_info cpus[int64_t]; /* declare cpus as an associative array */ + +BEGIN +{ + depth = 1; +} + +pony$target:::actor-alloc { } +pony$target:::actor-msg-send { } +pony$target:::actor-msg-run { } + + +// arg[0] is scheduler, arg[1] is actor +pony$target:::actor-scheduled +{ + + cpus[arg1].cpu = cpu; // current CPU of the actor + diagnostics.schedulings++; + total_schedulings++; + //@schedulers_for_actor[args[0], args[1]] = count(); +} + +pony$target:::actor-descheduled { } +pony$target:::cpu-nanosleep { } +pony$target:::gc-end {} +pony$target:::gc-send-end {} +pony$target:::gc-send-start {} +pony$target:::gc-recv-end {} +pony$target:::gc-recv-start {} +pony$target:::gc-start {} +pony$target:::gc-threshold {} +pony$target:::heap-alloc {} +pony$target:::rt-init {} +pony$target:::rt-start {} +pony$target:::rt-end {} + + +// pony$target:::core-jump +// { +// printf("Jumped\n"); +// } + /** + * Fired when a scheduler succesfully steals a job + * @param scheduler is the scheduler that stole the job + * @param victim is the victim that the scheduler stole from + * @param actor is actor that was stolen from the victim + */ +pony$target:::work-steal-successful +{ + diagnostics.cpu_jumps = cpus[arg0].cpu != cpus[arg2].cpu ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; + diagnostics.successful_steals++; + diagnostics.steal_attempts++; + + @steal_success_count[arg0] = count(); + @successful_steal_from_scheduler[arg0, arg1] = count(); + @stolen_actor[arg2] = count(); +} + +/** + * Fired when a scheduler fails to steal a job + * @param scheduler is the scheduler that attempted theft + * @param victim is the victim that the scheduler attempted to steal from + */ +pony$target:::work-steal-failure +{ + diagnostics.failed_steals++; + diagnostics.steal_attempts++; + @steal_fail_count[arg0] = count(); + @failed_steal_from_scheduler[arg0, arg1] = count(); +} + +encore$target:::closure-create {} +encore$target:::future-block {} +encore$target:::future-chaining {} +encore$target:::future-create {} +encore$target:::future-destroy {} +encore$target:::future-fulfil-start {} +encore$target:::future-fulfil-end {} +encore$target:::future-get {} +encore$target:::future-unblock {} +encore$target:::field-access {} +encore$target:::field-write {} +// encore$target:::method-call {} +encore$target:::method-entry {} +encore$target:::method-exit {} +encore$target:::function-call {} +encore$target:::function-entry {} +encore$target:::function-exit {} +// encore$target:::closure-call {} +// encore$target:::closure-entry {} +// encore$target:::closure-exit {} + +pid$target:Main::entry +{ + self->start[depth++] = vtimestamp; +} + +pid$target:Main::return +{ +// print(probemod); + @function_time[probefunc] = quantize(vtimestamp - self->start[depth-1]); + self->depth[depth--] = 0; +} + + +END { + printf("==========================================\n\t\tSTEALS\n==========================================\n"); + printf("\nTOTAL\n"); + printf("Attempted\tSuccessful\tFailed\n"); + printf("%d\t\t%d\t\t%d\n", + diagnostics.steal_attempts, + diagnostics.successful_steals, + diagnostics.failed_steals); + + printf("\nSUCCESSIVE STEALS\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@7u\n", @steal_success_count); + + printf("\nFAILED STEALS\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@7u\n", @steal_fail_count); + + printf("\nSTEALS BETWEEN SCHEDULERS\n"); + printf("Stolen by\tStolen from\tCount\n"); + printa("%d\t%d%@7u\n", @successful_steal_from_scheduler); + + printf("\nFAILS BETWEEN SCHEDULERS\n"); + printf("Attempted by\tTarget\t\tCount\n"); + printa("%d\t%d%@7u\n", @failed_steal_from_scheduler); + + printf("\nSTOLEN ACTORS\n"); + printf("Actor ID\tTimes stolen\n"); + printa("%d%@7u\n", @stolen_actor); + + printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); + + printf("\n==========================================\n\t\FUNCTIONS\n==========================================\n"); + + printf("\nTIME SPENT IN FUNCTIONS (Nanoseconds)\n"); + printa("Function: %s\%@7u\n", @function_time); +} From bb833f4d60530f8e43bd2dc8ccd6c6df48067254 Mon Sep 17 00:00:00 2001 From: Ulf Sigvardsson Date: Tue, 5 Mar 2019 11:45:28 +0100 Subject: [PATCH 18/77] Changed 'Main' into '' in entry/return probes --- probing-tools/dtrace/dtrace.d | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index d108c7a87..777117c48 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -103,12 +103,12 @@ encore$target:::function-exit {} // encore$target:::closure-entry {} // encore$target:::closure-exit {} -pid$target:Main::entry +pid$target:$1::entry { self->start[depth++] = vtimestamp; } -pid$target:Main::return +pid$target:$1::return { // print(probemod); @function_time[probefunc] = quantize(vtimestamp - self->start[depth-1]); From 9dbe02bc3db9c31b8e9c7ec2df5ec09c7730c0f7 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Wed, 6 Mar 2019 10:40:02 +0100 Subject: [PATCH 19/77] dtrade script now gathers info on futures --- probing-tools/dtrace/dtrace.d | 230 ++++++++++++++++++++-------------- 1 file changed, 135 insertions(+), 95 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 777117c48..809895710 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -1,5 +1,7 @@ #pragma D option quiet +#define TRACK_FUNCTION $2 + struct actor_info { uint64_t cpu; uint32_t steals; @@ -17,50 +19,34 @@ struct diagnostics { struct diagnostics diagnostics; struct actor_info cpus[int64_t]; /* declare cpus as an associative array */ -BEGIN -{ +int did_run_probe[string]; + +BEGIN { depth = 1; } -pony$target:::actor-alloc { } -pony$target:::actor-msg-send { } -pony$target:::actor-msg-run { } +pony$target::: /did_run_probe[probename] != 1/ { + did_run_probe[probename] = 1; +} +encore$target::: /did_run_probe[probename] != 1/ { + did_run_probe[probename] = 1; +} -// arg[0] is scheduler, arg[1] is actor -pony$target:::actor-scheduled -{ +pony$target:::actor-msg-send { + @counter[probename] = count(); +} +// arg[0] is scheduler, arg[1] is actor +pony$target:::actor-scheduled { cpus[arg1].cpu = cpu; // current CPU of the actor diagnostics.schedulings++; total_schedulings++; //@schedulers_for_actor[args[0], args[1]] = count(); } -pony$target:::actor-descheduled { } -pony$target:::cpu-nanosleep { } -pony$target:::gc-end {} -pony$target:::gc-send-end {} -pony$target:::gc-send-start {} -pony$target:::gc-recv-end {} -pony$target:::gc-recv-start {} -pony$target:::gc-start {} -pony$target:::gc-threshold {} -pony$target:::heap-alloc {} -pony$target:::rt-init {} -pony$target:::rt-start {} -pony$target:::rt-end {} - - - /** - * Fired when a scheduler succesfully steals a job - * @param scheduler is the scheduler that stole the job - * @param victim is the victim that the scheduler stole from - * @param actor is actor that was stolen from the victim - */ -pony$target:::work-steal-successful -{ - diagnostics.cpu_jumps = cpus[arg0].cpu != cpus[arg2].cpu ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; +pony$target:::work-steal-successful { + diagnostics.cpu_jumps = (cpus[arg0].cpu != cpus[arg2].cpu) ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; diagnostics.successful_steals++; diagnostics.steal_attempts++; @@ -69,13 +55,7 @@ pony$target:::work-steal-successful @stolen_actor[arg2] = count(); } -/** - * Fired when a scheduler fails to steal a job - * @param scheduler is the scheduler that attempted theft - * @param victim is the victim that the scheduler attempted to steal from - */ -pony$target:::work-steal-failure -{ +pony$target:::work-steal-failure { diagnostics.failed_steals++; diagnostics.steal_attempts++; @steal_fail_count[arg0] = count(); @@ -83,72 +63,132 @@ pony$target:::work-steal-failure } encore$target:::closure-create {} -encore$target:::future-block {} -encore$target:::future-chaining {} -encore$target:::future-create {} -encore$target:::future-destroy {} -encore$target:::future-fulfil-start {} -encore$target:::future-fulfil-end {} -encore$target:::future-get {} -encore$target:::future-unblock {} -encore$target:::field-access {} -encore$target:::field-write {} -// encore$target:::method-call {} -encore$target:::method-entry {} -encore$target:::method-exit {} -encore$target:::function-call {} -encore$target:::function-entry {} -encore$target:::function-exit {} -// encore$target:::closure-call {} -// encore$target:::closure-entry {} -// encore$target:::closure-exit {} - -pid$target:$1::entry -{ - self->start[depth++] = vtimestamp; -} -pid$target:$1::return -{ -// print(probemod); - @function_time[probefunc] = quantize(vtimestamp - self->start[depth-1]); - self->depth[depth--] = 0; +encore$target:::future-create { + @counter[probename] = count(); + // Used for lifetime of a future + future_create_starttime[arg1] = timestamp; } -END { - printf("==========================================\n\t\tSTEALS\n==========================================\n"); - printf("\nTOTAL\n"); - printf("Attempted\tSuccessful\tFailed\n"); - printf("%d\t\t%d\t\t%d\n", - diagnostics.steal_attempts, - diagnostics.successful_steals, - diagnostics.failed_steals); +encore$target:::future-block { + @counter[probename] = count(); + @future_block[arg1] = count(); + @actor_blocked[arg0] = count(); + @future_blocked_actor[arg1, arg0] = count(); + // Used for duration of a block + future_block_starttime[arg1] = timestamp; +} - printf("\nSUCCESSIVE STEALS\n"); - printf("Scheduler ID\tCount\n"); - printa("%d%@7u\n", @steal_success_count); +encore$target:::future-unblock { + @counter[probename] = count(); + @future_block_lifetime[arg1] = sum(timestamp - future_block_starttime[arg1]); +} - printf("\nFAILED STEALS\n"); - printf("Scheduler ID\tCount\n"); - printa("%d%@7u\n", @steal_fail_count); +encore$target:::future-chaining { + @counter[probename] = count(); + @future_chaining[arg1] = count(); +} - printf("\nSTEALS BETWEEN SCHEDULERS\n"); - printf("Stolen by\tStolen from\tCount\n"); - printa("%d\t%d%@7u\n", @successful_steal_from_scheduler); +encore$target:::future-fulfil-start { + @counter[probename] = count(); +} - printf("\nFAILS BETWEEN SCHEDULERS\n"); - printf("Attempted by\tTarget\t\tCount\n"); - printa("%d\t%d%@7u\n", @failed_steal_from_scheduler); +encore$target:::future-fulfil-end { + @counter[probename] = count(); +} - printf("\nSTOLEN ACTORS\n"); - printf("Actor ID\tTimes stolen\n"); - printa("%d%@7u\n", @stolen_actor); +encore$target:::future-get { + @counter[probename] = count(); +} - printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); +encore$target:::future-destroy { + @counter[probename] = count(); + @future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); +} - printf("\n==========================================\n\t\FUNCTIONS\n==========================================\n"); +pid$target:$1::entry /TRACK_FUNCTION == 1/ { + self->start[depth++] = vtimestamp; +} + +pid$target:$1::return /TRACK_FUNCTION == 1/ { + @function_time[probefunc] = quantize(vtimestamp - self->start[depth-1]); + self->depth[depth--] = 0; +} - printf("\nTIME SPENT IN FUNCTIONS (Nanoseconds)\n"); - printa("Function: %s\%@7u\n", @function_time); +END { + printf("==========================================\n"); + printf("\t\tFUTURES\n"); + printf("==========================================\n"); + printf("=== COUNTS ===\n"); + printa("%s\t%@1u\n", @counter); + + if (did_run_probe["future-create"]) { + printf("\n=== FUTURE_LIFETIME ===\n"); + printf("Future Addr\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%@1u\n", @future_lifetime); + } + if (did_run_probe["future-block"]) { + printf("\n=== FUTURE_BLOCKED_LIFETIME ===\n"); + printf("Future Addr\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%@1u\n", @future_block_lifetime); + + printf("\n=== FUTURE_BLOCKED_ACTOR ===\n"); + printf("Future Addr\t\tActor addr\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); + + printf("\n=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n"); + printf("Actor Addr\t\tCount\n"); + printa("%d\t\t%@2u\n", @actor_blocked); + + printf("\n=== NUMBER OF TIMES A FUTURE BLOCKS ===\n"); + printf("Future Addr\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_block); + } + + if (did_run_probe["future-chaining"]) { + printf("\n=== NUMBER OF TIMES A FUTURE IS CHAINED ===\n"); + printf("Future Addr\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_chaining); + } + + if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { + printf("==========================================\n"); + printf("\t\tSTEALS\n"); + printf("==========================================\n"); + printf("\nTOTAL\n"); + printf("Attempted\tSuccessful\tFailed\n"); + printf("%d\t\t%d\t\t%d\n", + diagnostics.steal_attempts, + diagnostics.successful_steals, + diagnostics.failed_steals); + + printf("\nSUCCESSIVE STEALS\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@7u\n", @steal_success_count); + + printf("\nFAILED STEALS\n"); + printf("Scheduler ID\tCount\n"); + printa("%d%@7u\n", @steal_fail_count); + + printf("\nSTEALS BETWEEN SCHEDULERS\n"); + printf("Stolen by\tStolen from\tCount\n"); + printa("%d\t%d%@7u\n", @successful_steal_from_scheduler); + + printf("\nFAILS BETWEEN SCHEDULERS\n"); + printf("Attempted by\tTarget\t\tCount\n"); + printa("%d\t%d%@7u\n", @failed_steal_from_scheduler); + + printf("\nSTOLEN ACTORS\n"); + printf("Actor ID\tTimes stolen\n"); + printa("%d%@7u\n", @stolen_actor); + + printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); + } + if (did_run_probe["entry"]) { + printf("\n==========================================\n\t\FUNCTIONS\n==========================================\n"); + + printf("\nTIME SPENT IN FUNCTIONS (Nanoseconds)\n"); + printa("Function: %s\%@7u\n", @function_time); + } } From d46b1d3242c9e50b5d670917940c6d2a724d0880 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Wed, 6 Mar 2019 12:29:34 +0100 Subject: [PATCH 20/77] anpassar formateringen efter dtrace vertyget --- .../systemtap/twoWhatTobiasAskedFor.stp | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 probing-tools/systemtap/twoWhatTobiasAskedFor.stp diff --git a/probing-tools/systemtap/twoWhatTobiasAskedFor.stp b/probing-tools/systemtap/twoWhatTobiasAskedFor.stp new file mode 100644 index 000000000..f903cbf1b --- /dev/null +++ b/probing-tools/systemtap/twoWhatTobiasAskedFor.stp @@ -0,0 +1,87 @@ +# Work-stealing is how programs are parallelised in Encore and Pony. +# I want to understand how a program gets parallelised. +# When actors are moved from one core to another due to work-stealing +# Ratio of failed or successful work-stealing +# When actors and scheduled or descheduled +# I want to understand how a single actor is scheduled during its life time +# (e.g., only on one scheduler, or on many, bouncing back and forth, etc.) +#I would like to see the communication topology at the scheduler-level, +# i.e. rather than looking at what actors send messages to what other actors, +# I would like think of all the actors on a scheduler as a single actor, +# so how often are messages sent to an actor on the same scheduler, +# to actors on another scheduler, or to idle actors +# I want to be able to understand what was the “pressure” +# (e.g. number of actors in the scheduler queue) on each scheduler during a program’s execution + +#____________________________Begin____________________________________________________________ + +global actor_number + +global successful_steals +global failed_steals +global attempted_steals + +global successful_steals_id +global failed_steals_id + +global scheduler_from_scheduler +global sheduler_from_sheduler_count + +probe process.mark("actor-alloc"){ + actor_number << 1 +} + +probe process.mark("work-steal-successful") { + successful_steals << 1; + total_steals << 1; + successful_steals_id[sprint($arg1)] += 1 + + if (sprint($arg1) in scheduler_from_scheduler) { + conc_id = sprintf("%d%d") + sheduler_from_sheduler_count + } + + +} + +probe process.mark("work-steal-failure") { + failed_steals << 1; + total_steals << 1; + + failed_steals_id[sprint($arg1)] += 1 + +} + +#probe process.function("pony_create").return { +# #actor_list[sprintf("%d", $return)] = 0 +#} + +probe end { + print("\n\n") + print("==================================================== \n") + print("\t\t STEALS\n") + print("==================================================== \n\n") + + print("TOTAL\n") + print("Attempted\tSuccessful\tFailed\n") + ss = @count(successful_steals) + fs = @count(failed_steals) + as = @count(attempted_steals) + printf("%d\t\t%d\t\t%d", ss, fs, as) + print("\n\n") + + print("SUCCESSFUL STEALS\n") + print("Scheduler ID\t\tCount\n") + foreach(ssid in successful_steals_id) + printf("%s\t\t%d\n", ssid, successful_steals_id[ssid]) + print("\n") + + print("FAILED STEALS\n") + print("Scheduler ID\t\tCount\n") + foreach(fsid in failed_steals_id) + printf("%s\t\t%d\n", fsid, failed_steals_id[fsid]) + print("\n") + + + print("STEALS BETWEEN SCHEDULERS\n") +} \ No newline at end of file From 4f194f47dc9cc8d28ea9fe52f7cc8c7f1dcfd059 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Wed, 6 Mar 2019 13:27:40 +0100 Subject: [PATCH 21/77] compatible scheduler inforamtion as with dtrace --- .../systemtap/twoWhatTobiasAskedFor.stp | 93 +++++++++++++++---- 1 file changed, 75 insertions(+), 18 deletions(-) diff --git a/probing-tools/systemtap/twoWhatTobiasAskedFor.stp b/probing-tools/systemtap/twoWhatTobiasAskedFor.stp index f903cbf1b..d1ffdf894 100644 --- a/probing-tools/systemtap/twoWhatTobiasAskedFor.stp +++ b/probing-tools/systemtap/twoWhatTobiasAskedFor.stp @@ -15,40 +15,74 @@ #____________________________Begin____________________________________________________________ -global actor_number - global successful_steals global failed_steals -global attempted_steals +global total_steals global successful_steals_id global failed_steals_id +global actor_stolen_id global scheduler_from_scheduler -global sheduler_from_sheduler_count +global scheduler_from_scheduler_fail + +#global core_switch -probe process.mark("actor-alloc"){ - actor_number << 1 -} probe process.mark("work-steal-successful") { - successful_steals << 1; - total_steals << 1; + successful_steals <<< 1; + total_steals <<< 1; successful_steals_id[sprint($arg1)] += 1 + actor_stolen_id[sprint($arg3)] += 1 + + #Formatting for printing data later + if ($arg1 != 0 && $arg2 != 0) { + stealing_id = sprintf("%d\t\t%d", $arg1, $arg2) + } + + else if ($arg1 == 0 && $arg2 != 0) { + stealing_id = sprintf("%d\t\t\t%d", $arg1, $arg2) + } - if (sprint($arg1) in scheduler_from_scheduler) { - conc_id = sprintf("%d%d") - sheduler_from_sheduler_count + else if ($arg1 != 0 && $arg2 == 0) { + stealing_id = sprintf("%d\t\t%d\t", $arg1, $arg2) + } + + #Adding data to correct list + if (stealing_id in scheduler_from_scheduler) { + scheduler_from_scheduler[stealing_id] += 1 + } + else { + scheduler_from_scheduler[stealing_id] = 1 } - } probe process.mark("work-steal-failure") { - failed_steals << 1; - total_steals << 1; - + failed_steals <<< 1; + total_steals <<< 1; failed_steals_id[sprint($arg1)] += 1 + + #formatiing for orinting data later + if ($arg1 != 0 && $arg2 != 0) { + stealing_id = sprintf("%d\t\t%d", $arg1, $arg2) + } + else if ($arg1 == 0 && $arg2 != 0) { + stealing_id = sprintf("%d\t\t\t%d", $arg1, $arg2) + } + + else if ($arg1 != 0 && $arg2 == 0) { + stealing_id = sprintf("%d\t\t%d\t", $arg1, $arg2) + } + + #Adding data to list + if (stealing_id in scheduler_from_scheduler_fail) { + scheduler_from_scheduler_fail[stealing_id] += 1 + print("exists, not zero!\n") + } + else { + scheduler_from_scheduler_fail[stealing_id] = 1 + } } @@ -66,8 +100,8 @@ probe end { print("Attempted\tSuccessful\tFailed\n") ss = @count(successful_steals) fs = @count(failed_steals) - as = @count(attempted_steals) - printf("%d\t\t%d\t\t%d", ss, fs, as) + ts = @count(total_steals) + printf("%d\t\t%d\t\t%d",ts, ss, fs) print("\n\n") print("SUCCESSFUL STEALS\n") @@ -84,4 +118,27 @@ probe end { print("STEALS BETWEEN SCHEDULERS\n") + print("Stolen by\t\tStolen from\t\tCount\n") + foreach(steal in scheduler_from_scheduler) { + printf("%s\t\t%d\n", steal, scheduler_from_scheduler[steal]) + } + + print("\n") + + + print("FAILS BETWEEN SCHEDULERS\n") + print("Attempted by\t\tTarget\t\t\tCount\n") + foreach(steal in scheduler_from_scheduler_fail) { + printf("%s\t\t%d\n", steal, scheduler_from_scheduler_fail[steal]) + } + + print("\n") + + print("STOLEN ACTORS\n") + print("Actor ID\t\tTimes Stolen\n") + foreach(actor in actor_stolen_id) { + printf("%s\t\t%d\n", actor, actor_stolen_id[actor]) + } + + #printf("CORE SWITCHES: \t &d \n", @count(core_switch)) } \ No newline at end of file From 40e40d700b50d0a3bd3352653be5f14f0c30dca0 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Wed, 6 Mar 2019 20:41:00 +0100 Subject: [PATCH 22/77] Changes: * Future-get probe now gathers actor pointer instead of context * Added number of times an actor does get * Added duration of a future block on a specific actor --- probing-tools/dtrace/dtrace.d | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 809895710..bedc69e62 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -2,6 +2,12 @@ #define TRACK_FUNCTION $2 +typedef struct pony_ctx_t +{ + void* scheduler; + void* current; +}; + struct actor_info { uint64_t cpu; uint32_t steals; @@ -70,12 +76,14 @@ encore$target:::future-create { future_create_starttime[arg1] = timestamp; } - encore$target:::future-block { - @counter[probename] = count(); + ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); + actorPointer = (uintptr_t)ctx->current; + + @counter[probename] = count(); @future_block[arg1] = count(); - @actor_blocked[arg0] = count(); - @future_blocked_actor[arg1, arg0] = count(); + @actor_blocked[actorPointer] = count(); + @future_blocked_actor[arg1, actorPointer] = count(); // Used for duration of a block future_block_starttime[arg1] = timestamp; } @@ -83,6 +91,7 @@ encore$target:::future-block { encore$target:::future-unblock { @counter[probename] = count(); @future_block_lifetime[arg1] = sum(timestamp - future_block_starttime[arg1]); + @future_blocked_actor_lifetime[arg1, actorPointer] = sum(timestamp - future_block_starttime[arg1]); } encore$target:::future-chaining { @@ -99,6 +108,9 @@ encore$target:::future-fulfil-end { } encore$target:::future-get { + ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); + actorPointer = (uintptr_t)ctx->current; + @future_get[actorPointer] = count(); @counter[probename] = count(); } @@ -133,8 +145,12 @@ END { printf("Future Addr\t\tLifetime (nanoseconds)\n"); printa("%d\t\t%@1u\n", @future_block_lifetime); + printf("\n=== FUTURE_BLOCKED_ACTOR_LIFETIME ===\n"); + printf("Future Addr\t\tActor addr\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%d\t\t%@1u\n", @future_blocked_actor_lifetime); + printf("\n=== FUTURE_BLOCKED_ACTOR ===\n"); - printf("Future Addr\t\tActor addr\t\tLifetime (nanoseconds)\n"); + printf("Future Addr\t\tActor addr\t\tCount\n"); printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); printf("\n=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n"); @@ -146,6 +162,12 @@ END { printa("%d\t\t%@2u\n", @future_block); } + if (did_run_probe["future-get"]) { + printf("\n=== NUMBER OF TIMES AN ACTOR DOES GET ===\n"); + printf("Actor Addr\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_get); + } + if (did_run_probe["future-chaining"]) { printf("\n=== NUMBER OF TIMES A FUTURE IS CHAINED ===\n"); printf("Future Addr\t\tCount\n"); From 8a223692aa100fcda47987465a5109cbaacdc780 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Wed, 6 Mar 2019 21:26:57 +0100 Subject: [PATCH 23/77] Changed approach to time method calls + changed timestamp to vtimestamp --- probing-tools/dtrace/dtrace.d | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index bedc69e62..7a2d4cc69 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -1,7 +1,5 @@ #pragma D option quiet -#define TRACK_FUNCTION $2 - typedef struct pony_ctx_t { void* scheduler; @@ -28,7 +26,6 @@ struct actor_info cpus[int64_t]; /* declare cpus as an associative array */ int did_run_probe[string]; BEGIN { - depth = 1; } pony$target::: /did_run_probe[probename] != 1/ { @@ -73,7 +70,7 @@ encore$target:::closure-create {} encore$target:::future-create { @counter[probename] = count(); // Used for lifetime of a future - future_create_starttime[arg1] = timestamp; + self->future_create_starttime[arg1] = vtimestamp; } encore$target:::future-block { @@ -85,13 +82,13 @@ encore$target:::future-block { @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); // Used for duration of a block - future_block_starttime[arg1] = timestamp; + self->future_block_starttime[arg1] = vtimestamp; } encore$target:::future-unblock { @counter[probename] = count(); - @future_block_lifetime[arg1] = sum(timestamp - future_block_starttime[arg1]); - @future_blocked_actor_lifetime[arg1, actorPointer] = sum(timestamp - future_block_starttime[arg1]); + @future_block_lifetime[arg1] = sum(vtimestamp - self->future_block_starttime[arg1]); + @future_blocked_actor_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1]); } encore$target:::future-chaining { @@ -116,16 +113,16 @@ encore$target:::future-get { encore$target:::future-destroy { @counter[probename] = count(); - @future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); + @future_lifetime[arg1] = sum(vtimestamp - self->future_create_starttime[arg1]); } -pid$target:$1::entry /TRACK_FUNCTION == 1/ { - self->start[depth++] = vtimestamp; +encore$target:::method-entry { + self->function_time[arg2] = vtimestamp; } -pid$target:$1::return /TRACK_FUNCTION == 1/ { - @function_time[probefunc] = quantize(vtimestamp - self->start[depth-1]); - self->depth[depth--] = 0; +encore$target:::method-exit { + name = copyinstr(arg2); + @function_time[arg1, name] = sum(vtimestamp - self->function_time[arg2]); } END { @@ -207,10 +204,13 @@ END { printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); } - if (did_run_probe["entry"]) { - printf("\n==========================================\n\t\FUNCTIONS\n==========================================\n"); + if (did_run_probe["method-entry"]) { + printf("==========================================\n"); + printf("\t\tMETHODS\n"); + printf("==========================================\n"); - printf("\nTIME SPENT IN FUNCTIONS (Nanoseconds)\n"); - printa("Function: %s\%@7u\n", @function_time); + printf("\nTIME SPENT IN METHODS (Nanoseconds)\n"); + printf("Actor addr\t\tMethod name\t\tDuration\n"); + printa("%d\t\t%s\t\t\t%@u\n", @function_time); } } From a51e45c724f3d7c8282519528d5dd983e8bedc57 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Wed, 6 Mar 2019 21:44:17 +0100 Subject: [PATCH 24/77] Fixed so that only information on methods called by the user is gathered --- probing-tools/dtrace/dtrace.d | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 7a2d4cc69..521d67537 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -117,12 +117,22 @@ encore$target:::future-destroy { } encore$target:::method-entry { - self->function_time[arg2] = vtimestamp; + ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); + actorPointer = (uintptr_t)ctx->current; + // target pointer == the ctx current actor? + if (arg1 == actorPointer) { + self->function_time[arg1, arg2] = vtimestamp; + } } encore$target:::method-exit { - name = copyinstr(arg2); - @function_time[arg1, name] = sum(vtimestamp - self->function_time[arg2]); + ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); + actorPointer = (uintptr_t)ctx->current; + // target pointer == the ctx current actor? + if (arg1 == actorPointer) { + name = copyinstr(arg2); + @function_time[arg1, name] = sum(vtimestamp - self->function_time[arg1, arg2]); + } } END { From 99a3c8a00d0a90cf2b4afc7e3bcae0a91615b7ab Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 7 Mar 2019 11:25:20 +0100 Subject: [PATCH 25/77] Added future id to future-get list, removed one of the future block duration lists --- probing-tools/dtrace/dtrace.d | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 521d67537..aa134c4e0 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -76,19 +76,19 @@ encore$target:::future-create { encore$target:::future-block { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @counter[probename] = count(); @future_block[arg1] = count(); @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); // Used for duration of a block - self->future_block_starttime[arg1] = vtimestamp; + self->future_block_starttime[arg1, arg0] = vtimestamp; } encore$target:::future-unblock { + ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); + actorPointer = (uintptr_t)ctx->current; @counter[probename] = count(); - @future_block_lifetime[arg1] = sum(vtimestamp - self->future_block_starttime[arg1]); - @future_blocked_actor_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1]); + @future_block_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1, arg0]); } encore$target:::future-chaining { @@ -107,7 +107,7 @@ encore$target:::future-fulfil-end { encore$target:::future-get { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @future_get[actorPointer] = count(); + @future_get[actorPointer, arg1] = count(); @counter[probename] = count(); } @@ -144,40 +144,36 @@ END { if (did_run_probe["future-create"]) { printf("\n=== FUTURE_LIFETIME ===\n"); - printf("Future Addr\t\tLifetime (nanoseconds)\n"); + printf("Future id\t\tLifetime (nanoseconds)\n"); printa("%d\t\t%@1u\n", @future_lifetime); } if (did_run_probe["future-block"]) { - printf("\n=== FUTURE_BLOCKED_LIFETIME ===\n"); - printf("Future Addr\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%@1u\n", @future_block_lifetime); - printf("\n=== FUTURE_BLOCKED_ACTOR_LIFETIME ===\n"); - printf("Future Addr\t\tActor addr\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%d\t\t%@1u\n", @future_blocked_actor_lifetime); + printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); printf("\n=== FUTURE_BLOCKED_ACTOR ===\n"); - printf("Future Addr\t\tActor addr\t\tCount\n"); + printf("Future id\t\tActor id\t\tCount\n"); printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); printf("\n=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n"); - printf("Actor Addr\t\tCount\n"); + printf("Actor id\t\tCount\n"); printa("%d\t\t%@2u\n", @actor_blocked); printf("\n=== NUMBER OF TIMES A FUTURE BLOCKS ===\n"); - printf("Future Addr\t\tCount\n"); + printf("Future id\t\tCount\n"); printa("%d\t\t%@2u\n", @future_block); } if (did_run_probe["future-get"]) { printf("\n=== NUMBER OF TIMES AN ACTOR DOES GET ===\n"); - printf("Actor Addr\t\tCount\n"); - printa("%d\t\t%@2u\n", @future_get); + printf("Actor id\t\tFuture id\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @future_get); } if (did_run_probe["future-chaining"]) { printf("\n=== NUMBER OF TIMES A FUTURE IS CHAINED ===\n"); - printf("Future Addr\t\tCount\n"); + printf("Future id\t\tCount\n"); printa("%d\t\t%@2u\n", @future_chaining); } @@ -220,7 +216,7 @@ END { printf("==========================================\n"); printf("\nTIME SPENT IN METHODS (Nanoseconds)\n"); - printf("Actor addr\t\tMethod name\t\tDuration\n"); + printf("Actor id\t\tMethod name\t\tDuration\n"); printa("%d\t\t%s\t\t\t%@u\n", @function_time); } } From ac5932ca65844961e9db73668f23697533ba109e Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 7 Mar 2019 12:21:24 +0100 Subject: [PATCH 26/77] Removed unnecessary struct fields --- probing-tools/dtrace/dtrace.d | 118 ++++++++++++++-------------------- 1 file changed, 50 insertions(+), 68 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index aa134c4e0..9c2c5320a 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -8,16 +8,12 @@ typedef struct pony_ctx_t struct actor_info { uint64_t cpu; - uint32_t steals; uint32_t jumps; }; struct diagnostics { - uint32_t successful_steals; - uint32_t failed_steals; uint32_t steal_attempts; uint32_t cpu_jumps; - uint32_t schedulings; }; struct diagnostics diagnostics; @@ -37,30 +33,26 @@ encore$target::: /did_run_probe[probename] != 1/ { } pony$target:::actor-msg-send { - @counter[probename] = count(); + @count_future[probename] = count(); } // arg[0] is scheduler, arg[1] is actor pony$target:::actor-scheduled { cpus[arg1].cpu = cpu; // current CPU of the actor - diagnostics.schedulings++; - total_schedulings++; - //@schedulers_for_actor[args[0], args[1]] = count(); } pony$target:::work-steal-successful { - diagnostics.cpu_jumps = (cpus[arg0].cpu != cpus[arg2].cpu) ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; - diagnostics.successful_steals++; + diagnostics.cpu_jumps = (cpu != cpus[arg2].cpu) ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; diagnostics.steal_attempts++; - + @count_steals[probename] = count(); @steal_success_count[arg0] = count(); @successful_steal_from_scheduler[arg0, arg1] = count(); @stolen_actor[arg2] = count(); } pony$target:::work-steal-failure { - diagnostics.failed_steals++; diagnostics.steal_attempts++; + @count_steals[probename] = count(); @steal_fail_count[arg0] = count(); @failed_steal_from_scheduler[arg0, arg1] = count(); } @@ -68,7 +60,7 @@ pony$target:::work-steal-failure { encore$target:::closure-create {} encore$target:::future-create { - @counter[probename] = count(); + @count_future[probename] = count(); // Used for lifetime of a future self->future_create_starttime[arg1] = vtimestamp; } @@ -76,7 +68,7 @@ encore$target:::future-create { encore$target:::future-block { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @counter[probename] = count(); + @count_future[probename] = count(); @future_block[arg1] = count(); @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); @@ -87,32 +79,32 @@ encore$target:::future-block { encore$target:::future-unblock { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @counter[probename] = count(); + @count_future[probename] = count(); @future_block_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1, arg0]); } encore$target:::future-chaining { - @counter[probename] = count(); + @count_future[probename] = count(); @future_chaining[arg1] = count(); } encore$target:::future-fulfil-start { - @counter[probename] = count(); + @count_future[probename] = count(); } encore$target:::future-fulfil-end { - @counter[probename] = count(); + @count_future[probename] = count(); } encore$target:::future-get { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; @future_get[actorPointer, arg1] = count(); - @counter[probename] = count(); + @count_future[probename] = count(); } encore$target:::future-destroy { - @counter[probename] = count(); + @count_future[probename] = count(); @future_lifetime[arg1] = sum(vtimestamp - self->future_create_starttime[arg1]); } @@ -136,87 +128,77 @@ encore$target:::method-exit { } END { - printf("==========================================\n"); - printf("\t\tFUTURES\n"); - printf("==========================================\n"); - printf("=== COUNTS ===\n"); - printa("%s\t%@1u\n", @counter); + printf("//---------- FUTURES ------------//\n"); + printf("--- COUNTS ---\n"); + printa("%s\t%@1u\n", @count_future); if (did_run_probe["future-create"]) { - printf("\n=== FUTURE_LIFETIME ===\n"); + printf("\n--- Duration a future is alive ---\n"); printf("Future id\t\tLifetime (nanoseconds)\n"); printa("%d\t\t%@1u\n", @future_lifetime); } if (did_run_probe["future-block"]) { - printf("\n=== FUTURE_BLOCKED_ACTOR_LIFETIME ===\n"); + printf("\n--- Duration a future blocks an actor ---\n"); printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); - printf("\n=== FUTURE_BLOCKED_ACTOR ===\n"); + printf("\n--- Number of times an actor is blocked by a future ---\n"); printf("Future id\t\tActor id\t\tCount\n"); printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); - printf("\n=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n"); + printf("\n--- Total number of times an actor is blocked ---\n"); printf("Actor id\t\tCount\n"); printa("%d\t\t%@2u\n", @actor_blocked); - printf("\n=== NUMBER OF TIMES A FUTURE BLOCKS ===\n"); + printf("\n--- Total number of times a future blocks ---\n"); printf("Future id\t\tCount\n"); printa("%d\t\t%@2u\n", @future_block); } if (did_run_probe["future-get"]) { - printf("\n=== NUMBER OF TIMES AN ACTOR DOES GET ===\n"); + printf("\n--- Number of times an actor calls get ---\n"); printf("Actor id\t\tFuture id\t\tCount\n"); printa("%d\t\t%d\t\t%@2u\n", @future_get); } if (did_run_probe["future-chaining"]) { - printf("\n=== NUMBER OF TIMES A FUTURE IS CHAINED ===\n"); + printf("\n--- Number of times a future is chained ---\n"); printf("Future id\t\tCount\n"); printa("%d\t\t%@2u\n", @future_chaining); } if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { - printf("==========================================\n"); - printf("\t\tSTEALS\n"); - printf("==========================================\n"); - printf("\nTOTAL\n"); - printf("Attempted\tSuccessful\tFailed\n"); - printf("%d\t\t%d\t\t%d\n", - diagnostics.steal_attempts, - diagnostics.successful_steals, - diagnostics.failed_steals); - - printf("\nSUCCESSIVE STEALS\n"); - printf("Scheduler ID\tCount\n"); - printa("%d%@7u\n", @steal_success_count); - - printf("\nFAILED STEALS\n"); - printf("Scheduler ID\tCount\n"); - printa("%d%@7u\n", @steal_fail_count); - - printf("\nSTEALS BETWEEN SCHEDULERS\n"); - printf("Stolen by\tStolen from\tCount\n"); - printa("%d\t%d%@7u\n", @successful_steal_from_scheduler); - - printf("\nFAILS BETWEEN SCHEDULERS\n"); - printf("Attempted by\tTarget\t\tCount\n"); - printa("%d\t%d%@7u\n", @failed_steal_from_scheduler); - - printf("\nSTOLEN ACTORS\n"); - printf("Actor ID\tTimes stolen\n"); - printa("%d%@7u\n", @stolen_actor); - - printf("\nCORE SWITCHES: %d\n", diagnostics.cpu_jumps); + printf("\n//---------- STEALS ------------//\n"); + printf("\n--- COUNTS ---\n"); + printf("Attempted\t%d\n", diagnostics.steal_attempts); + printf("Core switches:\t%d\n", diagnostics.cpu_jumps); + printa("%s\t%@2u\n", @count_steals); + + printf("\n--- Number of times a scheduler successfully steals ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_success_count); + + printf("\n--- Number of times a scheduler fails to steal ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_fail_count); + + printf("\n--- Number of times a scheduler steals from another ---\n"); + printf("Stolen by\t\tStolen from\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); + + printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); + printf("Attempted by\t\tTarget\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); + + printf("\n--- Number of times an actor is stolen ---\n"); + printf("Actor id\t\tTimes stolen\n"); + printa("%d\t\t%@2u\n", @stolen_actor); } if (did_run_probe["method-entry"]) { - printf("==========================================\n"); - printf("\t\tMETHODS\n"); - printf("==========================================\n"); + printf("\n//---------- METHODS ------------//\n"); - printf("\nTIME SPENT IN METHODS (Nanoseconds)\n"); - printf("Actor id\t\tMethod name\t\tDuration\n"); + printf("\n--- Time spent in methods\n"); + printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); printa("%d\t\t%s\t\t\t%@u\n", @function_time); } } From b12be19fa044b0d6ccc65d8ce060fee17bece7e6 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Fri, 8 Mar 2019 23:38:45 +0100 Subject: [PATCH 27/77] Added XML-output --- probing-tools/dtrace/dtrace.d | 217 ++++++++++++++++++++++------------ 1 file changed, 143 insertions(+), 74 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 9c2c5320a..048668bf7 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -33,7 +33,7 @@ encore$target::: /did_run_probe[probename] != 1/ { } pony$target:::actor-msg-send { - @count_future[probename] = count(); + @counts[probename] = count(); } // arg[0] is scheduler, arg[1] is actor @@ -42,17 +42,20 @@ pony$target:::actor-scheduled { } pony$target:::work-steal-successful { - diagnostics.cpu_jumps = (cpu != cpus[arg2].cpu) ? diagnostics.cpu_jumps+1 : diagnostics.cpu_jumps; - diagnostics.steal_attempts++; - @count_steals[probename] = count(); + if (cpu != cpus[arg2].cpu) { + @counts["core-switches"] = count(); + } + + @counts[probename] = count(); + @counts["work-steal-attempt"] = count(); @steal_success_count[arg0] = count(); @successful_steal_from_scheduler[arg0, arg1] = count(); @stolen_actor[arg2] = count(); } pony$target:::work-steal-failure { - diagnostics.steal_attempts++; - @count_steals[probename] = count(); + @counts["work-steal-attempt"] = count(); + @counts[probename] = count(); @steal_fail_count[arg0] = count(); @failed_steal_from_scheduler[arg0, arg1] = count(); } @@ -60,7 +63,7 @@ pony$target:::work-steal-failure { encore$target:::closure-create {} encore$target:::future-create { - @count_future[probename] = count(); + @counts[probename] = count(); // Used for lifetime of a future self->future_create_starttime[arg1] = vtimestamp; } @@ -68,7 +71,7 @@ encore$target:::future-create { encore$target:::future-block { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @count_future[probename] = count(); + @counts[probename] = count(); @future_block[arg1] = count(); @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); @@ -79,32 +82,32 @@ encore$target:::future-block { encore$target:::future-unblock { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; - @count_future[probename] = count(); + @counts[probename] = count(); @future_block_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1, arg0]); } encore$target:::future-chaining { - @count_future[probename] = count(); + @counts[probename] = count(); @future_chaining[arg1] = count(); } encore$target:::future-fulfil-start { - @count_future[probename] = count(); + @counts[probename] = count(); } encore$target:::future-fulfil-end { - @count_future[probename] = count(); + @counts[probename] = count(); } encore$target:::future-get { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; @future_get[actorPointer, arg1] = count(); - @count_future[probename] = count(); + @counts[probename] = count(); } encore$target:::future-destroy { - @count_future[probename] = count(); + @counts[probename] = count(); @future_lifetime[arg1] = sum(vtimestamp - self->future_create_starttime[arg1]); } @@ -128,77 +131,143 @@ encore$target:::method-exit { } END { - printf("//---------- FUTURES ------------//\n"); - printf("--- COUNTS ---\n"); - printa("%s\t%@1u\n", @count_future); - - if (did_run_probe["future-create"]) { - printf("\n--- Duration a future is alive ---\n"); - printf("Future id\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%@1u\n", @future_lifetime); - } - if (did_run_probe["future-block"]) { - printf("\n--- Duration a future blocks an actor ---\n"); - printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); - - printf("\n--- Number of times an actor is blocked by a future ---\n"); - printf("Future id\t\tActor id\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); - - printf("\n--- Total number of times an actor is blocked ---\n"); - printf("Actor id\t\tCount\n"); - printa("%d\t\t%@2u\n", @actor_blocked); - - printf("\n--- Total number of times a future blocks ---\n"); - printf("Future id\t\tCount\n"); - printa("%d\t\t%@2u\n", @future_block); - } + printf("\n"); + printf("\n"); + printa("\t%@u\n", @counts); + printf("\n"); + + if (did_run_probe["future-create"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_lifetime); + printf("\n"); + } + + if (did_run_probe["future-block"]) { + printf("\n"); + printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_block); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @actor_blocked); + printf("\n"); + } if (did_run_probe["future-get"]) { - printf("\n--- Number of times an actor calls get ---\n"); - printf("Actor id\t\tFuture id\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @future_get); + printf("\n"); + printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_get); + printf("\n"); } - if (did_run_probe["future-chaining"]) { - printf("\n--- Number of times a future is chained ---\n"); - printf("Future id\t\tCount\n"); - printa("%d\t\t%@2u\n", @future_chaining); + if (did_run_probe["future-chaining"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); + printf("\n"); } - if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { - printf("\n//---------- STEALS ------------//\n"); - printf("\n--- COUNTS ---\n"); - printf("Attempted\t%d\n", diagnostics.steal_attempts); - printf("Core switches:\t%d\n", diagnostics.cpu_jumps); - printa("%s\t%@2u\n", @count_steals); + if (did_run_probe["work-steal-successful"]) { + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_success_count); + printf("\t\n\n"); - printf("\n--- Number of times a scheduler successfully steals ---\n"); - printf("Scheduler id\t\tCount\n"); - printa("%d\t\t%@2u\n", @steal_success_count); + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @successful_steal_from_scheduler); + printf("\t\n\n"); + } - printf("\n--- Number of times a scheduler fails to steal ---\n"); - printf("Scheduler id\t\tCount\n"); - printa("%d\t\t%@2u\n", @steal_fail_count); + if (did_run_probe["work-steal-failure"]) { + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_fail_count); + printf("\t\n\n"); - printf("\n--- Number of times a scheduler steals from another ---\n"); - printf("Stolen by\t\tStolen from\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @failed_steal_from_scheduler); + printf("\t\n\n"); + } - printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); - printf("Attempted by\t\tTarget\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); + if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); + printf("\n"); + } - printf("\n--- Number of times an actor is stolen ---\n"); - printf("Actor id\t\tTimes stolen\n"); - printa("%d\t\t%@2u\n", @stolen_actor); + if (did_run_probe["method-entry"]) { + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); + printf(""); } - if (did_run_probe["method-entry"]) { - printf("\n//---------- METHODS ------------//\n"); - printf("\n--- Time spent in methods\n"); - printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); - printa("%d\t\t%s\t\t\t%@u\n", @function_time); - } + printf("\n"); + + // printf("//---------- FUTURES ------------//\n"); + // printf("--- COUNTS ---\n"); + // printa("%s\t%@1u\n", @counts); + + // if (did_run_probe["future-create"]) { + // printf("\n--- Duration a future is alive ---\n"); + // printf("Future id\t\tLifetime (nanoseconds)\n"); + // printa("%d\t\t%@1u\n", @future_lifetime); + // } + // if (did_run_probe["future-block"]) { + // printf("\n--- Duration a future blocks an actor ---\n"); + // printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); + // printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); + + // printf("\n--- Number of times an actor is blocked by a future ---\n"); + // printf("Future id\t\tActor id\t\tCount\n"); + // printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); + + // printf("\n--- Total number of times an actor is blocked ---\n"); + // printf("Actor id\t\tCount\n"); + // printa("%d\t\t%@2u\n", @actor_blocked); + + // printf("\n--- Total number of times a future blocks ---\n"); + // printf("Future id\t\tCount\n"); + // printa("%d\t\t%@2u\n", @future_block); + // } + + // if (did_run_probe["future-get"]) { + // printf("\n--- Number of times an actor calls get ---\n"); + // printf("Actor id\t\tFuture id\t\tCount\n"); + // printa("%d\t\t%d\t\t%@2u\n", @future_get); + // } + + // if (did_run_probe["future-chaining"]) { + // printf("\n--- Number of times a future is chained ---\n"); + // printf("Future id\t\tCount\n"); + // printa("%d\t\t%@2u\n", @future_chaining); + // } + + // if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { + // printf("\n//---------- STEALS ------------//\n"); + // printf("\n--- COUNTS ---\n"); + // printf("Attempted\t%d\n", diagnostics.steal_attempts); + // printf("Core switches:\t%d\n", diagnostics.cpu_jumps); + // printa("%s\t%@2u\n", @counts); + + // printf("\n--- Number of times a scheduler successfully steals ---\n"); + // printf("Scheduler id\t\tCount\n"); + // printa("%d\t\t%@2u\n", @steal_success_count); + // + // printf("\n--- Number of times a scheduler fails to steal ---\n"); + // printf("Scheduler id\t\tCount\n"); + // printa("%d\t\t%@2u\n", @steal_fail_count); + + // printf("\n--- Number of times a scheduler steals from another ---\n"); + // printf("Stolen by\t\tStolen from\t\tCount\n"); + // printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); + + // printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); + // printf("Attempted by\t\tTarget\t\tCount\n"); + // printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); + + // printf("\n--- Number of times an actor is stolen ---\n"); + // printf("Actor id\t\tTimes stolen\n"); + // printa("%d\t\t%@2u\n", @stolen_actor); + // } + // if (did_run_probe["method-entry"]) { + // printf("\n//---------- METHODS ------------//\n"); + // + // printf("\n--- Time spent in methods\n"); + // printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); + // printa("%d\t\t%s\t\t\t%@u\n", @function_time); + // } } From af290dc574ab1e188af16534c432deaea911a46c Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 00:22:18 +0100 Subject: [PATCH 28/77] Fixed tag --- probing-tools/dtrace/dtrace.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 048668bf7..a9e6545cc 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -153,7 +153,7 @@ END { if (did_run_probe["future-get"]) { printf("\n"); - printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_get); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); printf("\n"); } From 439103f3d6b8797ece425732bef830ec3b13f408 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 00:23:00 +0100 Subject: [PATCH 29/77] Started on parser --- probing-tools/dtrace/parser/.gitignore | 1 + probing-tools/dtrace/parser/Classes/Actor.js | 11 + probing-tools/dtrace/parser/Classes/Future.js | 14 ++ .../dtrace/parser/Classes/FutureBlock.js | 11 + .../dtrace/parser/Classes/FutureGet.js | 10 + probing-tools/dtrace/parser/index.js | 28 +++ probing-tools/dtrace/parser/package-lock.json | 26 +++ probing-tools/dtrace/parser/package.json | 6 + probing-tools/dtrace/parser/parser.js | 194 ++++++++++++++++++ 9 files changed, 301 insertions(+) create mode 100644 probing-tools/dtrace/parser/.gitignore create mode 100644 probing-tools/dtrace/parser/Classes/Actor.js create mode 100644 probing-tools/dtrace/parser/Classes/Future.js create mode 100644 probing-tools/dtrace/parser/Classes/FutureBlock.js create mode 100644 probing-tools/dtrace/parser/Classes/FutureGet.js create mode 100644 probing-tools/dtrace/parser/index.js create mode 100644 probing-tools/dtrace/parser/package-lock.json create mode 100644 probing-tools/dtrace/parser/package.json create mode 100644 probing-tools/dtrace/parser/parser.js diff --git a/probing-tools/dtrace/parser/.gitignore b/probing-tools/dtrace/parser/.gitignore new file mode 100644 index 000000000..c2658d7d1 --- /dev/null +++ b/probing-tools/dtrace/parser/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/probing-tools/dtrace/parser/Classes/Actor.js b/probing-tools/dtrace/parser/Classes/Actor.js new file mode 100644 index 000000000..be51177b9 --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/Actor.js @@ -0,0 +1,11 @@ +class Actor { + + constructor(id) { + this.id = id; + this.numberOfTimesBlocked = 0; + this.numberOfGets = 0; + } + +} + +module.exports = Actor; diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/dtrace/parser/Classes/Future.js new file mode 100644 index 000000000..9f0ca8d30 --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/Future.js @@ -0,0 +1,14 @@ +class Future { + + constructor(id, duration) { + this.id = id; + this.duration = parseInt(duration); + this.blocks = []; + this.actorsBlocked = {}; + this.numberOfGets = 0; + this.numberOfBlocks = 0; + } + +} + +module.exports = Future; diff --git a/probing-tools/dtrace/parser/Classes/FutureBlock.js b/probing-tools/dtrace/parser/Classes/FutureBlock.js new file mode 100644 index 000000000..d42826dcc --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/FutureBlock.js @@ -0,0 +1,11 @@ +class FutureBlock { + + constructor(id, actor, duration) { + this.id = id; + this.actor = actor; + this.duration = parseInt(duration); + } + +} + +module.exports = FutureBlock; diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/dtrace/parser/Classes/FutureGet.js new file mode 100644 index 000000000..cd9440169 --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/FutureGet.js @@ -0,0 +1,10 @@ +class FutureGet { + + constructor(actor, future) { + this.actor = actor; + this.future = future; + } + +} + +module.exports = FutureGet; diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js new file mode 100644 index 000000000..de87c682c --- /dev/null +++ b/probing-tools/dtrace/parser/index.js @@ -0,0 +1,28 @@ +const fs = require('fs'); +const xml2js = new require('xml2js').Parser(); +const Parser = require('./parser'); +const argv = process.argv.slice(2); + +if (argv.length == 0) { + console.log("No input file given."); + process.exit(); +} + +fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { + + if (err) { + console.log(err); + process.exit() + } + + xml2js.parseString(data, (err, nodes) => { + if (err) { + console.log(err); + process.exit(); + } + + const parser = new Parser(nodes); + parser.start(); + }); + +}); diff --git a/probing-tools/dtrace/parser/package-lock.json b/probing-tools/dtrace/parser/package-lock.json new file mode 100644 index 000000000..da63c7779 --- /dev/null +++ b/probing-tools/dtrace/parser/package-lock.json @@ -0,0 +1,26 @@ +{ + "name": "parser", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/probing-tools/dtrace/parser/package.json b/probing-tools/dtrace/parser/package.json new file mode 100644 index 000000000..5e900fcc6 --- /dev/null +++ b/probing-tools/dtrace/parser/package.json @@ -0,0 +1,6 @@ +{ + "name": "parser", + "dependencies": { + "xml2js": "^0.4.19" + } +} diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js new file mode 100644 index 000000000..9ff91ea8c --- /dev/null +++ b/probing-tools/dtrace/parser/parser.js @@ -0,0 +1,194 @@ +'use strict'; + +const Actor = require('./Classes/Actor.js'); +const Future = require('./Classes/Future.js'); +const FutureGet = require('./Classes/FutureGet.js'); +const FutureBlock = require('./Classes/FutureBlock.js'); + +class Parser { + + constructor(nodes) { + this.nodes = nodes; + this.blocks = {}; + this.futures = {}; + this.actors = {}; + this.futureGets = []; + } + + start() { + for (const root in this.nodes) { + for (const parent in this.nodes[root]) { + const elements = this.nodes[root][parent]; + switch (parent) { + case "counts": + this.parseCounts(elements); + break; + case "futures": + this.parseFutures(elements); + break; + case "future-blocks": + this.parseFutureBlocks(elements); + break; + case "future-gets": + this.parseFutureGets(elements); + break; + default: + // console.log(parent); + break; + } + } + } + + for (const id in this.futures) { + console.log("Future " + this.futures[id].id); + console.log(`\tDuration: ${this.futures[id].duration} nanoseconds`); + + const blocks = this.futures[id].blocks; + + for (const key in blocks) { + // A future blocking + } + + console.log(this.futures[id]); + + } + } + + parseCounts(rootNode) { + const elements = rootNode[0]; + for (const key in elements) { + // TODO: Add counts to some data structure + } + } + + parseFutures(rootNode) { + // As there is only one root node for futures + // we can just get the first element in the list + const elements = rootNode[0]["future"]; + + for (const key in elements) { + const id = elements[key]['id'][0]; + const duration = elements[key]['duration'][0]; + const future = new Future(id, duration); + this.futures[id] = future; + } + } + + parseFutureBlocks(rootNode) { + const elements = rootNode[0]; + + for (const key in elements) { + switch (key) { + case "future-block-lifetime": + this.parseFutureBlockLifetime(elements[key]); + break; + case "future-block-actor-count": + this.parseFutureBlockActorCount(elements[key]); + break; + case "future-block-count": + this.parseFutureBlockCount(elements[key]); + break; + case "actor-block-count": + this.parseActorBlockCount(elements[key]); + break; + default: + console.log("Error: Unknown tag: " + key); + break; + } + } + } + + parseFutureBlockLifetime(elements) { + for (let key in elements) { + const element = elements[key]["future"][0]; + const id = element['id'][0]; + const actorID = element['actor'][0]; + const duration = element['duration'][0]; + let actor = this.actors[actorID]; + + if (actor == null) { + actor = new Actor(actorID); + this.actors[actorID] = actor; + } + + if (!(id in this.blocks)) { this.blocks[id] = []; } + + const block = new FutureBlock(id, actor, duration); + this.blocks[id].push(block); + + if (id in this.futures) { + this.futures[id].blocks.push(block); + } + } + } + + parseFutureBlockActorCount(elements) { + for (let key in elements) { + const element = elements[key]["future"][0]; + const id = element['id'][0]; + + if (id in this.futures) { + const actor = element['actor'][0]; + const count = element['count'][0]; + let future = this.futures[id]; + future.actorsBlocked[actor] = parseInt(count); + } + } + } + + parseFutureBlockCount(elements) { + for (let key in elements) { + const element = elements[key]["future"][0]; + const id = element['id'][0]; + + if (id in this.futures) { + const count = element['count'][0]; + let future = this.futures[id]; + future.numberOfBlocks = parseInt(count); + } + } + } + + parseActorBlockCount(elements) { + for (let key in elements) { + const element = elements[key]['actor'][0]; + const id = element['id'][0]; + const count = element['count'][0]; + + if (!(id in this.actors)) { + this.actors[id] = new Actor(id); + } + + this.actors[id].numberOfTimesBlocked = parseInt(count); + } + } + + parseFutureGets(rootNode) { + // As there is only one node for future-gets + // we can just get the first element in the list + const elements = rootNode[0]["future-get"]; + + for (const key in elements) { + const actorID = elements[key]["actor"][0]["id"]; + const futureID = elements[key]["future"][0]["id"]; + const count = elements[key]["count"][0]; + + if (!(actorID in this.actors)) { + this.actors[actorID] = new Actor(actorID); + } + if (!(futureID in this.futures)) { + this.futures[futureID] = new Future(futureID, -1); + } + + this.actors[actorID].numberOfGets += 1; + this.futures[futureID].numberOfGets += 1; + + const futureGet = new FutureGet(this.actors[actorID], this.futures[futureID]); + this.futureGets.push(futureGet); + } + } + + +} + +module.exports = Parser; From ad19d37d0afa1ac78ce842739325172986f6b4d7 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 10:59:51 +0100 Subject: [PATCH 30/77] Added missing id-tag to actor --- probing-tools/dtrace/dtrace.d | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index a9e6545cc..4d7ffe2cb 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -144,8 +144,8 @@ END { if (did_run_probe["future-block"]) { printf("\n"); - printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); + printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_block); printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @actor_blocked); printf("\n"); From 3a08d9a552d46c3c0a5505608f646f2d27494f6c Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:01:12 +0100 Subject: [PATCH 31/77] Fixed some parsing issues --- probing-tools/dtrace/parser/parser.js | 46 +++++++++++++++------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 9ff91ea8c..5d9e5e6fa 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -39,19 +39,25 @@ class Parser { } } - for (const id in this.futures) { - console.log("Future " + this.futures[id].id); - console.log(`\tDuration: ${this.futures[id].duration} nanoseconds`); - - const blocks = this.futures[id].blocks; - - for (const key in blocks) { - // A future blocking - } - - console.log(this.futures[id]); - - } + // for (const id in this.futures) { + // console.log("Future " + this.futures[id].id); + // console.log(`\tDuration: ${this.futures[id].duration} nanoseconds`); + // console.log(`\tNumber of gets: ${this.futures[id].numberOfGets}`); + // console.log(`\tNumber of blocks: ${this.futures[id].numberOfBlocks}`); + // + // const blocks = this.futures[id].blocks; + // for (const key in blocks) { + // // A future blocking + // } + // + // const actorsBlocked = this.futures[id].actorsBlocked; + // for (const key in actorsBlocked) { + // // actorsBlocked[key] == number of times the future blocks the actor key + // } + // + // console.log(this.futures[id]); + // + // } } parseCounts(rootNode) { @@ -102,7 +108,7 @@ class Parser { for (let key in elements) { const element = elements[key]["future"][0]; const id = element['id'][0]; - const actorID = element['actor'][0]; + const actorID = element['actor'][0]["id"][0]; const duration = element['duration'][0]; let actor = this.actors[actorID]; @@ -128,7 +134,7 @@ class Parser { const id = element['id'][0]; if (id in this.futures) { - const actor = element['actor'][0]; + const actor = element['actor'][0]["id"][0]; const count = element['count'][0]; let future = this.futures[id]; future.actorsBlocked[actor] = parseInt(count); @@ -166,12 +172,12 @@ class Parser { parseFutureGets(rootNode) { // As there is only one node for future-gets // we can just get the first element in the list - const elements = rootNode[0]["future-get"]; + const futures = rootNode[0]["future-get"]; - for (const key in elements) { - const actorID = elements[key]["actor"][0]["id"]; - const futureID = elements[key]["future"][0]["id"]; - const count = elements[key]["count"][0]; + for (const key in futures) { + const actorID = futures[key]["actor"][0]["id"][0]; + const futureID = futures[key]["future"][0]["id"][0]; + const count = futures[key]["count"][0]; if (!(actorID in this.actors)) { this.actors[actorID] = new Actor(actorID); From eac9ba80309d15ebecdc84fc4e81b8c1f2addb10 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:05:11 +0100 Subject: [PATCH 32/77] Renamed tag work-steal-success-count --- probing-tools/dtrace/dtrace.d | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 4d7ffe2cb..941d886eb 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -168,9 +168,9 @@ END { printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_success_count); printf("\t\n\n"); - printf("\n\t\n"); + printf("\n\t\n"); printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @successful_steal_from_scheduler); - printf("\t\n\n"); + printf("\t\n\n"); } if (did_run_probe["work-steal-failure"]) { @@ -178,9 +178,9 @@ END { printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_fail_count); printf("\t\n\n"); - printf("\n\t\n"); + printf("\n\t\n"); printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @failed_steal_from_scheduler); - printf("\t\n\n"); + printf("\t\n\n"); } if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { From c351d513a414617289c4d725e15ac853aa68a9f0 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:11:17 +0100 Subject: [PATCH 33/77] Implemented parsing of tags work-steal-success and work-steal-success-from --- .../dtrace/parser/Classes/Scheduler.js | 14 +++++++ probing-tools/dtrace/parser/parser.js | 38 ++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 probing-tools/dtrace/parser/Classes/Scheduler.js diff --git a/probing-tools/dtrace/parser/Classes/Scheduler.js b/probing-tools/dtrace/parser/Classes/Scheduler.js new file mode 100644 index 000000000..c0ada40a4 --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/Scheduler.js @@ -0,0 +1,14 @@ +'use strict' + +class Scheduler { + + constructor(id, successfulSteals, failedSteals) { + this.id = id; + this.successfulSteals = successfulSteals; + this.failedSteals = failedSteals; + this.stolenFrom = []; + } + +} + +module.exports = Scheduler; diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 5d9e5e6fa..30990f6b3 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -4,6 +4,7 @@ const Actor = require('./Classes/Actor.js'); const Future = require('./Classes/Future.js'); const FutureGet = require('./Classes/FutureGet.js'); const FutureBlock = require('./Classes/FutureBlock.js'); +const Scheduler = require('./Classes/Scheduler.js'); class Parser { @@ -13,6 +14,7 @@ class Parser { this.futures = {}; this.actors = {}; this.futureGets = []; + this.schedulers = {}; } start() { @@ -32,8 +34,14 @@ class Parser { case "future-gets": this.parseFutureGets(elements); break; + case "work-steal-success": + this.parseWorkStealSuccess(elements); + break; + case "work-steal-success-from": + this.parseWorkStealSuccessFrom(elements); + break; default: - // console.log(parent); + console.log(parent); break; } } @@ -194,6 +202,34 @@ class Parser { } } + parseWorkStealSuccess(rootNode) { + const schedulers = rootNode[0]["schedulers"]; + for (const key in schedulers) { + const id = schedulers[key]["scheduler"][0]["id"][0]; + const count = schedulers[key]["scheduler"][0]["count"][0]; + + if (!(id in this.schedulers)) { + this.schedulers[id] = new Scheduler(id, count, 0); + } else { + this.schedulers[id].successfulSteals = count; + } + } + } + + parseWorkStealSuccessFrom(rootNode) { + const schedulers = rootNode[0]["schedulers"]; + for (const key in schedulers) { + const byId = schedulers[key]["scheduler"][0]["id"][0]; + const fromId = schedulers[key]["scheduler"][0]["from"][0]; + const count = schedulers[key]["scheduler"][0]["count"][0]; + + if (!(byId in this.schedulers)) { + this.schedulers[byId] = new Scheduler(byId, count, 0); + } + + this.schedulers[byId].stolenFrom[fromId] = count; + } + } } From 69681a01afd19997652d79408c3a0758aabce585 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:22:46 +0100 Subject: [PATCH 34/77] Implemented parsing of tags work-steal-failure and work-steal-failure-from + fixed issue with work-steal-success not parsing correctly --- .../dtrace/parser/Classes/Scheduler.js | 1 + probing-tools/dtrace/parser/parser.js | 49 ++++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/Scheduler.js b/probing-tools/dtrace/parser/Classes/Scheduler.js index c0ada40a4..c832dce35 100644 --- a/probing-tools/dtrace/parser/Classes/Scheduler.js +++ b/probing-tools/dtrace/parser/Classes/Scheduler.js @@ -7,6 +7,7 @@ class Scheduler { this.successfulSteals = successfulSteals; this.failedSteals = failedSteals; this.stolenFrom = []; + this.failedToStealFrom = []; } } diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 30990f6b3..5520057e9 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -40,6 +40,12 @@ class Parser { case "work-steal-success-from": this.parseWorkStealSuccessFrom(elements); break; + case "work-steal-failure": + this.parseWorkStealFailure(elements); + break; + case "work-steal-failure-from": + this.parseWorkStealFailureFrom(elements); + break; default: console.log(parent); break; @@ -203,10 +209,10 @@ class Parser { } parseWorkStealSuccess(rootNode) { - const schedulers = rootNode[0]["schedulers"]; + const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { - const id = schedulers[key]["scheduler"][0]["id"][0]; - const count = schedulers[key]["scheduler"][0]["count"][0]; + const id = schedulers[key]["id"][0]; + const count = schedulers[key]["count"][0]; if (!(id in this.schedulers)) { this.schedulers[id] = new Scheduler(id, count, 0); @@ -217,11 +223,11 @@ class Parser { } parseWorkStealSuccessFrom(rootNode) { - const schedulers = rootNode[0]["schedulers"]; + const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { - const byId = schedulers[key]["scheduler"][0]["id"][0]; - const fromId = schedulers[key]["scheduler"][0]["from"][0]; - const count = schedulers[key]["scheduler"][0]["count"][0]; + const byId = schedulers[key]["id"][0]; + const fromId = schedulers[key]["from"][0]; + const count = schedulers[key]["count"][0]; if (!(byId in this.schedulers)) { this.schedulers[byId] = new Scheduler(byId, count, 0); @@ -231,6 +237,35 @@ class Parser { } } + parseWorkStealFailure(rootNode) { + const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + for (const key in schedulers) { + const id = schedulers[key]["id"][0]; + const count = schedulers[key]["count"][0]; + + if (!(id in this.schedulers)) { + this.schedulers[id] = new Scheduler(id, 0, count); + } else { + this.schedulers[id].failedSteals = count; + } + } + } + + parseWorkStealFailureFrom(rootNode) { + const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + for (const key in schedulers) { + const byId = schedulers[key]["id"][0]; + const fromId = schedulers[key]["from"][0]; + const count = schedulers[key]["count"][0]; + + if (!(byId in this.schedulers)) { + this.schedulers[byId] = new Scheduler(byId, 0, count); + } + + this.schedulers[byId].failedToStealFrom[fromId] = count; + } + } + } module.exports = Parser; From 2e8c37d76df5edf5457eac2c42af1b6babcad740 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:29:03 +0100 Subject: [PATCH 35/77] Implemented actor-stolen + changed all counts and durations to ints --- probing-tools/dtrace/parser/Classes/Actor.js | 1 + probing-tools/dtrace/parser/Classes/Future.js | 2 +- .../dtrace/parser/Classes/FutureBlock.js | 2 +- probing-tools/dtrace/parser/parser.js | 37 ++++++++++++++----- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/Actor.js b/probing-tools/dtrace/parser/Classes/Actor.js index be51177b9..bc24fbb17 100644 --- a/probing-tools/dtrace/parser/Classes/Actor.js +++ b/probing-tools/dtrace/parser/Classes/Actor.js @@ -4,6 +4,7 @@ class Actor { this.id = id; this.numberOfTimesBlocked = 0; this.numberOfGets = 0; + this.numberOfTimesStolen = 0; } } diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/dtrace/parser/Classes/Future.js index 9f0ca8d30..97b0bed61 100644 --- a/probing-tools/dtrace/parser/Classes/Future.js +++ b/probing-tools/dtrace/parser/Classes/Future.js @@ -2,7 +2,7 @@ class Future { constructor(id, duration) { this.id = id; - this.duration = parseInt(duration); + this.duration = duration; this.blocks = []; this.actorsBlocked = {}; this.numberOfGets = 0; diff --git a/probing-tools/dtrace/parser/Classes/FutureBlock.js b/probing-tools/dtrace/parser/Classes/FutureBlock.js index d42826dcc..322288e85 100644 --- a/probing-tools/dtrace/parser/Classes/FutureBlock.js +++ b/probing-tools/dtrace/parser/Classes/FutureBlock.js @@ -3,7 +3,7 @@ class FutureBlock { constructor(id, actor, duration) { this.id = id; this.actor = actor; - this.duration = parseInt(duration); + this.duration = duration; } } diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 5520057e9..3146097e7 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -46,6 +46,9 @@ class Parser { case "work-steal-failure-from": this.parseWorkStealFailureFrom(elements); break; + case "actor-stolen": + this.parseActorStolen(elements); + break; default: console.log(parent); break; @@ -89,7 +92,7 @@ class Parser { for (const key in elements) { const id = elements[key]['id'][0]; const duration = elements[key]['duration'][0]; - const future = new Future(id, duration); + const future = new Future(id, parseInt(duration)); this.futures[id] = future; } } @@ -133,7 +136,7 @@ class Parser { if (!(id in this.blocks)) { this.blocks[id] = []; } - const block = new FutureBlock(id, actor, duration); + const block = new FutureBlock(id, actor, parseInt(duration)); this.blocks[id].push(block); if (id in this.futures) { @@ -215,9 +218,9 @@ class Parser { const count = schedulers[key]["count"][0]; if (!(id in this.schedulers)) { - this.schedulers[id] = new Scheduler(id, count, 0); + this.schedulers[id] = new Scheduler(id, parseInt(count), 0); } else { - this.schedulers[id].successfulSteals = count; + this.schedulers[id].successfulSteals = parseInt(count); } } } @@ -230,10 +233,10 @@ class Parser { const count = schedulers[key]["count"][0]; if (!(byId in this.schedulers)) { - this.schedulers[byId] = new Scheduler(byId, count, 0); + this.schedulers[byId] = new Scheduler(byId, parseInt(count), 0); } - this.schedulers[byId].stolenFrom[fromId] = count; + this.schedulers[byId].stolenFrom[fromId] = parseInt(count); } } @@ -244,9 +247,9 @@ class Parser { const count = schedulers[key]["count"][0]; if (!(id in this.schedulers)) { - this.schedulers[id] = new Scheduler(id, 0, count); + this.schedulers[id] = new Scheduler(id, 0, parseInt(count)); } else { - this.schedulers[id].failedSteals = count; + this.schedulers[id].failedSteals = parseInt(count); } } } @@ -259,10 +262,24 @@ class Parser { const count = schedulers[key]["count"][0]; if (!(byId in this.schedulers)) { - this.schedulers[byId] = new Scheduler(byId, 0, count); + this.schedulers[byId] = new Scheduler(byId, 0, parseInt(count)); + } + + this.schedulers[byId].failedToStealFrom[fromId] = parseInt(count); + } + } + + parseActorStolen(rootNode) { + const actors = rootNode[0]["actor"]; + for (const key in actors) { + const id = actors[key]["id"][0]; + const count = actors[key]["count"][0]; + + if (!(id in this.actors)) { + this.actors[id] = new Actor(id); } - this.schedulers[byId].failedToStealFrom[fromId] = count; + this.actors[id].numberOfTimesStolen = parseInt(count); } } From b0764aad8d7a4ac33c3ea1bb0a427c18a4e59537 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:36:18 +0100 Subject: [PATCH 36/77] Implemented parsing for tag methods --- probing-tools/dtrace/parser/Classes/Actor.js | 1 + probing-tools/dtrace/parser/Classes/Method.js | 12 +++++++++++ probing-tools/dtrace/parser/parser.js | 21 ++++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 probing-tools/dtrace/parser/Classes/Method.js diff --git a/probing-tools/dtrace/parser/Classes/Actor.js b/probing-tools/dtrace/parser/Classes/Actor.js index bc24fbb17..3efe6602d 100644 --- a/probing-tools/dtrace/parser/Classes/Actor.js +++ b/probing-tools/dtrace/parser/Classes/Actor.js @@ -5,6 +5,7 @@ class Actor { this.numberOfTimesBlocked = 0; this.numberOfGets = 0; this.numberOfTimesStolen = 0; + this.methods = {}; } } diff --git a/probing-tools/dtrace/parser/Classes/Method.js b/probing-tools/dtrace/parser/Classes/Method.js new file mode 100644 index 000000000..f2c24f3d6 --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/Method.js @@ -0,0 +1,12 @@ +'use strict' + +class Method { + + constructor(name, duration) { + this.name = name; + this.duration = duration; + } + +} + +module.exports = Method; diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 3146097e7..ffea3bb87 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -1,6 +1,7 @@ 'use strict'; const Actor = require('./Classes/Actor.js'); +const Method = require('./Classes/Method.js'); const Future = require('./Classes/Future.js'); const FutureGet = require('./Classes/FutureGet.js'); const FutureBlock = require('./Classes/FutureBlock.js'); @@ -49,8 +50,11 @@ class Parser { case "actor-stolen": this.parseActorStolen(elements); break; + case "methods": + this.parseMethods(elements); + break; default: - console.log(parent); + console.log("Error: Unknown tag: " + parent); break; } } @@ -283,6 +287,21 @@ class Parser { } } + parseMethods(rootNode) { + const methods = rootNode[0]["method"]; + for (const key in methods) { + const id = methods[key]["actor"][0]["id"][0]; + const name = methods[key]["name"][0]; + const duration = methods[key]["duration"][0]; + + if (!(id in this.actors)) { + this.actors[id] = new Actor(id); + } + + this.actors[id].methods[name] = new Method(name, parseInt(duration)); + } + } + } module.exports = Parser; From 145991d557e7839678cadec65cdd8cc4a4d4da49 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:36:50 +0100 Subject: [PATCH 37/77] Removed debug code --- probing-tools/dtrace/parser/parser.js | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index ffea3bb87..e8e500a45 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -59,26 +59,6 @@ class Parser { } } } - - // for (const id in this.futures) { - // console.log("Future " + this.futures[id].id); - // console.log(`\tDuration: ${this.futures[id].duration} nanoseconds`); - // console.log(`\tNumber of gets: ${this.futures[id].numberOfGets}`); - // console.log(`\tNumber of blocks: ${this.futures[id].numberOfBlocks}`); - // - // const blocks = this.futures[id].blocks; - // for (const key in blocks) { - // // A future blocking - // } - // - // const actorsBlocked = this.futures[id].actorsBlocked; - // for (const key in actorsBlocked) { - // // actorsBlocked[key] == number of times the future blocks the actor key - // } - // - // console.log(this.futures[id]); - // - // } } parseCounts(rootNode) { From 0180392b5d7b4ed35423d7ac6ee97f5d82b83e8f Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 11:41:38 +0100 Subject: [PATCH 38/77] Changed tags for counts --- probing-tools/dtrace/dtrace.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 941d886eb..043626151 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -133,7 +133,7 @@ encore$target:::method-exit { END { printf("\n"); printf("\n"); - printa("\t%@u\n", @counts); + printa("\t<%s count=\"%@u\">\n", @counts); printf("\n"); if (did_run_probe["future-create"]) { From dbcc6052d4349fdac751cd177abc8ec8fc7e3338 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 12:01:51 +0100 Subject: [PATCH 39/77] Implemented parsing of count tag --- probing-tools/dtrace/parser/parser.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index e8e500a45..04c6bf118 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -11,6 +11,7 @@ class Parser { constructor(nodes) { this.nodes = nodes; + this.counts = {}; this.blocks = {}; this.futures = {}; this.actors = {}; @@ -64,7 +65,8 @@ class Parser { parseCounts(rootNode) { const elements = rootNode[0]; for (const key in elements) { - // TODO: Add counts to some data structure + const count = elements[key][0]["$"]["count"]; + this.counts[key] = parseInt(count); } } From d9d7192fd7ecbcf33e5512fd96c30638b8a9a81a Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 22:43:52 +0100 Subject: [PATCH 40/77] Implemented simple outputting of parsed result + added new class for WorkSteals --- probing-tools/dtrace/parser/Classes/Future.js | 2 +- .../dtrace/parser/Classes/FutureBlock.js | 5 ++-- probing-tools/dtrace/parser/Classes/Method.js | 2 +- .../dtrace/parser/Classes/Scheduler.js | 4 +-- .../dtrace/parser/Classes/WorkSteal.js | 13 ++++++++++ probing-tools/dtrace/parser/index.js | 25 +++++++++++++++++++ probing-tools/dtrace/parser/parser.js | 5 ++++ 7 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 probing-tools/dtrace/parser/Classes/WorkSteal.js diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/dtrace/parser/Classes/Future.js index 97b0bed61..9f2ea2d69 100644 --- a/probing-tools/dtrace/parser/Classes/Future.js +++ b/probing-tools/dtrace/parser/Classes/Future.js @@ -2,7 +2,7 @@ class Future { constructor(id, duration) { this.id = id; - this.duration = duration; + this.duration = duration / 1000000.0; this.blocks = []; this.actorsBlocked = {}; this.numberOfGets = 0; diff --git a/probing-tools/dtrace/parser/Classes/FutureBlock.js b/probing-tools/dtrace/parser/Classes/FutureBlock.js index 322288e85..c55a6987f 100644 --- a/probing-tools/dtrace/parser/Classes/FutureBlock.js +++ b/probing-tools/dtrace/parser/Classes/FutureBlock.js @@ -1,9 +1,10 @@ class FutureBlock { constructor(id, actor, duration) { - this.id = id; + this.futureId = id; this.actor = actor; - this.duration = duration; + this.duration = duration / 1000000.0; + this.actorId = actor.id; } } diff --git a/probing-tools/dtrace/parser/Classes/Method.js b/probing-tools/dtrace/parser/Classes/Method.js index f2c24f3d6..7112eefc6 100644 --- a/probing-tools/dtrace/parser/Classes/Method.js +++ b/probing-tools/dtrace/parser/Classes/Method.js @@ -4,7 +4,7 @@ class Method { constructor(name, duration) { this.name = name; - this.duration = duration; + this.duration = duration / 1000000.0; } } diff --git a/probing-tools/dtrace/parser/Classes/Scheduler.js b/probing-tools/dtrace/parser/Classes/Scheduler.js index c832dce35..f57f0606b 100644 --- a/probing-tools/dtrace/parser/Classes/Scheduler.js +++ b/probing-tools/dtrace/parser/Classes/Scheduler.js @@ -6,8 +6,8 @@ class Scheduler { this.id = id; this.successfulSteals = successfulSteals; this.failedSteals = failedSteals; - this.stolenFrom = []; - this.failedToStealFrom = []; + this.stolenFrom = {}; + this.failedToStealFrom = {}; } } diff --git a/probing-tools/dtrace/parser/Classes/WorkSteal.js b/probing-tools/dtrace/parser/Classes/WorkSteal.js new file mode 100644 index 000000000..51e1fe2fd --- /dev/null +++ b/probing-tools/dtrace/parser/Classes/WorkSteal.js @@ -0,0 +1,13 @@ +'use strict' + +class WorkSteal { + + constructor(byId, fromId, count) { + this.scheduler = byId; + this.victim = fromId; + this.count = count; + } + +} + +module.exports = WorkSteal; diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js index de87c682c..aeeca7f1d 100644 --- a/probing-tools/dtrace/parser/index.js +++ b/probing-tools/dtrace/parser/index.js @@ -23,6 +23,31 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { const parser = new Parser(nodes); parser.start(); + + const counts = parser.counts; + const futures = parser.futures; + const blocks = parser.blocks; + const actors = parser.actors; + const schedulers = parser.schedulers; + const workStealSuccess = parser.workStealSuccess; + const workStealFailure = parser.workStealFailure; + + console.table(counts); + console.log("--------------------------- FUTURES ---------------------------"); + console.table(futures, ["id", "duration", "numberOfBlocks"]); + console.log("--------------------------- BLOCKS ---------------------------"); + for (const key in blocks) { + console.table(blocks[key], ["futureId", "actorId", "duration"]); + } + console.log("--------------------------- ACTORS ---------------------------"); + console.table(actors, ["id", "numberOfGets", "numberOfTimesBlocked", "numberOfTimesStolen"]); + console.log("--------------------------- Schedulers ---------------------------"); + console.table(schedulers, ["id", "successfulSteals", "failedSteals"]); + console.log("--------------------------- Work steal success ---------------------------"); + console.table(workStealSuccess); + console.log("--------------------------- Work steal failure ---------------------------"); + console.table(workStealFailure); + }); }); diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 04c6bf118..b3f46e0f4 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -6,6 +6,7 @@ const Future = require('./Classes/Future.js'); const FutureGet = require('./Classes/FutureGet.js'); const FutureBlock = require('./Classes/FutureBlock.js'); const Scheduler = require('./Classes/Scheduler.js'); +const WorkSteal = require('./Classes/WorkSteal.js'); class Parser { @@ -17,6 +18,8 @@ class Parser { this.actors = {}; this.futureGets = []; this.schedulers = {}; + this.workStealSuccess = []; + this.workStealFailure = []; } start() { @@ -222,6 +225,7 @@ class Parser { this.schedulers[byId] = new Scheduler(byId, parseInt(count), 0); } + this.workStealSuccess.push(new WorkSteal(byId, fromId, parseInt(count))); this.schedulers[byId].stolenFrom[fromId] = parseInt(count); } } @@ -251,6 +255,7 @@ class Parser { this.schedulers[byId] = new Scheduler(byId, 0, parseInt(count)); } + this.workStealFailure.push(new WorkSteal(byId, fromId, parseInt(count))); this.schedulers[byId].failedToStealFrom[fromId] = parseInt(count); } } From 621d4491287ae679ee0979797ce480617660b5bd Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 22:54:34 +0100 Subject: [PATCH 41/77] Added documentation --- probing-tools/dtrace/parser/parser.js | 70 +++++++++++++++++++++------ 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index b3f46e0f4..2a7e7f43e 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -64,7 +64,10 @@ class Parser { } } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseCounts(rootNode) { const elements = rootNode[0]; for (const key in elements) { @@ -72,7 +75,10 @@ class Parser { this.counts[key] = parseInt(count); } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseFutures(rootNode) { // As there is only one root node for futures // we can just get the first element in the list @@ -85,7 +91,10 @@ class Parser { this.futures[id] = future; } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseFutureBlocks(rootNode) { const elements = rootNode[0]; @@ -109,7 +118,10 @@ class Parser { } } } - + /** + * Parses the element. + * @param Object elements The root node. + */ parseFutureBlockLifetime(elements) { for (let key in elements) { const element = elements[key]["future"][0]; @@ -133,7 +145,10 @@ class Parser { } } } - + /** + * Parses the elements. + * @param Object elements The root node. + */ parseFutureBlockActorCount(elements) { for (let key in elements) { const element = elements[key]["future"][0]; @@ -147,7 +162,10 @@ class Parser { } } } - + /** + * Parses the elements. + * @param Object elements The root node. + */ parseFutureBlockCount(elements) { for (let key in elements) { const element = elements[key]["future"][0]; @@ -160,7 +178,10 @@ class Parser { } } } - + /** + * Parses the elements. + * @param Object elements The root node. + */ parseActorBlockCount(elements) { for (let key in elements) { const element = elements[key]['actor'][0]; @@ -174,7 +195,10 @@ class Parser { this.actors[id].numberOfTimesBlocked = parseInt(count); } } - + /** + * Parses the elements. + * @param Object rootNode The root node. + */ parseFutureGets(rootNode) { // As there is only one node for future-gets // we can just get the first element in the list @@ -199,7 +223,10 @@ class Parser { this.futureGets.push(futureGet); } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseWorkStealSuccess(rootNode) { const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { @@ -213,7 +240,10 @@ class Parser { } } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseWorkStealSuccessFrom(rootNode) { const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { @@ -229,7 +259,10 @@ class Parser { this.schedulers[byId].stolenFrom[fromId] = parseInt(count); } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseWorkStealFailure(rootNode) { const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { @@ -243,7 +276,10 @@ class Parser { } } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseWorkStealFailureFrom(rootNode) { const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; for (const key in schedulers) { @@ -259,7 +295,10 @@ class Parser { this.schedulers[byId].failedToStealFrom[fromId] = parseInt(count); } } - + /** + * Parses the elements. + * @param Object rootNode The root node. + */ parseActorStolen(rootNode) { const actors = rootNode[0]["actor"]; for (const key in actors) { @@ -273,7 +312,10 @@ class Parser { this.actors[id].numberOfTimesStolen = parseInt(count); } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseMethods(rootNode) { const methods = rootNode[0]["method"]; for (const key in methods) { From 388c3331c53f75c2b879b452b65528e8ef2fe947 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 22:55:50 +0100 Subject: [PATCH 42/77] Added actorid to method class --- probing-tools/dtrace/parser/Classes/Method.js | 3 ++- probing-tools/dtrace/parser/parser.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/Method.js b/probing-tools/dtrace/parser/Classes/Method.js index 7112eefc6..df55810ef 100644 --- a/probing-tools/dtrace/parser/Classes/Method.js +++ b/probing-tools/dtrace/parser/Classes/Method.js @@ -2,7 +2,8 @@ class Method { - constructor(name, duration) { + constructor(actorId, name, duration) { + this.actorId = actorId; this.name = name; this.duration = duration / 1000000.0; } diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 2a7e7f43e..8f0642a5b 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -327,7 +327,7 @@ class Parser { this.actors[id] = new Actor(id); } - this.actors[id].methods[name] = new Method(name, parseInt(duration)); + this.actors[id].methods[name] = new Method(id, name, parseInt(duration)); } } From 9f5973e219011c0ce6bdf11b1a51e0958c70e58c Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 22:56:21 +0100 Subject: [PATCH 43/77] Info gathered on methods are now outputted as well --- probing-tools/dtrace/parser/index.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js index aeeca7f1d..ea491eaf7 100644 --- a/probing-tools/dtrace/parser/index.js +++ b/probing-tools/dtrace/parser/index.js @@ -32,6 +32,15 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { const workStealSuccess = parser.workStealSuccess; const workStealFailure = parser.workStealFailure; + let methods = []; + + for (const key in actors) { + for (const method in actors[key].methods) { + methods.push(actors[key].methods[method]); + } + + } + console.table(counts); console.log("--------------------------- FUTURES ---------------------------"); console.table(futures, ["id", "duration", "numberOfBlocks"]); @@ -47,6 +56,8 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { console.table(workStealSuccess); console.log("--------------------------- Work steal failure ---------------------------"); console.table(workStealFailure); + console.log("--------------------------- Methods ---------------------------"); + console.table(methods); }); From 1500bc3ee60448a76d5a30cce9560a33c05a83de Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 23:03:43 +0100 Subject: [PATCH 44/77] Added option to output either XML or human readable format + fixed issue with counts tag not closed properly --- probing-tools/dtrace/dtrace.d | 278 +++++++++++++++++----------------- 1 file changed, 140 insertions(+), 138 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 043626151..ac9f7564a 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -131,143 +131,145 @@ encore$target:::method-exit { } END { - printf("\n"); - printf("\n"); - printa("\t<%s count=\"%@u\">\n", @counts); - printf("\n"); - - if (did_run_probe["future-create"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_lifetime); - printf("\n"); + if ($$1 == "XML") { + printf("\n"); + printf("\n"); + printa("\t<%s count=\"%@u\" />\n", @counts); + printf("\n"); + + if (did_run_probe["future-create"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_lifetime); + printf("\n"); + } + + if (did_run_probe["future-block"]) { + printf("\n"); + printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_block); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @actor_blocked); + printf("\n"); + } + + if (did_run_probe["future-get"]) { + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); + printf("\n"); + } + + if (did_run_probe["future-chaining"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); + printf("\n"); + } + + if (did_run_probe["work-steal-successful"]) { + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_success_count); + printf("\t\n\n"); + + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @successful_steal_from_scheduler); + printf("\t\n\n"); + } + + if (did_run_probe["work-steal-failure"]) { + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_fail_count); + printf("\t\n\n"); + + printf("\n\t\n"); + printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @failed_steal_from_scheduler); + printf("\t\n\n"); + } + + if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); + printf("\n"); + } + + if (did_run_probe["method-entry"]) { + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); + printf(""); + } + + printf("\n"); + } else { + printf("//---------- FUTURES ------------//\n"); + printf("--- COUNTS ---\n"); + printa("%s\t%@1u\n", @counts); + + if (did_run_probe["future-create"]) { + printf("\n--- Duration a future is alive ---\n"); + printf("Future id\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%@1u\n", @future_lifetime); + } + if (did_run_probe["future-block"]) { + printf("\n--- Duration a future blocks an actor ---\n"); + printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); + + printf("\n--- Number of times an actor is blocked by a future ---\n"); + printf("Future id\t\tActor id\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); + + printf("\n--- Total number of times an actor is blocked ---\n"); + printf("Actor id\t\tCount\n"); + printa("%d\t\t%@2u\n", @actor_blocked); + + printf("\n--- Total number of times a future blocks ---\n"); + printf("Future id\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_block); + } + + if (did_run_probe["future-get"]) { + printf("\n--- Number of times an actor calls get ---\n"); + printf("Actor id\t\tFuture id\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @future_get); + } + + if (did_run_probe["future-chaining"]) { + printf("\n--- Number of times a future is chained ---\n"); + printf("Future id\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_chaining); + } + + if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { + printf("\n//---------- STEALS ------------//\n"); + printf("\n--- COUNTS ---\n"); + printf("Attempted\t%d\n", diagnostics.steal_attempts); + printf("Core switches:\t%d\n", diagnostics.cpu_jumps); + printa("%s\t%@2u\n", @counts); + + printf("\n--- Number of times a scheduler successfully steals ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_success_count); + + printf("\n--- Number of times a scheduler fails to steal ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_fail_count); + + printf("\n--- Number of times a scheduler steals from another ---\n"); + printf("Stolen by\t\tStolen from\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); + + printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); + printf("Attempted by\t\tTarget\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); + + printf("\n--- Number of times an actor is stolen ---\n"); + printf("Actor id\t\tTimes stolen\n"); + printa("%d\t\t%@2u\n", @stolen_actor); + } + if (did_run_probe["method-entry"]) { + printf("\n//---------- METHODS ------------//\n"); + + printf("\n--- Time spent in methods\n"); + printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); + printa("%d\t\t%s\t\t\t%@u\n", @function_time); + } } - - if (did_run_probe["future-block"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_block); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @actor_blocked); - printf("\n"); - } - - if (did_run_probe["future-get"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); - printf("\n"); - } - - if (did_run_probe["future-chaining"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); - printf("\n"); - } - - if (did_run_probe["work-steal-successful"]) { - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_success_count); - printf("\t\n\n"); - - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @successful_steal_from_scheduler); - printf("\t\n\n"); - } - - if (did_run_probe["work-steal-failure"]) { - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_fail_count); - printf("\t\n\n"); - - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @failed_steal_from_scheduler); - printf("\t\n\n"); - } - - if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); - printf("\n"); - } - - if (did_run_probe["method-entry"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); - printf(""); - } - - printf("\n"); - - // printf("//---------- FUTURES ------------//\n"); - // printf("--- COUNTS ---\n"); - // printa("%s\t%@1u\n", @counts); - - // if (did_run_probe["future-create"]) { - // printf("\n--- Duration a future is alive ---\n"); - // printf("Future id\t\tLifetime (nanoseconds)\n"); - // printa("%d\t\t%@1u\n", @future_lifetime); - // } - // if (did_run_probe["future-block"]) { - // printf("\n--- Duration a future blocks an actor ---\n"); - // printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); - // printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); - - // printf("\n--- Number of times an actor is blocked by a future ---\n"); - // printf("Future id\t\tActor id\t\tCount\n"); - // printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); - - // printf("\n--- Total number of times an actor is blocked ---\n"); - // printf("Actor id\t\tCount\n"); - // printa("%d\t\t%@2u\n", @actor_blocked); - - // printf("\n--- Total number of times a future blocks ---\n"); - // printf("Future id\t\tCount\n"); - // printa("%d\t\t%@2u\n", @future_block); - // } - - // if (did_run_probe["future-get"]) { - // printf("\n--- Number of times an actor calls get ---\n"); - // printf("Actor id\t\tFuture id\t\tCount\n"); - // printa("%d\t\t%d\t\t%@2u\n", @future_get); - // } - - // if (did_run_probe["future-chaining"]) { - // printf("\n--- Number of times a future is chained ---\n"); - // printf("Future id\t\tCount\n"); - // printa("%d\t\t%@2u\n", @future_chaining); - // } - - // if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { - // printf("\n//---------- STEALS ------------//\n"); - // printf("\n--- COUNTS ---\n"); - // printf("Attempted\t%d\n", diagnostics.steal_attempts); - // printf("Core switches:\t%d\n", diagnostics.cpu_jumps); - // printa("%s\t%@2u\n", @counts); - - // printf("\n--- Number of times a scheduler successfully steals ---\n"); - // printf("Scheduler id\t\tCount\n"); - // printa("%d\t\t%@2u\n", @steal_success_count); - // - // printf("\n--- Number of times a scheduler fails to steal ---\n"); - // printf("Scheduler id\t\tCount\n"); - // printa("%d\t\t%@2u\n", @steal_fail_count); - - // printf("\n--- Number of times a scheduler steals from another ---\n"); - // printf("Stolen by\t\tStolen from\t\tCount\n"); - // printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); - - // printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); - // printf("Attempted by\t\tTarget\t\tCount\n"); - // printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); - - // printf("\n--- Number of times an actor is stolen ---\n"); - // printf("Actor id\t\tTimes stolen\n"); - // printa("%d\t\t%@2u\n", @stolen_actor); - // } - // if (did_run_probe["method-entry"]) { - // printf("\n//---------- METHODS ------------//\n"); - // - // printf("\n--- Time spent in methods\n"); - // printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); - // printa("%d\t\t%s\t\t\t%@u\n", @function_time); - // } } From 2b3a224df4311b0a9e003a808829da0754bda99e Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 23:09:10 +0100 Subject: [PATCH 45/77] Changed FutureGets class to contain actor id and future id, instead of reference to Actor and Future objects --- probing-tools/dtrace/parser/Classes/FutureGet.js | 3 ++- probing-tools/dtrace/parser/parser.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/dtrace/parser/Classes/FutureGet.js index cd9440169..5b10722da 100644 --- a/probing-tools/dtrace/parser/Classes/FutureGet.js +++ b/probing-tools/dtrace/parser/Classes/FutureGet.js @@ -1,8 +1,9 @@ class FutureGet { - constructor(actor, future) { + constructor(actor, future, count) { this.actor = actor; this.future = future; + this.count = count; } } diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 8f0642a5b..466f4ba94 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -219,7 +219,7 @@ class Parser { this.actors[actorID].numberOfGets += 1; this.futures[futureID].numberOfGets += 1; - const futureGet = new FutureGet(this.actors[actorID], this.futures[futureID]); + const futureGet = new FutureGet(actorID, futureID, parseInt(count)); this.futureGets.push(futureGet); } } From c3bb5bdd3081c3a7b9501a64ac9b454e955a2b1e Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 23:09:31 +0100 Subject: [PATCH 46/77] Future gets information now outputted --- probing-tools/dtrace/parser/index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js index ea491eaf7..c04454081 100644 --- a/probing-tools/dtrace/parser/index.js +++ b/probing-tools/dtrace/parser/index.js @@ -26,6 +26,7 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { const counts = parser.counts; const futures = parser.futures; + const futureGets = parser.futureGets; const blocks = parser.blocks; const actors = parser.actors; const schedulers = parser.schedulers; @@ -42,14 +43,16 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { } console.table(counts); + console.log("--------------------------- ACTORS ---------------------------"); + console.table(actors, ["id", "numberOfGets", "numberOfTimesBlocked", "numberOfTimesStolen"]); console.log("--------------------------- FUTURES ---------------------------"); console.table(futures, ["id", "duration", "numberOfBlocks"]); console.log("--------------------------- BLOCKS ---------------------------"); for (const key in blocks) { console.table(blocks[key], ["futureId", "actorId", "duration"]); } - console.log("--------------------------- ACTORS ---------------------------"); - console.table(actors, ["id", "numberOfGets", "numberOfTimesBlocked", "numberOfTimesStolen"]); + console.log("--------------------------- FUTURE GETS ---------------------------"); + console.table(futureGets); console.log("--------------------------- Schedulers ---------------------------"); console.table(schedulers, ["id", "successfulSteals", "failedSteals"]); console.log("--------------------------- Work steal success ---------------------------"); From 5790580506d4da528753875cb26851bbedc3ff0c Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sat, 9 Mar 2019 23:18:55 +0100 Subject: [PATCH 47/77] Added some documentation --- probing-tools/dtrace/parser/Classes/Actor.js | 13 +++++++++++++ probing-tools/dtrace/parser/Classes/Future.js | 13 +++++++++++++ probing-tools/dtrace/parser/Classes/FutureBlock.js | 7 +++++++ probing-tools/dtrace/parser/Classes/FutureGet.js | 9 +++++++++ probing-tools/dtrace/parser/Classes/Method.js | 7 ++++++- probing-tools/dtrace/parser/Classes/Scheduler.js | 8 +++++++- probing-tools/dtrace/parser/Classes/WorkSteal.js | 7 ++++++- 7 files changed, 61 insertions(+), 3 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/Actor.js b/probing-tools/dtrace/parser/Classes/Actor.js index 3efe6602d..36f990139 100644 --- a/probing-tools/dtrace/parser/Classes/Actor.js +++ b/probing-tools/dtrace/parser/Classes/Actor.js @@ -1,3 +1,16 @@ +'use strict' +/** + * Represents an Encore Actor + * + * This class has the ID of an actor, as well as the number of times the + * actor is blocked by a future, the number of times the actor calls get + * and the number of times a scheduler steals it from another scheduler. + * + * All these values are integers. + * + * The actor object also holds references to Method objects, representing + * the methods of an actor called. + */ class Actor { constructor(id) { diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/dtrace/parser/Classes/Future.js index 9f2ea2d69..48d5abbb2 100644 --- a/probing-tools/dtrace/parser/Classes/Future.js +++ b/probing-tools/dtrace/parser/Classes/Future.js @@ -1,3 +1,16 @@ +'use strict' +/** + * Represents an Encore Future + * + * This class has the ID of a future, the duration the future is active + * as well as the number of actors it has blocked, the total number of + * times actors has called a get on it. + * + * All these values are integers. + * + * The future object also holds references to FutureBlock objects, representing + * a future blocking. + */ class Future { constructor(id, duration) { diff --git a/probing-tools/dtrace/parser/Classes/FutureBlock.js b/probing-tools/dtrace/parser/Classes/FutureBlock.js index c55a6987f..75204fddc 100644 --- a/probing-tools/dtrace/parser/Classes/FutureBlock.js +++ b/probing-tools/dtrace/parser/Classes/FutureBlock.js @@ -1,3 +1,10 @@ +'use strict' +/** + * Represents a block made by a Future. + * + * This class has the ID of an actor, the ID of a future, the duration of + * the block. This object also holds a reference to the Actor object. + */ class FutureBlock { constructor(id, actor, duration) { diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/dtrace/parser/Classes/FutureGet.js index 5b10722da..716160a4a 100644 --- a/probing-tools/dtrace/parser/Classes/FutureGet.js +++ b/probing-tools/dtrace/parser/Classes/FutureGet.js @@ -1,3 +1,12 @@ +'use strict' +/** + * Represents a Future get operation. + * + * This class has the ID of an actor, the id of a future, and the number + * of times it has been called (not necessary?). + * + * All these values are integers. + */ class FutureGet { constructor(actor, future, count) { diff --git a/probing-tools/dtrace/parser/Classes/Method.js b/probing-tools/dtrace/parser/Classes/Method.js index df55810ef..336d83ad9 100644 --- a/probing-tools/dtrace/parser/Classes/Method.js +++ b/probing-tools/dtrace/parser/Classes/Method.js @@ -1,5 +1,10 @@ 'use strict' - +/** + * Represents a Method. + * + * This class has the ID of an actor, as well as the name of the method, + * and the total number of milliseconds the method was alive. + */ class Method { constructor(actorId, name, duration) { diff --git a/probing-tools/dtrace/parser/Classes/Scheduler.js b/probing-tools/dtrace/parser/Classes/Scheduler.js index f57f0606b..6686b0839 100644 --- a/probing-tools/dtrace/parser/Classes/Scheduler.js +++ b/probing-tools/dtrace/parser/Classes/Scheduler.js @@ -1,5 +1,11 @@ 'use strict' - +/** + * Represents a Scheduler + * + * This class has the ID of a scheduler, the number of times it has successfully + * and unsuccessfully stolen work from another scheduler , as well as the a list + * of which schedulers it has stolen or attempted to steal from. + */ class Scheduler { constructor(id, successfulSteals, failedSteals) { diff --git a/probing-tools/dtrace/parser/Classes/WorkSteal.js b/probing-tools/dtrace/parser/Classes/WorkSteal.js index 51e1fe2fd..03e09b67d 100644 --- a/probing-tools/dtrace/parser/Classes/WorkSteal.js +++ b/probing-tools/dtrace/parser/Classes/WorkSteal.js @@ -1,5 +1,10 @@ 'use strict' - +/** + * Represents a schedulers steal. + * + * This class has the IDs of the schedulers and the number of times the + * scheduler has stolen from the other scheduler. + */ class WorkSteal { constructor(byId, fromId, count) { From 367a5c8676e36a81d197b95a20fb9d8deea0e500 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Sun, 10 Mar 2019 15:36:04 +0100 Subject: [PATCH 48/77] Changed how future blocks are displayed --- probing-tools/dtrace/parser/index.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js index c04454081..13044218a 100644 --- a/probing-tools/dtrace/parser/index.js +++ b/probing-tools/dtrace/parser/index.js @@ -1,3 +1,4 @@ +'use strict' const fs = require('fs'); const xml2js = new require('xml2js').Parser(); const Parser = require('./parser'); @@ -27,7 +28,7 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { const counts = parser.counts; const futures = parser.futures; const futureGets = parser.futureGets; - const blocks = parser.blocks; + const futureBlocks = parser.blocks; const actors = parser.actors; const schedulers = parser.schedulers; const workStealSuccess = parser.workStealSuccess; @@ -39,7 +40,14 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { for (const method in actors[key].methods) { methods.push(actors[key].methods[method]); } + } + + let blocks = []; + for (const key in futureBlocks) { + for (const block in futureBlocks[key]) { + blocks.push(futureBlocks[key][block]); + } } console.table(counts); @@ -48,9 +56,7 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { console.log("--------------------------- FUTURES ---------------------------"); console.table(futures, ["id", "duration", "numberOfBlocks"]); console.log("--------------------------- BLOCKS ---------------------------"); - for (const key in blocks) { - console.table(blocks[key], ["futureId", "actorId", "duration"]); - } + console.table(blocks, ["futureId", "actorId", "duration"]); console.log("--------------------------- FUTURE GETS ---------------------------"); console.table(futureGets); console.log("--------------------------- Schedulers ---------------------------"); From e9b97eb4a3b5cca8f507cef558ff90d084cd0484 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Wed, 13 Mar 2019 20:51:03 +0100 Subject: [PATCH 49/77] put the two different stp together: futures and schedulers --- .../systemtap/whatTobiasAskedFor.stp | 282 +++++++++++++++--- 1 file changed, 240 insertions(+), 42 deletions(-) diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp index 5049131ea..5bd1ab0e9 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -16,14 +16,79 @@ # counters global actor_msg_send -global future_created -global blocks +global future_create +global future_block +global future_destroy +global future_fulfil_start +global future_fulfil_end +global future_get +global future_unblock #list of ID:s global list_of_futures global actor_ctx_id_blocked -global actor_being_blocked -global future_fulfil_list +global future_actor_block +global future_id_blocking +global chained_actor_future_list + +####################### + +global successful_steals +global failed_steals +global total_steals + +global successful_steals_id +global failed_steals_id +global actor_stolen_id + +global scheduler_from_scheduler +global scheduler_from_scheduler_fail + +global core_switch +global current_sched_core + +global message_scheduler +global message_between_different_schedulers +global message_between_same_schedulers + +probe process.mark("actor-msg-send") { + message_scheduler[sprint($arg2)] = $arg1 +} + +probe process.mark("actor-msg-run") { + if (message_scheduler[sprint($arg3)] != $arg1) { + message_between_different_schedulers[message_scheduler[sprint($arg3)], $arg1, $arg3] <<< 1; + } + else if (message_scheduler[sprint($arg3)] == $arg1) { + message_between_same_schedulers[$arg1, $arg3] <<< 1; + } +} + +probe process.mark("work-steal-successful") { + successful_steals <<< 1; + total_steals <<< 1; + successful_steals_id[sprint($arg1)] += 1 + actor_stolen_id[sprint($arg3)] += 1 + + #Adding data to correct list + scheduler_from_scheduler[sprint($arg1), sprint($arg2)] <<< 1; + + if (cpu() != current_sched_core[sprint($arg1)]) { + core_switch <<< 1; + current_sched_core[sprint($arg1)] = cpu() + } + +} + +probe process.mark("work-steal-failure") { + failed_steals <<< 1; + total_steals <<< 1; + failed_steals_id[sprint($arg1)] += 1 + scheduler_from_scheduler_fail[sprint($arg1), sprint($arg2)] <<< 1 + +} + +####################### #messages probe process.mark("actor-msg-send") @@ -33,18 +98,22 @@ probe process.mark("actor-msg-send") #futures probe process.mark("future-create") { - future_created <<< 1; + future_create <<< 1; created_future = sprint($arg2) list_of_futures[created_future] = $arg2 start_stopwatch(created_future) } probe process.mark("future-block") { - blocks <<< 1; - blocked_future = sprint($arg2) + future_block <<< 1; start_stopwatch(sprint("block", $arg2)) - actor_being_blocked[blocked_future] = $arg1 actor_ctx_id_blocked[sprint($arg1)]++ + + actor_id = sprint($arg1) + future_id = sprint($arg2) + future_actor_block[future_id, actor_id] <<< 1 + + future_id_blocking[future_id] <<< 1; } probe process.mark("future-unblock") { @@ -52,7 +121,12 @@ probe process.mark("future-unblock") { stop_stopwatch(fulfilled_fut) } +probe process.mark("future-unblock") { + future_unblock <<< 1; +} + probe process.mark("future-destroy") { + future_destroy <<< 1; destroyed_future = sprint($arg2) if([destroyed_future] in list_of_futures) { stop_stopwatch(destroyed_future) @@ -66,57 +140,181 @@ probe process.mark("method-entry") { } } +probe process.mark("future-get") { + future_get <<< 1; +} + probe process.mark("future-fulfil-end"){ - future_id = sprint($arg2) - future_fulfil_list[sprint(future_id)] = future_id + future_fulfil_end <<< 1; +} + +probe process.mark("future-fulfil-start"){ + future_fulfil_start <<< 1; } #chaining -global chained_actor_list probe process.mark("future-chaining") { - future_chained = $arg2 - chained_actor_list[sprint(future_chained)] = future_chained + future_chained = sprint($arg2) + actor_chained = sprint($arg1) + chained_actor_future_list[actor_chained, future_chained] <<< 1 } probe end { - printf("\n") - message_num = @count(actor_msg_send) - future_num = @count(future_created) - total_blocks = @count(blocks) - printf("Amount of messages:\t \t %d\n", message_num) - printf("Amount of futures created:\t %d\n", future_num) - printf("Amount of blocked in total: \t %d \n", total_blocks) - printf("Ratio future:message \t \t %d:%d \n", 1, message_num/future_num) - - printf("\nfuture ID: \t lifetime (us): \t time blocked (us): \t chained: \t block act: \t fulfilled:\n") + + print("=== FUTURE INFORMATION ===\n") + print("=== COUNTS ===\n") + ams = @count(actor_msg_send) + fc = @count(future_create) + fb = @count(future_block) + ffs = @count(future_fulfil_start) + ffe = @count(future_fulfil_end) + fd = @count(future_destroy) + fg = @count(future_get) + fu = @count(future_unblock) + + printf("future-block\t\t%d\n", fb) + printf("future-create\t\t%d\n", fc) + printf("future-destroy\t\t%d\n", fd) + printf("future-fulfil-start\t%d\n", ffs) + printf("(future-fulfil-end\t%d\n", ffe) + printf("future-get\t\t%d\n", fg) + printf("future-unblock\t\t%d\n", fu) + printf("actor-msg-send\t\t%d\n", ams) + + if (fc != 0) { + printf("Ratio future:message\t%d:%d \n", 1, ams/fc) + } + else { + printf("Ratio future:message\t%d:%d \n", 0, ams) + } + + print("\n") + + print("=== FUTURE_LIFETIME ===\n") + print("Future Addr\t\tLifetime (nanoseconds)\n") + foreach(fut in list_of_futures) { + printf("%s\t\t%d\n", fut, read_stopwatch_ns(fut)) - #stopwatches: - time = read_stopwatch_us(fut) - time_waiting = read_stopwatch_us(sprint("block", fut)) + } + + print("\n") + + print("=== FUTURE_BLOCKED_LIFETIME ===\n") + print("Future Addr\t\tLifetime (nanoseconds)\n") + + foreach(fut in list_of_futures) { + watch_name_blocked = sprint("block", fut) + printf("%s\t\t%d\n", fut, read_stopwatch_ns(watch_name_blocked)) - #ctx id of blocked id: - actor = actor_being_blocked[fut] + } + + print("\n") - #Fulfilled - ful = "no" - if(fut in future_fulfil_list) { - ful = "yes" - } + print("=== FUTURE_BLOCKED_ACTOR ===\n") + print("Future Addr\t\tActr Addr\t\tLifetime (nanoseconds)\n") - #chained: - cha = "no" - if(fut in chained_actor_list) { - cha = "yes" - } - - printf("%15d %13d %27d %15s %17d %15s \n", list_of_futures[fut], time, time_waiting, cha, actor, ful) + foreach([fut, actor] in future_actor_block) { + printf("%s\t\t%s\t\t%d\n", fut, actor, @count(future_actor_block[fut, actor])) } - printf("\nactor ID: \t tot blocked:\n") + print("\n") + + print("=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n") + print("Actr Addr\t\tCount\n") + foreach(act in actor_ctx_id_blocked) { - printf("%s \t %d\n", act, actor_ctx_id_blocked[act]) + printf("%s\t\t%d\n", act, actor_ctx_id_blocked[act]) + } + + print("\n") + + print("=== NUMBER OF TIMES A FUTURE BLOCKS ===\n") + print("Future Addr\t\tCount\n") + + foreach(fut in future_id_blocking) { + printf("%s\t\t%d\n", fut, @count(future_id_blocking[fut])) + } + + print("\n") + + print("=== FUTURES CHAINED ===\n") + print("Actor Addr\t\tFuture Addr\t\tCount\n") + + foreach([act, fut] in chained_actor_future_list) { + printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[act, fut])) } + + +############### + print("\n\n") + print("==================================================== \n") + print("\t\t STEALS\n") + print("==================================================== \n\n") + + print("TOTAL\n") + print("Attempted\tSuccessful\tFailed\n") + ss = @count(successful_steals) + fs = @count(failed_steals) + ts = @count(total_steals) + printf("%d\t\t%d\t\t%d",ts, ss, fs) + print("\n\n") + + print("SUCCESSFUL STEALS\n") + print("Scheduler ID\t\tCount\n") + foreach(ssid in successful_steals_id) + printf("%s\t\t%d\n", ssid, successful_steals_id[ssid]) + print("\n") + + print("FAILED STEALS\n") + print("Scheduler ID\t\tCount\n") + foreach(fsid in failed_steals_id) + printf("%s\t\t%d\n", fsid, failed_steals_id[fsid]) + print("\n") + + + print("STEALS BETWEEN SCHEDULERS\n") + print("Stolen by\t\tStolen from\t\tCount\n") + foreach([steal, victim] in scheduler_from_scheduler) { + printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler[steal, victim])) + } + + print("\n") + + + print("FAILS BETWEEN SCHEDULERS\n") + print("Attempted by\t\tTarget\t\t\tCount\n") + foreach([steal, victim] in scheduler_from_scheduler_fail) { + printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler_fail[steal, victim])) + } + + print("\n") + + print("STOLEN ACTORS\n") + print("Actor ID\t\tTimes Stolen\n") + foreach(actor in actor_stolen_id) { + printf("%s\t\t%d\n", actor, actor_stolen_id[actor]) + } + + print("\n") + printf("CORE SWITCHES:\t%d\n", @count(core_switch)) + + print("\n") + + printf("MESSAGES BETWEEN SCHEDULERS\n") + printf("sending Sched\t\t recieving shed\t\tmessage id\t\tcount\n") + foreach ([s_shed, r_shed, mes_id] in message_between_different_schedulers) { + printf("%d\t\t%d\t\t%d\t\t%d\n", s_shed, r_shed, mes_id, @count(message_between_different_schedulers[s_shed, r_shed, mes_id])) + } + + print("\n") + + printf("MESSAGES WITHIN SCHEDULER\n") + printf("Sched\t\t message id\t\tcount\n") + foreach ([shed, mes_id] in message_between_same_schedulers) { + printf("%d\t\t%d\t\t%d\n", s_shed, mes_id, @count(message_between_same_schedulers[shed, mes_id])) + } +############### } \ No newline at end of file From bbc7abd604a02fbd6026ca54a766bd757c4beca7 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Mar 2019 16:58:06 +0100 Subject: [PATCH 50/77] Changed structure of XML output and fixed issue with incorrect timestamp. Also: removed methods-probes due to future chaining causing an error --- probing-tools/dtrace/dtrace.d | 120 +++++++++--------- .../dtrace/parser/Classes/FutureGet.js | 3 +- probing-tools/dtrace/parser/parser.js | 76 +++++------ 3 files changed, 97 insertions(+), 102 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index ac9f7564a..5dc704ca4 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -65,7 +65,7 @@ encore$target:::closure-create {} encore$target:::future-create { @counts[probename] = count(); // Used for lifetime of a future - self->future_create_starttime[arg1] = vtimestamp; + future_create_starttime[arg1] = timestamp; } encore$target:::future-block { @@ -76,14 +76,14 @@ encore$target:::future-block { @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); // Used for duration of a block - self->future_block_starttime[arg1, arg0] = vtimestamp; + future_block_starttime[arg1, actorPointer] = timestamp; } encore$target:::future-unblock { ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; @counts[probename] = count(); - @future_block_lifetime[arg1, actorPointer] = sum(vtimestamp - self->future_block_starttime[arg1, arg0]); + @future_block_lifetime[arg1, actorPointer] = sum(timestamp - future_block_starttime[arg1, actorPointer]); } encore$target:::future-chaining { @@ -108,27 +108,27 @@ encore$target:::future-get { encore$target:::future-destroy { @counts[probename] = count(); - @future_lifetime[arg1] = sum(vtimestamp - self->future_create_starttime[arg1]); + @future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); } -encore$target:::method-entry { - ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); - actorPointer = (uintptr_t)ctx->current; - // target pointer == the ctx current actor? - if (arg1 == actorPointer) { - self->function_time[arg1, arg2] = vtimestamp; - } -} - -encore$target:::method-exit { - ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); - actorPointer = (uintptr_t)ctx->current; - // target pointer == the ctx current actor? - if (arg1 == actorPointer) { - name = copyinstr(arg2); - @function_time[arg1, name] = sum(vtimestamp - self->function_time[arg1, arg2]); - } -} +// encore$target:::method-entry { +// ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); +// actorPointer = (uintptr_t)ctx->current; +// // target pointer == the ctx current actor? +// if (arg1 == actorPointer) { +// function_time[arg1, arg2] = timestamp; +// } +// } +// +// encore$target:::method-exit { +// ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); +// actorPointer = (uintptr_t)ctx->current; +// // target pointer == the ctx current actor? +// if (arg1 == actorPointer) { +// name = copyinstr(arg2); +// @function_time[arg1, name] = sum(timestamp - function_time[arg1, arg2]); +// } +// } END { if ($$1 == "XML") { @@ -145,43 +145,43 @@ END { if (did_run_probe["future-block"]) { printf("\n"); - printa("\t\n\t\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\t\n\t\n", @future_block_lifetime); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_blocked_actor); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @future_block); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n\t\n", @actor_blocked); + printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_block_lifetime); + printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_blocked_actor); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_block); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @actor_blocked); printf("\n"); } if (did_run_probe["future-get"]) { printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\n", @future_get); printf("\n"); } if (did_run_probe["future-chaining"]) { printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); printf("\n"); } if (did_run_probe["work-steal-successful"]) { - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_success_count); - printf("\t\n\n"); + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_success_count); + printf("\n"); - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @successful_steal_from_scheduler); - printf("\t\n\n"); + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @successful_steal_from_scheduler); + printf("\n"); } if (did_run_probe["work-steal-failure"]) { - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @steal_fail_count); - printf("\t\n\n"); + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_fail_count); + printf("\n"); - printf("\n\t\n"); - printa("\t\t\n\t\t\t%d\n\t\t\t%d\n\t\t\t%@u\n\t\t\n", @failed_steal_from_scheduler); - printf("\t\n\n"); + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @failed_steal_from_scheduler); + printf("\n"); } if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { @@ -190,18 +190,18 @@ END { printf("\n"); } - if (did_run_probe["method-entry"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); - printf(""); - } + // if (did_run_probe["method-entry"]) { + // printf("\n"); + // printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); + // printf(""); + // } - printf("\n"); + printf(""); } else { - printf("//---------- FUTURES ------------//\n"); printf("--- COUNTS ---\n"); printa("%s\t%@1u\n", @counts); - + printf("Core switches:\t%d\n", diagnostics.cpu_jumps); + printf("//---------- FUTURES ------------//\n"); if (did_run_probe["future-create"]) { printf("\n--- Duration a future is alive ---\n"); printf("Future id\t\tLifetime (nanoseconds)\n"); @@ -226,9 +226,9 @@ END { } if (did_run_probe["future-get"]) { - printf("\n--- Number of times an actor calls get ---\n"); - printf("Actor id\t\tFuture id\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @future_get); + printf("\n--- What actor calls get on what future ---\n"); + printf("Actor id\t\tFuture id\n"); + printa("%d\t\t%d\n", @future_get); } if (did_run_probe["future-chaining"]) { @@ -239,10 +239,6 @@ END { if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { printf("\n//---------- STEALS ------------//\n"); - printf("\n--- COUNTS ---\n"); - printf("Attempted\t%d\n", diagnostics.steal_attempts); - printf("Core switches:\t%d\n", diagnostics.cpu_jumps); - printa("%s\t%@2u\n", @counts); printf("\n--- Number of times a scheduler successfully steals ---\n"); printf("Scheduler id\t\tCount\n"); @@ -264,12 +260,12 @@ END { printf("Actor id\t\tTimes stolen\n"); printa("%d\t\t%@2u\n", @stolen_actor); } - if (did_run_probe["method-entry"]) { - printf("\n//---------- METHODS ------------//\n"); - - printf("\n--- Time spent in methods\n"); - printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); - printa("%d\t\t%s\t\t\t%@u\n", @function_time); - } + // if (did_run_probe["method-entry"]) { + // printf("\n//---------- METHODS ------------//\n"); + // + // printf("\n--- Time spent in methods\n"); + // printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); + // printa("%d\t\t%s\t\t\t%@u\n", @function_time); + // } } } diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/dtrace/parser/Classes/FutureGet.js index 716160a4a..865f7cac7 100644 --- a/probing-tools/dtrace/parser/Classes/FutureGet.js +++ b/probing-tools/dtrace/parser/Classes/FutureGet.js @@ -9,10 +9,9 @@ */ class FutureGet { - constructor(actor, future, count) { + constructor(actor, future) { this.actor = actor; this.future = future; - this.count = count; } } diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 466f4ba94..433ba940d 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -39,13 +39,13 @@ class Parser { case "future-gets": this.parseFutureGets(elements); break; - case "work-steal-success": + case "work-steal-successes": this.parseWorkStealSuccess(elements); break; case "work-steal-success-from": this.parseWorkStealSuccessFrom(elements); break; - case "work-steal-failure": + case "work-steal-failures": this.parseWorkStealFailure(elements); break; case "work-steal-failure-from": @@ -124,24 +124,25 @@ class Parser { */ parseFutureBlockLifetime(elements) { for (let key in elements) { - const element = elements[key]["future"][0]; - const id = element['id'][0]; - const actorID = element['actor'][0]["id"][0]; - const duration = element['duration'][0]; - let actor = this.actors[actorID]; + const future = elements[key]["future"][0]; + const actorElm = elements[key]["actor"][0]; + const duration = elements[key]["duration"][0]; + const futureId = future["id"][0]; + const actorId = actorElm["id"][0]; + let actor = this.actors[actorId]; if (actor == null) { - actor = new Actor(actorID); - this.actors[actorID] = actor; + actor = new Actor(actorId); + this.actors[actorId] = actor; } - if (!(id in this.blocks)) { this.blocks[id] = []; } + if (!(futureId in this.blocks)) { this.blocks[futureId] = []; } - const block = new FutureBlock(id, actor, parseInt(duration)); - this.blocks[id].push(block); + const block = new FutureBlock(futureId, actor, parseInt(duration)); + this.blocks[futureId].push(block); - if (id in this.futures) { - this.futures[id].blocks.push(block); + if (futureId in this.futures) { + this.futures[futureId].blocks.push(block); } } } @@ -151,14 +152,14 @@ class Parser { */ parseFutureBlockActorCount(elements) { for (let key in elements) { - const element = elements[key]["future"][0]; - const id = element['id'][0]; - - if (id in this.futures) { - const actor = element['actor'][0]["id"][0]; - const count = element['count'][0]; - let future = this.futures[id]; - future.actorsBlocked[actor] = parseInt(count); + const futureId = elements[key]["future"][0]['id'][0]; + const actorId = elements[key]["actor"][0]["id"][0]; + const count = elements[key]["count"][0]; + // TODO: If Future has no lifetime, it will not exist here. + // Perhaps create the Future object then?? + if (futureId in this.futures) { + let future = this.futures[futureId]; + future.actorsBlocked[actorId] = parseInt(count); } } } @@ -168,11 +169,10 @@ class Parser { */ parseFutureBlockCount(elements) { for (let key in elements) { - const element = elements[key]["future"][0]; - const id = element['id'][0]; + const id = elements[key]["future"][0]["id"][0]; + const count = elements[key]['count'][0]; if (id in this.futures) { - const count = element['count'][0]; let future = this.futures[id]; future.numberOfBlocks = parseInt(count); } @@ -186,7 +186,7 @@ class Parser { for (let key in elements) { const element = elements[key]['actor'][0]; const id = element['id'][0]; - const count = element['count'][0]; + const count = elements[key]['count'][0]; if (!(id in this.actors)) { this.actors[id] = new Actor(id); @@ -207,7 +207,6 @@ class Parser { for (const key in futures) { const actorID = futures[key]["actor"][0]["id"][0]; const futureID = futures[key]["future"][0]["id"][0]; - const count = futures[key]["count"][0]; if (!(actorID in this.actors)) { this.actors[actorID] = new Actor(actorID); @@ -219,7 +218,7 @@ class Parser { this.actors[actorID].numberOfGets += 1; this.futures[futureID].numberOfGets += 1; - const futureGet = new FutureGet(actorID, futureID, parseInt(count)); + const futureGet = new FutureGet(actorID, futureID); this.futureGets.push(futureGet); } } @@ -228,9 +227,9 @@ class Parser { * @param Object rootNode The root node. */ parseWorkStealSuccess(rootNode) { - const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + const schedulers = rootNode[0]["work-steal-success"]; for (const key in schedulers) { - const id = schedulers[key]["id"][0]; + const id = schedulers[key]["scheduler"][0]["id"][0]; const count = schedulers[key]["count"][0]; if (!(id in this.schedulers)) { @@ -245,10 +244,11 @@ class Parser { * @param Object rootNode The root node. */ parseWorkStealSuccessFrom(rootNode) { - const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + const schedulers = rootNode[0]["work-steal-success"]; + console.log(schedulers); for (const key in schedulers) { - const byId = schedulers[key]["id"][0]; - const fromId = schedulers[key]["from"][0]; + const byId = schedulers[key]["scheduler"][0]["id"][0]; + const fromId = schedulers[key]["victim"][0]; const count = schedulers[key]["count"][0]; if (!(byId in this.schedulers)) { @@ -264,9 +264,9 @@ class Parser { * @param Object rootNode The root node. */ parseWorkStealFailure(rootNode) { - const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + const schedulers = rootNode[0]["work-steal-failure"]; for (const key in schedulers) { - const id = schedulers[key]["id"][0]; + const id = schedulers[key]["scheduler"][0]["id"][0]; const count = schedulers[key]["count"][0]; if (!(id in this.schedulers)) { @@ -281,10 +281,10 @@ class Parser { * @param Object rootNode The root node. */ parseWorkStealFailureFrom(rootNode) { - const schedulers = rootNode[0]["schedulers"][0]["scheduler"]; + const schedulers = rootNode[0]["work-steal-failure"]; for (const key in schedulers) { - const byId = schedulers[key]["id"][0]; - const fromId = schedulers[key]["from"][0]; + const byId = schedulers[key]["scheduler"][0]["id"][0]; + const fromId = schedulers[key]["victim"][0]; const count = schedulers[key]["count"][0]; if (!(byId in this.schedulers)) { From c012dfa541cace352db6d737c6fe2260cc8abc0c Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Mar 2019 17:11:12 +0100 Subject: [PATCH 51/77] Added number of times an actor calls get on the same future --- probing-tools/dtrace/dtrace.d | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 5dc704ca4..3c38a51c7 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -154,7 +154,7 @@ END { if (did_run_probe["future-get"]) { printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\n", @future_get); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); printf("\n"); } @@ -226,9 +226,9 @@ END { } if (did_run_probe["future-get"]) { - printf("\n--- What actor calls get on what future ---\n"); - printf("Actor id\t\tFuture id\n"); - printa("%d\t\t%d\n", @future_get); + printf("\n--- Total number of times an actor calls get on a future ---\n"); + printf("Actor id\t\tFuture id\t\tCount\n"); + printa("%d\t\t%d\t\t%@u\n", @future_get); } if (did_run_probe["future-chaining"]) { From 333a5d279daffec5aac19d16d2b736c971ad92a5 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Mar 2019 17:17:44 +0100 Subject: [PATCH 52/77] Implemented parsing of future chainings, added count to future gets and fixed issue with incorrect count --- probing-tools/dtrace/parser/Classes/Future.js | 1 + .../dtrace/parser/Classes/FutureGet.js | 3 +- probing-tools/dtrace/parser/index.js | 2 +- probing-tools/dtrace/parser/parser.js | 35 ++++++++++++++----- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/dtrace/parser/Classes/Future.js index 48d5abbb2..d593e1063 100644 --- a/probing-tools/dtrace/parser/Classes/Future.js +++ b/probing-tools/dtrace/parser/Classes/Future.js @@ -20,6 +20,7 @@ class Future { this.actorsBlocked = {}; this.numberOfGets = 0; this.numberOfBlocks = 0; + this.numberOfFutureChainings = 0; } } diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/dtrace/parser/Classes/FutureGet.js index 865f7cac7..51d975a05 100644 --- a/probing-tools/dtrace/parser/Classes/FutureGet.js +++ b/probing-tools/dtrace/parser/Classes/FutureGet.js @@ -9,9 +9,10 @@ */ class FutureGet { - constructor(actor, future) { + constructor(actor, future, count) { this.actor = actor; this.future = future; + this.count = count; } } diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/dtrace/parser/index.js index 13044218a..7bdd5e82e 100644 --- a/probing-tools/dtrace/parser/index.js +++ b/probing-tools/dtrace/parser/index.js @@ -54,7 +54,7 @@ fs.readFile(process.cwd() + "/" + argv[0], (err, data) => { console.log("--------------------------- ACTORS ---------------------------"); console.table(actors, ["id", "numberOfGets", "numberOfTimesBlocked", "numberOfTimesStolen"]); console.log("--------------------------- FUTURES ---------------------------"); - console.table(futures, ["id", "duration", "numberOfBlocks"]); + console.table(futures, ["id", "duration", "numberOfGets", "numberOfBlocks", "numberOfFutureChainings"]); console.log("--------------------------- BLOCKS ---------------------------"); console.table(blocks, ["futureId", "actorId", "duration"]); console.log("--------------------------- FUTURE GETS ---------------------------"); diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index 433ba940d..a020138ac 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -39,6 +39,9 @@ class Parser { case "future-gets": this.parseFutureGets(elements); break; + case "future-chainings": + this.parseFutureChaining(elements); + break; case "work-steal-successes": this.parseWorkStealSuccess(elements); break; @@ -202,11 +205,12 @@ class Parser { parseFutureGets(rootNode) { // As there is only one node for future-gets // we can just get the first element in the list - const futures = rootNode[0]["future-get"]; + const futureGets = rootNode[0]["future-get"]; - for (const key in futures) { - const actorID = futures[key]["actor"][0]["id"][0]; - const futureID = futures[key]["future"][0]["id"][0]; + for (const key in futureGets) { + const actorID = futureGets[key]["actor"][0]["id"][0]; + const futureID = futureGets[key]["future"][0]["id"][0]; + const count = futureGets[key]["count"][0]; if (!(actorID in this.actors)) { this.actors[actorID] = new Actor(actorID); @@ -215,13 +219,28 @@ class Parser { this.futures[futureID] = new Future(futureID, -1); } - this.actors[actorID].numberOfGets += 1; - this.futures[futureID].numberOfGets += 1; + this.actors[actorID].numberOfGets += parseInt(count); + this.futures[futureID].numberOfGets += parseInt(count); - const futureGet = new FutureGet(actorID, futureID); + const futureGet = new FutureGet(actorID, futureID, parseInt(count)); this.futureGets.push(futureGet); } } + + parseFutureChaining(rootNode) { + const chains = rootNode[0]["future-chaining"]; + + for (const key in chains) { + const futureID = chains[key]["future"][0]["id"][0]; + const count = chains[key]["count"][0]; + + if (!(futureID in this.futures)) { + this.futures[futureID] = new Future(futureID, -1); + } + + this.futures[futureID].numberOfFutureChainings += parseInt(count); + } + } /** * Parses the element. * @param Object rootNode The root node. @@ -245,7 +264,7 @@ class Parser { */ parseWorkStealSuccessFrom(rootNode) { const schedulers = rootNode[0]["work-steal-success"]; - console.log(schedulers); + for (const key in schedulers) { const byId = schedulers[key]["scheduler"][0]["id"][0]; const fromId = schedulers[key]["victim"][0]; From e56a1daa34e0b1151f8fc3a528c90869fe8740d4 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Mar 2019 17:20:18 +0100 Subject: [PATCH 53/77] Added documentation --- probing-tools/dtrace/parser/parser.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/dtrace/parser/parser.js index a020138ac..9c02e322e 100644 --- a/probing-tools/dtrace/parser/parser.js +++ b/probing-tools/dtrace/parser/parser.js @@ -226,7 +226,10 @@ class Parser { this.futureGets.push(futureGet); } } - + /** + * Parses the element. + * @param Object rootNode The root node. + */ parseFutureChaining(rootNode) { const chains = rootNode[0]["future-chaining"]; @@ -242,7 +245,7 @@ class Parser { } } /** - * Parses the element. + * Parses the element. * @param Object rootNode The root node. */ parseWorkStealSuccess(rootNode) { @@ -279,7 +282,7 @@ class Parser { } } /** - * Parses the element. + * Parses the element. * @param Object rootNode The root node. */ parseWorkStealFailure(rootNode) { From 95902371d68261149e9885f3d93684d979ab9ae2 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Thu, 14 Mar 2019 18:29:26 +0100 Subject: [PATCH 54/77] Removed catch-all probe The "catch-all" probe, that set which probe had been run, sometime caused the script to not exit. The downside is that the XML ooutput now always includes all categories, even if they are empty. --- probing-tools/dtrace/dtrace.d | 229 ++++++++++++++-------------------- 1 file changed, 97 insertions(+), 132 deletions(-) diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 3c38a51c7..17916465f 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -24,14 +24,6 @@ int did_run_probe[string]; BEGIN { } -pony$target::: /did_run_probe[probename] != 1/ { - did_run_probe[probename] = 1; -} - -encore$target::: /did_run_probe[probename] != 1/ { - did_run_probe[probename] = 1; -} - pony$target:::actor-msg-send { @counts[probename] = count(); } @@ -137,135 +129,108 @@ END { printa("\t<%s count=\"%@u\" />\n", @counts); printf("\n"); - if (did_run_probe["future-create"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_lifetime); - printf("\n"); - } - - if (did_run_probe["future-block"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_block_lifetime); - printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_blocked_actor); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_block); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @actor_blocked); - printf("\n"); - } - - if (did_run_probe["future-get"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); - printf("\n"); - } - - if (did_run_probe["future-chaining"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); - printf("\n"); - } - - if (did_run_probe["work-steal-successful"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_success_count); - printf("\n"); - - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @successful_steal_from_scheduler); - printf("\n"); - } - - if (did_run_probe["work-steal-failure"]) { - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_fail_count); - printf("\n"); - - printf("\n"); - printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @failed_steal_from_scheduler); - printf("\n"); - } - - if (did_run_probe["work-steal-success"] || did_run_probe["work-steal-failure"]) { - printf("\n"); - printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); - printf("\n"); - } - - // if (did_run_probe["method-entry"]) { - // printf("\n"); - // printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); - // printf(""); - // } + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_lifetime); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_block_lifetime); + printa("\t\n\t\t%d\n\t\t%d\n\t\t%@u\n\t\n", @future_blocked_actor); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_block); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @actor_blocked); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @future_get); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @future_chaining); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_success_count); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @successful_steal_from_scheduler); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%@u\n\t\n", @steal_fail_count); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%d\n\t\t%@u\n\t\n", @failed_steal_from_scheduler); + printf("\n"); + + printf("\n"); + printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); + printf("\n"); + + // printf("\n"); + // printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); + // printf(""); printf(""); } else { printf("--- COUNTS ---\n"); printa("%s\t%@1u\n", @counts); - printf("Core switches:\t%d\n", diagnostics.cpu_jumps); + printf("//---------- FUTURES ------------//\n"); - if (did_run_probe["future-create"]) { - printf("\n--- Duration a future is alive ---\n"); - printf("Future id\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%@1u\n", @future_lifetime); - } - if (did_run_probe["future-block"]) { - printf("\n--- Duration a future blocks an actor ---\n"); - printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); - printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); - - printf("\n--- Number of times an actor is blocked by a future ---\n"); - printf("Future id\t\tActor id\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); - - printf("\n--- Total number of times an actor is blocked ---\n"); - printf("Actor id\t\tCount\n"); - printa("%d\t\t%@2u\n", @actor_blocked); - - printf("\n--- Total number of times a future blocks ---\n"); - printf("Future id\t\tCount\n"); - printa("%d\t\t%@2u\n", @future_block); - } - - if (did_run_probe["future-get"]) { - printf("\n--- Total number of times an actor calls get on a future ---\n"); - printf("Actor id\t\tFuture id\t\tCount\n"); - printa("%d\t\t%d\t\t%@u\n", @future_get); - } - - if (did_run_probe["future-chaining"]) { - printf("\n--- Number of times a future is chained ---\n"); - printf("Future id\t\tCount\n"); - printa("%d\t\t%@2u\n", @future_chaining); - } - - if (did_run_probe["work-steal-successful"] || did_run_probe["work-steal-failure"]) { - printf("\n//---------- STEALS ------------//\n"); - - printf("\n--- Number of times a scheduler successfully steals ---\n"); - printf("Scheduler id\t\tCount\n"); - printa("%d\t\t%@2u\n", @steal_success_count); - - printf("\n--- Number of times a scheduler fails to steal ---\n"); - printf("Scheduler id\t\tCount\n"); - printa("%d\t\t%@2u\n", @steal_fail_count); - - printf("\n--- Number of times a scheduler steals from another ---\n"); - printf("Stolen by\t\tStolen from\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); - - printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); - printf("Attempted by\t\tTarget\t\tCount\n"); - printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); - - printf("\n--- Number of times an actor is stolen ---\n"); - printf("Actor id\t\tTimes stolen\n"); - printa("%d\t\t%@2u\n", @stolen_actor); - } - // if (did_run_probe["method-entry"]) { - // printf("\n//---------- METHODS ------------//\n"); - // - // printf("\n--- Time spent in methods\n"); - // printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); - // printa("%d\t\t%s\t\t\t%@u\n", @function_time); - // } + printf("\n--- Duration a future is alive ---\n"); + printf("Future id\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%@1u\n", @future_lifetime); + + printf("\n--- Duration a future blocks an actor ---\n"); + printf("Future id\t\tActor id\t\tLifetime (nanoseconds)\n"); + printa("%d\t\t%d\t\t%@1u\n", @future_block_lifetime); + + printf("\n--- Number of times an actor is blocked by a future ---\n"); + printf("Future id\t\tActor id\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @future_blocked_actor); + + printf("\n--- Total number of times an actor is blocked ---\n"); + printf("Actor id\t\tCount\n"); + printa("%d\t\t%@2u\n", @actor_blocked); + + printf("\n--- Total number of times a future blocks ---\n"); + printf("Future id\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_block); + + printf("\n--- Total number of times an actor calls get on a future ---\n"); + printf("Actor id\t\tFuture id\t\tCount\n"); + printa("%d\t\t%d\t\t%@u\n", @future_get); + + printf("\n--- Number of times a future is chained ---\n"); + printf("Future id\t\tCount\n"); + printa("%d\t\t%@2u\n", @future_chaining); + + printf("\n//---------- STEALS ------------//\n"); + printf("\n--- Number of times a scheduler successfully steals ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_success_count); + + printf("\n--- Number of times a scheduler fails to steal ---\n"); + printf("Scheduler id\t\tCount\n"); + printa("%d\t\t%@2u\n", @steal_fail_count); + + printf("\n--- Number of times a scheduler steals from another ---\n"); + printf("Stolen by\t\tStolen from\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @successful_steal_from_scheduler); + + printf("\n--- Number of times a scheduelr fails to steal from another ---\n"); + printf("Attempted by\t\tTarget\t\tCount\n"); + printa("%d\t\t%d\t\t%@2u\n", @failed_steal_from_scheduler); + + printf("\n--- Number of times an actor is stolen ---\n"); + printf("Actor id\t\tTimes stolen\n"); + printa("%d\t\t%@2u\n", @stolen_actor); + + // printf("\n//---------- METHODS ------------//\n"); + // + // printf("\n--- Time spent in methods\n"); + // printf("Actor id\t\tMethod name\t\tDuration (Nanoseconds)\n"); + // printa("%d\t\t%s\t\t\t%@u\n", @function_time); } } From db5d556161af9db814f9a4b0cbd287df7863642d Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Thu, 21 Mar 2019 19:26:00 +0100 Subject: [PATCH 55/77] an XML version and a none XML version, XML version is almost complete --- .../systemtap/whatTobiasAskedFor.stp | 357 +++++++++--------- .../systemtap/whatTobiasAskedForXML.stp | 321 ++++++++++++++++ 2 files changed, 491 insertions(+), 187 deletions(-) create mode 100644 probing-tools/systemtap/whatTobiasAskedForXML.stp diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/whatTobiasAskedFor.stp index 5bd1ab0e9..e3a1d4102 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/whatTobiasAskedFor.stp @@ -1,20 +1,10 @@ -#Number of messages sent --Done -#Creation of futures ---Done -#Uses of the forward construct...? --Todo -#Future fulfillment -- Working on it -#Getting the results of a future -#Chaining on a future --done -#Lifetime of a future -- done -#When a chaining funciton is run -#who runs the chaining? - -#Ration of messages vs futures -#How much time ipent blocking a future -#Which classes blocks futures - -#-------------------------------------------Begin - -# counters +## A systemTap probing tool for Encore that prints human readable data +## Written by Joy van den EIjkhof, Ardalan Samimi, Ulf Sigvardsson +## March 2019 + +## Counters +## Contains how many times each probe has been called +## Uses aggregation global actor_msg_send global future_create global future_block @@ -23,146 +13,185 @@ global future_fulfil_start global future_fulfil_end global future_get global future_unblock +global future_chaining +global actor_msg_run +global successful_steals +global failed_steals +global total_steals + + +#Lists containing data corresponding to their name +#Each list corresponds to one foreach-loop in probe end -#list of ID:s -global list_of_futures -global actor_ctx_id_blocked -global future_actor_block -global future_id_blocking +#List for counting lifetimes +global list_future_lifetime +global list_future_block_lifetime + +#How many times does an Actor get blocked by any Future +global actor_block_count + +#How many times does what Actor call get() on what future +global actor_get_future + +#How many time does a Future block any actor +global future_block_count + +#How many times is a Future chained at what Actor global chained_actor_future_list -####################### +#How many time a Scheduler successfully steals work any other Scheduler +global successful_steals_count -global successful_steals -global failed_steals -global total_steals +#How many times an Actor is stolen from any Scheduler +global actor_stolen + +#How many time a Scheduler fails to steals work any other Scheduler +global failed_steals_count -global successful_steals_id -global failed_steals_id -global actor_stolen_id +#What Future blocks what Future +global future_block_actor +#What Scheduler steals from what Scheduler sucess/fail global scheduler_from_scheduler global scheduler_from_scheduler_fail +#Counts how many core-swites have been made global core_switch + +#Keeps track of what scheduler is used by what core. global current_sched_core -global message_scheduler -global message_between_different_schedulers -global message_between_same_schedulers + +#messages probe process.mark("actor-msg-send") { - message_scheduler[sprint($arg2)] = $arg1 + #Count + actor_msg_send <<< 1; } probe process.mark("actor-msg-run") { - if (message_scheduler[sprint($arg3)] != $arg1) { - message_between_different_schedulers[message_scheduler[sprint($arg3)], $arg1, $arg3] <<< 1; - } - else if (message_scheduler[sprint($arg3)] == $arg1) { - message_between_same_schedulers[$arg1, $arg3] <<< 1; - } + #Count + actor_msg_run <<< 1; } probe process.mark("work-steal-successful") { + #Count successful_steals <<< 1; total_steals <<< 1; - successful_steals_id[sprint($arg1)] += 1 - actor_stolen_id[sprint($arg3)] += 1 - #Adding data to correct list - scheduler_from_scheduler[sprint($arg1), sprint($arg2)] <<< 1; + #Arguments from probe + scheduler = sprint($arg1) + victim = sprint($arg2) + actor = sprint($arg3) + + + successful_steals_count[scheduler] <<< 1 + actor_stolen[actor] <<< 1 + scheduler_from_scheduler[scheduler, victim] <<< 1; - if (cpu() != current_sched_core[sprint($arg1)]) { + if (cpu() != current_sched_core[scheduler]) { core_switch <<< 1; - current_sched_core[sprint($arg1)] = cpu() + current_sched_core[scheduler] = cpu() } } probe process.mark("work-steal-failure") { + #Count failed_steals <<< 1; total_steals <<< 1; - failed_steals_id[sprint($arg1)] += 1 - scheduler_from_scheduler_fail[sprint($arg1), sprint($arg2)] <<< 1 - -} -####################### + #Arguments from probe + scheduler = sprint($arg1) + victim = sprint($arg2) -#messages -probe process.mark("actor-msg-send") -{ - actor_msg_send <<< 1; + failed_steals_count[scheduler] <<< 1 + scheduler_from_scheduler_fail[scheduler, victim] <<< 1 + } -#futures + probe process.mark("future-create") { + #Count future_create <<< 1; - created_future = sprint($arg2) - list_of_futures[created_future] = $arg2 - start_stopwatch(created_future) + + #Arguments from probe + future = sprint($arg2) + + list_future_lifetime[future] = gettimeofday_ns() } -probe process.mark("future-block") { - future_block <<< 1; - start_stopwatch(sprint("block", $arg2)) - actor_ctx_id_blocked[sprint($arg1)]++ - actor_id = sprint($arg1) - future_id = sprint($arg2) - future_actor_block[future_id, actor_id] <<< 1 +probe process.mark("future-destroy") { + #Count + future_destroy <<< 1; - future_id_blocking[future_id] <<< 1; + #Arguments + future = sprint($arg2) + + list_future_lifetime[future] = gettimeofday_ns()-list_future_lifetime[future] } -probe process.mark("future-unblock") { - fulfilled_fut = sprint("block", $arg2) - stop_stopwatch(fulfilled_fut) -} +probe process.mark("future-block") { + #Count + future_block <<< 1; -probe process.mark("future-unblock") { - future_unblock <<< 1; + #Arguments from probe + actor = sprint($arg1) + future = sprint($arg2) + + list_future_block_lifetime[future] = gettimeofday_ns() + actor_block_count[actor] <<< 1 + future_block_actor[future, actor] <<< 1 + future_block_count[future] <<< 1 } -probe process.mark("future-destroy") { - future_destroy <<< 1; - destroyed_future = sprint($arg2) - if([destroyed_future] in list_of_futures) { - stop_stopwatch(destroyed_future) - } -} +probe process.mark("future-unblock") { + #Count + future_unblock <<< 1; -probe process.mark("method-entry") { - name = user_string($arg3) - if(name == "init") { - actor_ctx_id_blocked[sprint($arg1)] = 0 - } + #Arguments from probe + future = sprint($arg2) + + list_future_block_lifetime[future] = gettimeofday_ns()-list_future_block_lifetime[future] } probe process.mark("future-get") { - future_get <<< 1; + #Count + future_get <<< 1; + + #Arguments from probe + actor = sprint($arg1) + future = sprint($arg2) + + actor_get_future[actor, future] <<< 1; + } probe process.mark("future-fulfil-end"){ + #Count future_fulfil_end <<< 1; } probe process.mark("future-fulfil-start"){ + #Count future_fulfil_start <<< 1; } -#chaining probe process.mark("future-chaining") { + #Count + future_chaining <<< 1; + + #Arguments from probe future_chained = sprint($arg2) actor_chained = sprint($arg1) - chained_actor_future_list[actor_chained, future_chained] <<< 1 + + chained_actor_future_list[actor_chained, future_chained] <<< 1; } probe end { - - print("=== FUTURE INFORMATION ===\n") - print("=== COUNTS ===\n") + print("--- DATA FROM PROBING ---") + print("\n--- COUNTS ---\n") ams = @count(actor_msg_send) fc = @count(future_create) fb = @count(future_block) @@ -171,7 +200,13 @@ probe end { fd = @count(future_destroy) fg = @count(future_get) fu = @count(future_unblock) + fch = @count(future_chaining) + amr = @count(actor_msg_run) + ss = @count(successful_steals) + fs = @count(failed_steals) + ts = @count(total_steals) + printf("future-chaining\t\t%d\n", fch) printf("future-block\t\t%d\n", fb) printf("future-create\t\t%d\n", fc) printf("future-destroy\t\t%d\n", fd) @@ -180,141 +215,89 @@ probe end { printf("future-get\t\t%d\n", fg) printf("future-unblock\t\t%d\n", fu) printf("actor-msg-send\t\t%d\n", ams) + printf("actor-msg-run\t\t%d\n", amr) + printf("work-steal-failure\t\t%d\n", fs) + printf("work-steal-successful\t\t%d\n", ss) + printf("work-steal-attempt\t\t%d\n", ts) + printf("core-switches:\t%d\n", @count(core_switch)) - if (fc != 0) { - printf("Ratio future:message\t%d:%d \n", 1, ams/fc) - } - else { - printf("Ratio future:message\t%d:%d \n", 0, ams) - } - - print("\n") - print("=== FUTURE_LIFETIME ===\n") + print("\n--- LIFETIME OF FUTURE ---\n") print("Future Addr\t\tLifetime (nanoseconds)\n") - - foreach(fut in list_of_futures) { - printf("%s\t\t%d\n", fut, read_stopwatch_ns(fut)) + foreach(fut in list_future_lifetime) { + printf("%s\t\t%d\n", fut, list_future_lifetime[fut]) } - print("\n") - print("=== FUTURE_BLOCKED_LIFETIME ===\n") + print("\n--- LIFETIME OF A FUTURE BLOCK ---\n") print("Future Addr\t\tLifetime (nanoseconds)\n") - - foreach(fut in list_of_futures) { - watch_name_blocked = sprint("block", fut) - printf("%s\t\t%d\n", fut, read_stopwatch_ns(watch_name_blocked)) + foreach(fut in list_future_block_lifetime) { + printf("%s\t\t%d\n", fut, list_future_block_lifetime[fut]) } - print("\n") - - print("=== FUTURE_BLOCKED_ACTOR ===\n") - print("Future Addr\t\tActr Addr\t\tLifetime (nanoseconds)\n") - - foreach([fut, actor] in future_actor_block) { - printf("%s\t\t%s\t\t%d\n", fut, actor, @count(future_actor_block[fut, actor])) + print("\n---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE---\n") + print("Actor addr\t\tFuture Addr\t\tCount\n") + foreach ([act, fut] in actor_get_future) { + printf("%s\t\t%s\t\t%d\n", act, fut, @count(actor_get_future[act, fut])) } - print("\n") - - print("=== NUMBER OF TIMES AN ACTOR IS BLOCKED ===\n") - print("Actr Addr\t\tCount\n") - foreach(act in actor_ctx_id_blocked) { - printf("%s\t\t%d\n", act, actor_ctx_id_blocked[act]) + print("\n--- WHAT FUTURE BLOCKED WHAT ACTOR ---\n") + print("Future Addr\t\tActorr Addr\t\tCount\n") + foreach([fut, actor] in future_block_actor) { + printf("%s\t\t%s\t\t%d\n", fut, actor, @count(future_block_actor[fut, actor])) } - print("\n") + + print("\n--- NUMBER OF TIMES AN ACTOR IS BLOCKED ---\n") + print("Actor Addr\t\tCount\n") + foreach(act in actor_block_count) { + printf("%s\t\t%d\n", act, @count(actor_block_count[act])) + } - print("=== NUMBER OF TIMES A FUTURE BLOCKS ===\n") + + print("\n--- NUMBER OF TIMES A FUTURE BLOCKS ---\n") print("Future Addr\t\tCount\n") - - foreach(fut in future_id_blocking) { - printf("%s\t\t%d\n", fut, @count(future_id_blocking[fut])) + foreach(fut in future_block_count) { + printf("%s\t\t%d\n", fut, @count(future_block_count[fut])) } - print("\n") - - print("=== FUTURES CHAINED ===\n") + print("\n--- WHAT FUTURES CHAINES AT WHAT ACTOR ---\n") print("Actor Addr\t\tFuture Addr\t\tCount\n") - foreach([act, fut] in chained_actor_future_list) { printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[act, fut])) } + print("\n---SUCCESSFUL STEALS---\n") + print("Scheduler\t\tCount\n") + foreach(ssid in successful_steals_count) { + printf("%s\t\t%d\n", ssid, @count(successful_steals_count[ssid])) + } -############### - print("\n\n") - print("==================================================== \n") - print("\t\t STEALS\n") - print("==================================================== \n\n") - - print("TOTAL\n") - print("Attempted\tSuccessful\tFailed\n") - ss = @count(successful_steals) - fs = @count(failed_steals) - ts = @count(total_steals) - printf("%d\t\t%d\t\t%d",ts, ss, fs) - print("\n\n") - - print("SUCCESSFUL STEALS\n") - print("Scheduler ID\t\tCount\n") - foreach(ssid in successful_steals_id) - printf("%s\t\t%d\n", ssid, successful_steals_id[ssid]) - print("\n") - - print("FAILED STEALS\n") - print("Scheduler ID\t\tCount\n") - foreach(fsid in failed_steals_id) - printf("%s\t\t%d\n", fsid, failed_steals_id[fsid]) - print("\n") - + print("\n---FAILED STEALS---\n") + print("Scheduler\t\tCount\n") + foreach(fsid in failed_steals_count) { + printf("%s\t\t%d\n", fsid, @count(failed_steals_count[fsid])) + } - print("STEALS BETWEEN SCHEDULERS\n") + print("\n---STEALS BETWEEN SCHEDULERS---\n") print("Stolen by\t\tStolen from\t\tCount\n") foreach([steal, victim] in scheduler_from_scheduler) { printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler[steal, victim])) } - print("\n") - - - print("FAILS BETWEEN SCHEDULERS\n") + print("\n---FAILS BETWEEN SCHEDULERS---\n") print("Attempted by\t\tTarget\t\t\tCount\n") foreach([steal, victim] in scheduler_from_scheduler_fail) { printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler_fail[steal, victim])) } - print("\n") - - print("STOLEN ACTORS\n") + print("\n---STOLEN ACTORS---\n") print("Actor ID\t\tTimes Stolen\n") - foreach(actor in actor_stolen_id) { - printf("%s\t\t%d\n", actor, actor_stolen_id[actor]) + foreach(actor in actor_stolen) { + printf("%s\t\t%d\n", actor, @count(actor_stolen[actor])) } - - print("\n") - printf("CORE SWITCHES:\t%d\n", @count(core_switch)) - - print("\n") - - printf("MESSAGES BETWEEN SCHEDULERS\n") - printf("sending Sched\t\t recieving shed\t\tmessage id\t\tcount\n") - foreach ([s_shed, r_shed, mes_id] in message_between_different_schedulers) { - printf("%d\t\t%d\t\t%d\t\t%d\n", s_shed, r_shed, mes_id, @count(message_between_different_schedulers[s_shed, r_shed, mes_id])) - } - - print("\n") - - printf("MESSAGES WITHIN SCHEDULER\n") - printf("Sched\t\t message id\t\tcount\n") - foreach ([shed, mes_id] in message_between_same_schedulers) { - printf("%d\t\t%d\t\t%d\n", s_shed, mes_id, @count(message_between_same_schedulers[shed, mes_id])) - } -############### - } \ No newline at end of file diff --git a/probing-tools/systemtap/whatTobiasAskedForXML.stp b/probing-tools/systemtap/whatTobiasAskedForXML.stp new file mode 100644 index 000000000..70fb11294 --- /dev/null +++ b/probing-tools/systemtap/whatTobiasAskedForXML.stp @@ -0,0 +1,321 @@ +## A systemTap probing tool for Encore that produces data in XML-format +## Written by Joy van den EIjkhof, Ardalan Samimi, Ulf Sigvardsson +## March 2019 + +## Counters +## Contains how many times each probe has been called +## Uses aggregation +global actor_msg_send +global future_create +global future_block +global future_destroy +global future_fulfil_start +global future_fulfil_end +global future_get +global future_unblock +global future_chaining +global actor_msg_run +global successful_steals +global failed_steals +global total_steals + + +#Lists containing data corresponding to their name +#Each list corresponds to one foreach-loop in probe end + +#List for counting lifetimes +global list_future_lifetime +global list_future_block_lifetime + +#How many times does an Actor get blocked by any Future +global actor_block_count + +#How many times does what Actor call get() on what future +global actor_get_future + +#How many time does a Future block any actor +global future_block_count + +#How many times is a Future chained at what Actor +global chained_actor_future_list + +#How many time a Scheduler successfully steals work any other Scheduler +global successful_steals_count + +#How many times an Actor is stolen from any Scheduler +global actor_stolen + +#How many time a Scheduler fails to steals work any other Scheduler +global failed_steals_count + +#What Future blocks what Future +global future_block_actor + +#What Scheduler steals from what Scheduler sucess/fail +global scheduler_from_scheduler +global scheduler_from_scheduler_fail + +#Counts how many core-swites have been made +global core_switch + +#Keeps track of what scheduler is used by what core. +global current_sched_core + + + +#messages +probe process.mark("actor-msg-send") { + #Count + actor_msg_send <<< 1; +} + +probe process.mark("actor-msg-run") { + #Count + actor_msg_run <<< 1; +} + +probe process.mark("work-steal-successful") { + #Count + successful_steals <<< 1; + total_steals <<< 1; + + #Arguments from probe + scheduler = sprint($arg1) + victim = sprint($arg2) + actor = sprint($arg3) + + + successful_steals_count[scheduler] <<< 1 + actor_stolen[actor] <<< 1 + scheduler_from_scheduler[scheduler, victim] <<< 1; + + if (cpu() != current_sched_core[scheduler]) { + core_switch <<< 1; + current_sched_core[scheduler] = cpu() + } + +} + +probe process.mark("work-steal-failure") { + #Count + failed_steals <<< 1; + total_steals <<< 1; + + #Arguments from probe + scheduler = sprint($arg1) + victim = sprint($arg2) + + failed_steals_count[scheduler] <<< 1 + scheduler_from_scheduler_fail[scheduler, victim] <<< 1 + +} + + +probe process.mark("future-create") { + #Count + future_create <<< 1; + + #Arguments from probe + future = sprint($arg2) + + list_future_lifetime[future] = gettimeofday_ns() +} + + +probe process.mark("future-destroy") { + #Count + future_destroy <<< 1; + + #Arguments + future = sprint($arg2) + + list_future_lifetime[future] = gettimeofday_ns()-list_future_lifetime[future] +} + +probe process.mark("future-block") { + #Count + future_block <<< 1; + + #Arguments from probe + actor = sprint($arg1) + future = sprint($arg2) + + list_future_block_lifetime[future, actor] = gettimeofday_ns() + actor_block_count[actor] <<< 1 + future_block_actor[future, actor] <<< 1 + future_block_count[future] <<< 1 +} + +probe process.mark("future-unblock") { + #Count + future_unblock <<< 1; + + #Arguments from probe + actor = sprint($arg1) + future = sprint($arg2) + + list_future_block_lifetime[future, actor] = gettimeofday_ns()-list_future_block_lifetime[future, actor] +} + +probe process.mark("future-get") { + #Count + future_get <<< 1; + + #Arguments from probe + actor = sprint($arg1) + future = sprint($arg2) + + actor_get_future[actor, future] <<< 1; + +} + +probe process.mark("future-fulfil-end"){ + #Count + future_fulfil_end <<< 1; +} + +probe process.mark("future-fulfil-start"){ + #Count + future_fulfil_start <<< 1; +} + +probe process.mark("future-chaining") { + #Count + future_chaining <<< 1; + + #Arguments from probe + future_chained = sprint($arg2) + actor_chained = sprint($arg1) + + chained_actor_future_list[actor_chained, future_chained] <<< 1; +} + +probe end { + ams = @count(actor_msg_send) + fc = @count(future_create) + fb = @count(future_block) + ffs = @count(future_fulfil_start) + ffe = @count(future_fulfil_end) + fd = @count(future_destroy) + fg = @count(future_get) + fu = @count(future_unblock) + fch = @count(future_chaining) + amr = @count(actor_msg_run) + ss = @count(successful_steals) + fs = @count(failed_steals) + ts = @count(total_steals) + + print("\n") + print("\n") + + printf("\t\"\n", fch) + printf("\t\n", fb) + printf("\t\n", fc) + printf("\t\n", fd) + printf("\t\n", ffs) + printf("\t\n", ffe) + printf("\t\n", fg) + printf("\t\n", fu) + printf("\t\n", ams) + printf("\t\n", fs) + printf("\t\n", amr) + printf("\t\n", ss) + printf("\t\n", ts) + printf("\t\n", @count(core_switch)) + + print("\n") + + #--- LIFETIME OF FUTURE --- + print("\n") + foreach(fut in list_future_lifetime) { + print("\t\n") + printf("\t\t%s\n", fut) + printf("\t\t%d\n", list_future_lifetime[fut]) + print("\t\n") + } + print("\n") + + #Future blocking: + print("\n") + + #--- LIFETIME OF A FUTURE BLOCK --- + foreach([fut, act] in list_future_block_lifetime) { + print("\t\n") + + print("\t\t\n") + printf("\t\t%s\n", fut) + print("\t\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + printf("\t\t%d\n", list_future_block_lifetime[act, fut]) + print("\t\n") + + } + + #---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- ##THISIS whre you stopp + print("Actor addr\t\tFuture Addr\t\tCount\n") + foreach ([act, fut] in actor_get_future) { + printf("%s\t\t%s\t\t%d\n", act, fut, @count(actor_get_future[act, fut])) + } + + + print("\n--- WHAT FUTURE BLOCKED WHAT ACTOR ---\n") + print("Future Addr\t\tActorr Addr\t\tCount\n") + foreach([fut, actor] in future_block_actor) { + printf("%s\t\t%s\t\t%d\n", fut, actor, @count(future_block_actor[fut, actor])) + } + + + print("\n--- NUMBER OF TIMES AN ACTOR IS BLOCKED ---\n") + print("Actor Addr\t\tCount\n") + foreach(act in actor_block_count) { + printf("%s\t\t%d\n", act, @count(actor_block_count[act])) + } + + + print("\n--- NUMBER OF TIMES A FUTURE BLOCKS ---\n") + print("Future Addr\t\tCount\n") + foreach(fut in future_block_count) { + printf("%s\t\t%d\n", fut, @count(future_block_count[fut])) + } + + print("\n--- WHAT FUTURES CHAINES AT WHAT ACTOR ---\n") + print("Actor Addr\t\tFuture Addr\t\tCount\n") + foreach([act, fut] in chained_actor_future_list) { + printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[act, fut])) + } + + print("\n---SUCCESSFUL STEALS---\n") + print("Scheduler\t\tCount\n") + foreach(ssid in successful_steals_count) { + printf("%s\t\t%d\n", ssid, @count(successful_steals_count[ssid])) + } + + print("\n---FAILED STEALS---\n") + print("Scheduler\t\tCount\n") + foreach(fsid in failed_steals_count) { + printf("%s\t\t%d\n", fsid, @count(failed_steals_count[fsid])) + } + + print("\n---STEALS BETWEEN SCHEDULERS---\n") + print("Stolen by\t\tStolen from\t\tCount\n") + foreach([steal, victim] in scheduler_from_scheduler) { + printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler[steal, victim])) + } + + print("\n---FAILS BETWEEN SCHEDULERS---\n") + print("Attempted by\t\tTarget\t\t\tCount\n") + foreach([steal, victim] in scheduler_from_scheduler_fail) { + printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler_fail[steal, victim])) + } + + print("\n---STOLEN ACTORS---\n") + print("Actor ID\t\tTimes Stolen\n") + foreach(actor in actor_stolen) { + printf("%s\t\t%d\n", actor, @count(actor_stolen[actor])) + } + +} \ No newline at end of file From a0614cfc534d059076a8b518e2d2ff054403501d Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Thu, 21 Mar 2019 20:22:47 +0100 Subject: [PATCH 56/77] XML version is working --- .../systemtap/whatTobiasAskedForXML.stp | 235 +++++++++++++----- 1 file changed, 168 insertions(+), 67 deletions(-) diff --git a/probing-tools/systemtap/whatTobiasAskedForXML.stp b/probing-tools/systemtap/whatTobiasAskedForXML.stp index 70fb11294..61f96d7f8 100644 --- a/probing-tools/systemtap/whatTobiasAskedForXML.stp +++ b/probing-tools/systemtap/whatTobiasAskedForXML.stp @@ -2,6 +2,8 @@ ## Written by Joy van den EIjkhof, Ardalan Samimi, Ulf Sigvardsson ## March 2019 +## Note that some actors are identified by their ctx pointers. + ## Counters ## Contains how many times each probe has been called ## Uses aggregation @@ -39,13 +41,13 @@ global future_block_count #How many times is a Future chained at what Actor global chained_actor_future_list -#How many time a Scheduler successfully steals work any other Scheduler +#How many time a Scheduler successfully steals work any other Scheduler global successful_steals_count #How many times an Actor is stolen from any Scheduler global actor_stolen -#How many time a Scheduler fails to steals work any other Scheduler +#How many time a Scheduler fails to steals work any other Scheduler global failed_steals_count #What Future blocks what Future @@ -84,16 +86,16 @@ probe process.mark("work-steal-successful") { victim = sprint($arg2) actor = sprint($arg3) - + successful_steals_count[scheduler] <<< 1 actor_stolen[actor] <<< 1 - scheduler_from_scheduler[scheduler, victim] <<< 1; + scheduler_from_scheduler[scheduler, victim] <<< 1; if (cpu() != current_sched_core[scheduler]) { core_switch <<< 1; current_sched_core[scheduler] = cpu() } - + } probe process.mark("work-steal-failure") { @@ -103,11 +105,11 @@ probe process.mark("work-steal-failure") { #Arguments from probe scheduler = sprint($arg1) - victim = sprint($arg2) + victim = sprint($arg2) failed_steals_count[scheduler] <<< 1 scheduler_from_scheduler_fail[scheduler, victim] <<< 1 - + } @@ -117,7 +119,7 @@ probe process.mark("future-create") { #Arguments from probe future = sprint($arg2) - + list_future_lifetime[future] = gettimeofday_ns() } @@ -128,7 +130,7 @@ probe process.mark("future-destroy") { #Arguments future = sprint($arg2) - + list_future_lifetime[future] = gettimeofday_ns()-list_future_lifetime[future] } @@ -139,9 +141,9 @@ probe process.mark("future-block") { #Arguments from probe actor = sprint($arg1) future = sprint($arg2) - + list_future_block_lifetime[future, actor] = gettimeofday_ns() - actor_block_count[actor] <<< 1 + actor_block_count[actor] <<< 1 future_block_actor[future, actor] <<< 1 future_block_count[future] <<< 1 } @@ -153,7 +155,7 @@ probe process.mark("future-unblock") { #Arguments from probe actor = sprint($arg1) future = sprint($arg2) - + list_future_block_lifetime[future, actor] = gettimeofday_ns()-list_future_block_lifetime[future, actor] } @@ -166,7 +168,7 @@ probe process.mark("future-get") { future = sprint($arg2) actor_get_future[actor, future] <<< 1; - + } probe process.mark("future-fulfil-end"){ @@ -186,7 +188,7 @@ probe process.mark("future-chaining") { #Arguments from probe future_chained = sprint($arg2) actor_chained = sprint($arg1) - + chained_actor_future_list[actor_chained, future_chained] <<< 1; } @@ -215,107 +217,206 @@ probe end { printf("\t\n", ffs) printf("\t\n", ffe) printf("\t\n", fg) - printf("\t\n", fu) + printf("\t\n", fu) printf("\t\n", ams) printf("\t\n", fs) printf("\t\n", amr) printf("\t\n", ss) printf("\t\n", ts) printf("\t\n", @count(core_switch)) - + print("\n") #--- LIFETIME OF FUTURE --- print("\n") foreach(fut in list_future_lifetime) { print("\t\n") - printf("\t\t%s\n", fut) - printf("\t\t%d\n", list_future_lifetime[fut]) - print("\t\n") + printf("\t\t%s\n", fut) + printf("\t\t%d\n", list_future_lifetime[fut]) + print("\t\n") } print("\n") #Future blocking: - print("\n") - + print("\n") #This has a closure further down + #--- LIFETIME OF A FUTURE BLOCK --- foreach([fut, act] in list_future_block_lifetime) { - print("\t\n") + print("\t\n") - print("\t\t\n") - printf("\t\t%s\n", fut) + print("\t\t\n") + printf("\t\t\t%s\n", fut) print("\t\t\n") print("\t\t\n") printf("\t\t\t%s\n", act) print("\t\t\n") - - printf("\t\t%d\n", list_future_block_lifetime[act, fut]) + + printf("\t\t%d\n", list_future_block_lifetime[act, fut]) print("\t\n") } - #---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- ##THISIS whre you stopp - print("Actor addr\t\tFuture Addr\t\tCount\n") - foreach ([act, fut] in actor_get_future) { - printf("%s\t\t%s\t\t%d\n", act, fut, @count(actor_get_future[act, fut])) + #--- WHAT FUTURE BLOCKED WHAT ACTOR --- + foreach([fut, act] in future_block_actor) { + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", fut) + print("\t\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + printf("\t\t%d\n", @count(future_block_actor[fut, act])) + print("\t\n") + + } + #--- NUMBER OF TIMES A FUTURE BLOCKS --- + foreach(fut in future_block_count) { + + print("\t\n") + print("\t\t\n") + printf("\t\t\t%s\n", fut) + print("\t\t\n") - print("\n--- WHAT FUTURE BLOCKED WHAT ACTOR ---\n") - print("Future Addr\t\tActorr Addr\t\tCount\n") - foreach([fut, actor] in future_block_actor) { - printf("%s\t\t%s\t\t%d\n", fut, actor, @count(future_block_actor[fut, actor])) + printf("\t\t%d\n", @count(future_block_count[fut])) + print("\t\n") } - - print("\n--- NUMBER OF TIMES AN ACTOR IS BLOCKED ---\n") - print("Actor Addr\t\tCount\n") + #--- NUMBER OF TIMES AN ACTOR IS BLOCKED --- foreach(act in actor_block_count) { - printf("%s\t\t%d\n", act, @count(actor_block_count[act])) + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + printf("\t\t%d\n", @count(actor_block_count[act])) + print("\t\n") } + print("\n") #Here is its closure + + #---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- + print("\n") + foreach ([act, fut] in actor_get_future) { + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", fut) + print("\t\t\n") + + printf("\t\t%d\n", @count(actor_get_future[act, fut])) + + print("\t\n") - - print("\n--- NUMBER OF TIMES A FUTURE BLOCKS ---\n") - print("Future Addr\t\tCount\n") - foreach(fut in future_block_count) { - printf("%s\t\t%d\n", fut, @count(future_block_count[fut])) } + print("\n") - print("\n--- WHAT FUTURES CHAINES AT WHAT ACTOR ---\n") - print("Actor Addr\t\tFuture Addr\t\tCount\n") + #--- WHAT FUTURES CHAINES AT WHAT ACTOR --- + print("\n") foreach([act, fut] in chained_actor_future_list) { - printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[act, fut])) + + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", fut) + print("\t\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + printf("\t\t%d\n", @count(chained_actor_future_list[act, fut])) + + print("\t\n") + } + print("/future-chainings>\n") + - print("\n---SUCCESSFUL STEALS---\n") - print("Scheduler\t\tCount\n") + + #---SUCCESSFUL STEALS--- + print("\n") foreach(ssid in successful_steals_count) { - printf("%s\t\t%d\n", ssid, @count(successful_steals_count[ssid])) - } + print("\t\n") - print("\n---FAILED STEALS---\n") - print("Scheduler\t\tCount\n") - foreach(fsid in failed_steals_count) { - printf("%s\t\t%d\n", fsid, @count(failed_steals_count[fsid])) + print("\t\t\n") + printf("\t\t\t%s\n", ssid) + print("\t\t\n") + + printf("\t\t%d\n", @count(successful_steals_count[ssid])) + + print("\t\n") } + print("\n") - print("\n---STEALS BETWEEN SCHEDULERS---\n") - print("Stolen by\t\tStolen from\t\tCount\n") + #---STEALS BETWEEN SCHEDULERS--- foreach([steal, victim] in scheduler_from_scheduler) { - printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler[steal, victim])) + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", steal) + print("\t\t\n") + + printf("\t\t%s\n", victim) + + printf("\t\t%d\n", @count(scheduler_from_scheduler[steal, victim])) + + print("\t\n") + } - print("\n---FAILS BETWEEN SCHEDULERS---\n") - print("Attempted by\t\tTarget\t\t\tCount\n") - foreach([steal, victim] in scheduler_from_scheduler_fail) { - printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler_fail[steal, victim])) + #---FAILED STEALS--- + print("\n") + foreach(fsid in failed_steals_count) { + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", fsid) + print("\t\t\n") + + printf("\t\t%d\n", @count(failed_steals_count[fsid])) + + print("\t\n") } + print("\n") + - print("\n---STOLEN ACTORS---\n") - print("Actor ID\t\tTimes Stolen\n") - foreach(actor in actor_stolen) { - printf("%s\t\t%d\n", actor, @count(actor_stolen[actor])) + + #---FAILS BETWEEN SCHEDULERS--- + print("\n") + foreach([steal, victim] in scheduler_from_scheduler_fail) { + print("\t\n") + + print("\t\t\n") + printf("\t\t\t%s\n", steal) + print("\t\t\n") + + printf("\t\t%s\n", victim) + + printf("\t\t%d\n", @count(scheduler_from_scheduler_fail[steal, victim])) + + print("\t\n") } - -} \ No newline at end of file + print("\n") + + #---STOLEN ACTORS--- + print("\n") + foreach(act in actor_stolen) { + print("\t\n") + printf("\t\t%s\n", act) + printf("\t\t%d\n", @count(actor_stolen[act])) + print("\t\n") + } + print("\n") + + print("\n") +} From a6943be0e01a66a200936cf51b157adcd0cfc5c7 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Thu, 21 Mar 2019 20:28:33 +0100 Subject: [PATCH 57/77] sample outputs for consideration --- probing-tools/systemtap/output.XML | 183 +++++++++++++++++++++++++++++ probing-tools/systemtap/output.txt | 73 ++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 probing-tools/systemtap/output.XML create mode 100644 probing-tools/systemtap/output.txt diff --git a/probing-tools/systemtap/output.XML b/probing-tools/systemtap/output.XML new file mode 100644 index 000000000..1dece22ed --- /dev/null +++ b/probing-tools/systemtap/output.XML @@ -0,0 +1,183 @@ + + + " + + + + + + + + + + + + + + + + + 140135135311872 + 1760372460 + + + 140135135309824 + 1760361654 + + + 140135135306752 + 1760353271 + + + 140135135304704 + 1760015346 + + + + + + 140135135306752 + + + 140135429085256 + + 0 + + + + 140135135311872 + + + 140135429085256 + + 0 + + + + 140135135311872 + + + 140135429085640 + + 0 + + + + 140135135311872 + + + 140135429085256 + + 2 + + + + 140135135306752 + + + 140135429085256 + + 1 + + + + 140135135311872 + + 2 + + + + 140135135306752 + + 1 + + + + 140135429085256 + + 3 + + + + + + 140135429085256 + + + 140135135306752 + + 1 + + + + 140135429085640 + + + 140135135311872 + + 2 + + + + + + 140135135311872 + + + 140135429085256 + + 1 + +/future-chainings> + + + + 140135429085568 + + 1 + + + + + 140135429085568 + + 140135429085184 + 1 + + + + + 140135429085184 + + 1 + + + + 140135429085568 + + 1 + + + + + + 140135429085184 + + 0 + 1 + + + + 140135429085568 + + 140135429085184 + 1 + + + + + 140135135314944 + 1 + + + diff --git a/probing-tools/systemtap/output.txt b/probing-tools/systemtap/output.txt new file mode 100644 index 000000000..720c5a19f --- /dev/null +++ b/probing-tools/systemtap/output.txt @@ -0,0 +1,73 @@ +--- DATA FROM PROBING --- +--- COUNTS --- +future-chaining 1 +future-block 3 +future-create 4 +future-destroy 4 +future-fulfil-start 4 +(future-fulfil-end 4 +future-get 3 +future-unblock 3 +actor-msg-send 9 +actor-msg-run 9 +work-steal-failure 2 +work-steal-successful 1 +work-steal-attempt 3 +core-switches: 1 + +--- LIFETIME OF FUTURE --- +Future Addr Lifetime (nanoseconds) +140092772624384 1780078164 +140092772622336 1780065466 +140092772619264 1780054010 +140092772617216 1779713039 + +--- LIFETIME OF A FUTURE BLOCK --- +Future Addr Lifetime (nanoseconds) +140092772619264 322909 +140092772624384 1553196451579609216 + +---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- +Actor addr Future Addr Count +140093066397768 140092772619264 1 +140093066398152 140092772624384 2 + +--- WHAT FUTURE BLOCKED WHAT ACTOR --- +Future Addr Actorr Addr Count +140092772619264 140093066397768 1 +140092772624384 140093066397768 2 + +--- NUMBER OF TIMES AN ACTOR IS BLOCKED --- +Actor Addr Count +140093066397768 3 + +--- NUMBER OF TIMES A FUTURE BLOCKS --- +Future Addr Count +140092772624384 2 +140092772619264 1 + +--- WHAT FUTURES CHAINES AT WHAT ACTOR --- +Actor Addr Future Addr Count +140093066397768 140092772624384 1 + +---SUCCESSFUL STEALS--- +Scheduler Count +140093066398080 1 + +---FAILED STEALS--- +Scheduler Count +140093066397696 1 +140093066398080 1 + +---STEALS BETWEEN SCHEDULERS--- +Stolen by Stolen from Count +140093066398080 140093066397696 1 + +---FAILS BETWEEN SCHEDULERS--- +Attempted by Target Count +140093066397696 0 1 +140093066398080 140093066397696 1 + +---STOLEN ACTORS--- +Actor ID Times Stolen +140092772627456 1 From e19c56dd3462735c04b8680394f32d1b6fa11b0c Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 09:36:13 +0100 Subject: [PATCH 58/77] fixed a bug in future-block-lifetime --- .../{whatTobiasAskedFor.stp => systemTap.stp} | 20 ++++++++++++------- ...TobiasAskedForXML.stp => systemTapXML.stp} | 0 2 files changed, 13 insertions(+), 7 deletions(-) rename probing-tools/systemtap/{whatTobiasAskedFor.stp => systemTap.stp} (94%) rename probing-tools/systemtap/{whatTobiasAskedForXML.stp => systemTapXML.stp} (100%) diff --git a/probing-tools/systemtap/whatTobiasAskedFor.stp b/probing-tools/systemtap/systemTap.stp similarity index 94% rename from probing-tools/systemtap/whatTobiasAskedFor.stp rename to probing-tools/systemtap/systemTap.stp index e3a1d4102..90947f4af 100644 --- a/probing-tools/systemtap/whatTobiasAskedFor.stp +++ b/probing-tools/systemtap/systemTap.stp @@ -27,6 +27,9 @@ global total_steals global list_future_lifetime global list_future_block_lifetime +# This is a helper list for list_future_block_lifetime +global future_unblock_count + #How many times does an Actor get blocked by any Future global actor_block_count @@ -139,11 +142,13 @@ probe process.mark("future-block") { #Arguments from probe actor = sprint($arg1) future = sprint($arg2) - - list_future_block_lifetime[future] = gettimeofday_ns() + actor_block_count[actor] <<< 1 future_block_actor[future, actor] <<< 1 future_block_count[future] <<< 1 + + list_future_block_lifetime[future, @count(future_block_count[future])] = gettimeofday_ns() + } probe process.mark("future-unblock") { @@ -152,8 +157,9 @@ probe process.mark("future-unblock") { #Arguments from probe future = sprint($arg2) - - list_future_block_lifetime[future] = gettimeofday_ns()-list_future_block_lifetime[future] + + future_unblock_count[future] <<< 1 + list_future_block_lifetime[future, @count(future_unblock_count[future])] = gettimeofday_ns()-list_future_block_lifetime[future, @count(future_unblock_count[future])] } probe process.mark("future-get") { @@ -211,7 +217,7 @@ probe end { printf("future-create\t\t%d\n", fc) printf("future-destroy\t\t%d\n", fd) printf("future-fulfil-start\t%d\n", ffs) - printf("(future-fulfil-end\t%d\n", ffe) + printf("future-fulfil-end\t%d\n", ffe) printf("future-get\t\t%d\n", fg) printf("future-unblock\t\t%d\n", fu) printf("actor-msg-send\t\t%d\n", ams) @@ -232,8 +238,8 @@ probe end { print("\n--- LIFETIME OF A FUTURE BLOCK ---\n") print("Future Addr\t\tLifetime (nanoseconds)\n") - foreach(fut in list_future_block_lifetime) { - printf("%s\t\t%d\n", fut, list_future_block_lifetime[fut]) + foreach([fut, count] in list_future_block_lifetime) { + printf("%s\t\t%d\n", fut, list_future_block_lifetime[fut, count]) } diff --git a/probing-tools/systemtap/whatTobiasAskedForXML.stp b/probing-tools/systemtap/systemTapXML.stp similarity index 100% rename from probing-tools/systemtap/whatTobiasAskedForXML.stp rename to probing-tools/systemtap/systemTapXML.stp From b1fe5a30942809ea3e009587db96084345d07dde Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 09:55:52 +0100 Subject: [PATCH 59/77] fixed a bug in block-lifetime --- probing-tools/systemtap/systemTapXML.stp | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/probing-tools/systemtap/systemTapXML.stp b/probing-tools/systemtap/systemTapXML.stp index 61f96d7f8..e550ae29c 100644 --- a/probing-tools/systemtap/systemTapXML.stp +++ b/probing-tools/systemtap/systemTapXML.stp @@ -1,5 +1,5 @@ ## A systemTap probing tool for Encore that produces data in XML-format -## Written by Joy van den EIjkhof, Ardalan Samimi, Ulf Sigvardsson +## Written by Joy van den Eijkhof in colaboration with Ardalan Samimi, Ulf Sigvardsson ## March 2019 ## Note that some actors are identified by their ctx pointers. @@ -7,6 +7,7 @@ ## Counters ## Contains how many times each probe has been called ## Uses aggregation + global actor_msg_send global future_create global future_block @@ -29,6 +30,10 @@ global total_steals global list_future_lifetime global list_future_block_lifetime +# This is a helper list for list_future_block_lifetime +#Helps distinguis between different but overlapping blocks +global future_unblock_count + #How many times does an Actor get blocked by any Future global actor_block_count @@ -41,7 +46,7 @@ global future_block_count #How many times is a Future chained at what Actor global chained_actor_future_list -#How many time a Scheduler successfully steals work any other Scheduler +#How many time a Scheduler successfully steals work from any other Scheduler global successful_steals_count #How many times an Actor is stolen from any Scheduler @@ -142,10 +147,12 @@ probe process.mark("future-block") { actor = sprint($arg1) future = sprint($arg2) - list_future_block_lifetime[future, actor] = gettimeofday_ns() - actor_block_count[actor] <<< 1 + actor_block_count[actor] <<< 1 future_block_actor[future, actor] <<< 1 future_block_count[future] <<< 1 + + list_future_block_lifetime[future, @count(future_block_count[future])] = gettimeofday_ns() + } probe process.mark("future-unblock") { @@ -153,10 +160,10 @@ probe process.mark("future-unblock") { future_unblock <<< 1; #Arguments from probe - actor = sprint($arg1) future = sprint($arg2) - list_future_block_lifetime[future, actor] = gettimeofday_ns()-list_future_block_lifetime[future, actor] + future_unblock_count[future] <<< 1 + list_future_block_lifetime[future, @count(future_unblock_count[future])] = gettimeofday_ns()-list_future_block_lifetime[future, @count(future_unblock_count[future])] } probe process.mark("future-get") { @@ -192,6 +199,9 @@ probe process.mark("future-chaining") { chained_actor_future_list[actor_chained, future_chained] <<< 1; } +#Handles all the data all previous probes have accumulated +#Prints all data in XML format + probe end { ams = @count(actor_msg_send) fc = @count(future_create) @@ -210,8 +220,8 @@ probe end { print("\n") print("\n") - printf("\t\"\n", fch) - printf("\t\n", fb) + printf("\t\n", fch) + printf("\t\n", fb) printf("\t\n", fc) printf("\t\n", fd) printf("\t\n", ffs) @@ -223,7 +233,7 @@ probe end { printf("\t\n", amr) printf("\t\n", ss) printf("\t\n", ts) - printf("\t\n", @count(core_switch)) + printf("\t\n", @count(core_switch)) print("\n") @@ -241,18 +251,14 @@ probe end { print("\n") #This has a closure further down #--- LIFETIME OF A FUTURE BLOCK --- - foreach([fut, act] in list_future_block_lifetime) { - print("\t\n") + foreach([fut, count] in list_future_block_lifetime) { + print("\t\n") - print("\t\t\n") + print("\t\t\n") printf("\t\t\t%s\n", fut) print("\t\t\n") - print("\t\t\n") - printf("\t\t\t%s\n", act) - print("\t\t\n") - - printf("\t\t%d\n", list_future_block_lifetime[act, fut]) + printf("\t\t%d\n", list_future_block_lifetime[fut, count]) print("\t\n") } @@ -318,7 +324,7 @@ probe end { print("\t\n") } - print("\n") + print("\n") #--- WHAT FUTURES CHAINES AT WHAT ACTOR --- print("\n") @@ -339,7 +345,7 @@ probe end { print("\t\n") } - print("/future-chainings>\n") + print("\n") @@ -359,6 +365,7 @@ probe end { print("\n") #---STEALS BETWEEN SCHEDULERS--- + print("\n") foreach([steal, victim] in scheduler_from_scheduler) { print("\t\n") @@ -373,6 +380,7 @@ probe end { print("\t\n") } + print("\n") #---FAILED STEALS--- print("\n") From 0649af1b1f9389b791dba4048a710f51fc6ba093 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Fri, 22 Mar 2019 11:20:53 +0100 Subject: [PATCH 60/77] Moved parser --- probing-tools/{dtrace => }/parser/.gitignore | 0 probing-tools/{dtrace => }/parser/Classes/Actor.js | 0 probing-tools/{dtrace => }/parser/Classes/Future.js | 0 probing-tools/{dtrace => }/parser/Classes/FutureBlock.js | 0 probing-tools/{dtrace => }/parser/Classes/FutureGet.js | 0 probing-tools/{dtrace => }/parser/Classes/Method.js | 0 probing-tools/{dtrace => }/parser/Classes/Scheduler.js | 0 probing-tools/{dtrace => }/parser/Classes/WorkSteal.js | 0 probing-tools/{dtrace => }/parser/index.js | 0 probing-tools/{dtrace => }/parser/package-lock.json | 0 probing-tools/{dtrace => }/parser/package.json | 0 probing-tools/{dtrace => }/parser/parser.js | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename probing-tools/{dtrace => }/parser/.gitignore (100%) rename probing-tools/{dtrace => }/parser/Classes/Actor.js (100%) rename probing-tools/{dtrace => }/parser/Classes/Future.js (100%) rename probing-tools/{dtrace => }/parser/Classes/FutureBlock.js (100%) rename probing-tools/{dtrace => }/parser/Classes/FutureGet.js (100%) rename probing-tools/{dtrace => }/parser/Classes/Method.js (100%) rename probing-tools/{dtrace => }/parser/Classes/Scheduler.js (100%) rename probing-tools/{dtrace => }/parser/Classes/WorkSteal.js (100%) rename probing-tools/{dtrace => }/parser/index.js (100%) rename probing-tools/{dtrace => }/parser/package-lock.json (100%) rename probing-tools/{dtrace => }/parser/package.json (100%) rename probing-tools/{dtrace => }/parser/parser.js (100%) diff --git a/probing-tools/dtrace/parser/.gitignore b/probing-tools/parser/.gitignore similarity index 100% rename from probing-tools/dtrace/parser/.gitignore rename to probing-tools/parser/.gitignore diff --git a/probing-tools/dtrace/parser/Classes/Actor.js b/probing-tools/parser/Classes/Actor.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/Actor.js rename to probing-tools/parser/Classes/Actor.js diff --git a/probing-tools/dtrace/parser/Classes/Future.js b/probing-tools/parser/Classes/Future.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/Future.js rename to probing-tools/parser/Classes/Future.js diff --git a/probing-tools/dtrace/parser/Classes/FutureBlock.js b/probing-tools/parser/Classes/FutureBlock.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/FutureBlock.js rename to probing-tools/parser/Classes/FutureBlock.js diff --git a/probing-tools/dtrace/parser/Classes/FutureGet.js b/probing-tools/parser/Classes/FutureGet.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/FutureGet.js rename to probing-tools/parser/Classes/FutureGet.js diff --git a/probing-tools/dtrace/parser/Classes/Method.js b/probing-tools/parser/Classes/Method.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/Method.js rename to probing-tools/parser/Classes/Method.js diff --git a/probing-tools/dtrace/parser/Classes/Scheduler.js b/probing-tools/parser/Classes/Scheduler.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/Scheduler.js rename to probing-tools/parser/Classes/Scheduler.js diff --git a/probing-tools/dtrace/parser/Classes/WorkSteal.js b/probing-tools/parser/Classes/WorkSteal.js similarity index 100% rename from probing-tools/dtrace/parser/Classes/WorkSteal.js rename to probing-tools/parser/Classes/WorkSteal.js diff --git a/probing-tools/dtrace/parser/index.js b/probing-tools/parser/index.js similarity index 100% rename from probing-tools/dtrace/parser/index.js rename to probing-tools/parser/index.js diff --git a/probing-tools/dtrace/parser/package-lock.json b/probing-tools/parser/package-lock.json similarity index 100% rename from probing-tools/dtrace/parser/package-lock.json rename to probing-tools/parser/package-lock.json diff --git a/probing-tools/dtrace/parser/package.json b/probing-tools/parser/package.json similarity index 100% rename from probing-tools/dtrace/parser/package.json rename to probing-tools/parser/package.json diff --git a/probing-tools/dtrace/parser/parser.js b/probing-tools/parser/parser.js similarity index 100% rename from probing-tools/dtrace/parser/parser.js rename to probing-tools/parser/parser.js From 8c7af4e553fb4a7e99fe2e5ba96940cf1871f2ad Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:11:58 +0100 Subject: [PATCH 61/77] nothing points to pony_ctx_t anymore, but always to actor --- probing-tools/systemtap/systemTap.stp | 21 +++++++-------- probing-tools/systemtap/systemTapXML.stp | 34 ++++++++++++------------ 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/probing-tools/systemtap/systemTap.stp b/probing-tools/systemtap/systemTap.stp index 90947f4af..085155dcf 100644 --- a/probing-tools/systemtap/systemTap.stp +++ b/probing-tools/systemtap/systemTap.stp @@ -27,9 +27,6 @@ global total_steals global list_future_lifetime global list_future_block_lifetime -# This is a helper list for list_future_block_lifetime -global future_unblock_count - #How many times does an Actor get blocked by any Future global actor_block_count @@ -140,14 +137,14 @@ probe process.mark("future-block") { future_block <<< 1; #Arguments from probe - actor = sprint($arg1) + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) actor_block_count[actor] <<< 1 future_block_actor[future, actor] <<< 1 future_block_count[future] <<< 1 - list_future_block_lifetime[future, @count(future_block_count[future])] = gettimeofday_ns() + list_future_block_lifetime[future, actor] = gettimeofday_ns() } @@ -156,10 +153,10 @@ probe process.mark("future-unblock") { future_unblock <<< 1; #Arguments from probe + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) - - future_unblock_count[future] <<< 1 - list_future_block_lifetime[future, @count(future_unblock_count[future])] = gettimeofday_ns()-list_future_block_lifetime[future, @count(future_unblock_count[future])] + + list_future_block_lifetime[future, actor] = gettimeofday_ns()-list_future_block_lifetime[future, actor] } probe process.mark("future-get") { @@ -167,7 +164,7 @@ probe process.mark("future-get") { future_get <<< 1; #Arguments from probe - actor = sprint($arg1) + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) actor_get_future[actor, future] <<< 1; @@ -237,9 +234,9 @@ probe end { print("\n--- LIFETIME OF A FUTURE BLOCK ---\n") - print("Future Addr\t\tLifetime (nanoseconds)\n") - foreach([fut, count] in list_future_block_lifetime) { - printf("%s\t\t%d\n", fut, list_future_block_lifetime[fut, count]) + print("Future Addr\t\tActor Addr\t\tLifetime (nanoseconds)\n") + foreach([fut, act] in list_future_block_lifetime) { + printf("%s\t\t%s\t\t%d\n", fut, act, list_future_block_lifetime[fut, act]) } diff --git a/probing-tools/systemtap/systemTapXML.stp b/probing-tools/systemtap/systemTapXML.stp index e550ae29c..ad903f64a 100644 --- a/probing-tools/systemtap/systemTapXML.stp +++ b/probing-tools/systemtap/systemTapXML.stp @@ -30,10 +30,6 @@ global total_steals global list_future_lifetime global list_future_block_lifetime -# This is a helper list for list_future_block_lifetime -#Helps distinguis between different but overlapping blocks -global future_unblock_count - #How many times does an Actor get blocked by any Future global actor_block_count @@ -144,14 +140,14 @@ probe process.mark("future-block") { future_block <<< 1; #Arguments from probe - actor = sprint($arg1) + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) actor_block_count[actor] <<< 1 future_block_actor[future, actor] <<< 1 future_block_count[future] <<< 1 - list_future_block_lifetime[future, @count(future_block_count[future])] = gettimeofday_ns() + list_future_block_lifetime[future, actor] = gettimeofday_ns() } @@ -160,10 +156,10 @@ probe process.mark("future-unblock") { future_unblock <<< 1; #Arguments from probe + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) - future_unblock_count[future] <<< 1 - list_future_block_lifetime[future, @count(future_unblock_count[future])] = gettimeofday_ns()-list_future_block_lifetime[future, @count(future_unblock_count[future])] + list_future_block_lifetime[future, actor] = gettimeofday_ns()-list_future_block_lifetime[future, actor] } probe process.mark("future-get") { @@ -171,7 +167,7 @@ probe process.mark("future-get") { future_get <<< 1; #Arguments from probe - actor = sprint($arg1) + actor = sprint(@cast($arg1, "pony_ctx_t")->current) future = sprint($arg2) actor_get_future[actor, future] <<< 1; @@ -193,10 +189,10 @@ probe process.mark("future-chaining") { future_chaining <<< 1; #Arguments from probe - future_chained = sprint($arg2) - actor_chained = sprint($arg1) + future = sprint($arg2) + actor = sprint(@cast($arg1, "pony_ctx_t")->current) - chained_actor_future_list[actor_chained, future_chained] <<< 1; + chained_actor_future_list[actor, future] <<< 1; } #Handles all the data all previous probes have accumulated @@ -241,9 +237,9 @@ probe end { print("\n") foreach(fut in list_future_lifetime) { print("\t\n") - printf("\t\t%s\n", fut) - printf("\t\t%d\n", list_future_lifetime[fut]) - print("\t\n") + printf("\t\t%s\n", fut) + printf("\t\t%d\n", list_future_lifetime[fut]) + print("\t\n") } print("\n") @@ -251,14 +247,18 @@ probe end { print("\n") #This has a closure further down #--- LIFETIME OF A FUTURE BLOCK --- - foreach([fut, count] in list_future_block_lifetime) { + foreach([fut, act] in list_future_block_lifetime) { print("\t\n") print("\t\t\n") printf("\t\t\t%s\n", fut) print("\t\t\n") - printf("\t\t%d\n", list_future_block_lifetime[fut, count]) + print("\t\t\n") + printf("\t\t\t%s\n", act) + print("\t\t\n") + + printf("\t\t%d\n", list_future_block_lifetime[fut, act]) print("\t\n") } From f40b9da6db11622cfccda883d33f412e1e7b887b Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:15:36 +0100 Subject: [PATCH 62/77] Delete twoWhatTobiasAskedFor.stp Has been renamed --- .../systemtap/twoWhatTobiasAskedFor.stp | 144 ------------------ 1 file changed, 144 deletions(-) delete mode 100644 probing-tools/systemtap/twoWhatTobiasAskedFor.stp diff --git a/probing-tools/systemtap/twoWhatTobiasAskedFor.stp b/probing-tools/systemtap/twoWhatTobiasAskedFor.stp deleted file mode 100644 index d1ffdf894..000000000 --- a/probing-tools/systemtap/twoWhatTobiasAskedFor.stp +++ /dev/null @@ -1,144 +0,0 @@ -# Work-stealing is how programs are parallelised in Encore and Pony. -# I want to understand how a program gets parallelised. -# When actors are moved from one core to another due to work-stealing -# Ratio of failed or successful work-stealing -# When actors and scheduled or descheduled -# I want to understand how a single actor is scheduled during its life time -# (e.g., only on one scheduler, or on many, bouncing back and forth, etc.) -#I would like to see the communication topology at the scheduler-level, -# i.e. rather than looking at what actors send messages to what other actors, -# I would like think of all the actors on a scheduler as a single actor, -# so how often are messages sent to an actor on the same scheduler, -# to actors on another scheduler, or to idle actors -# I want to be able to understand what was the “pressure” -# (e.g. number of actors in the scheduler queue) on each scheduler during a program’s execution - -#____________________________Begin____________________________________________________________ - -global successful_steals -global failed_steals -global total_steals - -global successful_steals_id -global failed_steals_id -global actor_stolen_id - -global scheduler_from_scheduler -global scheduler_from_scheduler_fail - -#global core_switch - - -probe process.mark("work-steal-successful") { - successful_steals <<< 1; - total_steals <<< 1; - successful_steals_id[sprint($arg1)] += 1 - actor_stolen_id[sprint($arg3)] += 1 - - #Formatting for printing data later - if ($arg1 != 0 && $arg2 != 0) { - stealing_id = sprintf("%d\t\t%d", $arg1, $arg2) - } - - else if ($arg1 == 0 && $arg2 != 0) { - stealing_id = sprintf("%d\t\t\t%d", $arg1, $arg2) - } - - else if ($arg1 != 0 && $arg2 == 0) { - stealing_id = sprintf("%d\t\t%d\t", $arg1, $arg2) - } - - #Adding data to correct list - if (stealing_id in scheduler_from_scheduler) { - scheduler_from_scheduler[stealing_id] += 1 - } - else { - scheduler_from_scheduler[stealing_id] = 1 - } - -} - -probe process.mark("work-steal-failure") { - failed_steals <<< 1; - total_steals <<< 1; - failed_steals_id[sprint($arg1)] += 1 - - #formatiing for orinting data later - if ($arg1 != 0 && $arg2 != 0) { - stealing_id = sprintf("%d\t\t%d", $arg1, $arg2) - } - else if ($arg1 == 0 && $arg2 != 0) { - stealing_id = sprintf("%d\t\t\t%d", $arg1, $arg2) - } - - else if ($arg1 != 0 && $arg2 == 0) { - stealing_id = sprintf("%d\t\t%d\t", $arg1, $arg2) - } - - #Adding data to list - if (stealing_id in scheduler_from_scheduler_fail) { - scheduler_from_scheduler_fail[stealing_id] += 1 - print("exists, not zero!\n") - } - else { - scheduler_from_scheduler_fail[stealing_id] = 1 - } - -} - -#probe process.function("pony_create").return { -# #actor_list[sprintf("%d", $return)] = 0 -#} - -probe end { - print("\n\n") - print("==================================================== \n") - print("\t\t STEALS\n") - print("==================================================== \n\n") - - print("TOTAL\n") - print("Attempted\tSuccessful\tFailed\n") - ss = @count(successful_steals) - fs = @count(failed_steals) - ts = @count(total_steals) - printf("%d\t\t%d\t\t%d",ts, ss, fs) - print("\n\n") - - print("SUCCESSFUL STEALS\n") - print("Scheduler ID\t\tCount\n") - foreach(ssid in successful_steals_id) - printf("%s\t\t%d\n", ssid, successful_steals_id[ssid]) - print("\n") - - print("FAILED STEALS\n") - print("Scheduler ID\t\tCount\n") - foreach(fsid in failed_steals_id) - printf("%s\t\t%d\n", fsid, failed_steals_id[fsid]) - print("\n") - - - print("STEALS BETWEEN SCHEDULERS\n") - print("Stolen by\t\tStolen from\t\tCount\n") - foreach(steal in scheduler_from_scheduler) { - printf("%s\t\t%d\n", steal, scheduler_from_scheduler[steal]) - } - - print("\n") - - - print("FAILS BETWEEN SCHEDULERS\n") - print("Attempted by\t\tTarget\t\t\tCount\n") - foreach(steal in scheduler_from_scheduler_fail) { - printf("%s\t\t%d\n", steal, scheduler_from_scheduler_fail[steal]) - } - - print("\n") - - print("STOLEN ACTORS\n") - print("Actor ID\t\tTimes Stolen\n") - foreach(actor in actor_stolen_id) { - printf("%s\t\t%d\n", actor, actor_stolen_id[actor]) - } - - #printf("CORE SWITCHES: \t &d \n", @count(core_switch)) -} \ No newline at end of file From 3bc199f86ab7a9382c076b1c903df35e2305e45f Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:15:47 +0100 Subject: [PATCH 63/77] Delete output.txt --- probing-tools/systemtap/output.txt | 73 ------------------------------ 1 file changed, 73 deletions(-) delete mode 100644 probing-tools/systemtap/output.txt diff --git a/probing-tools/systemtap/output.txt b/probing-tools/systemtap/output.txt deleted file mode 100644 index 720c5a19f..000000000 --- a/probing-tools/systemtap/output.txt +++ /dev/null @@ -1,73 +0,0 @@ ---- DATA FROM PROBING --- ---- COUNTS --- -future-chaining 1 -future-block 3 -future-create 4 -future-destroy 4 -future-fulfil-start 4 -(future-fulfil-end 4 -future-get 3 -future-unblock 3 -actor-msg-send 9 -actor-msg-run 9 -work-steal-failure 2 -work-steal-successful 1 -work-steal-attempt 3 -core-switches: 1 - ---- LIFETIME OF FUTURE --- -Future Addr Lifetime (nanoseconds) -140092772624384 1780078164 -140092772622336 1780065466 -140092772619264 1780054010 -140092772617216 1779713039 - ---- LIFETIME OF A FUTURE BLOCK --- -Future Addr Lifetime (nanoseconds) -140092772619264 322909 -140092772624384 1553196451579609216 - ----NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- -Actor addr Future Addr Count -140093066397768 140092772619264 1 -140093066398152 140092772624384 2 - ---- WHAT FUTURE BLOCKED WHAT ACTOR --- -Future Addr Actorr Addr Count -140092772619264 140093066397768 1 -140092772624384 140093066397768 2 - ---- NUMBER OF TIMES AN ACTOR IS BLOCKED --- -Actor Addr Count -140093066397768 3 - ---- NUMBER OF TIMES A FUTURE BLOCKS --- -Future Addr Count -140092772624384 2 -140092772619264 1 - ---- WHAT FUTURES CHAINES AT WHAT ACTOR --- -Actor Addr Future Addr Count -140093066397768 140092772624384 1 - ----SUCCESSFUL STEALS--- -Scheduler Count -140093066398080 1 - ----FAILED STEALS--- -Scheduler Count -140093066397696 1 -140093066398080 1 - ----STEALS BETWEEN SCHEDULERS--- -Stolen by Stolen from Count -140093066398080 140093066397696 1 - ----FAILS BETWEEN SCHEDULERS--- -Attempted by Target Count -140093066397696 0 1 -140093066398080 140093066397696 1 - ----STOLEN ACTORS--- -Actor ID Times Stolen -140092772627456 1 From 236b583a843db4a64ef69bcf81fb9bcdc78cfd24 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:15:55 +0100 Subject: [PATCH 64/77] Delete output.XML --- probing-tools/systemtap/output.XML | 183 ----------------------------- 1 file changed, 183 deletions(-) delete mode 100644 probing-tools/systemtap/output.XML diff --git a/probing-tools/systemtap/output.XML b/probing-tools/systemtap/output.XML deleted file mode 100644 index 1dece22ed..000000000 --- a/probing-tools/systemtap/output.XML +++ /dev/null @@ -1,183 +0,0 @@ - - - " - - - - - - - - - - - - - - - - - 140135135311872 - 1760372460 - - - 140135135309824 - 1760361654 - - - 140135135306752 - 1760353271 - - - 140135135304704 - 1760015346 - - - - - - 140135135306752 - - - 140135429085256 - - 0 - - - - 140135135311872 - - - 140135429085256 - - 0 - - - - 140135135311872 - - - 140135429085640 - - 0 - - - - 140135135311872 - - - 140135429085256 - - 2 - - - - 140135135306752 - - - 140135429085256 - - 1 - - - - 140135135311872 - - 2 - - - - 140135135306752 - - 1 - - - - 140135429085256 - - 3 - - - - - - 140135429085256 - - - 140135135306752 - - 1 - - - - 140135429085640 - - - 140135135311872 - - 2 - - - - - - 140135135311872 - - - 140135429085256 - - 1 - -/future-chainings> - - - - 140135429085568 - - 1 - - - - - 140135429085568 - - 140135429085184 - 1 - - - - - 140135429085184 - - 1 - - - - 140135429085568 - - 1 - - - - - - 140135429085184 - - 0 - 1 - - - - 140135429085568 - - 140135429085184 - 1 - - - - - 140135135314944 - 1 - - - From 92838f0fec3a31d426be6f06ec297ec43136cfea Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:16:27 +0100 Subject: [PATCH 65/77] Delete countingCalls.stp This file should never have been pushed to the repository, it was a file used to learn more about systemTap. --- probing-tools/systemtap/countingCalls.stp | 83 ----------------------- 1 file changed, 83 deletions(-) delete mode 100644 probing-tools/systemtap/countingCalls.stp diff --git a/probing-tools/systemtap/countingCalls.stp b/probing-tools/systemtap/countingCalls.stp deleted file mode 100644 index 362e7eacc..000000000 --- a/probing-tools/systemtap/countingCalls.stp +++ /dev/null @@ -1,83 +0,0 @@ -#Counts the frequency of different probes being fired being made - -global actor-alloc -global actor-msg-send -global actor-msg-run -global actor-scheduled -global actor-descheduled -global cpu-nanosleep -global gc-end -global gc-send-end -global gc-send-start -global gc-recv-end -global gc-recv-start -global gc-threshold -global heap-alloc -global heap-alloc -global rt-init -global rt-end -global rt-star -global work-steal-successful -global work-steal-failure - - -probe process.mark("actor-alloc"){ - actor-alloc <<< 1 -} -probe process.mark("actor-msg-send"){ - actor-msg-send <<< 1 -} -pr*obe process.mark("actor-msg-run"){ - actor-msg-run <<< 1 -} -probe process.mark("actor-scheduled"){ - actor-scheduled <<< 1 - -} -probe process.mark("actor-descheduled"){ - actor-descheduled <<< 1 -} -probe process.mark("cpu-nanosleep"){ - cpu-nanosleep <<< 1 -} -probe process.mark("gc-end"){ - gc-end <<< 1 -} -probe process.mark("gc-send-end"){ - gc-send-end <<< 1 -} -probe process.mark("gc-send-start"){ - gc-send-start <<< 1 -} -probe process.mark("gc-recv-end"){ - gc-recv-end <<< 1 -} -probe process.mark("gc-recv-start"){ - gc-recv-start <<< 1 - -} -probe process.mark("gc-start"){ - gc-start <<< 1 - -} -probe process.mark("gc-threshold"){ - gc-threshold <<< 1 -} -probe process.mark("heap-alloc"){ - heap-alloc <<< 1 -} -probe process.mark("rt-init"){ - rt-init <<< 1 -} -probe process.mark("rt-end"){ - rt-end <<< 1 -} -probe process.mark("rt-star"){ - rt-star <<< 1 -} -probe process.mark("work-steal-successful"){ - work-steal-successful <<<1 -} -probe process.mark("work-steal-failure"){ - work-steal-failure <<< 1 -} From dc40119549cf672c05b1a2f353c69c7b2c4e6559 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 12:16:51 +0100 Subject: [PATCH 66/77] Delete .gitkeep This was another accidentally pushed file --- probing-tools/systemtap/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 probing-tools/systemtap/.gitkeep diff --git a/probing-tools/systemtap/.gitkeep b/probing-tools/systemtap/.gitkeep deleted file mode 100644 index e69de29bb..000000000 From c51df5ebb7b41039e7087b38b1a11b5f56956350 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 21:36:19 +0100 Subject: [PATCH 67/77] changed some names, and changed some tings that were still different between the syst and Dtrace tools that were different such as the inclusion of msg-run, and that core-switching is couted based on actors and not schedulers --- probing-tools/systemtap/output.XML | 121 ++++++++++++++--------- probing-tools/systemtap/output.txt | 51 +++++----- probing-tools/systemtap/systemTap.stp | 60 +++++------ probing-tools/systemtap/systemTapXML.stp | 52 +++++----- 4 files changed, 159 insertions(+), 125 deletions(-) diff --git a/probing-tools/systemtap/output.XML b/probing-tools/systemtap/output.XML index 1dece22ed..3961f2f05 100644 --- a/probing-tools/systemtap/output.XML +++ b/probing-tools/systemtap/output.XML @@ -1,7 +1,7 @@ - " - + + @@ -10,150 +10,175 @@ - - + - 140135135311872 - 1760372460 + 140697346967552 + 1778768247 - 140135135309824 - 1760361654 + 140697346965504 + 1778756431 - 140135135306752 - 1760353271 + 140697346962432 + 1778747485 - 140135135304704 - 1760015346 + 140697346960384 + 1778385365 - 140135135306752 + 140697346962432 - 140135429085256 + 140697640736768 - 0 + 343739 - 140135135311872 + 140697346967552 - 140135429085256 + 140697640736768 - 0 + 1746597672 - 140135135311872 + 140697346967552 - 140135429085640 + 140697346971136 - 0 + 1746597937 - 140135135311872 + 140697346967552 - 140135429085256 + 140697640736768 - 2 + 1 - 140135135306752 + 140697346962432 - 140135429085256 + 140697640736768 + + 1 + + + + 140697346967552 + + + 140697346971136 1 - 140135135311872 + 140697346967552 2 - 140135135306752 + 140697346962432 1 - 140135429085256 + 140697640736768 + + 2 + + + + 140697346971136 - 3 + 1 - 140135429085256 + 140697640736768 - 140135135306752 + 140697346962432 1 - 140135429085640 + 140697640736768 - 140135135311872 + 140697346967552 - 2 + 1 - + + + 140697346971136 + + + 140697346967552 + + 1 + + - 140135135311872 + 140697346967552 - 140135429085256 + 140697640736768 1 -/future-chainings> + - 140135429085568 + 140697640741248 1 + - 140135429085568 + 140697640741248 - 140135429085184 + 140697640740864 1 + - 140135429085184 + 140697640740864 1 - 140135429085568 + 140697640741248 1 @@ -161,22 +186,22 @@ - 140135429085184 + 140697640740864 0 1 - 140135429085568 + 140697640741248 - 140135429085184 + 0 1 - 140135135314944 + 140697346970624 1 diff --git a/probing-tools/systemtap/output.txt b/probing-tools/systemtap/output.txt index 720c5a19f..a4161b0bd 100644 --- a/probing-tools/systemtap/output.txt +++ b/probing-tools/systemtap/output.txt @@ -5,11 +5,10 @@ future-block 3 future-create 4 future-destroy 4 future-fulfil-start 4 -(future-fulfil-end 4 +future-fulfil-end 4 future-get 3 future-unblock 3 actor-msg-send 9 -actor-msg-run 9 work-steal-failure 2 work-steal-successful 1 work-steal-attempt 3 @@ -17,57 +16,61 @@ core-switches: 1 --- LIFETIME OF FUTURE --- Future Addr Lifetime (nanoseconds) -140092772624384 1780078164 -140092772622336 1780065466 -140092772619264 1780054010 -140092772617216 1779713039 +140095472601088 1778991618 +140095472599040 1778981681 +140095472595968 1778973251 +140095472593920 1778631770 --- LIFETIME OF A FUTURE BLOCK --- -Future Addr Lifetime (nanoseconds) -140092772619264 322909 -140092772624384 1553196451579609216 +Future Addr Actor Addr Lifetime (nanoseconds) +140095472595968 140095766370304 323684 +140095472601088 140095766370304 1744147271 +140095472601088 140095472604672 1744147893 ---NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- Actor addr Future Addr Count -140093066397768 140092772619264 1 -140093066398152 140092772624384 2 +140095766370304 140095472595968 1 +140095766370304 140095472601088 1 +140095472604672 140095472601088 1 --- WHAT FUTURE BLOCKED WHAT ACTOR --- Future Addr Actorr Addr Count -140092772619264 140093066397768 1 -140092772624384 140093066397768 2 +140095472595968 140095766370304 1 +140095472601088 140095472604672 1 +140095472601088 140095766370304 1 --- NUMBER OF TIMES AN ACTOR IS BLOCKED --- Actor Addr Count -140093066397768 3 +140095472604672 1 +140095766370304 2 --- NUMBER OF TIMES A FUTURE BLOCKS --- Future Addr Count -140092772624384 2 -140092772619264 1 +140095472595968 1 +140095472601088 2 --- WHAT FUTURES CHAINES AT WHAT ACTOR --- Actor Addr Future Addr Count -140093066397768 140092772624384 1 +140095766370304 140095472601088 1 ---SUCCESSFUL STEALS--- Scheduler Count -140093066398080 1 +140095766374784 1 ---FAILED STEALS--- Scheduler Count -140093066397696 1 -140093066398080 1 +140095766374400 1 +140095766374784 1 ---STEALS BETWEEN SCHEDULERS--- Stolen by Stolen from Count -140093066398080 140093066397696 1 +140095766374784 140095766374400 1 ---FAILS BETWEEN SCHEDULERS--- Attempted by Target Count -140093066397696 0 1 -140093066398080 140093066397696 1 +140095766374400 140095766374784 1 +140095766374784 0 1 ---STOLEN ACTORS--- Actor ID Times Stolen -140092772627456 1 +140095472604160 1 diff --git a/probing-tools/systemtap/systemTap.stp b/probing-tools/systemtap/systemTap.stp index 085155dcf..f47f60c82 100644 --- a/probing-tools/systemtap/systemTap.stp +++ b/probing-tools/systemtap/systemTap.stp @@ -2,6 +2,12 @@ ## Written by Joy van den EIjkhof, Ardalan Samimi, Ulf Sigvardsson ## March 2019 +#core_switches > core_switches -DONE +#steal_success_count > steal_success_count -DONE +#actor_stolen > stolen_actor -DONE +#scheduler_from_scheduler > successful_steal_from_scheduler -DONE +#current_sched_core > cpus -DOne + ## Counters ## Contains how many times each probe has been called ## Uses aggregation @@ -14,7 +20,6 @@ global future_fulfil_end global future_get global future_unblock global future_chaining -global actor_msg_run global successful_steals global failed_steals global total_steals @@ -40,10 +45,10 @@ global future_block_count global chained_actor_future_list #How many time a Scheduler successfully steals work any other Scheduler -global successful_steals_count +global steal_success_count #How many times an Actor is stolen from any Scheduler -global actor_stolen +global stolen_actor #How many time a Scheduler fails to steals work any other Scheduler global failed_steals_count @@ -52,14 +57,14 @@ global failed_steals_count global future_block_actor #What Scheduler steals from what Scheduler sucess/fail -global scheduler_from_scheduler +global successful_steal_from_scheduler global scheduler_from_scheduler_fail #Counts how many core-swites have been made -global core_switch +global core_switches #Keeps track of what scheduler is used by what core. -global current_sched_core +global cpus @@ -69,9 +74,9 @@ probe process.mark("actor-msg-send") { actor_msg_send <<< 1; } -probe process.mark("actor-msg-run") { - #Count - actor_msg_run <<< 1; +probe process.mark("actor-scheduled") { + actor = sprint($arg2) + cpus[actor] = cpu() } probe process.mark("work-steal-successful") { @@ -85,13 +90,13 @@ probe process.mark("work-steal-successful") { actor = sprint($arg3) - successful_steals_count[scheduler] <<< 1 - actor_stolen[actor] <<< 1 - scheduler_from_scheduler[scheduler, victim] <<< 1; + steal_success_count[scheduler] <<< 1 + stolen_actor[actor] <<< 1 + successful_steal_from_scheduler[scheduler, victim] <<< 1; - if (cpu() != current_sched_core[scheduler]) { - core_switch <<< 1; - current_sched_core[scheduler] = cpu() + if (cpu() != cpus[actor]) { + core_switches <<< 1; + cpus[actor] = cpu() } } @@ -186,10 +191,9 @@ probe process.mark("future-chaining") { future_chaining <<< 1; #Arguments from probe - future_chained = sprint($arg2) - actor_chained = sprint($arg1) + future = sprint($arg2) - chained_actor_future_list[actor_chained, future_chained] <<< 1; + chained_actor_future_list[future] <<< 1; } probe end { @@ -204,7 +208,6 @@ probe end { fg = @count(future_get) fu = @count(future_unblock) fch = @count(future_chaining) - amr = @count(actor_msg_run) ss = @count(successful_steals) fs = @count(failed_steals) ts = @count(total_steals) @@ -218,11 +221,10 @@ probe end { printf("future-get\t\t%d\n", fg) printf("future-unblock\t\t%d\n", fu) printf("actor-msg-send\t\t%d\n", ams) - printf("actor-msg-run\t\t%d\n", amr) printf("work-steal-failure\t\t%d\n", fs) printf("work-steal-successful\t\t%d\n", ss) printf("work-steal-attempt\t\t%d\n", ts) - printf("core-switches:\t%d\n", @count(core_switch)) + printf("core-switches:\t%d\n", @count(core_switches)) print("\n--- LIFETIME OF FUTURE ---\n") @@ -269,14 +271,14 @@ probe end { print("\n--- WHAT FUTURES CHAINES AT WHAT ACTOR ---\n") print("Actor Addr\t\tFuture Addr\t\tCount\n") - foreach([act, fut] in chained_actor_future_list) { - printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[act, fut])) + foreach([fut] in chained_actor_future_list) { + printf("%s\t\t%s\t\t%d\n",act, fut, @count(chained_actor_future_list[fut])) } print("\n---SUCCESSFUL STEALS---\n") print("Scheduler\t\tCount\n") - foreach(ssid in successful_steals_count) { - printf("%s\t\t%d\n", ssid, @count(successful_steals_count[ssid])) + foreach(ssid in steal_success_count) { + printf("%s\t\t%d\n", ssid, @count(steal_success_count[ssid])) } print("\n---FAILED STEALS---\n") @@ -287,8 +289,8 @@ probe end { print("\n---STEALS BETWEEN SCHEDULERS---\n") print("Stolen by\t\tStolen from\t\tCount\n") - foreach([steal, victim] in scheduler_from_scheduler) { - printf("%s\t\t%s\t\t%d\n", steal, victim, @count(scheduler_from_scheduler[steal, victim])) + foreach([steal, victim] in successful_steal_from_scheduler) { + printf("%s\t\t%s\t\t%d\n", steal, victim, @count(successful_steal_from_scheduler[steal, victim])) } print("\n---FAILS BETWEEN SCHEDULERS---\n") @@ -299,8 +301,8 @@ probe end { print("\n---STOLEN ACTORS---\n") print("Actor ID\t\tTimes Stolen\n") - foreach(actor in actor_stolen) { - printf("%s\t\t%d\n", actor, @count(actor_stolen[actor])) + foreach(actor in stolen_actor) { + printf("%s\t\t%d\n", actor, @count(stolen_actor[actor])) } } \ No newline at end of file diff --git a/probing-tools/systemtap/systemTapXML.stp b/probing-tools/systemtap/systemTapXML.stp index ad903f64a..cb16adf05 100644 --- a/probing-tools/systemtap/systemTapXML.stp +++ b/probing-tools/systemtap/systemTapXML.stp @@ -4,6 +4,13 @@ ## Note that some actors are identified by their ctx pointers. +#core_switches > core_switcheses +#successful_steals_count > steal_success_count +#actor_stolen > stolen_actor +#scheduler_from_scheduler > successful_steal_from_scheduler +#current_sched_core > cpus + + ## Counters ## Contains how many times each probe has been called ## Uses aggregation @@ -17,7 +24,6 @@ global future_fulfil_end global future_get global future_unblock global future_chaining -global actor_msg_run global successful_steals global failed_steals global total_steals @@ -43,10 +49,10 @@ global future_block_count global chained_actor_future_list #How many time a Scheduler successfully steals work from any other Scheduler -global successful_steals_count +global steal_success_count #How many times an Actor is stolen from any Scheduler -global actor_stolen +global stolen_actor #How many time a Scheduler fails to steals work any other Scheduler global failed_steals_count @@ -55,14 +61,14 @@ global failed_steals_count global future_block_actor #What Scheduler steals from what Scheduler sucess/fail -global scheduler_from_scheduler +global successful_steal_from_scheduler global scheduler_from_scheduler_fail #Counts how many core-swites have been made -global core_switch +global core_switches #Keeps track of what scheduler is used by what core. -global current_sched_core +global cpus @@ -72,9 +78,9 @@ probe process.mark("actor-msg-send") { actor_msg_send <<< 1; } -probe process.mark("actor-msg-run") { - #Count - actor_msg_run <<< 1; +probe process.mark("actor-scheduled") { + actor = sprint($arg2) + cpus[actor] = cpu() } probe process.mark("work-steal-successful") { @@ -88,13 +94,13 @@ probe process.mark("work-steal-successful") { actor = sprint($arg3) - successful_steals_count[scheduler] <<< 1 - actor_stolen[actor] <<< 1 - scheduler_from_scheduler[scheduler, victim] <<< 1; + steal_success_count[scheduler] <<< 1 + stolen_actor[actor] <<< 1 + successful_steal_from_scheduler[scheduler, victim] <<< 1; - if (cpu() != current_sched_core[scheduler]) { - core_switch <<< 1; - current_sched_core[scheduler] = cpu() + if (cpu() != cpus[actor]) { + core_switches <<< 1; + cpus[actor] = cpu() } } @@ -208,7 +214,6 @@ probe end { fg = @count(future_get) fu = @count(future_unblock) fch = @count(future_chaining) - amr = @count(actor_msg_run) ss = @count(successful_steals) fs = @count(failed_steals) ts = @count(total_steals) @@ -226,10 +231,9 @@ probe end { printf("\t\n", fu) printf("\t\n", ams) printf("\t\n", fs) - printf("\t\n", amr) printf("\t\n", ss) printf("\t\n", ts) - printf("\t\n", @count(core_switch)) + printf("\t\n", @count(core_switches)) print("\n") @@ -351,14 +355,14 @@ probe end { #---SUCCESSFUL STEALS--- print("\n") - foreach(ssid in successful_steals_count) { + foreach(ssid in steal_success_count) { print("\t\n") print("\t\t\n") printf("\t\t\t%s\n", ssid) print("\t\t\n") - printf("\t\t%d\n", @count(successful_steals_count[ssid])) + printf("\t\t%d\n", @count(steal_success_count[ssid])) print("\t\n") } @@ -366,7 +370,7 @@ probe end { #---STEALS BETWEEN SCHEDULERS--- print("\n") - foreach([steal, victim] in scheduler_from_scheduler) { + foreach([steal, victim] in successful_steal_from_scheduler) { print("\t\n") print("\t\t\n") @@ -375,7 +379,7 @@ probe end { printf("\t\t%s\n", victim) - printf("\t\t%d\n", @count(scheduler_from_scheduler[steal, victim])) + printf("\t\t%d\n", @count(successful_steal_from_scheduler[steal, victim])) print("\t\n") @@ -418,10 +422,10 @@ probe end { #---STOLEN ACTORS--- print("\n") - foreach(act in actor_stolen) { + foreach(act in stolen_actor) { print("\t\n") printf("\t\t%s\n", act) - printf("\t\t%d\n", @count(actor_stolen[act])) + printf("\t\t%d\n", @count(stolen_actor[act])) print("\t\n") } print("\n") From c9250b449be3d3e96c90f527a3dc3caa4b9a2607 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Fri, 22 Mar 2019 22:53:55 +0100 Subject: [PATCH 68/77] some outputs to pass through the parser --- .../savina_xml_output/BankTransaction.XML | 0 .../systemtap/savina_xml_output/Bug.XML | 0 .../ConcurrentSortedLinkedList.XML | 211 + .../systemtap/savina_xml_output/Counting.XML | 82 + .../savina_xml_output/DiningPhilosophers.XML | 78 + .../savina_xml_output/PiPrecision.XML | 179 + .../savina_xml_output/SleepingBarber.XML | 7993 +++++++++++++++++ .../savina_xml_output/ThreadRing.XML | 0 .../TrapezoidalApproximation.XML | 1857 ++++ .../systemtap/savina_xml_output/concdict.XML | 99 + .../systemtap/savina_xml_output/fib.XML | 78 + .../systemtap/savina_xml_output/fjcreate.XML | 0 .../systemtap/savina_xml_output/fjthrput.XML | 331 + .../systemtap/savina_xml_output/output.XML | 208 + .../systemtap/savina_xml_output/pingpong.XML | 78 + .../savina_xml_output/recmatmult.XML | 275 + 16 files changed, 11469 insertions(+) create mode 100644 probing-tools/systemtap/savina_xml_output/BankTransaction.XML create mode 100644 probing-tools/systemtap/savina_xml_output/Bug.XML create mode 100644 probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML create mode 100644 probing-tools/systemtap/savina_xml_output/Counting.XML create mode 100644 probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML create mode 100644 probing-tools/systemtap/savina_xml_output/PiPrecision.XML create mode 100644 probing-tools/systemtap/savina_xml_output/SleepingBarber.XML create mode 100644 probing-tools/systemtap/savina_xml_output/ThreadRing.XML create mode 100644 probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML create mode 100644 probing-tools/systemtap/savina_xml_output/concdict.XML create mode 100644 probing-tools/systemtap/savina_xml_output/fib.XML create mode 100644 probing-tools/systemtap/savina_xml_output/fjcreate.XML create mode 100644 probing-tools/systemtap/savina_xml_output/fjthrput.XML create mode 100644 probing-tools/systemtap/savina_xml_output/output.XML create mode 100644 probing-tools/systemtap/savina_xml_output/pingpong.XML create mode 100644 probing-tools/systemtap/savina_xml_output/recmatmult.XML diff --git a/probing-tools/systemtap/savina_xml_output/BankTransaction.XML b/probing-tools/systemtap/savina_xml_output/BankTransaction.XML new file mode 100644 index 000000000..e69de29bb diff --git a/probing-tools/systemtap/savina_xml_output/Bug.XML b/probing-tools/systemtap/savina_xml_output/Bug.XML new file mode 100644 index 000000000..e69de29bb diff --git a/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML b/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML new file mode 100644 index 000000000..62b374703 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 140153975052288 + + 1 + + + + 140153975052672 + + 34 + + + + + + 140153975052288 + + 140153975052672 + 1 + + + + 140153975052672 + + 140153975052288 + 34 + + + + + + 140153975052288 + + 1 + + + + 140153975052672 + + 1 + + + + + + 140153975052288 + + 0 + 1 + + + + 140153975052672 + + 0 + 1 + + + + + 140153681259520 + 2 + + + 140153681282048 + 1 + + + 140153681250816 + 2 + + + 140153681270784 + 1 + + + 140153681269760 + 1 + + + 140153681267200 + 1 + + + 140153681246208 + 1 + + + 140153681264128 + 1 + + + 140153681265152 + 1 + + + 140153681272832 + 1 + + + 140153681264640 + 1 + + + 140153681250304 + 1 + + + 140153681267712 + 1 + + + 140153681271296 + 1 + + + 140153681233408 + 2 + + + 140153681263616 + 1 + + + 140153681266688 + 1 + + + 140153681278464 + 1 + + + 140153681241088 + 1 + + + 140153681270272 + 1 + + + 140153681229312 + 1 + + + 140153681279488 + 1 + + + 140153681278976 + 1 + + + 140153681268224 + 1 + + + 140153681273344 + 1 + + + 140153681241600 + 1 + + + 140153681282560 + 1 + + + 140153681277952 + 1 + + + 140153681237504 + 1 + + + 140153681223680 + 1 + + + 140153681446912 + 2 + + + diff --git a/probing-tools/systemtap/savina_xml_output/Counting.XML b/probing-tools/systemtap/savina_xml_output/Counting.XML new file mode 100644 index 000000000..fb244cfbf --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/Counting.XML @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 140008028088704 + + 3 + + + + + + 140008028088704 + + 140008028088320 + 3 + + + + + + 140008028088320 + + 1 + + + + 140008028088704 + + 1 + + + + + + 140008028088320 + + 140008028088704 + 1 + + + + 140008028088704 + + 0 + 1 + + + + + 140007734318080 + 2 + + + 140008028084224 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML b/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML new file mode 100644 index 000000000..83963130a --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 139881285364096 + + 1 + + + + + + 139881285364096 + + 139881285363712 + 1 + + + + + + 139881285363712 + + 1 + + + + 139881285364096 + + 1 + + + + + + 139881285363712 + + 139881285364096 + 1 + + + + 139881285364096 + + 0 + 1 + + + + + 139881285365248 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/PiPrecision.XML b/probing-tools/systemtap/savina_xml_output/PiPrecision.XML new file mode 100644 index 000000000..131392590 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/PiPrecision.XML @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 139980084303872 + + 52 + + + + 139980084304256 + + 30 + + + + + + 139980084303872 + + 139980084304256 + 52 + + + + 139980084304256 + + 139980084303872 + 30 + + + + + + 139980084303872 + + 1 + + + + 139980084304256 + + 1 + + + + + + 139980084303872 + + 0 + 1 + + + + 139980084304256 + + 0 + 1 + + + + + 139979656429568 + 2 + + + 139979656435200 + 5 + + + 139979656444416 + 4 + + + 139979656433664 + 2 + + + 139979656436224 + 3 + + + 139979656434688 + 5 + + + 139979656434176 + 3 + + + 139979656445952 + 5 + + + 139979656430080 + 5 + + + 139979656429056 + 4 + + + 139979656428544 + 3 + + + 139979656437760 + 3 + + + 139979656426496 + 1 + + + 139979790532608 + 3 + + + 139979656432640 + 3 + + + 139980084305408 + 2 + + + 139979656443904 + 2 + + + 139979656442880 + 4 + + + 139979656435712 + 4 + + + 139979656438272 + 6 + + + 139979656433152 + 3 + + + 139979656446464 + 4 + + + 139979656443392 + 6 + + + diff --git a/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML b/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML new file mode 100644 index 000000000..660e82736 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML @@ -0,0 +1,7993 @@ + + + + + + + + + + + + + + + + + + + 140121705866240 + 3118739677 + + + 140121705864192 + 3118693846 + + + 140121705862144 + 3118688045 + + + 140121705861120 + 3118680236 + + + 140121705860096 + 3118667813 + + + 140121705857024 + 3118656711 + + + 140121705856000 + 3118643762 + + + 140121705854976 + 3118633900 + + + 140121705853952 + 3118628686 + + + 140121705852928 + 3118622545 + + + 140121705850880 + 3118610588 + + + 140121705849856 + 3118602725 + + + 140121705848832 + 3118596859 + + + 140121705847808 + 3118587801 + + + 140121705846784 + 3118581462 + + + 140121705845760 + 3118574562 + + + 140121705843712 + 3118564978 + + + 140121705842688 + 3118555395 + + + 140121705840640 + 3118546984 + + + 140121705839616 + 3118536633 + + + 140121705838592 + 3118527764 + + + 140121705837568 + 3118518245 + + + 140121705836544 + 3118508750 + + + 140121705835520 + 3118497656 + + + 140121705834496 + 3118493486 + + + 140121705833472 + 3118483059 + + + 140121705831424 + 3118470926 + + + 140121705830400 + 3118466473 + + + 140121705829376 + 3118456934 + + + 140121705828352 + 3118449188 + + + 140121705827328 + 3118442262 + + + 140121705826304 + 3118435910 + + + 140121705825280 + 3118430875 + + + 140121705807872 + 3118410964 + + + 140121705805824 + 3118374447 + + + 140121705772032 + 3118366890 + + + 140121705771008 + 3118359455 + + + 140121705769984 + 3118346206 + + + 140121705768960 + 3118340092 + + + 140121705767936 + 3118336483 + + + 140121705766912 + 3118330410 + + + 140121705765888 + 3118320211 + + + 140121705763840 + 3118311220 + + + 140121705762816 + 3118303311 + + + 140121705761792 + 3118288925 + + + 140121705760768 + 3118283086 + + + 140121705759744 + 3118275231 + + + 140121705758720 + 3118266472 + + + 140121705756672 + 3118254811 + + + 140121705755648 + 3118247348 + + + 140121705753600 + 3118235514 + + + 140121705752576 + 3118226694 + + + 140121705751552 + 3118220341 + + + 140121705750528 + 3118214826 + + + 140121705749504 + 3118208270 + + + 140121705748480 + 3118197811 + + + 140121705747456 + 3118193134 + + + 140121705746432 + 3118186615 + + + 140121705744384 + 3118176601 + + + 140121705743360 + 3118168858 + + + 140121705742336 + 3118162778 + + + 140121705741312 + 3118154387 + + + 140121705740288 + 3118146468 + + + 140121705739264 + 3118139083 + + + 140121705738240 + 3118128990 + + + 140121705737216 + 3118117938 + + + 140121705735168 + 3118111390 + + + 140121705734144 + 3118101731 + + + 140121705733120 + 3118095148 + + + 140121705732096 + 3118084820 + + + 140121705731072 + 3118074564 + + + 140121705730048 + 3118068191 + + + 140121705729024 + 3118056968 + + + 140121705728000 + 3118050845 + + + 140121705725952 + 3118042967 + + + 140121705724928 + 3118031263 + + + 140121705723904 + 3118026907 + + + 140121705722880 + 3118022857 + + + 140121705721856 + 3118012804 + + + 140121705720832 + 3118004861 + + + 140121705718784 + 3117996004 + + + 140121705717760 + 3117991835 + + + 140121705715712 + 3117985062 + + + 140121705714688 + 3117977820 + + + 140121705713664 + 3117967928 + + + 140121705712640 + 3117960936 + + + 140121705711616 + 3117950895 + + + 140121705710592 + 3117941614 + + + 140121705709568 + 3117934946 + + + 140121705708544 + 3117926078 + + + 140121705706496 + 3117921462 + + + 140121705705472 + 3117913186 + + + 140121705704448 + 3117899391 + + + 140121705703424 + 3117890661 + + + 140121705702400 + 3117880641 + + + 140121705701376 + 3117872316 + + + 140121705700352 + 3117864795 + + + 140121705699328 + 3117856365 + + + 140121705697280 + 3117851848 + + + 140121705696256 + 3117845004 + + + 140121705695232 + 3117838620 + + + 140121705694208 + 3117833375 + + + 140121705693184 + 3117827635 + + + 140121705692160 + 3117819072 + + + 140121705691136 + 3117813831 + + + 140121705690112 + 3117806793 + + + 140121705688064 + 3117798467 + + + 140121705687040 + 3117790767 + + + 140121705686016 + 3117784862 + + + 140121705684992 + 3117779388 + + + 140121705683968 + 3117772204 + + + 140121705682944 + 3117764924 + + + 140121705680896 + 3117757586 + + + 140121705679872 + 3117744519 + + + 140121705677824 + 3117738703 + + + 140121705676800 + 3117729850 + + + 140121705675776 + 3117722820 + + + 140121705674752 + 3117716521 + + + 140121705673728 + 3117708774 + + + 140121705672704 + 3117700379 + + + 140121705671680 + 3117694249 + + + 140121705670656 + 3117685624 + + + 140121705668608 + 3117678716 + + + 140121705667584 + 3117663161 + + + 140121705666560 + 3117658019 + + + 140121705665536 + 3117643895 + + + 140121705664512 + 3117636975 + + + 140121705663488 + 3117619160 + + + 140121705662464 + 3117608792 + + + 140121705661440 + 3117599967 + + + 140121705659392 + 3117590568 + + + 140121705658368 + 3117582239 + + + 140121705657344 + 3117573527 + + + 140121705656320 + 3117564552 + + + 140121705655296 + 3117550251 + + + 140121705654272 + 3117543078 + + + 140121705653248 + 3117534189 + + + 140121705652224 + 3117527527 + + + 140121705650176 + 3117516900 + + + 140121705649152 + 3117509906 + + + 140121705648128 + 3117505474 + + + 140121705647104 + 3117492144 + + + 140121705646080 + 3117487861 + + + 140121705645056 + 3117477323 + + + 140121705643008 + 3117466165 + + + 140121705641984 + 3117460218 + + + 140121705639936 + 3117455203 + + + 140121705638912 + 3117444172 + + + 140121705637888 + 3117435902 + + + 140121705636864 + 3117428648 + + + 140121705635840 + 3117418032 + + + 140121705634816 + 3117405741 + + + 140121705633792 + 3117400392 + + + 140121705632768 + 3117390537 + + + 140121705630720 + 3117377933 + + + 140121705629696 + 3117367705 + + + 140121705628672 + 3117362731 + + + 140121705627648 + 3117354642 + + + 140121705626624 + 3117348239 + + + 140121705625600 + 3117341155 + + + 140121705624576 + 3117330916 + + + 140121705623552 + 3117326191 + + + 140121705621504 + 3117316578 + + + 140121705620480 + 3117309284 + + + 140121705619456 + 3117298635 + + + 140121705618432 + 3117290873 + + + 140121705617408 + 3117285311 + + + 140121705616384 + 3117277695 + + + 140121705615360 + 3117272373 + + + 140121705614336 + 3117259211 + + + 140121705612288 + 3117249370 + + + 140121705611264 + 3117242809 + + + 140121705610240 + 3117232990 + + + 140121705609216 + 3117227430 + + + 140121705608192 + 3117218032 + + + 140121705607168 + 3117213620 + + + 140121705605120 + 3117205031 + + + 140121705604096 + 3117200247 + + + 140121705602048 + 3117187319 + + + 140121705601024 + 3117181603 + + + 140121705600000 + 3117174834 + + + 140121705598976 + 3117169532 + + + 140121705597952 + 3117160988 + + + 140121705596928 + 3117157198 + + + 140121705595904 + 3117150670 + + + 140121705594880 + 3117145766 + + + 140121705592832 + 3117137255 + + + 140121705591808 + 3117133108 + + + 140121705590784 + 3117101987 + + + 140121705589760 + 3117084031 + + + 140121705588736 + 3117077775 + + + 140121705587712 + 3117073618 + + + 140121705586688 + 3117068340 + + + 140121705585664 + 3117056318 + + + 140121705583616 + 3117047277 + + + 140121705582592 + 3117039430 + + + 140121705581568 + 3117030724 + + + 140121705580544 + 3117024013 + + + 140121705579520 + 3117019480 + + + 140121705578496 + 3117010395 + + + 140121705577472 + 3117001350 + + + 140121705576448 + 3116996191 + + + 140121705574400 + 3116991547 + + + 140121705573376 + 3116978994 + + + 140121705572352 + 3116971726 + + + 140121705571328 + 3116962329 + + + 140121705570304 + 3116951680 + + + 140121705569280 + 3116943679 + + + 140121705567232 + 3116938055 + + + 140121705566208 + 3116929676 + + + 140121705564160 + 3116923052 + + + 140121705563136 + 3116919508 + + + 140121705562112 + 3116910444 + + + 140121705561088 + 3116903521 + + + 140121705560064 + 3116896604 + + + 140121705559040 + 3116890164 + + + 140121705558016 + 3116881078 + + + 140121705556992 + 3116872897 + + + 140121705554944 + 3116865112 + + + 140121705553920 + 3116855970 + + + 140121705552896 + 3116845170 + + + 140121705551872 + 3116840402 + + + 140121705550848 + 3116836139 + + + 140121705549824 + 3116828051 + + + 140121705548800 + 3116820068 + + + 140121705547776 + 3116813533 + + + 140121705545728 + 3116806450 + + + 140121705544704 + 3116796655 + + + 140121705543680 + 3116791360 + + + 140121705542656 + 3116782973 + + + 140121705541632 + 3116774392 + + + 140121705540608 + 3116764049 + + + 140121705539584 + 3116757366 + + + 140121705538560 + 3116752152 + + + 140121705536512 + 3116743126 + + + 140121705535488 + 3116734674 + + + 140121705534464 + 3116730879 + + + 140121705533440 + 3116723765 + + + 140121705532416 + 3116713337 + + + 140121705531392 + 3116707002 + + + 140121705529344 + 3116698918 + + + 140121705528320 + 3116686422 + + + 140121705526272 + 3116681029 + + + 140121705525248 + 3116675754 + + + 140121705524224 + 3116663759 + + + 140121705523200 + 3116654797 + + + 140121705522176 + 3116644717 + + + 140121705521152 + 3116636252 + + + 140121705520128 + 3116625685 + + + 140121705519104 + 3116616477 + + + 140121705517056 + 3116605959 + + + 140121705516032 + 3116593282 + + + 140121705515008 + 3116584835 + + + 140121705513984 + 3116579597 + + + 140121705512960 + 3116571711 + + + 140121705511936 + 3116559307 + + + 140121705510912 + 3116554608 + + + 140121705378816 + 3116489527 + + + 140121705376768 + 3116482170 + + + 140121705375744 + 3116474074 + + + 140121705374720 + 3116463998 + + + 140121705373696 + 3116454066 + + + 140121705372672 + 3116445100 + + + 140121705371648 + 3116437593 + + + 140121705370624 + 3116429525 + + + 140121705369600 + 3116420301 + + + 140121705367552 + 3116407151 + + + 140121705366528 + 3116402433 + + + 140121705365504 + 3116395337 + + + 140121705364480 + 3116388048 + + + 140121705363456 + 3116381989 + + + 140121705361408 + 3116374677 + + + 140121705360384 + 3116363339 + + + 140121705359360 + 3116354321 + + + 140121705357312 + 3116344999 + + + 140121705356288 + 3116330648 + + + 140121705355264 + 3116326634 + + + 140121705354240 + 3116321669 + + + 140121705353216 + 3116312646 + + + 140121705352192 + 3116301077 + + + 140121705351168 + 3116296221 + + + 140121705350144 + 3116287545 + + + 140121705348096 + 3116276554 + + + 140121705347072 + 3116267114 + + + 140121705346048 + 3116257476 + + + 140121705345024 + 3116249791 + + + 140121705344000 + 3116241627 + + + 140121705342976 + 3116232270 + + + 140121705341952 + 3116226237 + + + 140121705340928 + 3116216559 + + + 140121705338880 + 3116203034 + + + 140121705337856 + 3116194090 + + + 140121705336832 + 3116183747 + + + 140121705335808 + 3116176141 + + + 140121705334784 + 3116167146 + + + 140121705333760 + 3116159083 + + + 140121705332736 + 3116152543 + + + 140121705331712 + 3116140118 + + + 140121705329664 + 3116132951 + + + 140121705328640 + 3116128420 + + + 140121705327616 + 3116120115 + + + 140121705326592 + 3116110268 + + + 140121705325568 + 3116102878 + + + 140121705323520 + 3116094829 + + + 140121705322496 + 3116085822 + + + 140121705321472 + 3116076745 + + + 140121705319424 + 3116063633 + + + 140121705318400 + 3116055619 + + + 140121705317376 + 3116049154 + + + 140121705316352 + 3116040088 + + + 140121705315328 + 3116028642 + + + 140121705314304 + 3116022039 + + + 140121705313280 + 3116012176 + + + 140121705312256 + 3116002047 + + + 140121705310208 + 3115989709 + + + 140121705309184 + 3115984573 + + + 140121705308160 + 3115976781 + + + 140121705307136 + 3115969953 + + + 140121705306112 + 3115964457 + + + 140121705305088 + 3115956911 + + + 140121705304064 + 3115950772 + + + 140121705303040 + 3115943095 + + + 140121705300992 + 3115932932 + + + 140121705299968 + 3115925127 + + + 140121705298944 + 3115914594 + + + 140121705297920 + 3115907815 + + + 140121705296896 + 3115900434 + + + 140121705295872 + 3115892435 + + + 140121705294848 + 3115881726 + + + 140121705293824 + 3115875655 + + + 140121705291776 + 3115865324 + + + 140121705290752 + 3115854135 + + + 140121705289728 + 3115845513 + + + 140121705288704 + 3115836436 + + + 140121705287680 + 3115826562 + + + 140121705285632 + 3115813357 + + + 140121705284608 + 3115802729 + + + 140121705283584 + 3115794484 + + + 140121705281536 + 3115784512 + + + 140121705280512 + 3115778601 + + + 140121705279488 + 3115769934 + + + 140121705278464 + 3115757311 + + + 140121705277440 + 3115746602 + + + 140121705276416 + 3115737809 + + + 140121705275392 + 3115730313 + + + 140121705274368 + 3115721390 + + + 140121705272320 + 3115714918 + + + 140121705271296 + 3115705002 + + + 140121705270272 + 3115695048 + + + 140121705269248 + 3115690411 + + + 140121705268224 + 3115684082 + + + 140121705267200 + 3115675152 + + + 140121705266176 + 3115664651 + + + 140121705265152 + 3115656944 + + + 140121705263104 + 3115647264 + + + 140121705262080 + 3115637041 + + + 140121705261056 + 3115627809 + + + 140121705260032 + 3115623130 + + + 140121705259008 + 3115616066 + + + 140121705257984 + 3115603260 + + + 140121705256960 + 3115593968 + + + 140121705255936 + 3115585200 + + + 140121705253888 + 3115576387 + + + 140121705252864 + 3115571901 + + + 140121705251840 + 3115564793 + + + 140121705250816 + 3115555854 + + + 140121705249792 + 3115546859 + + + 140121705247744 + 3115538716 + + + 140121705246720 + 3115530504 + + + 140121705245696 + 3115519219 + + + 140121705243648 + 3115513618 + + + 140121705242624 + 3115505018 + + + 140121705241600 + 3115490490 + + + 140121705240576 + 3115483361 + + + 140121705239552 + 3115474398 + + + 140121705238528 + 3115466847 + + + 140121705237504 + 3115456291 + + + 140121705236480 + 3115445802 + + + 140121705234432 + 3115439449 + + + 140121705233408 + 3115427597 + + + 140121705232384 + 3115422079 + + + 140121705231360 + 3115415325 + + + 140121705230336 + 3115411681 + + + 140121705229312 + 3115402687 + + + 140121705228288 + 3115392804 + + + 140121705227264 + 3115388908 + + + 140121705225216 + 3115380703 + + + 140121705224192 + 3115374116 + + + 140121705223168 + 3115366079 + + + 140121705222144 + 3115357722 + + + 140121705221120 + 3115346416 + + + 140121705220096 + 3115339684 + + + 140121705219072 + 3115335674 + + + 140121705218048 + 3115329024 + + + 140121705216000 + 3115317260 + + + 140121705214976 + 3115312581 + + + 140121705213952 + 3115305293 + + + 140121705212928 + 3115294753 + + + 140121705211904 + 3115286940 + + + 140121705209856 + 3115276808 + + + 140121705208832 + 3115268006 + + + 140121705207808 + 3115261689 + + + 140121705205760 + 3115256913 + + + 140121705204736 + 3115249426 + + + 140121705203712 + 3115242776 + + + 140121705202688 + 3115236175 + + + 140121705201664 + 3115227154 + + + 140121705200640 + 3115220187 + + + 140121705199616 + 3115215602 + + + 140121705198592 + 3115209912 + + + 140121705196544 + 3115198249 + + + 140121705195520 + 3115193958 + + + 140121705194496 + 3115189901 + + + 140121705193472 + 3115184372 + + + 140121705192448 + 3115175363 + + + 140121705191424 + 3115169647 + + + 140121705190400 + 3115162430 + + + 140121705189376 + 3115156217 + + + 140121705187328 + 3115145695 + + + 140121705186304 + 3115141853 + + + 140121705185280 + 3115134816 + + + 140121705184256 + 3115121775 + + + 140121705183232 + 3115116600 + + + 140121705182208 + 3115107049 + + + 140121705181184 + 3115101545 + + + 140121705180160 + 3115095417 + + + 140121705178112 + 3115085927 + + + 140121705177088 + 3115081583 + + + 140121705176064 + 3115075450 + + + 140121705175040 + 3115071130 + + + 140121705174016 + 3115065676 + + + 140121705171968 + 3115056757 + + + 140121705170944 + 3115049882 + + + 140121705169920 + 3115045008 + + + 140121705167872 + 3115034406 + + + 140121705166848 + 3115027922 + + + 140121705165824 + 3115021874 + + + 140121705164800 + 3115015765 + + + 140121705163776 + 3115003792 + + + 140121705162752 + 3114995029 + + + 140121705161728 + 3114989369 + + + 140121705160704 + 3114979374 + + + 140121705158656 + 3114968757 + + + 140121705157632 + 3114959105 + + + 140121705156608 + 3114950198 + + + 140121705155584 + 3114937829 + + + 140121705154560 + 3114931698 + + + 140121705153536 + 3114926114 + + + 140121705152512 + 3114919191 + + + 140121705151488 + 3114909237 + + + 140121705149440 + 3114901084 + + + 140121705148416 + 3114892917 + + + 140121705147392 + 3114882660 + + + 140121705146368 + 3114874088 + + + 140121705145344 + 3114868508 + + + 140121705144320 + 3114859825 + + + 140121705143296 + 3114851483 + + + 140121705142272 + 3114844818 + + + 140121705140224 + 3114838103 + + + 140121705139200 + 3114831028 + + + 140121705138176 + 3114824391 + + + 140121705137152 + 3114815151 + + + 140121705136128 + 3114808069 + + + 140121705134080 + 3114801731 + + + 140121705133056 + 3114798187 + + + 140121705132032 + 3114789075 + + + 140121705129984 + 3114777360 + + + 140121705128960 + 3114772495 + + + 140121705127936 + 3114764764 + + + 140121705126912 + 3114751935 + + + 140121705125888 + 3114747850 + + + 140121705124864 + 3114738478 + + + 140121705123840 + 3114729879 + + + 140121705122816 + 3114720086 + + + 140121705120768 + 3114711690 + + + 140121705119744 + 3114707550 + + + 140121705118720 + 3114699851 + + + 140121705117696 + 3114693583 + + + 140121705116672 + 3114686729 + + + 140121705115648 + 3114681861 + + + 140121705114624 + 3114672255 + + + 140121705113600 + 3114665242 + + + 140121705111552 + 3114658367 + + + 140121705110528 + 3114652082 + + + 140121705109504 + 3114642930 + + + 140121705108480 + 3114636613 + + + 140121705107456 + 3114626624 + + + 140121705106432 + 3114615670 + + + 140121705105408 + 3114611096 + + + 140121705104384 + 3114602702 + + + 140121705102336 + 3114592670 + + + 140121705101312 + 3114585444 + + + 140121705100288 + 3114580058 + + + 140121705099264 + 3114570050 + + + 140121705098240 + 3114562942 + + + 140121705096192 + 3114555716 + + + 140121705095168 + 3114549512 + + + 140121705094144 + 3114538100 + + + 140121705092096 + 3114532961 + + + 140121705091072 + 3114525951 + + + 140121705090048 + 3114519589 + + + 140121705089024 + 3114513315 + + + 140121705088000 + 3114507254 + + + 140121705086976 + 3114499318 + + + 140121705085952 + 3114489278 + + + 140121705084928 + 3114480258 + + + 140121705082880 + 3114470475 + + + 140121705081856 + 3114458905 + + + 140121705080832 + 3114449935 + + + 140121705079808 + 3114440243 + + + 140121705078784 + 3114436103 + + + 140121705077760 + 3114426491 + + + 140121705076736 + 3114421264 + + + 140121705074688 + 3114408787 + + + 140121705073664 + 3114402127 + + + 140121705072640 + 3114394374 + + + 140121705071616 + 3114389981 + + + 140121705070592 + 3114380874 + + + 140121705069568 + 3114369089 + + + 140121705068544 + 3114361516 + + + 140121705067520 + 3114353311 + + + 140121705065472 + 3114341724 + + + 140121705064448 + 3114333780 + + + 140121705063424 + 3114325334 + + + 140121705062400 + 3114318199 + + + 140121705061376 + 3114306931 + + + 140121705059328 + 3114297091 + + + 140121705058304 + 3114290913 + + + 140121705057280 + 3114284502 + + + 140121705055232 + 3114277365 + + + 140121705054208 + 3114268384 + + + 140121705053184 + 3114258469 + + + 140121705052160 + 3114248307 + + + 140121705051136 + 3114239087 + + + 140121705050112 + 3114229280 + + + 140121705049088 + 3114217162 + + + 140121705048064 + 3114209620 + + + 140121705046016 + 3114201204 + + + 140121705044992 + 3114188674 + + + 140121705043968 + 3114180138 + + + 140121705042944 + 3114175365 + + + 140121705041920 + 3114167015 + + + 140121705040896 + 3114156263 + + + 140121705039872 + 3114149456 + + + 140121705038848 + 3114142435 + + + 140121705036800 + 3114133325 + + + 140121705035776 + 3114126141 + + + 140121705034752 + 3114116030 + + + 140121705033728 + 3114107975 + + + 140121705032704 + 3114099896 + + + 140121705031680 + 3114090259 + + + 140121705030656 + 3114084864 + + + 140121705029632 + 3114076525 + + + 140121705027584 + 3114066977 + + + 140121705026560 + 3114062763 + + + 140121705025536 + 3114055986 + + + 140121705024512 + 3114050131 + + + 140121705023488 + 3114043596 + + + 140121705021440 + 3114039834 + + + 140121705020416 + 3114027895 + + + 140121705019392 + 3114019728 + + + 140121705017344 + 3114012486 + + + 140121705016320 + 3114001786 + + + 140121705015296 + 3113994770 + + + 140121705014272 + 3113985385 + + + 140121705013248 + 3113976620 + + + 140121705012224 + 3113965619 + + + 140121705011200 + 3113958268 + + + 140121705010176 + 3113948152 + + + 140121705008128 + 3113935748 + + + 140121705007104 + 3113927371 + + + 140121705006080 + 3113920611 + + + 140121705005056 + 3113913042 + + + 140121705004032 + 3113901471 + + + 140121705003008 + 3113892672 + + + 140121705001984 + 3113888308 + + + 140121705000960 + 3113882798 + + + 140121704998912 + 3113871624 + + + 140121704997888 + 3113864735 + + + 140121704996864 + 3113860894 + + + 140121704995840 + 3113849980 + + + 140121704994816 + 3113840405 + + + 140121704993792 + 3113836753 + + + 140121704992768 + 3113827889 + + + 140121704991744 + 3113817512 + + + 140121704989696 + 3113812207 + + + 140121704988672 + 3113806349 + + + 140121704987648 + 3113795108 + + + 140121704986624 + 3113789648 + + + 140121704985600 + 3113785515 + + + 140121704983552 + 3113775855 + + + 140121704982528 + 3113771242 + + + 140121704981504 + 3113763003 + + + 140121704979456 + 3113754053 + + + 140121704978432 + 3113749329 + + + 140121704977408 + 3113741655 + + + 140121704976384 + 3113736759 + + + 140121704975360 + 3113709774 + + + 140121704974336 + 3113705599 + + + 140121704973312 + 3113703743 + + + 140121704972288 + 3113702438 + + + 140121704970240 + 3113698788 + + + 140121704969216 + 3113695961 + + + 140121704968192 + 3113693102 + + + 140121704967168 + 3113689758 + + + 140121704966144 + 3113685758 + + + 140121704965120 + 3113681245 + + + 140121704964096 + 3113679997 + + + 140121704963072 + 3113676649 + + + 140121704961024 + 3113673213 + + + 140121704960000 + 3113670380 + + + 140121704958976 + 3113665828 + + + 140121704957952 + 3113664104 + + + 140121704956928 + 3113661417 + + + 140121704955904 + 3113659177 + + + 140121704954880 + 3113655534 + + + 140121704953856 + 3113654040 + + + 140121704951808 + 3113650799 + + + 140121704950784 + 3113648215 + + + 140121704949760 + 3113645046 + + + 140121704948736 + 3113641189 + + + 140121704947712 + 3113636982 + + + 140121704945664 + 3113633268 + + + 140121704944640 + 3113631191 + + + 140121704943616 + 3113628091 + + + 140121704941568 + 3113624438 + + + 140121704940544 + 3113622188 + + + 140121704939520 + 3113619311 + + + 140121704938496 + 3113615462 + + + 140121704937472 + 3113613396 + + + 140121704936448 + 3113610263 + + + 140121704935424 + 3113608086 + + + 140121704934400 + 3113603776 + + + 140121704932352 + 3113601337 + + + 140121704931328 + 3113599314 + + + 140121704930304 + 3113595511 + + + 140121704929280 + 3113593387 + + + 140121704928256 + 3113589762 + + + 140121704927232 + 3113585771 + + + 140121704926208 + 3113583139 + + + 140121704925184 + 3113580930 + + + 140121704923136 + 3113577519 + + + 140121704922112 + 3113575087 + + + 140121704921088 + 3113571255 + + + 140121704920064 + 3113569944 + + + 140121704919040 + 3113566098 + + + 140121704918016 + 3113561991 + + + 140121704916992 + 3113558436 + + + 140121704915968 + 3113556679 + + + 140121704913920 + 3113553507 + + + 140121704912896 + 3113549068 + + + 140121704911872 + 3113547188 + + + 140121704910848 + 3113543803 + + + 140121704909824 + 3113540252 + + + 140121704907776 + 3113536191 + + + 140121704906752 + 3113533889 + + + 140121704905728 + 3113528756 + + + 140121704903680 + 3113527279 + + + 140121704902656 + 3113524373 + + + 140121704901632 + 3113519155 + + + 140121704900608 + 3113515934 + + + 140121704899584 + 3113511805 + + + 140121704898560 + 3113509478 + + + 140121704897536 + 3113502678 + + + 140121704896512 + 3113499985 + + + 140121704894464 + 3113498124 + + + 140121704893440 + 3113493971 + + + 140121704892416 + 3113491647 + + + 140121704891392 + 3113488061 + + + 140121704890368 + 3113483523 + + + 140121704889344 + 3113479315 + + + 140121704888320 + 3113474652 + + + 140121704887296 + 3113471353 + + + 140121704885248 + 3113468762 + + + 140121704884224 + 3113466573 + + + 140121704883200 + 3113464571 + + + 140121704882176 + 3113460179 + + + 140121704881152 + 3113455722 + + + 140121704880128 + 3113452299 + + + 140121704879104 + 3113449816 + + + 140121704878080 + 3113446667 + + + 140121704876032 + 3113443074 + + + 140121704875008 + 3113439663 + + + 140121704873984 + 3113435745 + + + 140121704872960 + 3113430371 + + + 140121704871936 + 3113429043 + + + 140121704869888 + 3113425920 + + + 140121704868864 + 3113420435 + + + 140121704867840 + 3113418405 + + + 140121704865792 + 3113414360 + + + 140121704864768 + 3113410702 + + + 140121704863744 + 3113407378 + + + 140121704862720 + 3113402923 + + + 140121704861696 + 3113400724 + + + 140121704860672 + 3113395916 + + + 140121704859648 + 3113392698 + + + 140121704858624 + 3113389746 + + + 140121704856576 + 3113384844 + + + 140121704855552 + 3113380138 + + + 140121704854528 + 3113376620 + + + 140121704853504 + 3113373213 + + + 140121704852480 + 3113370248 + + + 140121704851456 + 3113368218 + + + 140121704850432 + 3113364975 + + + 140121704849408 + 3113360958 + + + 140121704847360 + 3113355717 + + + 140121704846336 + 3113353012 + + + 140121704845312 + 3113350132 + + + 140121704844288 + 3113345146 + + + 140121704843264 + 3113343331 + + + 140121704842240 + 3113340570 + + + 140121704841216 + 3113338578 + + + 140121704840192 + 3113333146 + + + 140121704838144 + 3113330278 + + + 140121704837120 + 3113326699 + + + 140121704836096 + 3113321550 + + + 140121704835072 + 3113319218 + + + 140121704834048 + 3113315543 + + + 140121704832000 + 3113310833 + + + 140121704830976 + 3113308551 + + + 140121704829952 + 3113306943 + + + 140121704827904 + 3113301848 + + + 140121704826880 + 3113297599 + + + 140121704825856 + 3113295196 + + + 140121704824832 + 3113291980 + + + 140121704823808 + 3113287747 + + + 140121704822784 + 3113285888 + + + 140121704821760 + 3113281769 + + + 140121704820736 + 3113280330 + + + 140121704818688 + 3113275151 + + + 140121704817664 + 3113273370 + + + 140121704816640 + 3113269759 + + + 140121704815616 + 3113263773 + + + 140121704814592 + 3113259977 + + + 140121704813568 + 3113256821 + + + 140121704812544 + 3113254180 + + + 140121704811520 + 3113248630 + + + 140121704809472 + 3113246015 + + + 140121704808448 + 3113242469 + + + 140121704807424 + 3113239656 + + + 140121704806400 + 3113236625 + + + 140121704805376 + 3113231931 + + + 140121704804352 + 3113228291 + + + 140121704803328 + 3113223674 + + + 140121704802304 + 3113220751 + + + 140121704800256 + 3113218896 + + + 140121704799232 + 3113214503 + + + 140121704798208 + 3113210063 + + + 140121704797184 + 3113206941 + + + 140121704796160 + 3113203961 + + + 140121704794112 + 3113200806 + + + 140121704793088 + 3113199216 + + + 140121704792064 + 3113196594 + + + 140121704790016 + 3113192429 + + + 140121704788992 + 3113189500 + + + 140121704787968 + 3113185173 + + + 140121704786944 + 3113179963 + + + 140121704785920 + 3113177191 + + + 140121704784896 + 3113173657 + + + 140121704783872 + 3113171268 + + + 140121704782848 + 3113165634 + + + 140121704780800 + 3113160992 + + + 140121704779776 + 3113156537 + + + 140121704778752 + 3113153671 + + + 140121704777728 + 3113149268 + + + 140121704776704 + 3113147175 + + + 140121704775680 + 3113142705 + + + 140121704774656 + 3113137719 + + + 140121704773632 + 3113133585 + + + 140121704771584 + 3113128363 + + + 140121704770560 + 3113123102 + + + 140121704769536 + 3113121252 + + + 140121704768512 + 3113117796 + + + 140121704767488 + 3113114626 + + + 140121704766464 + 3113111203 + + + 140121704765440 + 3113108074 + + + 140121704764416 + 3113104551 + + + 140121704762368 + 3113101479 + + + 140121704761344 + 3113099027 + + + 140121704760320 + 3113094886 + + + 140121704759296 + 3113093329 + + + 140121704757248 + 3113087686 + + + 140121704756224 + 3113085773 + + + 140121704755200 + 3113082464 + + + 140121704754176 + 3113078187 + + + 140121704752128 + 3113075926 + + + 140121704751104 + 3113072894 + + + 140121704750080 + 3113069609 + + + 140121704749056 + 3113064810 + + + 140121704748032 + 3113060487 + + + 140121704747008 + 3113055888 + + + 140121704745984 + 3113051122 + + + 140121704744960 + 3113048982 + + + 140121704742912 + 3113044492 + + + 140121704741888 + 3113038962 + + + 140121704740864 + 3113037519 + + + 140121704739840 + 3113033515 + + + 140121704738816 + 3113029909 + + + 140121704737792 + 3113026129 + + + 140121704736768 + 3113021607 + + + 140121704735744 + 3113018288 + + + 140121704733696 + 3113013130 + + + 140121704732672 + 3113009541 + + + 140121704731648 + 3113005366 + + + 140121704730624 + 3113003460 + + + 140121704729600 + 3112999513 + + + 140121704728576 + 3112995176 + + + 140121704727552 + 3112993223 + + + 140121704726528 + 3112988957 + + + 140121704724480 + 3112983754 + + + 140121704723456 + 3112981050 + + + 140121704722432 + 3112978882 + + + 140121704721408 + 3112974430 + + + 140121704719360 + 3112972840 + + + 140121704718336 + 3112971201 + + + 140121704717312 + 3112967438 + + + 140121704716288 + 3112962739 + + + 140121704714240 + 3112959606 + + + 140121704713216 + 3112954171 + + + 140121704712192 + 3112953071 + + + 140121704711168 + 3112951901 + + + 140121704710144 + 3112948563 + + + 140121704709120 + 3112943244 + + + 140121704708096 + 3112939265 + + + 140121704707072 + 3112937694 + + + 140121704705024 + 3112934596 + + + 140121704704000 + 3112932549 + + + 140121704702976 + 3112928538 + + + 140121704701952 + 3112925690 + + + 140121704700928 + 3112920269 + + + 140121704699904 + 3112918347 + + + 140121704698880 + 3112916751 + + + 140121704697856 + 3112914320 + + + 140121704695808 + 3112910200 + + + 140121704694784 + 3112907413 + + + 140121704693760 + 3112904855 + + + 140121704692736 + 3112899035 + + + 140121704691712 + 3112896797 + + + 140121704690688 + 3112893671 + + + 140121704689664 + 3112890691 + + + 140121704688640 + 3112885254 + + + 140121704686592 + 3112880358 + + + 140121704685568 + 3112876992 + + + 140121704684544 + 3112871694 + + + 140121704683520 + 3112868621 + + + 140121704681472 + 3112864441 + + + 140121704680448 + 3112861140 + + + 140121704679424 + 3112859114 + + + 140121704678400 + 3112856036 + + + 140121704676352 + 3112850371 + + + 140121704675328 + 3112848097 + + + 140121704674304 + 3112844207 + + + 140121704673280 + 3112842516 + + + 140121704672256 + 3112838737 + + + 140121704671232 + 3112836001 + + + 140121704670208 + 3112832737 + + + 140121704669184 + 3112831266 + + + 140121704667136 + 3112826681 + + + 140121704666112 + 3112823946 + + + 140121704665088 + 3112820221 + + + 140121704664064 + 3112816000 + + + 140121704663040 + 3112812426 + + + 140121704662016 + 3112809502 + + + 140121704660992 + 3112805085 + + + 140121704659968 + 3112799920 + + + 140121704657920 + 3112797471 + + + 140121704656896 + 3112793565 + + + 140121704655872 + 3112789318 + + + 140121704654848 + 3112786481 + + + 140121704653824 + 3112783092 + + + 140121704652800 + 3112781209 + + + 140121704651776 + 3112778640 + + + 140121704650752 + 3112777276 + + + 140121704648704 + 3112775966 + + + 140121704647680 + 3112770801 + + + 140121704646656 + 3112768983 + + + 140121704645632 + 3112765176 + + + 140121704643584 + 3112762387 + + + 140121704642560 + 3112758941 + + + 140121704641536 + 3112757299 + + + 140121704640512 + 3112753352 + + + 140121704638464 + 3112749271 + + + 140121704637440 + 3112745540 + + + 140121704636416 + 3112744086 + + + 140121704635392 + 3112740615 + + + 140121704634368 + 3112736825 + + + 140121704633344 + 3112735615 + + + 140121704632320 + 3112731887 + + + 140121704631296 + 3112729174 + + + 140121704629248 + 3112727483 + + + 140121704628224 + 3112724866 + + + 140121704627200 + 3112720074 + + + 140121704626176 + 3112717761 + + + 140121704625152 + 3112714650 + + + 140121704624128 + 3112712508 + + + 140121704623104 + 3112707609 + + + 140121704622080 + 3112703957 + + + 140121704620032 + 3112699682 + + + 140121704619008 + 3112696177 + + + 140121704617984 + 3112693785 + + + 140121704616960 + 3112691983 + + + 140121704615936 + 3112689236 + + + 140121704614912 + 3112686250 + + + 140121704613888 + 3112683953 + + + 140121704612864 + 3112679775 + + + 140121704610816 + 3112674187 + + + 140121704609792 + 3112671154 + + + 140121704608768 + 3112667429 + + + 140121704607744 + 3112664284 + + + 140121704605696 + 3112658998 + + + 140121704604672 + 3112654494 + + + 140121704603648 + 3112653235 + + + 140121704602624 + 3112649525 + + + 140121704600576 + 3112646969 + + + 140121704599552 + 3112644497 + + + 140121704598528 + 3112641878 + + + 140121704597504 + 3112637419 + + + 140121704596480 + 3112632966 + + + 140121704595456 + 3112629927 + + + 140121704594432 + 3112626201 + + + 140121704593408 + 3112623481 + + + 140121704591360 + 3112620657 + + + 140121704590336 + 3112617831 + + + 140121704589312 + 3112614446 + + + 140121704588288 + 3112609977 + + + 140121704587264 + 3112606904 + + + 140121704586240 + 3112602823 + + + 140121704585216 + 3112598379 + + + 140121704584192 + 3112593873 + + + 140121704582144 + 3112589348 + + + 140121704581120 + 3112586084 + + + 140121704580096 + 3112584828 + + + 140121704579072 + 3112580203 + + + 140121704578048 + 3112572899 + + + 140121704577024 + 3112568364 + + + 140121704576000 + 3112564004 + + + 140121704574976 + 3112559394 + + + 140121704572928 + 3112553749 + + + 140121704571904 + 3112551297 + + + 140121704570880 + 3112548020 + + + 140121704569856 + 3112544357 + + + 140121704567808 + 3112540772 + + + 140121704566784 + 3112539299 + + + 140121704565760 + 3112534679 + + + 140121704564736 + 3112532298 + + + 140121704562688 + 3112528061 + + + 140121704561664 + 3112524914 + + + 140121704560640 + 3112522573 + + + 140121704559616 + 3112518867 + + + 140121704558592 + 3112515680 + + + 140121704557568 + 3112512896 + + + 140121704556544 + 3112508928 + + + 140121704555520 + 3112505165 + + + 140121704553472 + 3112498581 + + + 140121704552448 + 3112496476 + + + 140121704551424 + 3112495020 + + + 140121704550400 + 3112491989 + + + 140121704549376 + 3112489026 + + + 140121704548352 + 3112486267 + + + 140121704547328 + 3112484606 + + + 140121704546304 + 3112481384 + + + 140121704544256 + 3112475911 + + + 140121704543232 + 3112471561 + + + 140121704542208 + 3112466851 + + + 140121704541184 + 3112463764 + + + 140121704540160 + 3112460502 + + + 140121704539136 + 3112456079 + + + 140121704538112 + 3112452997 + + + 140121704537088 + 3112448397 + + + 140121704535040 + 3112446473 + + + 140121704534016 + 3112443284 + + + 140121704532992 + 3112438496 + + + 140121704531968 + 3112433954 + + + 140121704529920 + 3112431506 + + + 140121704528896 + 3112428171 + + + 140121704527872 + 3112424715 + + + 140121704526848 + 3112422613 + + + 140121704524800 + 3112417813 + + + 140121704523776 + 3112413882 + + + 140121704522752 + 3112412326 + + + 140121704521728 + 3112408837 + + + 140121704520704 + 3112404993 + + + 140121704519680 + 3112401443 + + + 140121704518656 + 3112398865 + + + 140121704517632 + 3112395313 + + + 140121704515584 + 3112392637 + + + 140121704514560 + 3112390094 + + + 140121704513536 + 3112385459 + + + 140121704512512 + 3112382687 + + + 140121704511488 + 3112379709 + + + 140121704510464 + 3112376430 + + + 140121704509440 + 3112373185 + + + 140121704508416 + 3112369381 + + + 140121704506368 + 3112364898 + + + 140121704505344 + 3112362225 + + + 140121704504320 + 3112356308 + + + 140121704503296 + 3112353649 + + + 140121704502272 + 3112350305 + + + 140121704501248 + 3112348544 + + + 140121704500224 + 3112342850 + + + 140121569804288 + 58649136 + + + 140121568424960 + 51063820 + + + 140121568097280 + 44092679 + + + 140121568049152 + 35416071 + + + 140121703052288 + 29067848 + + + 140121702622208 + 21069097 + + + 140121567712256 + 14731677 + + + 140121567711232 + 7253282 + + + 140121702529024 + 55925462 + + + 140121567646720 + 49269101 + + + 140121702122496 + 42219234 + + + 140121567257600 + 35098862 + + + 140121701978112 + 28330935 + + + 140121567230976 + 21040620 + + + 140121701890048 + 14226105 + + + 140121567027200 + 7415103 + + + 140121566868480 + 56248831 + + + 140121566859264 + 49280433 + + + 140121700891648 + 41906123 + + + 140121566460928 + 34715864 + + + 140121566307328 + 27739061 + + + 140121699798016 + 21463059 + + + 140121566306304 + 15152708 + + + 140121566299136 + 7979943 + + + 140121566015488 + 56249009 + + + 140121565687808 + 49116320 + + + 140121565576192 + 42196454 + + + 140121699379200 + 34863152 + + + 140121565220864 + 27439546 + + + 140121565004800 + 20938057 + + + 140121698945024 + 14065270 + + + 140121698944000 + 7572650 + + + 140121698942976 + 54647005 + + + 140121698889728 + 48159952 + + + 140121698500608 + 40834934 + + + 140121698002944 + 33875721 + + + 140121564156928 + 27168274 + + + 140121564116992 + 21042945 + + + 140121563868160 + 14519918 + + + 140121697476608 + 7715137 + + + 140121697451008 + 17782206 + + + 140121697449984 + 48903810 + + + 140121563338752 + 41887961 + + + 140121697300480 + 35448308 + + + 140121562889216 + 28592572 + + + 140121562762240 + 22119715 + + + 140121696960512 + 15655493 + + + 140121562690560 + 8043115 + + + 140121562641408 + 55613693 + + + 140121696525312 + 48644642 + + + 140121562376192 + 41426362 + + + 140121696319488 + 34879342 + + + 140121569543168 + 27692267 + + + 140121703503872 + 20468509 + + + 140121701337088 + 13478695 + + + 140121567751168 + 6880578 + + + 140121568608256 + 55046546 + + + 140121703319552 + 48323816 + + + 140121562819584 + 41236236 + + + 140121703341056 + 34041974 + + + 140121566942208 + 27004342 + + + 140121699998720 + 19831851 + + + 140121699450880 + 13345970 + + + 140121562446848 + 6507195 + + + 140121565077504 + 56218812 + + + 140121700128768 + 48984388 + + + 140121565794304 + 41955742 + + + 140121565094912 + 35276360 + + + 140121562976256 + 28519590 + + + 140121699070976 + 21328557 + + + 140121566672896 + 14679995 + + + 140121568979968 + 7833957 + + + 140121563312128 + 53608839 + + + 140121566683136 + 46763274 + + + 140121563021312 + 40751592 + + + 140121701640192 + 33863772 + + + 140121702251520 + 27010403 + + + 140121702300672 + 20092931 + + + 140121567497216 + 46182461 + + + 140121566707712 + 7712059 + + + 140121698065408 + 52852042 + + + 140121698080768 + 39482351 + + + 140121701057536 + 33301295 + + + 140121698169856 + 26999213 + + + 140121696707584 + 19824449 + + + 140121562289152 + 13104560 + + + 140121570064384 + 40382682 + + + 140121565288448 + 53574243 + + + 140121701744640 + 46855604 + + + 140121563947008 + 33957438 + + + 140121698808832 + 27824951 + + + 140121703844864 + 21324282 + + + 140121701200896 + 14417415 + + + 140121564681216 + 7985924 + + + 140121696901120 + 55779467 + + + 140121702520832 + 48159951 + + + 140121564097536 + 41276670 + + + 140121697433600 + 34501451 + + + 140121563290624 + 26874872 + + + 140121562645504 + 20843234 + + + 140121702471680 + 13688127 + + + 140121561907200 + 7520645 + + + 140121700068352 + 52134867 + + + 140121699898368 + 45228542 + + + 140121562424320 + 38650036 + + + 140121566112768 + 32099296 + + + 140121568238592 + 25500231 + + + 140121697334272 + 1679922 + + + 140121566685184 + 13734785 + + + 140121697918976 + 19829411 + + + 140121566313472 + 48797607 + + + 140121703775232 + 42261611 + + + 140121703846912 + 36965340 + + + 140121701214208 + 31070853 + + + 140121563074560 + 24863301 + + + 140121703415808 + 19084799 + + + 140121702437888 + 13290674 + + + 140121703572480 + 7140685 + + + 140121562632192 + 51909766 + + + 140121701842944 + 45866488 + + + 140121567488000 + 38681266 + + + 140121703721984 + 32081067 + + + 140121700673536 + 26018624 + + + 140121564060672 + 19703327 + + + 140121698685952 + 13238792 + + + 140121698688000 + 6693367 + + + 140121567965184 + 49979367 + + + 140121564806144 + 44228346 + + + 140121698044928 + 37070813 + + + 140121562579968 + 31372036 + + + 140121701170176 + 18647783 + + + 140121569498112 + 19675924 + + + 140121699468288 + 43751592 + + + 140121700501504 + 6739279 + + + 140121568785408 + 50733351 + + + 140121566483456 + 37497649 + + + 140121567986688 + 31119378 + + + 140121567128576 + 24858805 + + + 140121566478336 + 18579344 + + + 140121564829696 + 12909298 + + + 140121564589056 + 6335092 + + + 140121698276352 + 49080486 + + + 140121564348416 + 43208184 + + + 140121697634304 + 37372463 + + + 140121699956736 + 31539558 + + + 140121699058688 + 25131444 + + + 140121700689920 + 19018942 + + + 140121698501632 + 13046255 + + + 140121703040000 + 6765375 + + + 140121563025408 + 52156022 + + + 140121568956416 + 46037058 + + + 140121567344640 + 39993386 + + + 140121697119232 + 33332832 + + + 140121566850048 + 26954428 + + + 140121702047744 + 20466466 + + + 140121697266688 + 13593850 + + + 140121564699648 + 7191084 + + + 140121564193792 + 53611051 + + + 140121697144832 + 46107470 + + + 140121696016384 + 38713430 + + + 140121563741184 + 31447811 + + + 140121698315264 + 10311778 + + + 140121702223872 + 19165731 + + + 140121565182976 + 13394495 + + + 140121700768768 + 7212409 + + + 140121697034240 + 47059077 + + + 140121695969280 + 40987206 + + + 140121567788032 + 35141711 + + + 140121698067456 + 28157048 + + + 140121564345344 + 22272759 + + + 140121701859328 + 16520480 + + + 140121567323136 + 10960892 + + + 140121562926080 + 5514745 + + + 140121702797312 + 48000171 + + + 140121561836544 + 42029419 + + + 140121703603200 + 36354881 + + + 140121697716224 + 30641533 + + + 140121569017856 + 24856404 + + + 140121565803520 + 18688500 + + + 140121698779136 + 12793818 + + + 140121699842048 + 7111198 + + + 140121699639296 + 46765544 + + + 140121569503232 + 40234310 + + + 140121702080512 + 34759861 + + + 140121696019456 + 28834247 + + + 140121562959872 + 23501108 + + + 140121567480832 + 17359721 + + + 140121700521984 + 11504628 + + + 140121563999232 + 5721027 + + + 140121565347840 + 45629889 + + + 140121567408128 + 40059275 + + + 140121700328448 + 34246574 + + + 140121563567104 + 28298614 + + + 140121699418112 + 22574570 + + + 140121568492544 + 19311609 + + + 140121697359872 + 11616162 + + + 140121567518720 + 6154136 + + + 140121698510848 + 43997746 + + + 140121700233216 + 38153662 + + + 140121702654976 + 32582578 + + + 140121564813312 + 7248214 + + + 140121564522496 + 22086169 + + + 140121697013760 + 16840158 + + + 140121568257024 + 11492846 + + + 140121701139456 + 5652655 + + + 140121702796288 + 44140817 + + + 140121697485824 + 38847831 + + + 140121567526912 + 33045585 + + + 140121697810432 + 441375 + + + 140121562103808 + 22012603 + + + 140121700912128 + 16365315 + + + 140121564462080 + 11318350 + + + 140121697285120 + 5941960 + + + 140121569286144 + 44247664 + + + 140121568002048 + 39004647 + + + 140121565787136 + 33882169 + + + 140121564726272 + 28651665 + + + 140121566946304 + 22917593 + + + 140121696054272 + 1501439 + + + 140121563737088 + 11557530 + + + 140121701739520 + 5894095 + + + 140121696526336 + 43654266 + + + 140121700695040 + 38518025 + + + 140121702483968 + 33156496 + + + 140121703717888 + 27628852 + + + 140121567877120 + 22447414 + + + 140121700767744 + 16742983 + + + 140121564232704 + 11298402 + + + 140121569950720 + 6144871 + + + 140121568228352 + 41831429 + + + 140121703851008 + 37139082 + + + 140121704122368 + 31388505 + + + 140121565891584 + 25958251 + + + 140121698121728 + 20954569 + + + 140121563490304 + 16229228 + + + 140121701343232 + 10793856 + + + 140121567900672 + 5323731 + + + 140121702745088 + 41012315 + + + 140121565754368 + 36132846 + + + 140121697090560 + 30967251 + + + 140121565258752 + 13943369 + + + 140121567134720 + 20245022 + + + 140121696131072 + 15371082 + + + 140121702166528 + 10367239 + + + 140121701009408 + 5252669 + + + 140121565049856 + 42241159 + + + 140121566227456 + 37617553 + + + 140121565072384 + 34648864 + + + 140121563073536 + 27473722 + + + 140121697884160 + 22381989 + + + 140121698424832 + 17137253 + + + 140121564578816 + 11090030 + + + 140121699614720 + 6027756 + + + 140121564683264 + 39903237 + + + 140121566440448 + 29927125 + + + 140121698503680 + 24823818 + + + 140121696179200 + 19826194 + + + 140121568259072 + 15187940 + + + 140121699057664 + 10911176 + + + 140121702507520 + 5601844 + + + 140121570895872 + 40849237 + + + 140121564466176 + 35945656 + + + 140121702054912 + 30939321 + + + 140121566152704 + 25512808 + + + 140121699545088 + 20272458 + + + 140121696985088 + 15476343 + + + 140121570051072 + 10442560 + + + 140121698695168 + 5400284 + + + 140121565257728 + 39514951 + + + 140121698225152 + 34061713 + + + 140121696998400 + 29451125 + + + 140121567034368 + 24673612 + + + 140121702040576 + 19967770 + + + 140121700198400 + 14991397 + + + 140121566629888 + 10213969 + + + 140121701885952 + 5027634 + + + 140121566216192 + 40971212 + + + 140121698462720 + 36266960 + + + 140121701320704 + 31399847 + + + 140121563959296 + 24180973 + + + 140121697554432 + 21021104 + + + 140121566894080 + 15536359 + + + 140121565625344 + 10313262 + + + 140121702170624 + 34136185 + + + 140121568672768 + 38882648 + + + 140121703067648 + 29115331 + + + 140121564765184 + 19503802 + + + 140121565286400 + 14004175 + + + 140121701808128 + 9383644 + + + 140121571172352 + 4999973 + + + 140121696854016 + 38506461 + + + 140121698387968 + 33386466 + + + 140121567893504 + 28898332 + + + 140121567792128 + 24030412 + + + 140121563994112 + 19506311 + + + 140121698992128 + 14308885 + + + 140121697921024 + 9556234 + + + 140121696456704 + 5173160 + + + 140121563503616 + 35001667 + + + 140121564009472 + 31071893 + + + 140121569087488 + 26547129 + + + 140121564868608 + 22459608 + + + 140121698456576 + 18299700 + + + 140121702868992 + 9570026 + + + 140121702410240 + 4781030 + + + 140121570070528 + 35515965 + + + 140121567650816 + 31326960 + + + 140121561931776 + 27102423 + + + 140121561944064 + 22494789 + + + 140121697480704 + 17458049 + + + 140121563837440 + 13517140 + + + 140121696250880 + 8881900 + + + 140121562377216 + 4548193 + + + 140121703830528 + 36879251 + + + 140121697207296 + 32030522 + + + 140121570599936 + 27592227 + + + 140121702650880 + 22354244 + + + 140121703197696 + 18243824 + + + 140121697883136 + 13720287 + + + 140121562634240 + 9570553 + + + 140121703795712 + 4815271 + + + 140121703353344 + 34363487 + + + 140121697512448 + 30588318 + + + 140121698046976 + 26305481 + + + 140121702603776 + 22653067 + + + 140121700630528 + 18929860 + + + 140121703696384 + 14683155 + + + 140121567645696 + 10357306 + + + 140121565177856 + 5622399 + + + 140121697330176 + 32994507 + + + 140121568114688 + 28755625 + + + 140121700392960 + 25017824 + + + 140121698561024 + 21086984 + + + 140121702780928 + 16856090 + + + 140121697675264 + 1398782 + + + 140121699376128 + 8067900 + + + 140121699282944 + 3938432 + + + 140121702243328 + 34972266 + + + 140121703686144 + 5414879 + + + 140121562791936 + 23049500 + + + 140121566723072 + 18690277 + + + 140121564569600 + 14468629 + + + 140121570584576 + 10413447 + + + 140121566284800 + 5892925 + + + 140121568629760 + 33540177 + + + 140121571174400 + 29449467 + + + 140121699494912 + 25379423 + + + 140121566342144 + 21398690 + + + 140121563571200 + 16902273 + + + 140121703605248 + 12659052 + + + 140121568479232 + 8591294 + + + 140121701564416 + 4623130 + + + 140121702426624 + 40199784 + + + 140121697183744 + 36226166 + + + 140121567883264 + 10011230 + + + 140121697747968 + 27063676 + + + 140121695728640 + 21878112 + + + 140121561868288 + 16905506 + + + 140121698903040 + 11875688 + + + 140121563944960 + 6327812 + + + 140121564692480 + 34232807 + + + 140121563255808 + 28985988 + + + 140121696203776 + 24335854 + + + 140121567539200 + 20458205 + + + 140121700514816 + 2717284 + + + 140121696230400 + 12014009 + + + 140121696833536 + 8196839 + + + 140121701752832 + 4089966 + + + 140121569760256 + 33605718 + + + 140121700135936 + 29206531 + + + 140121570845696 + 25122759 + + + 140121696260096 + 20688360 + + + 140121700518912 + 16873514 + + + 140121702833152 + 12546010 + + + 140121700933632 + 7955267 + + + 140121702847488 + 3977274 + + + 140121562542080 + 31979812 + + + 140121566400512 + 28011013 + + + 140121698051072 + 24138352 + + + 140121703668736 + 20241956 + + + 140121566993408 + 16285487 + + + 140121562059776 + 12090203 + + + 140121700680704 + 8158442 + + + 140121570042880 + 4267706 + + + 140121564773376 + 33222652 + + + 140121696577536 + 29758182 + + + 140121699382272 + 25060531 + + + 140121702318080 + 20960391 + + + 140121702727680 + 16299978 + + + 140121700672512 + 13053555 + + + 140121697855488 + 20176851 + + + 140121567983616 + 23789726 + + + 140121701892096 + 31669216 + + + 140121700793344 + 27949218 + + + 140121563237376 + 16614649 + + + 140121696548864 + 12845357 + + + 140121562877952 + 9670545 + + + 140121703560192 + 5408267 + + + 140121564268544 + 29488475 + + + 140121562832896 + 25962904 + + + 140121702452224 + 21932585 + + + 140121698279424 + 18219157 + + + 140121698550784 + 14595364 + + + 140121698224128 + 11128619 + + + 140121699572736 + 24911383 + + + 140121700308992 + 4168507 + + + 140121701526528 + 29016618 + + + 140121698239488 + 21570946 + + + 140121565619200 + 16890402 + + + 140121698353152 + 14209567 + + + 140121699324928 + 10836728 + + + 140121562352640 + 7581624 + + + 140121697653760 + 3981142 + + + 140121699623936 + 25995670 + + + 140121700039680 + 22403569 + + + 140121566074880 + 19599009 + + + 140121699526656 + 16543701 + + + 140121702690816 + 13298488 + + + 140121703273472 + 9925265 + + + 140121699463168 + 24046426 + + + 140121564214272 + 3274407 + + + 140121697881088 + 27284265 + + + 140121562513408 + 20598064 + + + 140121698684928 + 17268133 + + + 140121568475136 + 14343405 + + + 140121564760064 + 10549990 + + + 140121699604480 + 7059800 + + + 140121703383040 + 3459068 + + + 140121566374912 + 27166790 + + + 140121700646912 + 24219290 + + + 140121703633920 + 20968653 + + + 140121567164416 + 17741006 + + + 140121566633984 + 6870854 + + + 140121699273728 + 11134947 + + + 140121565469696 + 7591368 + + + 140121565907968 + 3910254 + + + 140121570490368 + 27073833 + + + 140121567062016 + 23946912 + + + 140121564560384 + 21013256 + + + 140121565652992 + 18020040 + + + 140121702268928 + 14604486 + + + 140121699005440 + 11195002 + + + 140121571207168 + 7365391 + + + 140121699034112 + 3856365 + + + 140121701351424 + 26389849 + + + 140121699957760 + 23228700 + + + 140121563662336 + 20123233 + + + 140121566621696 + 16703182 + + + 140121701561344 + 13370697 + + + 140121566238720 + 10029418 + + + 140121699971072 + 6566865 + + + 140121700032512 + 3342989 + + + 140121701417984 + 26639762 + + + 140121568947200 + 21917829 + + + 140121702301696 + 16870839 + + + 140121564417024 + 13436971 + + + 140121702098944 + 10176571 + + + 140121698857984 + 7167000 + + + 140121699046400 + 3976182 + + + 140121566539776 + 25178134 + + + 140121703215104 + 1004267 + + + 140121562575872 + 15617256 + + + 140121567614976 + 12702792 + + + 140121702994944 + 9678567 + + + 140121698447360 + 1567252 + + + 140121701918720 + 3361466 + + + 140121700653056 + 26339265 + + + 140121566770176 + 23164126 + + + 140121697224704 + 20231631 + + + 140121563555840 + 13686164 + + + 140121697778688 + 10254801 + + + 140121696745472 + 7406107 + + + 140121700193280 + 4195682 + + + 140121699421184 + 26143149 + + + 140121699295232 + 23098210 + + + 140121564256256 + 19689300 + + + 140121562924032 + 16473079 + + + 140121562022912 + 12895817 + + + 140121562403840 + 9443099 + + + 140121702574080 + 1213620 + + + 140121703886848 + 3663880 + + + 140121561937920 + 25802851 + + + 140121564022784 + 22808445 + + + 140121702290432 + 19779336 + + + 140121702984704 + 16241706 + + + 140121697610752 + 14627282 + + + 140121702993920 + 9605513 + + + 140121697289216 + 5801485 + + + 140121698861056 + 3121566 + + + 140121701134336 + 21837111 + + + 140121698301952 + 16876219 + + + 140121701507072 + 11331705 + + + 140121697265664 + 8740350 + + + 140121698393088 + 6352052 + + + 140121697219584 + 3711167 + + + 140121562449920 + 21110193 + + + 140121697787904 + 18395088 + + + 140121701088256 + 15930195 + + + 140121702491136 + 13453020 + + + 140121696967680 + 10603673 + + + 140121562594304 + 7998008 + + + 140121566674944 + 5490548 + + + 140121562323968 + 17628297 + + + 140121696521216 + 19904470 + + + 140121699235840 + 15309109 + + + 140121563499520 + 13113709 + + + 140121563294720 + 10626175 + + + 140121561897984 + 8023379 + + + 140121700142080 + 5524703 + + + 140121565093888 + 3281583 + + + 140121696753664 + 21147937 + + + 140121696835584 + 18189895 + + + 140121702356992 + 15402465 + + + 140121567202304 + 12708526 + + + 140121697735680 + 10339627 + + + 140121701790720 + 8145780 + + + 140121566676992 + 5719025 + + + 140121698369536 + 3342137 + + + 140121567049728 + 20731979 + + + 140121696869376 + 18394830 + + + 140121699063808 + 16312411 + + + 140121699118080 + 13949651 + + + 140121563012096 + 11532296 + + + 140121701734400 + 9156959 + + + 140121701824512 + 6655899 + + + 140121702851584 + 20141999 + + + 140121699995648 + 15553471 + + + 140121696279552 + 12508282 + + + 140121701070848 + 10365078 + + + 140121701032960 + 7782978 + + + 140121703041024 + 2910744 + + + 140121564680192 + 19830540 + + + 140121697164288 + 17467172 + + + 140121564666880 + 15427884 + + + 140121703609344 + 11214272 + + + 140121697073152 + 9824548 + + + 140121568669696 + 7452537 + + + 140121564657664 + 5339645 + + + 140121702525952 + 3230597 + + + 140121697630208 + 19826158 + + + 140121568962560 + 17203452 + + + 140121696604160 + 16514100 + + + 140121696696320 + 12768427 + + + 140121697361920 + 19295446 + + + 140121699476480 + 5623931 + + + 140121696850944 + 6005800 + + + 140121700475904 + 3744515 + + + 140121566484480 + 22465460 + + + 140121564195840 + 13218313 + + + 140121700985856 + 8171796 + + + 140121696428032 + 5481418 + + + 140121697670144 + 3294109 + + + 140121701163008 + 19138914 + + + 140121562242048 + 16635400 + + + 140121564587008 + 14257585 + + + 140121699856384 + 12036169 + + + 140121697033216 + 4241897 + + + 140121568946176 + 7301820 + + + 140121696391168 + 4813573 + + + 140121699043328 + 2624867 + + + 140121702554624 + 16304103 + + + 140121696327680 + 14215748 + + + 140121696544768 + 11970794 + + + 140121703131136 + 14043975 + + + 140121703913472 + 7154045 + + + 140121701620736 + 4562733 + + + 140121564972032 + 16244754 + + + 140121701127168 + 18736703 + + + 140121566319616 + 11954150 + + + 140121699030016 + 9565162 + + + 140121570857984 + 877616 + + + 140121700528128 + 5073281 + + + 140121702037504 + 2612436 + + + 140121566427136 + 16498687 + + + 140121561924608 + 13998322 + + + 140121567843328 + 12071531 + + + 140121567418368 + 9698702 + + + 140121565983744 + 7814590 + + + 140121563071488 + 6128534 + + + 140121703183360 + 3969133 + + + 140121567980544 + 2181668 + + + 140121566970880 + 14654820 + + + 140121562652672 + 12431990 + + + 140121700869120 + 10234184 + + + 140121564689408 + 8264057 + + + 140121563955200 + 6740022 + + + 140121697087488 + 1122960 + + + 140121699378176 + 3096687 + + + 140121701672960 + 1582761 + + + 140121702910976 + 15346137 + + + 140121567741952 + 13936477 + + + 140121565414400 + 12246834 + + + 140121702859776 + 10374854 + + + 140121565809664 + 8103960 + + + 140121696785408 + 5794408 + + + 140121563904000 + 4062291 + + + 140121700866048 + 2494745 + + + 140121696235520 + 13708215 + + + 140121701562368 + 12228175 + + + 140121701409792 + 10747584 + + + 140121565029376 + 9142988 + + + 140121701291008 + 7548479 + + + 140121698891776 + 5808922 + + + 140121697344512 + 3719771 + + + 140121702576128 + 2058516 + + + 140121563732992 + 12874508 + + + 140121702712320 + 13342693 + + + 140121703036928 + 11722104 + + + 140121700509696 + 9858308 + + + 140121701651456 + 8029676 + + + 140121702528000 + 6409926 + + + 140121561998336 + 8939997 + + + 140121566121984 + 14555374 + + + 140121697882112 + 11314082 + + + 140121697478656 + 9040956 + + + 140121700482048 + 5571961 + + + 140121567566848 + 3955450 + + + 140121700901888 + 2264295 + + + 140121702068224 + 14252778 + + + 140121569062912 + 12547569 + + + 140121696670720 + 10983528 + + + 140121563628544 + 1320860 + + + 140121564663808 + 7952639 + + + 140121703198720 + 2810841 + + + 140121562433536 + 4464019 + + + 140121699195904 + 2868791 + + + 140121562978304 + 14706633 + + + 140121703110656 + 12857638 + + + 140121563478016 + 9423833 + + + 140121561933824 + 7612765 + + + 140121702890496 + 6177916 + + + 140121698897920 + 4154722 + + + 140121569470464 + 2518816 + + + 140121570874368 + 16111868 + + + 140121564711936 + 14255508 + + + 140121567594496 + 11570561 + + + 140121701766144 + 9172674 + + + 140121696193536 + 7354943 + + + 140121562132480 + 5509297 + + + 140121563597824 + 3608866 + + + 140121566032896 + 1658382 + + + 140121566415872 + 13312583 + + + 140121701689344 + 11676592 + + + 140121566482432 + 10191739 + + + 140121562415104 + 8914913 + + + 140121563663360 + 7083178 + + + 140121569956864 + 5383903 + + + 140121696237568 + 3679052 + + + 140121701737472 + 1947821 + + + 140121564324864 + 14371770 + + + 140121562264576 + 12855578 + + + 140121697984512 + 11469608 + + + 140121564633088 + 8000982 + + + 140121703135232 + 6117010 + + + 140121696148480 + 4294963 + + + 140121562085376 + 2539918 + + + 140121564023808 + 12982363 + + + 140121567406080 + 11508344 + + + 140121703261184 + 9747040 + + + 140121697176576 + 8194133 + + + 140121698958336 + 6546499 + + + 140121565788160 + 5052137 + + + 140121562835968 + 10527206 + + + 140121567105024 + 2171598 + + + 140121565105152 + 12136930 + + + 140121567181824 + 7331691 + + + 140121567009792 + 5926500 + + + 140121698492416 + 4203260 + + + 140121565699072 + 2770640 + + + 140121566036992 + 1600556 + + + 140121698718720 + 9500516 + + + 140121701282816 + 7958322 + + + 140121571187712 + 5350186 + + + 140121700830208 + 4652418 + + + 140121700715520 + 4493014 + + + 140121562035200 + 6014704 + + + 140121698652160 + 2194856 + + + 140121697042432 + 6847807 + + + 140121699584000 + 8143025 + + + 140121570506752 + 4180351 + + + 140121565010944 + 3236190 + + + 140121698955264 + 2491379 + + + 140121696742400 + 11610546 + + + 140121702293504 + 10310597 + + + 140121564019712 + 514073 + + + 140121703309312 + 7143144 + + + 140121564707840 + 5573920 + + + 140121698028544 + 3932498 + + + 140121696585728 + 2774537 + + + 140121562624000 + 1387385 + + + 140121700896768 + 6116224 + + + 140121570837504 + 4973742 + + + 140121568119808 + 4258514 + + + 140121564070912 + 2868872 + + + 140121699172352 + 1881834 + + + 140121566089216 + 6774241 + + + 140121697651712 + 7470737 + + + 140121561877504 + 5730057 + + + 140121562343424 + 5019691 + + + 140121564402688 + 3501144 + + + 140121564020736 + 2592532 + + + 140121564084224 + 1898411 + + + 140121570590720 + 6182782 + + + 140121566191616 + 6847069 + + + 140121700340736 + 2160085 + + + 140121697742848 + 4267719 + + + 140121697088512 + 3310012 + + + 140121569220608 + 2656331 + + + 140121567543296 + 1562222 + + + 140121703510016 + 902548 + + + 140121565166592 + 7054800 + + + 140121701638144 + 6358788 + + + 140121564344320 + 2670079 + + + 140121697556480 + 4425074 + + + 140121565987840 + 2828441 + + + 140121566913536 + 2257689 + + + 140121703026688 + 1075284 + + + 140121702765568 + 7739620 + + + 140121699136512 + 6135976 + + + 140121699862528 + 5490226 + + + 140121699342336 + 4303019 + + + 140121565861888 + 3572173 + + + 140121701623808 + 1438277 + + + 140121562079232 + 1699218 + + + 140121569974272 + 1163928 + + + 140121700002816 + 5798841 + + + 140121702343680 + 5421594 + + + 140121563622400 + 4655143 + + + 140121562870784 + 3886461 + + + 140121562360832 + 3205604 + + + 140121698565120 + 2440725 + + + 140121700797440 + 1723368 + + + 140121700904960 + 5315522 + + + 140121561989120 + 4878431 + + + 140121703392256 + 4196763 + + + 140121696380928 + 3297397 + + + 140121697594368 + 2504111 + + + 140121562003456 + 1837989 + + + 140121700537344 + 3059512 + + + 140121564359680 + 3385484 + + + 140121565363200 + 3326902 + + + 140121567395840 + 2558477 + + + 140121703454720 + 1960566 + + + 140121697923072 + 1538733 + + + 140121564488704 + 905985 + + + 140121562058752 + 374509 + + + 140121698648064 + 4176821 + + + 140121697368064 + 3596012 + + + 140121697315840 + 2948442 + + + 140121696025600 + 2139711 + + + 140121701443584 + 1737416 + + + 140121699499008 + 1248573 + + + 140121697986560 + 4162061 + + + 140121564290048 + 3590882 + + + 140121563200512 + 3143086 + + + 140121701093376 + 2651721 + + + 140121567021056 + 2423466 + + + 140121697966080 + 1952738 + + + 140121562123264 + 1577602 + + + 140121696508928 + 3595700 + + + 140121696321536 + 3103092 + + + 140121563233280 + 2816057 + + + 140121699617792 + 2314917 + + + 140121565759488 + 1934781 + + + 140121696842752 + 1294507 + + + 140121562245120 + 900682 + + + 140121562317824 + 1666811 + + + 140121567512576 + 3459604 + + + 140121696990208 + 2858515 + + + 140121696736256 + 2239042 + + + 140121569284096 + 1707120 + + + 140121696574464 + 1362463 + + + 140121697305600 + 1162701 + + + 140121566387200 + 2577565 + + + 140121699470336 + 2717194 + + + 140121567978496 + 2656770 + + + 140121697694720 + 2572942 + + + 140121697823744 + 2590146 + + + 140121696917504 + 2553469 + + + 140121703054336 + 1565948 + + + 140121702200320 + 1211158 + + + 140121698286592 + 1168571 + + + 140121697123328 + 1098949 + + + 140121564205056 + 2532094 + + + 140121697024000 + 1480095 + + + 140121698988032 + 1459347 + + + 140121702517760 + 719995 + + + 140121570575360 + 2038612 + + + 140121562256384 + 2014659 + + + 140121703680000 + 1281061 + + + 140121702495232 + 1166750 + + + 140121701008384 + 1141793 + + + 140121701111808 + 349176 + + + 140121562865664 + 308478 + + + 140121703623680 + 2602892 + + + 140121565096960 + 2636215 + + + 140121700861952 + 2649089 + + + 140121562087424 + 2684123 + + + 140121700326400 + 2028926 + + + 140121562283008 + 2922511 + + + 140121564554240 + 1985743 + + + 140121696046080 + 1958338 + + + 140121569010688 + 1138520 + + + 140121562936320 + 1884953 + + + 140121702379520 + 1872566 + + + 140121567639552 + 1829040 + + + 140121701829632 + 969787 + + + 140121702660096 + 931788 + + + 140121566471168 + 1723616 + + + 140121701709824 + 1697369 + + + 140121702455296 + 823795 + + + 140121696154624 + 781515 + + + 140121564718080 + 1606137 + + + 140121567911936 + 708974 + + + 140121699372032 + 687527 + + + 140121697833984 + 658937 + + + 140121699092480 + 1501596 + + + 140121701729280 + 586196 + + + 140121696389120 + 554690 + + + 140121698294784 + 530202 + + + 140121701135360 + 1267040 + + + 140121562541056 + 1239347 + + + 140121696503808 + 393767 + + + 140121697639424 + 259931 + + + 140121698118656 + 3322202 + + + 140121699553280 + 3242745 + + + 140121569218560 + 3212381 + + + 140121696638976 + 3184783 + + + 140121564987392 + 3161248 + + + 140121703798784 + 3145831 + + + 140121702348800 + 2888207 + + + 140121698481152 + 2854117 + + + 140121564881920 + 2792264 + + + 140121699520512 + 2777399 + + + 140121566452736 + 2760182 + + + 140121567082496 + 2738596 + + + 140121565889536 + 2493650 + + + 140121565978624 + 2445403 + + + 140121566188544 + 2420640 + + + 140121567191040 + 2404008 + + + 140121699907584 + 2386781 + + + 140121703097344 + 2370167 + + + 140121565405184 + 2351585 + + + 140121701898240 + 2324299 + + + 140121703552000 + 2302943 + + + 140121696306176 + 2270262 + + + 140121564555264 + 2249040 + + + 140121569756160 + 2233693 + + + 140121700338688 + 2216578 + + + 140121566498816 + 2197599 + + + 140121696070656 + 2179012 + + + 140121697682432 + 2134096 + + + 140121697324032 + 2105010 + + + 140121562558464 + 2084603 + + + 140121703766016 + 2065949 + + + 140121569553408 + 1999759 + + + 140121699879936 + 1931064 + + + 140121700517888 + 1899122 + + + 140121696714752 + 1848081 + + + 140121698114560 + 1804362 + + + 140121566324736 + 1766319 + + + 140121703558144 + 1661153 + + + 140121702294528 + 1636327 + + + 140121567924224 + 1588936 + + + 140121698505728 + 1543370 + + + 140121702922240 + 1522378 + + + 140121696265216 + 1481638 + + + 140121564376064 + 1469247 + + + 140121565028352 + 1452509 + + + 140121566779392 + 1433725 + + + 140121702261760 + 1414368 + + + 140121697182720 + 1184027 + + + 140121563084800 + 1111653 + + + 140121565299712 + 1091398 + + + 140121697647616 + 1045806 + + + 140121698015232 + 1015528 + + + 140121699931136 + 1003207 + + + 140121697172480 + 986199 + + + 140121566206976 + 967007 + + + 140121699981312 + 935931 + + + 140121697587200 + 917109 + + + 140121700534272 + 883982 + + + 140121697335296 + 806335 + + + 140121703808000 + 786865 + + + 140121567138816 + 747282 + + + 140121700766720 + 720067 + + + 140121564723200 + 701793 + + + 140121703028736 + 669003 + + + 140121699854336 + 654532 + + + 140121700152320 + 634202 + + + 140121703462912 + 584510 + + + 140121700004864 + 567516 + + + 140121696395264 + 533733 + + + 140121567605760 + 486827 + + + 140121562990592 + 426898 + + + 140121567452160 + 392658 + + + + + + + + + + + + 140121999644672 + + 95104 + + + + 140121999645056 + + 93782 + + + + + + 140121999644672 + + 140121999645056 + 95104 + + + + 140121999645056 + + 140121999644672 + 93782 + + + + + + 140121999644672 + + 1 + + + + 140121999645056 + + 1 + + + + + + 140121999644672 + + 140121999645056 + 1 + + + + 140121999645056 + + 0 + 1 + + + + + 140121571600384 + 1 + + + 140121571164672 + 378 + + + 140121569859072 + 82 + + + 140121570731520 + 192 + + + 140121570937856 + 100 + + + 140121568525824 + 125 + + + 140121570677248 + 225 + + + 140121568505856 + 342 + + + 140121569187328 + 311 + + + 140121571423744 + 235 + + + 140121570478080 + 323 + + + 140121569621504 + 297 + + + 140121570731008 + 62 + + + 140121571644416 + 2 + + + 140121568517632 + 160 + + + 140121570954752 + 93 + + + 140121571703296 + 2 + + + 140121571597824 + 2 + + + 140121570697728 + 56 + + + 140121568558080 + 290 + + + 140121570975232 + 354 + + + 140121569154048 + 202 + + + 140121568828928 + 167 + + + 140121569816064 + 349 + + + 140121569594880 + 179 + + + 140121570426368 + 18 + + + 140121570959872 + 77 + + + 140121571764224 + 2 + + + 140121568574464 + 273 + + + 140121571421696 + 139 + + + 140121569864704 + 44 + + + 140121569835520 + 151 + + + 140121571701760 + 3 + + + 140121569180160 + 286 + + + 140121568880640 + 76 + + + 140121571110912 + 187 + + + 140121568881152 + 134 + + + 140121569661952 + 42 + + + 140121569126400 + 139 + + + 140121570750976 + 150 + + + 140121571121664 + 281 + + + 140121571604480 + 1 + + + 140121571150336 + 88 + + + 140121571622912 + 1 + + + 140121569860096 + 118 + + + 140121569856000 + 341 + + + 140121571146752 + 301 + + + 140121569640960 + 198 + + + 140121568892928 + 270 + + + 140121568509440 + 282 + + + 140121570478592 + 67 + + + 140121569167360 + 294 + + + 140121570442240 + 297 + + + 140121569640448 + 288 + + + 140121568514048 + 298 + + + 140121568543232 + 151 + + + 140121568868864 + 4 + + + 140121571448832 + 9 + + + 140121568277504 + 256 + + + 140121571645952 + 3 + + + 140121569835008 + 236 + + + 140121568553472 + 60 + + + 140121569605632 + 353 + + + 140121568518144 + 85 + + + 140121571125760 + 319 + + + 140121570409472 + 304 + + + 140121568795136 + 188 + + + 140121569611264 + 330 + + + 140121571597312 + 1 + + + 140121571149824 + 343 + + + 140121570452480 + 273 + + + 140121568499712 + 144 + + + 140121571140608 + 100 + + + 140121569575424 + 169 + + + 140121569843200 + 356 + + + 140121569172480 + 70 + + + 140121570393600 + 47 + + + 140121570723328 + 251 + + + 140121570958336 + 288 + + + 140121568278016 + 339 + + + 140121571396608 + 325 + diff --git a/probing-tools/systemtap/savina_xml_output/ThreadRing.XML b/probing-tools/systemtap/savina_xml_output/ThreadRing.XML new file mode 100644 index 000000000..e69de29bb diff --git a/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML b/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML new file mode 100644 index 000000000..9876368be --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML @@ -0,0 +1,1857 @@ + + + + + + + + + + + + + + + + + + + 139717030822912 + 7383301 + + + 139717030821888 + 7374515 + + + 139717030820864 + 7363444 + + + 139717030819840 + 7356630 + + + 139717030818816 + 7349797 + + + 139717030816768 + 7340283 + + + 139717030815744 + 7333341 + + + 139717030814720 + 7327757 + + + 139717030813696 + 7322298 + + + 139717030811648 + 7315173 + + + 139717030810624 + 7309466 + + + 139717030809600 + 7304236 + + + 139717030808576 + 7297370 + + + 139717030806528 + 7291554 + + + 139717030805504 + 7286237 + + + 139717030804480 + 7278971 + + + 139717030803456 + 7273490 + + + 139717030802432 + 7268441 + + + 139717030801408 + 7263193 + + + 139717030800384 + 7256182 + + + 139717030799360 + 7250762 + + + 139717030797312 + 7245211 + + + 139717030796288 + 7237942 + + + 139717030795264 + 7232414 + + + 139717030794240 + 7226993 + + + 139717030792192 + 7219900 + + + 139717030791168 + 7214385 + + + 139717030790144 + 7209079 + + + 139717030789120 + 7203503 + + + 139717030787072 + 7196349 + + + 139717030786048 + 7191283 + + + 139717030785024 + 7186071 + + + 139717030784000 + 7179614 + + + 139717030766592 + 7168656 + + + 139717030765568 + 7163721 + + + 139717030764544 + 7158679 + + + 139717030763520 + 7152079 + + + 139717030761472 + 7147002 + + + 139717030760448 + 7141764 + + + 139717030759424 + 7134008 + + + 139717030758400 + 7129088 + + + 139717030757376 + 7124200 + + + 139717030756352 + 7119353 + + + 139717030755328 + 7112754 + + + 139717030754304 + 7107756 + + + 139717030752256 + 7102503 + + + 139717030751232 + 7093692 + + + 139717030750208 + 7088699 + + + 139717030749184 + 7083649 + + + 139717030748160 + 7078770 + + + 139717030747136 + 7072161 + + + 139717030746112 + 7067166 + + + 139717030745088 + 7062096 + + + 139717030743040 + 7055247 + + + 139717030740992 + 7049431 + + + 139717030739968 + 7044365 + + + 139717030738944 + 7037598 + + + 139717030737920 + 7032647 + + + 139717030736896 + 7027744 + + + 139717030735872 + 7022771 + + + 139717030734848 + 7016212 + + + 139717030732800 + 7011207 + + + 139717030731776 + 7006377 + + + 139717030730752 + 6999958 + + + 139717030729728 + 6994917 + + + 139717030728704 + 6989882 + + + 139717030727680 + 6984871 + + + 139717030726656 + 6978379 + + + 139717030725632 + 6973520 + + + 139717030723584 + 6968560 + + + 139717030722560 + 6962081 + + + 139717030721536 + 6957116 + + + 139717030720512 + 6952229 + + + 139717030719488 + 6946930 + + + 139717030718464 + 6939511 + + + 139717030717440 + 6934141 + + + 139717030716416 + 6928846 + + + 139717030714368 + 6922201 + + + 139717030713344 + 6917042 + + + 139717030712320 + 6912061 + + + 139717030711296 + 6907089 + + + 139717030710272 + 6900628 + + + 139717030709248 + 6895668 + + + 139717030708224 + 6890711 + + + 139717030707200 + 6885693 + + + 139717030705152 + 6879199 + + + 139717030703104 + 6874160 + + + 139717030702080 + 6866060 + + + 139717030701056 + 6860924 + + + 139717030700032 + 6855916 + + + 139717030699008 + 6850970 + + + 139717030697984 + 6844434 + + + 139717030696960 + 6839376 + + + 139717030694912 + 6834261 + + + 139717030693888 + 6827318 + + + 139717030692864 + 6821877 + + + 139717030691840 + 6816558 + + + 139717030690816 + 6810619 + + + 139717030689792 + 6803245 + + + 139717030688768 + 6796087 + + + + + + 139717030822912 + + + 139717275489280 + + 5456806 + + + + 139717030821888 + + + 139717275489280 + + 41692 + + + + 139717030820864 + + + 139717275489280 + + 34511 + + + + 139717030819840 + + + 139717275489280 + + 34088 + + + + 139717030818816 + + + 139717275489280 + + 36029 + + + + 139717030816768 + + + 139717275489280 + + 751172 + + + + 139717030819840 + + + 139717275489280 + + 1 + + + + 139717030821888 + + + 139717275489280 + + 1 + + + + 139717030816768 + + + 139717275489280 + + 1 + + + + 139717030820864 + + + 139717275489280 + + 1 + + + + 139717030818816 + + + 139717275489280 + + 1 + + + + 139717030822912 + + + 139717275489280 + + 1 + + + + 139717030819840 + + 1 + + + + 139717030821888 + + 1 + + + + 139717030816768 + + 1 + + + + 139717030820864 + + 1 + + + + 139717030818816 + + 1 + + + + 139717030822912 + + 1 + + + + 139717275489280 + + 6 + + + + + + 139717275489280 + + + 139717030766592 + + 1 + + + + 139717275489280 + + + 139717030713344 + + 1 + + + + 139717275489280 + + + 139717030794240 + + 1 + + + + 139717275489280 + + + 139717030700032 + + 1 + + + + 139717275489280 + + + 139717030802432 + + 1 + + + + 139717275489280 + + + 139717030689792 + + 1 + + + + 139717275489280 + + + 139717030818816 + + 1 + + + + 139717275489280 + + + 139717030720512 + + 1 + + + + 139717275489280 + + + 139717030738944 + + 1 + + + + 139717275489280 + + + 139717030745088 + + 1 + + + + 139717275489280 + + + 139717030737920 + + 1 + + + + 139717275489280 + + + 139717030747136 + + 1 + + + + 139717275489280 + + + 139717030726656 + + 1 + + + + 139717275489280 + + + 139717030800384 + + 1 + + + + 139717275489280 + + + 139717030752256 + + 1 + + + + 139717275489280 + + + 139717030736896 + + 1 + + + + 139717275489280 + + + 139717030691840 + + 1 + + + + 139717275489280 + + + 139717030792192 + + 1 + + + + 139717275489280 + + + 139717030785024 + + 1 + + + + 139717275489280 + + + 139717030702080 + + 1 + + + + 139717275489280 + + + 139717030705152 + + 1 + + + + 139717275489280 + + + 139717030795264 + + 1 + + + + 139717275489280 + + + 139717030697984 + + 1 + + + + 139717275489280 + + + 139717030810624 + + 1 + + + + 139717275489280 + + + 139717030739968 + + 1 + + + + 139717275489280 + + + 139717030789120 + + 1 + + + + 139717275489280 + + + 139717030703104 + + 1 + + + + 139717275489280 + + + 139717030804480 + + 1 + + + + 139717275489280 + + + 139717030806528 + + 1 + + + + 139717275489280 + + + 139717030759424 + + 1 + + + + 139717275489280 + + + 139717030714368 + + 1 + + + + 139717275489280 + + + 139717030722560 + + 1 + + + + 139717275489280 + + + 139717030690816 + + 1 + + + + 139717275489280 + + + 139717030760448 + + 1 + + + + 139717275489280 + + + 139717030813696 + + 1 + + + + 139717275489280 + + + 139717030799360 + + 1 + + + + 139717275489280 + + + 139717030797312 + + 1 + + + + 139717275489280 + + + 139717030725632 + + 1 + + + + 139717275489280 + + + 139717030692864 + + 1 + + + + 139717275489280 + + + 139717030808576 + + 1 + + + + 139717275489280 + + + 139717030708224 + + 1 + + + + 139717275489280 + + + 139717030786048 + + 1 + + + + 139717275489280 + + + 139717030740992 + + 1 + + + + 139717275489280 + + + 139717030822912 + + 1 + + + + 139717275489280 + + + 139717030749184 + + 1 + + + + 139717275489280 + + + 139717030712320 + + 1 + + + + 139717275489280 + + + 139717030735872 + + 1 + + + + 139717275489280 + + + 139717030755328 + + 1 + + + + 139717275489280 + + + 139717030750208 + + 1 + + + + 139717275489280 + + + 139717030717440 + + 1 + + + + 139717275489280 + + + 139717030743040 + + 1 + + + + 139717275489280 + + + 139717030815744 + + 1 + + + + 139717275489280 + + + 139717030732800 + + 1 + + + + 139717275489280 + + + 139717030688768 + + 1 + + + + 139717275489280 + + + 139717030761472 + + 1 + + + + 139717275489280 + + + 139717030701056 + + 1 + + + + 139717275489280 + + + 139717030821888 + + 1 + + + + 139717275489280 + + + 139717030707200 + + 1 + + + + 139717275489280 + + + 139717030748160 + + 1 + + + + 139717275489280 + + + 139717030730752 + + 1 + + + + 139717275489280 + + + 139717030711296 + + 1 + + + + 139717275489280 + + + 139717030699008 + + 1 + + + + 139717275489280 + + + 139717030727680 + + 1 + + + + 139717275489280 + + + 139717030756352 + + 1 + + + + 139717275489280 + + + 139717030734848 + + 1 + + + + 139717275489280 + + + 139717030796288 + + 1 + + + + 139717275489280 + + + 139717030728704 + + 1 + + + + 139717275489280 + + + 139717030693888 + + 1 + + + + 139717275489280 + + + 139717030729728 + + 1 + + + + 139717275489280 + + + 139717030763520 + + 1 + + + + 139717275489280 + + + 139717030721536 + + 1 + + + + 139717275489280 + + + 139717030716416 + + 1 + + + + 139717275489280 + + + 139717030709248 + + 1 + + + + 139717275489280 + + + 139717030809600 + + 1 + + + + 139717275489280 + + + 139717030819840 + + 1 + + + + 139717275489280 + + + 139717030791168 + + 1 + + + + 139717275489280 + + + 139717030751232 + + 1 + + + + 139717275489280 + + + 139717030790144 + + 1 + + + + 139717275489280 + + + 139717030754304 + + 1 + + + + 139717275489280 + + + 139717030696960 + + 1 + + + + 139717275489280 + + + 139717030764544 + + 1 + + + + 139717275489280 + + + 139717030820864 + + 1 + + + + 139717275489280 + + + 139717030731776 + + 1 + + + + 139717275489280 + + + 139717030718464 + + 1 + + + + 139717275489280 + + + 139717030803456 + + 1 + + + + 139717275489280 + + + 139717030787072 + + 1 + + + + 139717275489280 + + + 139717030694912 + + 1 + + + + 139717275489280 + + + 139717030710272 + + 1 + + + + 139717275489280 + + + 139717030814720 + + 1 + + + + 139717275489280 + + + 139717030758400 + + 1 + + + + 139717275489280 + + + 139717030801408 + + 1 + + + + 139717275489280 + + + 139717030811648 + + 1 + + + + 139717275489280 + + + 139717030816768 + + 1 + + + + 139717275489280 + + + 139717030765568 + + 1 + + + + 139717275489280 + + + 139717030723584 + + 1 + + + + 139717275489280 + + + 139717030805504 + + 1 + + + + 139717275489280 + + + 139717030746112 + + 1 + + + + 139717275489280 + + + 139717030757376 + + 1 + + + + 139717275489280 + + + 139717030719488 + + 1 + + + + 139717275489280 + + + 139717030784000 + + 1 + + + + + + + + 139717569259520 + + 93 + + + + 139717569259904 + + 2 + + + + + + 139717569259520 + + 139717569259904 + 93 + + + + 139717569259904 + + 139717569259520 + 2 + + + + + + 139717569259520 + + 1 + + + + 139717569259904 + + 1 + + + + + + 139717569259520 + + 139717569259904 + 1 + + + + 139717569259904 + + 0 + 1 + + + + + 139717030921728 + 2 + + + 139717030920704 + 2 + + + 139717030848512 + 1 + + + 139717030844928 + 1 + + + 139717030904832 + 1 + + + 139717275489280 + 2 + + + 139717030827008 + 1 + + + 139717030914048 + 2 + + + 139717030831616 + 1 + + + 139717030865920 + 1 + + + 139717030916608 + 1 + + + 139717030859264 + 1 + + + 139717030924800 + 1 + + + 139717030835200 + 1 + + + 139717030922240 + 1 + + + 139717030870016 + 1 + + + 139717030866944 + 1 + + + 139717030868992 + 1 + + + 139717030854144 + 1 + + + 139717030864384 + 1 + + + 139717030910464 + 1 + + + 139717030920192 + 1 + + + 139717030857728 + 1 + + + 139717030830592 + 1 + + + 139717030921216 + 1 + + + 139717030911488 + 2 + + + 139717030841344 + 1 + + + 139717030932480 + 2 + + + 139717030908928 + 1 + + + 139717030836224 + 1 + + + 139717030858752 + 1 + + + 139717030913536 + 2 + + + 139717030853120 + 1 + + + 139717030905344 + 1 + + + 139717030915072 + 2 + + + 139717030831104 + 1 + + + 139717030826496 + 1 + + + 139717030929920 + 1 + + + 139717030836736 + 1 + + + 139717030930944 + 2 + + + 139717030860800 + 1 + + + 139717030848000 + 1 + + + 139717030837248 + 1 + + + 139717030916096 + 2 + + + 139717030932992 + 2 + + + 139717030832640 + 1 + + + 139717030832128 + 1 + + + 139717030855168 + 1 + + + 139717030930432 + 2 + + + 139717030825984 + 1 + + + 139717030922752 + 2 + + + 139717030870528 + 1 + + + 139717030850048 + 1 + + + 139717030865408 + 1 + + + 139717030846976 + 1 + + + 139717030913024 + 1 + + + 139717030909952 + 1 + + + 139717030856192 + 1 + + + 139717030858240 + 1 + + + 139717030919168 + 1 + + + 139717030907904 + 1 + + + 139717030871040 + 1 + + + 139717030914560 + 1 + + + 139717030909440 + 1 + + + 139717030929408 + 2 + + + 139717030910976 + 1 + + + 139717030833664 + 1 + + + 139717030861312 + 1 + + + 139717030924288 + 2 + + + 139717030843392 + 1 + + + 139717030860288 + 1 + + + 139717030919680 + 1 + + + 139717030842368 + 1 + + + 139717030908416 + 1 + + + 139717030915584 + 1 + + + 139717030849024 + 1 + + + 139717030835712 + 1 + + + 139717030838272 + 1 + + + 139717030869504 + 1 + + + 139717569261056 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/concdict.XML b/probing-tools/systemtap/savina_xml_output/concdict.XML new file mode 100644 index 000000000..cbb140620 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/concdict.XML @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 139648585160704 + + 1 + + + + 139648585161088 + + 3 + + + + + + 139648585160704 + + 139648585161088 + 1 + + + + 139648585161088 + + 139648585160704 + 3 + + + + + + 139648585160704 + + 1 + + + + 139648585161088 + + 1 + + + + + + 139648585160704 + + 139648585161088 + 1 + + + + 139648585161088 + + 139648585160704 + 1 + + + + + 139648157335552 + 2 + + + 139648585162240 + 1 + + + 139648291390464 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/fib.XML b/probing-tools/systemtap/savina_xml_output/fib.XML new file mode 100644 index 000000000..d260c1dde --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/fib.XML @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 139916710766976 + + 1 + + + + + + 139916710766976 + + 139916710766592 + 1 + + + + + + 139916710766592 + + 1 + + + + 139916710766976 + + 1 + + + + + + 139916710766592 + + 0 + 1 + + + + 139916710766976 + + 0 + 1 + + + + + 139916710768128 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/fjcreate.XML b/probing-tools/systemtap/savina_xml_output/fjcreate.XML new file mode 100644 index 000000000..e69de29bb diff --git a/probing-tools/systemtap/savina_xml_output/fjthrput.XML b/probing-tools/systemtap/savina_xml_output/fjthrput.XML new file mode 100644 index 000000000..c20cbe650 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/fjthrput.XML @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 139927817410560 + + 1 + + + + 139927817410944 + + 44125 + + + + + + 139927817410560 + + 139927817410944 + 1 + + + + 139927817410944 + + 139927817410560 + 44125 + + + + + + 139927817410560 + + 1 + + + + 139927817410944 + + 1 + + + + + + 139927817410560 + + 139927817410944 + 1 + + + + 139927817410944 + + 0 + 1 + + + + + 139927817412096 + 2 + + + 139927523638784 + 735 + + + 139927523570176 + 735 + + + 139927523635712 + 735 + + + 139927523616768 + 735 + + + 139927523634688 + 735 + + + 139927523628544 + 736 + + + 139927523619840 + 736 + + + 139927523575296 + 736 + + + 139927523567616 + 735 + + + 139927523563008 + 734 + + + 139927523629056 + 736 + + + 139927523564032 + 734 + + + 139927523571200 + 736 + + + 139927523559936 + 734 + + + 139927523614208 + 736 + + + 139927523563520 + 734 + + + 139927523574272 + 735 + + + 139927523610624 + 736 + + + 139927523611648 + 736 + + + 139927523635200 + 735 + + + 139927523617280 + 736 + + + 139927523625472 + 736 + + + 139927523621888 + 736 + + + 139927523564544 + 734 + + + 139927523569664 + 735 + + + 139927523612160 + 736 + + + 139927523625984 + 736 + + + 139927523566592 + 735 + + + 139927523614720 + 735 + + + 139927523638272 + 736 + + + 139927523568128 + 735 + + + 139927523573760 + 736 + + + 139927523576320 + 735 + + + 139927523572736 + 736 + + + 139927523622912 + 736 + + + 139927523615232 + 736 + + + 139927523618816 + 736 + + + 139927523620352 + 736 + + + 139927523574784 + 736 + + + 139927523619328 + 736 + + + 139927523618304 + 735 + + + 139927523628032 + 736 + + + 139927523629568 + 736 + + + 139927523561984 + 734 + + + 139927523573248 + 736 + + + 139927523623424 + 736 + + + 139927523626496 + 736 + + + 139927523611136 + 735 + + + 139927523559424 + 734 + + + 139927523565056 + 735 + + + 139927523570688 + 735 + + + 139927523634176 + 735 + + + 139927523562496 + 735 + + + 139927523624960 + 736 + + + 139927523617792 + 736 + + + 139927523613696 + 736 + + + 139927523561472 + 734 + + + 139927523622400 + 736 + + + 139927523567104 + 735 + + + 139927523575808 + 736 + + + diff --git a/probing-tools/systemtap/savina_xml_output/output.XML b/probing-tools/systemtap/savina_xml_output/output.XML new file mode 100644 index 000000000..3961f2f05 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/output.XML @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + 140697346967552 + 1778768247 + + + 140697346965504 + 1778756431 + + + 140697346962432 + 1778747485 + + + 140697346960384 + 1778385365 + + + + + + 140697346962432 + + + 140697640736768 + + 343739 + + + + 140697346967552 + + + 140697640736768 + + 1746597672 + + + + 140697346967552 + + + 140697346971136 + + 1746597937 + + + + 140697346967552 + + + 140697640736768 + + 1 + + + + 140697346962432 + + + 140697640736768 + + 1 + + + + 140697346967552 + + + 140697346971136 + + 1 + + + + 140697346967552 + + 2 + + + + 140697346962432 + + 1 + + + + 140697640736768 + + 2 + + + + 140697346971136 + + 1 + + + + + + 140697640736768 + + + 140697346962432 + + 1 + + + + 140697640736768 + + + 140697346967552 + + 1 + + + + 140697346971136 + + + 140697346967552 + + 1 + + + + + + 140697346967552 + + + 140697640736768 + + 1 + + + + + + 140697640741248 + + 1 + + + + + + 140697640741248 + + 140697640740864 + 1 + + + + + + 140697640740864 + + 1 + + + + 140697640741248 + + 1 + + + + + + 140697640740864 + + 0 + 1 + + + + 140697640741248 + + 0 + 1 + + + + + 140697346970624 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/pingpong.XML b/probing-tools/systemtap/savina_xml_output/pingpong.XML new file mode 100644 index 000000000..8328c1235 --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/pingpong.XML @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 140020443933056 + + 1 + + + + + + 140020443933056 + + 140020443932672 + 1 + + + + + + 140020443932672 + + 1 + + + + 140020443933056 + + 1 + + + + + + 140020443932672 + + 140020443933056 + 1 + + + + 140020443933056 + + 140020443932672 + 1 + + + + + 140020443934208 + 1 + + + diff --git a/probing-tools/systemtap/savina_xml_output/recmatmult.XML b/probing-tools/systemtap/savina_xml_output/recmatmult.XML new file mode 100644 index 000000000..7da70b38f --- /dev/null +++ b/probing-tools/systemtap/savina_xml_output/recmatmult.XML @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + 140343382242304 + 503048285 + + + 140343382240256 + 503046185 + + + 140343382237184 + 503043888 + + + 140343382236160 + 503051822 + + + 140343382235136 + 503050266 + + + 140343382234112 + 503048549 + + + 140343382233088 + 503047985 + + + 140343382231040 + 503044994 + + + 140343382230016 + 503044680 + + + 140343382228992 + 503042524 + + + 140343382227968 + 503041017 + + + 140343382226944 + 503039254 + + + 140343382225920 + 503038603 + + + 140343382224896 + 503036281 + + + 140343382206464 + 503028187 + + + 140343382204416 + 503026308 + + + 140343541706752 + 502916678 + + + 140343541702656 + 502903950 + + + 140343541701632 + 502892812 + + + 140343541700608 + 502883505 + + + 140343541699584 + 502874244 + + + 140343541698560 + 502864555 + + + 140343541696512 + 502852229 + + + 140343541679104 + 502840889 + + + + + + + + + + 140343382206464 + + 1 + + + + 140343382230016 + + 1 + + + + 140343382242304 + + 1 + + + + 140343382237184 + + 1 + + + + 140343382233088 + + 1 + + + + 140343382225920 + + 1 + + + + 140343382235136 + + 1 + + + + 140343382227968 + + 1 + + + + + + 140343835494400 + + 11 + + + + 140343835494784 + + 5 + + + + + + 140343835494400 + + 140343835494784 + 11 + + + + 140343835494784 + + 140343835494400 + 5 + + + + + + 140343835494400 + + 1 + + + + 140343835494784 + + 1 + + + + + + 140343835494400 + + 140343835494784 + 1 + + + + 140343835494784 + + 140343835494400 + 1 + + + + + 140343382266880 + 1 + + + 140343382261760 + 2 + + + 140343541723136 + 3 + + + 140343407669760 + 1 + + + 140343382254080 + 1 + + + 140343382253568 + 1 + + + 140343382262272 + 1 + + + 140343382253056 + 1 + + + 140343382267392 + 1 + + + 140343835495936 + 3 + + + 140343407669248 + 1 + + + From 2337d7e35e32e34affab63b4c6465388b8c7dddb Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Mon, 25 Mar 2019 20:21:09 +0100 Subject: [PATCH 69/77] Fixed issue with empty tags --- probing-tools/parser/parser.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/probing-tools/parser/parser.js b/probing-tools/parser/parser.js index 9c02e322e..a6211e22d 100644 --- a/probing-tools/parser/parser.js +++ b/probing-tools/parser/parser.js @@ -115,6 +115,9 @@ class Parser { case "actor-block-count": this.parseActorBlockCount(elements[key]); break; + case "0": + // Empty tag + break; default: console.log("Error: Unknown tag: " + key); break; From e8b434361021bf520391ddfd1be354fb09adba62 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Mon, 25 Mar 2019 20:41:11 +0100 Subject: [PATCH 70/77] Removed some files, cleaned up dtrace.d --- probing-tools/dtrace/dtrace.d | 41 +- probing-tools/systemtap/output.XML | 208 - probing-tools/systemtap/output.txt | 76 - .../savina_xml_output/BankTransaction.XML | 0 .../systemtap/savina_xml_output/Bug.XML | 0 .../ConcurrentSortedLinkedList.XML | 211 - .../systemtap/savina_xml_output/Counting.XML | 82 - .../savina_xml_output/DiningPhilosophers.XML | 78 - .../savina_xml_output/PiPrecision.XML | 179 - .../savina_xml_output/SleepingBarber.XML | 7993 ----------------- .../savina_xml_output/ThreadRing.XML | 0 .../TrapezoidalApproximation.XML | 1857 ---- .../systemtap/savina_xml_output/concdict.XML | 99 - .../systemtap/savina_xml_output/fib.XML | 78 - .../systemtap/savina_xml_output/fjcreate.XML | 0 .../systemtap/savina_xml_output/fjthrput.XML | 331 - .../systemtap/savina_xml_output/output.XML | 208 - .../systemtap/savina_xml_output/pingpong.XML | 78 - .../savina_xml_output/recmatmult.XML | 275 - 19 files changed, 23 insertions(+), 11771 deletions(-) delete mode 100644 probing-tools/systemtap/output.XML delete mode 100644 probing-tools/systemtap/output.txt delete mode 100644 probing-tools/systemtap/savina_xml_output/BankTransaction.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/Bug.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/Counting.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/PiPrecision.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/SleepingBarber.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/ThreadRing.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/concdict.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/fib.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/fjcreate.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/fjthrput.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/output.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/pingpong.XML delete mode 100644 probing-tools/systemtap/savina_xml_output/recmatmult.XML diff --git a/probing-tools/dtrace/dtrace.d b/probing-tools/dtrace/dtrace.d index 17916465f..f262e7b25 100644 --- a/probing-tools/dtrace/dtrace.d +++ b/probing-tools/dtrace/dtrace.d @@ -11,24 +11,12 @@ struct actor_info { uint32_t jumps; }; -struct diagnostics { - uint32_t steal_attempts; - uint32_t cpu_jumps; -}; - -struct diagnostics diagnostics; struct actor_info cpus[int64_t]; /* declare cpus as an associative array */ -int did_run_probe[string]; - -BEGIN { -} - pony$target:::actor-msg-send { @counts[probename] = count(); } -// arg[0] is scheduler, arg[1] is actor pony$target:::actor-scheduled { cpus[arg1].cpu = cpu; // current CPU of the actor } @@ -39,41 +27,44 @@ pony$target:::work-steal-successful { } @counts[probename] = count(); - @counts["work-steal-attempt"] = count(); @steal_success_count[arg0] = count(); @successful_steal_from_scheduler[arg0, arg1] = count(); @stolen_actor[arg2] = count(); + @counts["work-steal-attempt"] = count(); } pony$target:::work-steal-failure { - @counts["work-steal-attempt"] = count(); @counts[probename] = count(); @steal_fail_count[arg0] = count(); @failed_steal_from_scheduler[arg0, arg1] = count(); + @counts["work-steal-attempt"] = count(); } -encore$target:::closure-create {} - encore$target:::future-create { @counts[probename] = count(); - // Used for lifetime of a future + // Used in future-destroy to determine lifetime of a future future_create_starttime[arg1] = timestamp; } encore$target:::future-block { + // The actor ID is in the context (arg0), so we need to + // get it by copying the pony_ctx_t struct into kernel space ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; @counts[probename] = count(); @future_block[arg1] = count(); @actor_blocked[actorPointer] = count(); @future_blocked_actor[arg1, actorPointer] = count(); - // Used for duration of a block + // Used in future-unblock to determine duration of a block future_block_starttime[arg1, actorPointer] = timestamp; } encore$target:::future-unblock { + // The actor ID is in the context (arg0), so we need to + // get it by copying the pony_ctx_t struct into kernel space ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; + @counts[probename] = count(); @future_block_lifetime[arg1, actorPointer] = sum(timestamp - future_block_starttime[arg1, actorPointer]); } @@ -92,8 +83,11 @@ encore$target:::future-fulfil-end { } encore$target:::future-get { + // The actor ID is in the context (arg0), so we need to + // get it by copying the pony_ctx_t struct into kernel space ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); actorPointer = (uintptr_t)ctx->current; + @future_get[actorPointer, arg1] = count(); @counts[probename] = count(); } @@ -103,6 +97,15 @@ encore$target:::future-destroy { @future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); } +// These probes are disabled for now. If a program uses future chaining, +// we cannot determine the name of a method in the probe method-exit. +// The instruction copyinstr (which copies a string from user space) gets +// an error, for some unknown reason. Though, it works if the program does +// not chain futures! + +// NOTE: When enabling these probes, you need to uncomment their outputs +// as well below. + // encore$target:::method-entry { // ctx = (struct pony_ctx_t*)copyin(arg0, sizeof(struct pony_ctx_t)); // actorPointer = (uintptr_t)ctx->current; @@ -168,6 +171,7 @@ END { printa("\t\n\t\t%d\n\t\t%@u\n\t\n", @stolen_actor); printf("\n"); + // Uncomment these lines when using the method-entry/exit probes // printf("\n"); // printa("\t\n\t\t\n\t\t\t%d\n\t\t\n\t\t%s\n\t\t%@u\n\t\n", @function_time); // printf(""); @@ -227,6 +231,7 @@ END { printf("Actor id\t\tTimes stolen\n"); printa("%d\t\t%@2u\n", @stolen_actor); + // Uncomment these lines when using the method-entry/exit probes // printf("\n//---------- METHODS ------------//\n"); // // printf("\n--- Time spent in methods\n"); diff --git a/probing-tools/systemtap/output.XML b/probing-tools/systemtap/output.XML deleted file mode 100644 index 3961f2f05..000000000 --- a/probing-tools/systemtap/output.XML +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - - - - - - - - 140697346967552 - 1778768247 - - - 140697346965504 - 1778756431 - - - 140697346962432 - 1778747485 - - - 140697346960384 - 1778385365 - - - - - - 140697346962432 - - - 140697640736768 - - 343739 - - - - 140697346967552 - - - 140697640736768 - - 1746597672 - - - - 140697346967552 - - - 140697346971136 - - 1746597937 - - - - 140697346967552 - - - 140697640736768 - - 1 - - - - 140697346962432 - - - 140697640736768 - - 1 - - - - 140697346967552 - - - 140697346971136 - - 1 - - - - 140697346967552 - - 2 - - - - 140697346962432 - - 1 - - - - 140697640736768 - - 2 - - - - 140697346971136 - - 1 - - - - - - 140697640736768 - - - 140697346962432 - - 1 - - - - 140697640736768 - - - 140697346967552 - - 1 - - - - 140697346971136 - - - 140697346967552 - - 1 - - - - - - 140697346967552 - - - 140697640736768 - - 1 - - - - - - 140697640741248 - - 1 - - - - - - 140697640741248 - - 140697640740864 - 1 - - - - - - 140697640740864 - - 1 - - - - 140697640741248 - - 1 - - - - - - 140697640740864 - - 0 - 1 - - - - 140697640741248 - - 0 - 1 - - - - - 140697346970624 - 1 - - - diff --git a/probing-tools/systemtap/output.txt b/probing-tools/systemtap/output.txt deleted file mode 100644 index a4161b0bd..000000000 --- a/probing-tools/systemtap/output.txt +++ /dev/null @@ -1,76 +0,0 @@ ---- DATA FROM PROBING --- ---- COUNTS --- -future-chaining 1 -future-block 3 -future-create 4 -future-destroy 4 -future-fulfil-start 4 -future-fulfil-end 4 -future-get 3 -future-unblock 3 -actor-msg-send 9 -work-steal-failure 2 -work-steal-successful 1 -work-steal-attempt 3 -core-switches: 1 - ---- LIFETIME OF FUTURE --- -Future Addr Lifetime (nanoseconds) -140095472601088 1778991618 -140095472599040 1778981681 -140095472595968 1778973251 -140095472593920 1778631770 - ---- LIFETIME OF A FUTURE BLOCK --- -Future Addr Actor Addr Lifetime (nanoseconds) -140095472595968 140095766370304 323684 -140095472601088 140095766370304 1744147271 -140095472601088 140095472604672 1744147893 - ----NUMBER OF TIMES ACTOR CALLS GET ON FUTURE--- -Actor addr Future Addr Count -140095766370304 140095472595968 1 -140095766370304 140095472601088 1 -140095472604672 140095472601088 1 - ---- WHAT FUTURE BLOCKED WHAT ACTOR --- -Future Addr Actorr Addr Count -140095472595968 140095766370304 1 -140095472601088 140095472604672 1 -140095472601088 140095766370304 1 - ---- NUMBER OF TIMES AN ACTOR IS BLOCKED --- -Actor Addr Count -140095472604672 1 -140095766370304 2 - ---- NUMBER OF TIMES A FUTURE BLOCKS --- -Future Addr Count -140095472595968 1 -140095472601088 2 - ---- WHAT FUTURES CHAINES AT WHAT ACTOR --- -Actor Addr Future Addr Count -140095766370304 140095472601088 1 - ----SUCCESSFUL STEALS--- -Scheduler Count -140095766374784 1 - ----FAILED STEALS--- -Scheduler Count -140095766374400 1 -140095766374784 1 - ----STEALS BETWEEN SCHEDULERS--- -Stolen by Stolen from Count -140095766374784 140095766374400 1 - ----FAILS BETWEEN SCHEDULERS--- -Attempted by Target Count -140095766374400 140095766374784 1 -140095766374784 0 1 - ----STOLEN ACTORS--- -Actor ID Times Stolen -140095472604160 1 diff --git a/probing-tools/systemtap/savina_xml_output/BankTransaction.XML b/probing-tools/systemtap/savina_xml_output/BankTransaction.XML deleted file mode 100644 index e69de29bb..000000000 diff --git a/probing-tools/systemtap/savina_xml_output/Bug.XML b/probing-tools/systemtap/savina_xml_output/Bug.XML deleted file mode 100644 index e69de29bb..000000000 diff --git a/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML b/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML deleted file mode 100644 index 62b374703..000000000 --- a/probing-tools/systemtap/savina_xml_output/ConcurrentSortedLinkedList.XML +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 140153975052288 - - 1 - - - - 140153975052672 - - 34 - - - - - - 140153975052288 - - 140153975052672 - 1 - - - - 140153975052672 - - 140153975052288 - 34 - - - - - - 140153975052288 - - 1 - - - - 140153975052672 - - 1 - - - - - - 140153975052288 - - 0 - 1 - - - - 140153975052672 - - 0 - 1 - - - - - 140153681259520 - 2 - - - 140153681282048 - 1 - - - 140153681250816 - 2 - - - 140153681270784 - 1 - - - 140153681269760 - 1 - - - 140153681267200 - 1 - - - 140153681246208 - 1 - - - 140153681264128 - 1 - - - 140153681265152 - 1 - - - 140153681272832 - 1 - - - 140153681264640 - 1 - - - 140153681250304 - 1 - - - 140153681267712 - 1 - - - 140153681271296 - 1 - - - 140153681233408 - 2 - - - 140153681263616 - 1 - - - 140153681266688 - 1 - - - 140153681278464 - 1 - - - 140153681241088 - 1 - - - 140153681270272 - 1 - - - 140153681229312 - 1 - - - 140153681279488 - 1 - - - 140153681278976 - 1 - - - 140153681268224 - 1 - - - 140153681273344 - 1 - - - 140153681241600 - 1 - - - 140153681282560 - 1 - - - 140153681277952 - 1 - - - 140153681237504 - 1 - - - 140153681223680 - 1 - - - 140153681446912 - 2 - - - diff --git a/probing-tools/systemtap/savina_xml_output/Counting.XML b/probing-tools/systemtap/savina_xml_output/Counting.XML deleted file mode 100644 index fb244cfbf..000000000 --- a/probing-tools/systemtap/savina_xml_output/Counting.XML +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 140008028088704 - - 3 - - - - - - 140008028088704 - - 140008028088320 - 3 - - - - - - 140008028088320 - - 1 - - - - 140008028088704 - - 1 - - - - - - 140008028088320 - - 140008028088704 - 1 - - - - 140008028088704 - - 0 - 1 - - - - - 140007734318080 - 2 - - - 140008028084224 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML b/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML deleted file mode 100644 index 83963130a..000000000 --- a/probing-tools/systemtap/savina_xml_output/DiningPhilosophers.XML +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139881285364096 - - 1 - - - - - - 139881285364096 - - 139881285363712 - 1 - - - - - - 139881285363712 - - 1 - - - - 139881285364096 - - 1 - - - - - - 139881285363712 - - 139881285364096 - 1 - - - - 139881285364096 - - 0 - 1 - - - - - 139881285365248 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/PiPrecision.XML b/probing-tools/systemtap/savina_xml_output/PiPrecision.XML deleted file mode 100644 index 131392590..000000000 --- a/probing-tools/systemtap/savina_xml_output/PiPrecision.XML +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139980084303872 - - 52 - - - - 139980084304256 - - 30 - - - - - - 139980084303872 - - 139980084304256 - 52 - - - - 139980084304256 - - 139980084303872 - 30 - - - - - - 139980084303872 - - 1 - - - - 139980084304256 - - 1 - - - - - - 139980084303872 - - 0 - 1 - - - - 139980084304256 - - 0 - 1 - - - - - 139979656429568 - 2 - - - 139979656435200 - 5 - - - 139979656444416 - 4 - - - 139979656433664 - 2 - - - 139979656436224 - 3 - - - 139979656434688 - 5 - - - 139979656434176 - 3 - - - 139979656445952 - 5 - - - 139979656430080 - 5 - - - 139979656429056 - 4 - - - 139979656428544 - 3 - - - 139979656437760 - 3 - - - 139979656426496 - 1 - - - 139979790532608 - 3 - - - 139979656432640 - 3 - - - 139980084305408 - 2 - - - 139979656443904 - 2 - - - 139979656442880 - 4 - - - 139979656435712 - 4 - - - 139979656438272 - 6 - - - 139979656433152 - 3 - - - 139979656446464 - 4 - - - 139979656443392 - 6 - - - diff --git a/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML b/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML deleted file mode 100644 index 660e82736..000000000 --- a/probing-tools/systemtap/savina_xml_output/SleepingBarber.XML +++ /dev/null @@ -1,7993 +0,0 @@ - - - - - - - - - - - - - - - - - - - 140121705866240 - 3118739677 - - - 140121705864192 - 3118693846 - - - 140121705862144 - 3118688045 - - - 140121705861120 - 3118680236 - - - 140121705860096 - 3118667813 - - - 140121705857024 - 3118656711 - - - 140121705856000 - 3118643762 - - - 140121705854976 - 3118633900 - - - 140121705853952 - 3118628686 - - - 140121705852928 - 3118622545 - - - 140121705850880 - 3118610588 - - - 140121705849856 - 3118602725 - - - 140121705848832 - 3118596859 - - - 140121705847808 - 3118587801 - - - 140121705846784 - 3118581462 - - - 140121705845760 - 3118574562 - - - 140121705843712 - 3118564978 - - - 140121705842688 - 3118555395 - - - 140121705840640 - 3118546984 - - - 140121705839616 - 3118536633 - - - 140121705838592 - 3118527764 - - - 140121705837568 - 3118518245 - - - 140121705836544 - 3118508750 - - - 140121705835520 - 3118497656 - - - 140121705834496 - 3118493486 - - - 140121705833472 - 3118483059 - - - 140121705831424 - 3118470926 - - - 140121705830400 - 3118466473 - - - 140121705829376 - 3118456934 - - - 140121705828352 - 3118449188 - - - 140121705827328 - 3118442262 - - - 140121705826304 - 3118435910 - - - 140121705825280 - 3118430875 - - - 140121705807872 - 3118410964 - - - 140121705805824 - 3118374447 - - - 140121705772032 - 3118366890 - - - 140121705771008 - 3118359455 - - - 140121705769984 - 3118346206 - - - 140121705768960 - 3118340092 - - - 140121705767936 - 3118336483 - - - 140121705766912 - 3118330410 - - - 140121705765888 - 3118320211 - - - 140121705763840 - 3118311220 - - - 140121705762816 - 3118303311 - - - 140121705761792 - 3118288925 - - - 140121705760768 - 3118283086 - - - 140121705759744 - 3118275231 - - - 140121705758720 - 3118266472 - - - 140121705756672 - 3118254811 - - - 140121705755648 - 3118247348 - - - 140121705753600 - 3118235514 - - - 140121705752576 - 3118226694 - - - 140121705751552 - 3118220341 - - - 140121705750528 - 3118214826 - - - 140121705749504 - 3118208270 - - - 140121705748480 - 3118197811 - - - 140121705747456 - 3118193134 - - - 140121705746432 - 3118186615 - - - 140121705744384 - 3118176601 - - - 140121705743360 - 3118168858 - - - 140121705742336 - 3118162778 - - - 140121705741312 - 3118154387 - - - 140121705740288 - 3118146468 - - - 140121705739264 - 3118139083 - - - 140121705738240 - 3118128990 - - - 140121705737216 - 3118117938 - - - 140121705735168 - 3118111390 - - - 140121705734144 - 3118101731 - - - 140121705733120 - 3118095148 - - - 140121705732096 - 3118084820 - - - 140121705731072 - 3118074564 - - - 140121705730048 - 3118068191 - - - 140121705729024 - 3118056968 - - - 140121705728000 - 3118050845 - - - 140121705725952 - 3118042967 - - - 140121705724928 - 3118031263 - - - 140121705723904 - 3118026907 - - - 140121705722880 - 3118022857 - - - 140121705721856 - 3118012804 - - - 140121705720832 - 3118004861 - - - 140121705718784 - 3117996004 - - - 140121705717760 - 3117991835 - - - 140121705715712 - 3117985062 - - - 140121705714688 - 3117977820 - - - 140121705713664 - 3117967928 - - - 140121705712640 - 3117960936 - - - 140121705711616 - 3117950895 - - - 140121705710592 - 3117941614 - - - 140121705709568 - 3117934946 - - - 140121705708544 - 3117926078 - - - 140121705706496 - 3117921462 - - - 140121705705472 - 3117913186 - - - 140121705704448 - 3117899391 - - - 140121705703424 - 3117890661 - - - 140121705702400 - 3117880641 - - - 140121705701376 - 3117872316 - - - 140121705700352 - 3117864795 - - - 140121705699328 - 3117856365 - - - 140121705697280 - 3117851848 - - - 140121705696256 - 3117845004 - - - 140121705695232 - 3117838620 - - - 140121705694208 - 3117833375 - - - 140121705693184 - 3117827635 - - - 140121705692160 - 3117819072 - - - 140121705691136 - 3117813831 - - - 140121705690112 - 3117806793 - - - 140121705688064 - 3117798467 - - - 140121705687040 - 3117790767 - - - 140121705686016 - 3117784862 - - - 140121705684992 - 3117779388 - - - 140121705683968 - 3117772204 - - - 140121705682944 - 3117764924 - - - 140121705680896 - 3117757586 - - - 140121705679872 - 3117744519 - - - 140121705677824 - 3117738703 - - - 140121705676800 - 3117729850 - - - 140121705675776 - 3117722820 - - - 140121705674752 - 3117716521 - - - 140121705673728 - 3117708774 - - - 140121705672704 - 3117700379 - - - 140121705671680 - 3117694249 - - - 140121705670656 - 3117685624 - - - 140121705668608 - 3117678716 - - - 140121705667584 - 3117663161 - - - 140121705666560 - 3117658019 - - - 140121705665536 - 3117643895 - - - 140121705664512 - 3117636975 - - - 140121705663488 - 3117619160 - - - 140121705662464 - 3117608792 - - - 140121705661440 - 3117599967 - - - 140121705659392 - 3117590568 - - - 140121705658368 - 3117582239 - - - 140121705657344 - 3117573527 - - - 140121705656320 - 3117564552 - - - 140121705655296 - 3117550251 - - - 140121705654272 - 3117543078 - - - 140121705653248 - 3117534189 - - - 140121705652224 - 3117527527 - - - 140121705650176 - 3117516900 - - - 140121705649152 - 3117509906 - - - 140121705648128 - 3117505474 - - - 140121705647104 - 3117492144 - - - 140121705646080 - 3117487861 - - - 140121705645056 - 3117477323 - - - 140121705643008 - 3117466165 - - - 140121705641984 - 3117460218 - - - 140121705639936 - 3117455203 - - - 140121705638912 - 3117444172 - - - 140121705637888 - 3117435902 - - - 140121705636864 - 3117428648 - - - 140121705635840 - 3117418032 - - - 140121705634816 - 3117405741 - - - 140121705633792 - 3117400392 - - - 140121705632768 - 3117390537 - - - 140121705630720 - 3117377933 - - - 140121705629696 - 3117367705 - - - 140121705628672 - 3117362731 - - - 140121705627648 - 3117354642 - - - 140121705626624 - 3117348239 - - - 140121705625600 - 3117341155 - - - 140121705624576 - 3117330916 - - - 140121705623552 - 3117326191 - - - 140121705621504 - 3117316578 - - - 140121705620480 - 3117309284 - - - 140121705619456 - 3117298635 - - - 140121705618432 - 3117290873 - - - 140121705617408 - 3117285311 - - - 140121705616384 - 3117277695 - - - 140121705615360 - 3117272373 - - - 140121705614336 - 3117259211 - - - 140121705612288 - 3117249370 - - - 140121705611264 - 3117242809 - - - 140121705610240 - 3117232990 - - - 140121705609216 - 3117227430 - - - 140121705608192 - 3117218032 - - - 140121705607168 - 3117213620 - - - 140121705605120 - 3117205031 - - - 140121705604096 - 3117200247 - - - 140121705602048 - 3117187319 - - - 140121705601024 - 3117181603 - - - 140121705600000 - 3117174834 - - - 140121705598976 - 3117169532 - - - 140121705597952 - 3117160988 - - - 140121705596928 - 3117157198 - - - 140121705595904 - 3117150670 - - - 140121705594880 - 3117145766 - - - 140121705592832 - 3117137255 - - - 140121705591808 - 3117133108 - - - 140121705590784 - 3117101987 - - - 140121705589760 - 3117084031 - - - 140121705588736 - 3117077775 - - - 140121705587712 - 3117073618 - - - 140121705586688 - 3117068340 - - - 140121705585664 - 3117056318 - - - 140121705583616 - 3117047277 - - - 140121705582592 - 3117039430 - - - 140121705581568 - 3117030724 - - - 140121705580544 - 3117024013 - - - 140121705579520 - 3117019480 - - - 140121705578496 - 3117010395 - - - 140121705577472 - 3117001350 - - - 140121705576448 - 3116996191 - - - 140121705574400 - 3116991547 - - - 140121705573376 - 3116978994 - - - 140121705572352 - 3116971726 - - - 140121705571328 - 3116962329 - - - 140121705570304 - 3116951680 - - - 140121705569280 - 3116943679 - - - 140121705567232 - 3116938055 - - - 140121705566208 - 3116929676 - - - 140121705564160 - 3116923052 - - - 140121705563136 - 3116919508 - - - 140121705562112 - 3116910444 - - - 140121705561088 - 3116903521 - - - 140121705560064 - 3116896604 - - - 140121705559040 - 3116890164 - - - 140121705558016 - 3116881078 - - - 140121705556992 - 3116872897 - - - 140121705554944 - 3116865112 - - - 140121705553920 - 3116855970 - - - 140121705552896 - 3116845170 - - - 140121705551872 - 3116840402 - - - 140121705550848 - 3116836139 - - - 140121705549824 - 3116828051 - - - 140121705548800 - 3116820068 - - - 140121705547776 - 3116813533 - - - 140121705545728 - 3116806450 - - - 140121705544704 - 3116796655 - - - 140121705543680 - 3116791360 - - - 140121705542656 - 3116782973 - - - 140121705541632 - 3116774392 - - - 140121705540608 - 3116764049 - - - 140121705539584 - 3116757366 - - - 140121705538560 - 3116752152 - - - 140121705536512 - 3116743126 - - - 140121705535488 - 3116734674 - - - 140121705534464 - 3116730879 - - - 140121705533440 - 3116723765 - - - 140121705532416 - 3116713337 - - - 140121705531392 - 3116707002 - - - 140121705529344 - 3116698918 - - - 140121705528320 - 3116686422 - - - 140121705526272 - 3116681029 - - - 140121705525248 - 3116675754 - - - 140121705524224 - 3116663759 - - - 140121705523200 - 3116654797 - - - 140121705522176 - 3116644717 - - - 140121705521152 - 3116636252 - - - 140121705520128 - 3116625685 - - - 140121705519104 - 3116616477 - - - 140121705517056 - 3116605959 - - - 140121705516032 - 3116593282 - - - 140121705515008 - 3116584835 - - - 140121705513984 - 3116579597 - - - 140121705512960 - 3116571711 - - - 140121705511936 - 3116559307 - - - 140121705510912 - 3116554608 - - - 140121705378816 - 3116489527 - - - 140121705376768 - 3116482170 - - - 140121705375744 - 3116474074 - - - 140121705374720 - 3116463998 - - - 140121705373696 - 3116454066 - - - 140121705372672 - 3116445100 - - - 140121705371648 - 3116437593 - - - 140121705370624 - 3116429525 - - - 140121705369600 - 3116420301 - - - 140121705367552 - 3116407151 - - - 140121705366528 - 3116402433 - - - 140121705365504 - 3116395337 - - - 140121705364480 - 3116388048 - - - 140121705363456 - 3116381989 - - - 140121705361408 - 3116374677 - - - 140121705360384 - 3116363339 - - - 140121705359360 - 3116354321 - - - 140121705357312 - 3116344999 - - - 140121705356288 - 3116330648 - - - 140121705355264 - 3116326634 - - - 140121705354240 - 3116321669 - - - 140121705353216 - 3116312646 - - - 140121705352192 - 3116301077 - - - 140121705351168 - 3116296221 - - - 140121705350144 - 3116287545 - - - 140121705348096 - 3116276554 - - - 140121705347072 - 3116267114 - - - 140121705346048 - 3116257476 - - - 140121705345024 - 3116249791 - - - 140121705344000 - 3116241627 - - - 140121705342976 - 3116232270 - - - 140121705341952 - 3116226237 - - - 140121705340928 - 3116216559 - - - 140121705338880 - 3116203034 - - - 140121705337856 - 3116194090 - - - 140121705336832 - 3116183747 - - - 140121705335808 - 3116176141 - - - 140121705334784 - 3116167146 - - - 140121705333760 - 3116159083 - - - 140121705332736 - 3116152543 - - - 140121705331712 - 3116140118 - - - 140121705329664 - 3116132951 - - - 140121705328640 - 3116128420 - - - 140121705327616 - 3116120115 - - - 140121705326592 - 3116110268 - - - 140121705325568 - 3116102878 - - - 140121705323520 - 3116094829 - - - 140121705322496 - 3116085822 - - - 140121705321472 - 3116076745 - - - 140121705319424 - 3116063633 - - - 140121705318400 - 3116055619 - - - 140121705317376 - 3116049154 - - - 140121705316352 - 3116040088 - - - 140121705315328 - 3116028642 - - - 140121705314304 - 3116022039 - - - 140121705313280 - 3116012176 - - - 140121705312256 - 3116002047 - - - 140121705310208 - 3115989709 - - - 140121705309184 - 3115984573 - - - 140121705308160 - 3115976781 - - - 140121705307136 - 3115969953 - - - 140121705306112 - 3115964457 - - - 140121705305088 - 3115956911 - - - 140121705304064 - 3115950772 - - - 140121705303040 - 3115943095 - - - 140121705300992 - 3115932932 - - - 140121705299968 - 3115925127 - - - 140121705298944 - 3115914594 - - - 140121705297920 - 3115907815 - - - 140121705296896 - 3115900434 - - - 140121705295872 - 3115892435 - - - 140121705294848 - 3115881726 - - - 140121705293824 - 3115875655 - - - 140121705291776 - 3115865324 - - - 140121705290752 - 3115854135 - - - 140121705289728 - 3115845513 - - - 140121705288704 - 3115836436 - - - 140121705287680 - 3115826562 - - - 140121705285632 - 3115813357 - - - 140121705284608 - 3115802729 - - - 140121705283584 - 3115794484 - - - 140121705281536 - 3115784512 - - - 140121705280512 - 3115778601 - - - 140121705279488 - 3115769934 - - - 140121705278464 - 3115757311 - - - 140121705277440 - 3115746602 - - - 140121705276416 - 3115737809 - - - 140121705275392 - 3115730313 - - - 140121705274368 - 3115721390 - - - 140121705272320 - 3115714918 - - - 140121705271296 - 3115705002 - - - 140121705270272 - 3115695048 - - - 140121705269248 - 3115690411 - - - 140121705268224 - 3115684082 - - - 140121705267200 - 3115675152 - - - 140121705266176 - 3115664651 - - - 140121705265152 - 3115656944 - - - 140121705263104 - 3115647264 - - - 140121705262080 - 3115637041 - - - 140121705261056 - 3115627809 - - - 140121705260032 - 3115623130 - - - 140121705259008 - 3115616066 - - - 140121705257984 - 3115603260 - - - 140121705256960 - 3115593968 - - - 140121705255936 - 3115585200 - - - 140121705253888 - 3115576387 - - - 140121705252864 - 3115571901 - - - 140121705251840 - 3115564793 - - - 140121705250816 - 3115555854 - - - 140121705249792 - 3115546859 - - - 140121705247744 - 3115538716 - - - 140121705246720 - 3115530504 - - - 140121705245696 - 3115519219 - - - 140121705243648 - 3115513618 - - - 140121705242624 - 3115505018 - - - 140121705241600 - 3115490490 - - - 140121705240576 - 3115483361 - - - 140121705239552 - 3115474398 - - - 140121705238528 - 3115466847 - - - 140121705237504 - 3115456291 - - - 140121705236480 - 3115445802 - - - 140121705234432 - 3115439449 - - - 140121705233408 - 3115427597 - - - 140121705232384 - 3115422079 - - - 140121705231360 - 3115415325 - - - 140121705230336 - 3115411681 - - - 140121705229312 - 3115402687 - - - 140121705228288 - 3115392804 - - - 140121705227264 - 3115388908 - - - 140121705225216 - 3115380703 - - - 140121705224192 - 3115374116 - - - 140121705223168 - 3115366079 - - - 140121705222144 - 3115357722 - - - 140121705221120 - 3115346416 - - - 140121705220096 - 3115339684 - - - 140121705219072 - 3115335674 - - - 140121705218048 - 3115329024 - - - 140121705216000 - 3115317260 - - - 140121705214976 - 3115312581 - - - 140121705213952 - 3115305293 - - - 140121705212928 - 3115294753 - - - 140121705211904 - 3115286940 - - - 140121705209856 - 3115276808 - - - 140121705208832 - 3115268006 - - - 140121705207808 - 3115261689 - - - 140121705205760 - 3115256913 - - - 140121705204736 - 3115249426 - - - 140121705203712 - 3115242776 - - - 140121705202688 - 3115236175 - - - 140121705201664 - 3115227154 - - - 140121705200640 - 3115220187 - - - 140121705199616 - 3115215602 - - - 140121705198592 - 3115209912 - - - 140121705196544 - 3115198249 - - - 140121705195520 - 3115193958 - - - 140121705194496 - 3115189901 - - - 140121705193472 - 3115184372 - - - 140121705192448 - 3115175363 - - - 140121705191424 - 3115169647 - - - 140121705190400 - 3115162430 - - - 140121705189376 - 3115156217 - - - 140121705187328 - 3115145695 - - - 140121705186304 - 3115141853 - - - 140121705185280 - 3115134816 - - - 140121705184256 - 3115121775 - - - 140121705183232 - 3115116600 - - - 140121705182208 - 3115107049 - - - 140121705181184 - 3115101545 - - - 140121705180160 - 3115095417 - - - 140121705178112 - 3115085927 - - - 140121705177088 - 3115081583 - - - 140121705176064 - 3115075450 - - - 140121705175040 - 3115071130 - - - 140121705174016 - 3115065676 - - - 140121705171968 - 3115056757 - - - 140121705170944 - 3115049882 - - - 140121705169920 - 3115045008 - - - 140121705167872 - 3115034406 - - - 140121705166848 - 3115027922 - - - 140121705165824 - 3115021874 - - - 140121705164800 - 3115015765 - - - 140121705163776 - 3115003792 - - - 140121705162752 - 3114995029 - - - 140121705161728 - 3114989369 - - - 140121705160704 - 3114979374 - - - 140121705158656 - 3114968757 - - - 140121705157632 - 3114959105 - - - 140121705156608 - 3114950198 - - - 140121705155584 - 3114937829 - - - 140121705154560 - 3114931698 - - - 140121705153536 - 3114926114 - - - 140121705152512 - 3114919191 - - - 140121705151488 - 3114909237 - - - 140121705149440 - 3114901084 - - - 140121705148416 - 3114892917 - - - 140121705147392 - 3114882660 - - - 140121705146368 - 3114874088 - - - 140121705145344 - 3114868508 - - - 140121705144320 - 3114859825 - - - 140121705143296 - 3114851483 - - - 140121705142272 - 3114844818 - - - 140121705140224 - 3114838103 - - - 140121705139200 - 3114831028 - - - 140121705138176 - 3114824391 - - - 140121705137152 - 3114815151 - - - 140121705136128 - 3114808069 - - - 140121705134080 - 3114801731 - - - 140121705133056 - 3114798187 - - - 140121705132032 - 3114789075 - - - 140121705129984 - 3114777360 - - - 140121705128960 - 3114772495 - - - 140121705127936 - 3114764764 - - - 140121705126912 - 3114751935 - - - 140121705125888 - 3114747850 - - - 140121705124864 - 3114738478 - - - 140121705123840 - 3114729879 - - - 140121705122816 - 3114720086 - - - 140121705120768 - 3114711690 - - - 140121705119744 - 3114707550 - - - 140121705118720 - 3114699851 - - - 140121705117696 - 3114693583 - - - 140121705116672 - 3114686729 - - - 140121705115648 - 3114681861 - - - 140121705114624 - 3114672255 - - - 140121705113600 - 3114665242 - - - 140121705111552 - 3114658367 - - - 140121705110528 - 3114652082 - - - 140121705109504 - 3114642930 - - - 140121705108480 - 3114636613 - - - 140121705107456 - 3114626624 - - - 140121705106432 - 3114615670 - - - 140121705105408 - 3114611096 - - - 140121705104384 - 3114602702 - - - 140121705102336 - 3114592670 - - - 140121705101312 - 3114585444 - - - 140121705100288 - 3114580058 - - - 140121705099264 - 3114570050 - - - 140121705098240 - 3114562942 - - - 140121705096192 - 3114555716 - - - 140121705095168 - 3114549512 - - - 140121705094144 - 3114538100 - - - 140121705092096 - 3114532961 - - - 140121705091072 - 3114525951 - - - 140121705090048 - 3114519589 - - - 140121705089024 - 3114513315 - - - 140121705088000 - 3114507254 - - - 140121705086976 - 3114499318 - - - 140121705085952 - 3114489278 - - - 140121705084928 - 3114480258 - - - 140121705082880 - 3114470475 - - - 140121705081856 - 3114458905 - - - 140121705080832 - 3114449935 - - - 140121705079808 - 3114440243 - - - 140121705078784 - 3114436103 - - - 140121705077760 - 3114426491 - - - 140121705076736 - 3114421264 - - - 140121705074688 - 3114408787 - - - 140121705073664 - 3114402127 - - - 140121705072640 - 3114394374 - - - 140121705071616 - 3114389981 - - - 140121705070592 - 3114380874 - - - 140121705069568 - 3114369089 - - - 140121705068544 - 3114361516 - - - 140121705067520 - 3114353311 - - - 140121705065472 - 3114341724 - - - 140121705064448 - 3114333780 - - - 140121705063424 - 3114325334 - - - 140121705062400 - 3114318199 - - - 140121705061376 - 3114306931 - - - 140121705059328 - 3114297091 - - - 140121705058304 - 3114290913 - - - 140121705057280 - 3114284502 - - - 140121705055232 - 3114277365 - - - 140121705054208 - 3114268384 - - - 140121705053184 - 3114258469 - - - 140121705052160 - 3114248307 - - - 140121705051136 - 3114239087 - - - 140121705050112 - 3114229280 - - - 140121705049088 - 3114217162 - - - 140121705048064 - 3114209620 - - - 140121705046016 - 3114201204 - - - 140121705044992 - 3114188674 - - - 140121705043968 - 3114180138 - - - 140121705042944 - 3114175365 - - - 140121705041920 - 3114167015 - - - 140121705040896 - 3114156263 - - - 140121705039872 - 3114149456 - - - 140121705038848 - 3114142435 - - - 140121705036800 - 3114133325 - - - 140121705035776 - 3114126141 - - - 140121705034752 - 3114116030 - - - 140121705033728 - 3114107975 - - - 140121705032704 - 3114099896 - - - 140121705031680 - 3114090259 - - - 140121705030656 - 3114084864 - - - 140121705029632 - 3114076525 - - - 140121705027584 - 3114066977 - - - 140121705026560 - 3114062763 - - - 140121705025536 - 3114055986 - - - 140121705024512 - 3114050131 - - - 140121705023488 - 3114043596 - - - 140121705021440 - 3114039834 - - - 140121705020416 - 3114027895 - - - 140121705019392 - 3114019728 - - - 140121705017344 - 3114012486 - - - 140121705016320 - 3114001786 - - - 140121705015296 - 3113994770 - - - 140121705014272 - 3113985385 - - - 140121705013248 - 3113976620 - - - 140121705012224 - 3113965619 - - - 140121705011200 - 3113958268 - - - 140121705010176 - 3113948152 - - - 140121705008128 - 3113935748 - - - 140121705007104 - 3113927371 - - - 140121705006080 - 3113920611 - - - 140121705005056 - 3113913042 - - - 140121705004032 - 3113901471 - - - 140121705003008 - 3113892672 - - - 140121705001984 - 3113888308 - - - 140121705000960 - 3113882798 - - - 140121704998912 - 3113871624 - - - 140121704997888 - 3113864735 - - - 140121704996864 - 3113860894 - - - 140121704995840 - 3113849980 - - - 140121704994816 - 3113840405 - - - 140121704993792 - 3113836753 - - - 140121704992768 - 3113827889 - - - 140121704991744 - 3113817512 - - - 140121704989696 - 3113812207 - - - 140121704988672 - 3113806349 - - - 140121704987648 - 3113795108 - - - 140121704986624 - 3113789648 - - - 140121704985600 - 3113785515 - - - 140121704983552 - 3113775855 - - - 140121704982528 - 3113771242 - - - 140121704981504 - 3113763003 - - - 140121704979456 - 3113754053 - - - 140121704978432 - 3113749329 - - - 140121704977408 - 3113741655 - - - 140121704976384 - 3113736759 - - - 140121704975360 - 3113709774 - - - 140121704974336 - 3113705599 - - - 140121704973312 - 3113703743 - - - 140121704972288 - 3113702438 - - - 140121704970240 - 3113698788 - - - 140121704969216 - 3113695961 - - - 140121704968192 - 3113693102 - - - 140121704967168 - 3113689758 - - - 140121704966144 - 3113685758 - - - 140121704965120 - 3113681245 - - - 140121704964096 - 3113679997 - - - 140121704963072 - 3113676649 - - - 140121704961024 - 3113673213 - - - 140121704960000 - 3113670380 - - - 140121704958976 - 3113665828 - - - 140121704957952 - 3113664104 - - - 140121704956928 - 3113661417 - - - 140121704955904 - 3113659177 - - - 140121704954880 - 3113655534 - - - 140121704953856 - 3113654040 - - - 140121704951808 - 3113650799 - - - 140121704950784 - 3113648215 - - - 140121704949760 - 3113645046 - - - 140121704948736 - 3113641189 - - - 140121704947712 - 3113636982 - - - 140121704945664 - 3113633268 - - - 140121704944640 - 3113631191 - - - 140121704943616 - 3113628091 - - - 140121704941568 - 3113624438 - - - 140121704940544 - 3113622188 - - - 140121704939520 - 3113619311 - - - 140121704938496 - 3113615462 - - - 140121704937472 - 3113613396 - - - 140121704936448 - 3113610263 - - - 140121704935424 - 3113608086 - - - 140121704934400 - 3113603776 - - - 140121704932352 - 3113601337 - - - 140121704931328 - 3113599314 - - - 140121704930304 - 3113595511 - - - 140121704929280 - 3113593387 - - - 140121704928256 - 3113589762 - - - 140121704927232 - 3113585771 - - - 140121704926208 - 3113583139 - - - 140121704925184 - 3113580930 - - - 140121704923136 - 3113577519 - - - 140121704922112 - 3113575087 - - - 140121704921088 - 3113571255 - - - 140121704920064 - 3113569944 - - - 140121704919040 - 3113566098 - - - 140121704918016 - 3113561991 - - - 140121704916992 - 3113558436 - - - 140121704915968 - 3113556679 - - - 140121704913920 - 3113553507 - - - 140121704912896 - 3113549068 - - - 140121704911872 - 3113547188 - - - 140121704910848 - 3113543803 - - - 140121704909824 - 3113540252 - - - 140121704907776 - 3113536191 - - - 140121704906752 - 3113533889 - - - 140121704905728 - 3113528756 - - - 140121704903680 - 3113527279 - - - 140121704902656 - 3113524373 - - - 140121704901632 - 3113519155 - - - 140121704900608 - 3113515934 - - - 140121704899584 - 3113511805 - - - 140121704898560 - 3113509478 - - - 140121704897536 - 3113502678 - - - 140121704896512 - 3113499985 - - - 140121704894464 - 3113498124 - - - 140121704893440 - 3113493971 - - - 140121704892416 - 3113491647 - - - 140121704891392 - 3113488061 - - - 140121704890368 - 3113483523 - - - 140121704889344 - 3113479315 - - - 140121704888320 - 3113474652 - - - 140121704887296 - 3113471353 - - - 140121704885248 - 3113468762 - - - 140121704884224 - 3113466573 - - - 140121704883200 - 3113464571 - - - 140121704882176 - 3113460179 - - - 140121704881152 - 3113455722 - - - 140121704880128 - 3113452299 - - - 140121704879104 - 3113449816 - - - 140121704878080 - 3113446667 - - - 140121704876032 - 3113443074 - - - 140121704875008 - 3113439663 - - - 140121704873984 - 3113435745 - - - 140121704872960 - 3113430371 - - - 140121704871936 - 3113429043 - - - 140121704869888 - 3113425920 - - - 140121704868864 - 3113420435 - - - 140121704867840 - 3113418405 - - - 140121704865792 - 3113414360 - - - 140121704864768 - 3113410702 - - - 140121704863744 - 3113407378 - - - 140121704862720 - 3113402923 - - - 140121704861696 - 3113400724 - - - 140121704860672 - 3113395916 - - - 140121704859648 - 3113392698 - - - 140121704858624 - 3113389746 - - - 140121704856576 - 3113384844 - - - 140121704855552 - 3113380138 - - - 140121704854528 - 3113376620 - - - 140121704853504 - 3113373213 - - - 140121704852480 - 3113370248 - - - 140121704851456 - 3113368218 - - - 140121704850432 - 3113364975 - - - 140121704849408 - 3113360958 - - - 140121704847360 - 3113355717 - - - 140121704846336 - 3113353012 - - - 140121704845312 - 3113350132 - - - 140121704844288 - 3113345146 - - - 140121704843264 - 3113343331 - - - 140121704842240 - 3113340570 - - - 140121704841216 - 3113338578 - - - 140121704840192 - 3113333146 - - - 140121704838144 - 3113330278 - - - 140121704837120 - 3113326699 - - - 140121704836096 - 3113321550 - - - 140121704835072 - 3113319218 - - - 140121704834048 - 3113315543 - - - 140121704832000 - 3113310833 - - - 140121704830976 - 3113308551 - - - 140121704829952 - 3113306943 - - - 140121704827904 - 3113301848 - - - 140121704826880 - 3113297599 - - - 140121704825856 - 3113295196 - - - 140121704824832 - 3113291980 - - - 140121704823808 - 3113287747 - - - 140121704822784 - 3113285888 - - - 140121704821760 - 3113281769 - - - 140121704820736 - 3113280330 - - - 140121704818688 - 3113275151 - - - 140121704817664 - 3113273370 - - - 140121704816640 - 3113269759 - - - 140121704815616 - 3113263773 - - - 140121704814592 - 3113259977 - - - 140121704813568 - 3113256821 - - - 140121704812544 - 3113254180 - - - 140121704811520 - 3113248630 - - - 140121704809472 - 3113246015 - - - 140121704808448 - 3113242469 - - - 140121704807424 - 3113239656 - - - 140121704806400 - 3113236625 - - - 140121704805376 - 3113231931 - - - 140121704804352 - 3113228291 - - - 140121704803328 - 3113223674 - - - 140121704802304 - 3113220751 - - - 140121704800256 - 3113218896 - - - 140121704799232 - 3113214503 - - - 140121704798208 - 3113210063 - - - 140121704797184 - 3113206941 - - - 140121704796160 - 3113203961 - - - 140121704794112 - 3113200806 - - - 140121704793088 - 3113199216 - - - 140121704792064 - 3113196594 - - - 140121704790016 - 3113192429 - - - 140121704788992 - 3113189500 - - - 140121704787968 - 3113185173 - - - 140121704786944 - 3113179963 - - - 140121704785920 - 3113177191 - - - 140121704784896 - 3113173657 - - - 140121704783872 - 3113171268 - - - 140121704782848 - 3113165634 - - - 140121704780800 - 3113160992 - - - 140121704779776 - 3113156537 - - - 140121704778752 - 3113153671 - - - 140121704777728 - 3113149268 - - - 140121704776704 - 3113147175 - - - 140121704775680 - 3113142705 - - - 140121704774656 - 3113137719 - - - 140121704773632 - 3113133585 - - - 140121704771584 - 3113128363 - - - 140121704770560 - 3113123102 - - - 140121704769536 - 3113121252 - - - 140121704768512 - 3113117796 - - - 140121704767488 - 3113114626 - - - 140121704766464 - 3113111203 - - - 140121704765440 - 3113108074 - - - 140121704764416 - 3113104551 - - - 140121704762368 - 3113101479 - - - 140121704761344 - 3113099027 - - - 140121704760320 - 3113094886 - - - 140121704759296 - 3113093329 - - - 140121704757248 - 3113087686 - - - 140121704756224 - 3113085773 - - - 140121704755200 - 3113082464 - - - 140121704754176 - 3113078187 - - - 140121704752128 - 3113075926 - - - 140121704751104 - 3113072894 - - - 140121704750080 - 3113069609 - - - 140121704749056 - 3113064810 - - - 140121704748032 - 3113060487 - - - 140121704747008 - 3113055888 - - - 140121704745984 - 3113051122 - - - 140121704744960 - 3113048982 - - - 140121704742912 - 3113044492 - - - 140121704741888 - 3113038962 - - - 140121704740864 - 3113037519 - - - 140121704739840 - 3113033515 - - - 140121704738816 - 3113029909 - - - 140121704737792 - 3113026129 - - - 140121704736768 - 3113021607 - - - 140121704735744 - 3113018288 - - - 140121704733696 - 3113013130 - - - 140121704732672 - 3113009541 - - - 140121704731648 - 3113005366 - - - 140121704730624 - 3113003460 - - - 140121704729600 - 3112999513 - - - 140121704728576 - 3112995176 - - - 140121704727552 - 3112993223 - - - 140121704726528 - 3112988957 - - - 140121704724480 - 3112983754 - - - 140121704723456 - 3112981050 - - - 140121704722432 - 3112978882 - - - 140121704721408 - 3112974430 - - - 140121704719360 - 3112972840 - - - 140121704718336 - 3112971201 - - - 140121704717312 - 3112967438 - - - 140121704716288 - 3112962739 - - - 140121704714240 - 3112959606 - - - 140121704713216 - 3112954171 - - - 140121704712192 - 3112953071 - - - 140121704711168 - 3112951901 - - - 140121704710144 - 3112948563 - - - 140121704709120 - 3112943244 - - - 140121704708096 - 3112939265 - - - 140121704707072 - 3112937694 - - - 140121704705024 - 3112934596 - - - 140121704704000 - 3112932549 - - - 140121704702976 - 3112928538 - - - 140121704701952 - 3112925690 - - - 140121704700928 - 3112920269 - - - 140121704699904 - 3112918347 - - - 140121704698880 - 3112916751 - - - 140121704697856 - 3112914320 - - - 140121704695808 - 3112910200 - - - 140121704694784 - 3112907413 - - - 140121704693760 - 3112904855 - - - 140121704692736 - 3112899035 - - - 140121704691712 - 3112896797 - - - 140121704690688 - 3112893671 - - - 140121704689664 - 3112890691 - - - 140121704688640 - 3112885254 - - - 140121704686592 - 3112880358 - - - 140121704685568 - 3112876992 - - - 140121704684544 - 3112871694 - - - 140121704683520 - 3112868621 - - - 140121704681472 - 3112864441 - - - 140121704680448 - 3112861140 - - - 140121704679424 - 3112859114 - - - 140121704678400 - 3112856036 - - - 140121704676352 - 3112850371 - - - 140121704675328 - 3112848097 - - - 140121704674304 - 3112844207 - - - 140121704673280 - 3112842516 - - - 140121704672256 - 3112838737 - - - 140121704671232 - 3112836001 - - - 140121704670208 - 3112832737 - - - 140121704669184 - 3112831266 - - - 140121704667136 - 3112826681 - - - 140121704666112 - 3112823946 - - - 140121704665088 - 3112820221 - - - 140121704664064 - 3112816000 - - - 140121704663040 - 3112812426 - - - 140121704662016 - 3112809502 - - - 140121704660992 - 3112805085 - - - 140121704659968 - 3112799920 - - - 140121704657920 - 3112797471 - - - 140121704656896 - 3112793565 - - - 140121704655872 - 3112789318 - - - 140121704654848 - 3112786481 - - - 140121704653824 - 3112783092 - - - 140121704652800 - 3112781209 - - - 140121704651776 - 3112778640 - - - 140121704650752 - 3112777276 - - - 140121704648704 - 3112775966 - - - 140121704647680 - 3112770801 - - - 140121704646656 - 3112768983 - - - 140121704645632 - 3112765176 - - - 140121704643584 - 3112762387 - - - 140121704642560 - 3112758941 - - - 140121704641536 - 3112757299 - - - 140121704640512 - 3112753352 - - - 140121704638464 - 3112749271 - - - 140121704637440 - 3112745540 - - - 140121704636416 - 3112744086 - - - 140121704635392 - 3112740615 - - - 140121704634368 - 3112736825 - - - 140121704633344 - 3112735615 - - - 140121704632320 - 3112731887 - - - 140121704631296 - 3112729174 - - - 140121704629248 - 3112727483 - - - 140121704628224 - 3112724866 - - - 140121704627200 - 3112720074 - - - 140121704626176 - 3112717761 - - - 140121704625152 - 3112714650 - - - 140121704624128 - 3112712508 - - - 140121704623104 - 3112707609 - - - 140121704622080 - 3112703957 - - - 140121704620032 - 3112699682 - - - 140121704619008 - 3112696177 - - - 140121704617984 - 3112693785 - - - 140121704616960 - 3112691983 - - - 140121704615936 - 3112689236 - - - 140121704614912 - 3112686250 - - - 140121704613888 - 3112683953 - - - 140121704612864 - 3112679775 - - - 140121704610816 - 3112674187 - - - 140121704609792 - 3112671154 - - - 140121704608768 - 3112667429 - - - 140121704607744 - 3112664284 - - - 140121704605696 - 3112658998 - - - 140121704604672 - 3112654494 - - - 140121704603648 - 3112653235 - - - 140121704602624 - 3112649525 - - - 140121704600576 - 3112646969 - - - 140121704599552 - 3112644497 - - - 140121704598528 - 3112641878 - - - 140121704597504 - 3112637419 - - - 140121704596480 - 3112632966 - - - 140121704595456 - 3112629927 - - - 140121704594432 - 3112626201 - - - 140121704593408 - 3112623481 - - - 140121704591360 - 3112620657 - - - 140121704590336 - 3112617831 - - - 140121704589312 - 3112614446 - - - 140121704588288 - 3112609977 - - - 140121704587264 - 3112606904 - - - 140121704586240 - 3112602823 - - - 140121704585216 - 3112598379 - - - 140121704584192 - 3112593873 - - - 140121704582144 - 3112589348 - - - 140121704581120 - 3112586084 - - - 140121704580096 - 3112584828 - - - 140121704579072 - 3112580203 - - - 140121704578048 - 3112572899 - - - 140121704577024 - 3112568364 - - - 140121704576000 - 3112564004 - - - 140121704574976 - 3112559394 - - - 140121704572928 - 3112553749 - - - 140121704571904 - 3112551297 - - - 140121704570880 - 3112548020 - - - 140121704569856 - 3112544357 - - - 140121704567808 - 3112540772 - - - 140121704566784 - 3112539299 - - - 140121704565760 - 3112534679 - - - 140121704564736 - 3112532298 - - - 140121704562688 - 3112528061 - - - 140121704561664 - 3112524914 - - - 140121704560640 - 3112522573 - - - 140121704559616 - 3112518867 - - - 140121704558592 - 3112515680 - - - 140121704557568 - 3112512896 - - - 140121704556544 - 3112508928 - - - 140121704555520 - 3112505165 - - - 140121704553472 - 3112498581 - - - 140121704552448 - 3112496476 - - - 140121704551424 - 3112495020 - - - 140121704550400 - 3112491989 - - - 140121704549376 - 3112489026 - - - 140121704548352 - 3112486267 - - - 140121704547328 - 3112484606 - - - 140121704546304 - 3112481384 - - - 140121704544256 - 3112475911 - - - 140121704543232 - 3112471561 - - - 140121704542208 - 3112466851 - - - 140121704541184 - 3112463764 - - - 140121704540160 - 3112460502 - - - 140121704539136 - 3112456079 - - - 140121704538112 - 3112452997 - - - 140121704537088 - 3112448397 - - - 140121704535040 - 3112446473 - - - 140121704534016 - 3112443284 - - - 140121704532992 - 3112438496 - - - 140121704531968 - 3112433954 - - - 140121704529920 - 3112431506 - - - 140121704528896 - 3112428171 - - - 140121704527872 - 3112424715 - - - 140121704526848 - 3112422613 - - - 140121704524800 - 3112417813 - - - 140121704523776 - 3112413882 - - - 140121704522752 - 3112412326 - - - 140121704521728 - 3112408837 - - - 140121704520704 - 3112404993 - - - 140121704519680 - 3112401443 - - - 140121704518656 - 3112398865 - - - 140121704517632 - 3112395313 - - - 140121704515584 - 3112392637 - - - 140121704514560 - 3112390094 - - - 140121704513536 - 3112385459 - - - 140121704512512 - 3112382687 - - - 140121704511488 - 3112379709 - - - 140121704510464 - 3112376430 - - - 140121704509440 - 3112373185 - - - 140121704508416 - 3112369381 - - - 140121704506368 - 3112364898 - - - 140121704505344 - 3112362225 - - - 140121704504320 - 3112356308 - - - 140121704503296 - 3112353649 - - - 140121704502272 - 3112350305 - - - 140121704501248 - 3112348544 - - - 140121704500224 - 3112342850 - - - 140121569804288 - 58649136 - - - 140121568424960 - 51063820 - - - 140121568097280 - 44092679 - - - 140121568049152 - 35416071 - - - 140121703052288 - 29067848 - - - 140121702622208 - 21069097 - - - 140121567712256 - 14731677 - - - 140121567711232 - 7253282 - - - 140121702529024 - 55925462 - - - 140121567646720 - 49269101 - - - 140121702122496 - 42219234 - - - 140121567257600 - 35098862 - - - 140121701978112 - 28330935 - - - 140121567230976 - 21040620 - - - 140121701890048 - 14226105 - - - 140121567027200 - 7415103 - - - 140121566868480 - 56248831 - - - 140121566859264 - 49280433 - - - 140121700891648 - 41906123 - - - 140121566460928 - 34715864 - - - 140121566307328 - 27739061 - - - 140121699798016 - 21463059 - - - 140121566306304 - 15152708 - - - 140121566299136 - 7979943 - - - 140121566015488 - 56249009 - - - 140121565687808 - 49116320 - - - 140121565576192 - 42196454 - - - 140121699379200 - 34863152 - - - 140121565220864 - 27439546 - - - 140121565004800 - 20938057 - - - 140121698945024 - 14065270 - - - 140121698944000 - 7572650 - - - 140121698942976 - 54647005 - - - 140121698889728 - 48159952 - - - 140121698500608 - 40834934 - - - 140121698002944 - 33875721 - - - 140121564156928 - 27168274 - - - 140121564116992 - 21042945 - - - 140121563868160 - 14519918 - - - 140121697476608 - 7715137 - - - 140121697451008 - 17782206 - - - 140121697449984 - 48903810 - - - 140121563338752 - 41887961 - - - 140121697300480 - 35448308 - - - 140121562889216 - 28592572 - - - 140121562762240 - 22119715 - - - 140121696960512 - 15655493 - - - 140121562690560 - 8043115 - - - 140121562641408 - 55613693 - - - 140121696525312 - 48644642 - - - 140121562376192 - 41426362 - - - 140121696319488 - 34879342 - - - 140121569543168 - 27692267 - - - 140121703503872 - 20468509 - - - 140121701337088 - 13478695 - - - 140121567751168 - 6880578 - - - 140121568608256 - 55046546 - - - 140121703319552 - 48323816 - - - 140121562819584 - 41236236 - - - 140121703341056 - 34041974 - - - 140121566942208 - 27004342 - - - 140121699998720 - 19831851 - - - 140121699450880 - 13345970 - - - 140121562446848 - 6507195 - - - 140121565077504 - 56218812 - - - 140121700128768 - 48984388 - - - 140121565794304 - 41955742 - - - 140121565094912 - 35276360 - - - 140121562976256 - 28519590 - - - 140121699070976 - 21328557 - - - 140121566672896 - 14679995 - - - 140121568979968 - 7833957 - - - 140121563312128 - 53608839 - - - 140121566683136 - 46763274 - - - 140121563021312 - 40751592 - - - 140121701640192 - 33863772 - - - 140121702251520 - 27010403 - - - 140121702300672 - 20092931 - - - 140121567497216 - 46182461 - - - 140121566707712 - 7712059 - - - 140121698065408 - 52852042 - - - 140121698080768 - 39482351 - - - 140121701057536 - 33301295 - - - 140121698169856 - 26999213 - - - 140121696707584 - 19824449 - - - 140121562289152 - 13104560 - - - 140121570064384 - 40382682 - - - 140121565288448 - 53574243 - - - 140121701744640 - 46855604 - - - 140121563947008 - 33957438 - - - 140121698808832 - 27824951 - - - 140121703844864 - 21324282 - - - 140121701200896 - 14417415 - - - 140121564681216 - 7985924 - - - 140121696901120 - 55779467 - - - 140121702520832 - 48159951 - - - 140121564097536 - 41276670 - - - 140121697433600 - 34501451 - - - 140121563290624 - 26874872 - - - 140121562645504 - 20843234 - - - 140121702471680 - 13688127 - - - 140121561907200 - 7520645 - - - 140121700068352 - 52134867 - - - 140121699898368 - 45228542 - - - 140121562424320 - 38650036 - - - 140121566112768 - 32099296 - - - 140121568238592 - 25500231 - - - 140121697334272 - 1679922 - - - 140121566685184 - 13734785 - - - 140121697918976 - 19829411 - - - 140121566313472 - 48797607 - - - 140121703775232 - 42261611 - - - 140121703846912 - 36965340 - - - 140121701214208 - 31070853 - - - 140121563074560 - 24863301 - - - 140121703415808 - 19084799 - - - 140121702437888 - 13290674 - - - 140121703572480 - 7140685 - - - 140121562632192 - 51909766 - - - 140121701842944 - 45866488 - - - 140121567488000 - 38681266 - - - 140121703721984 - 32081067 - - - 140121700673536 - 26018624 - - - 140121564060672 - 19703327 - - - 140121698685952 - 13238792 - - - 140121698688000 - 6693367 - - - 140121567965184 - 49979367 - - - 140121564806144 - 44228346 - - - 140121698044928 - 37070813 - - - 140121562579968 - 31372036 - - - 140121701170176 - 18647783 - - - 140121569498112 - 19675924 - - - 140121699468288 - 43751592 - - - 140121700501504 - 6739279 - - - 140121568785408 - 50733351 - - - 140121566483456 - 37497649 - - - 140121567986688 - 31119378 - - - 140121567128576 - 24858805 - - - 140121566478336 - 18579344 - - - 140121564829696 - 12909298 - - - 140121564589056 - 6335092 - - - 140121698276352 - 49080486 - - - 140121564348416 - 43208184 - - - 140121697634304 - 37372463 - - - 140121699956736 - 31539558 - - - 140121699058688 - 25131444 - - - 140121700689920 - 19018942 - - - 140121698501632 - 13046255 - - - 140121703040000 - 6765375 - - - 140121563025408 - 52156022 - - - 140121568956416 - 46037058 - - - 140121567344640 - 39993386 - - - 140121697119232 - 33332832 - - - 140121566850048 - 26954428 - - - 140121702047744 - 20466466 - - - 140121697266688 - 13593850 - - - 140121564699648 - 7191084 - - - 140121564193792 - 53611051 - - - 140121697144832 - 46107470 - - - 140121696016384 - 38713430 - - - 140121563741184 - 31447811 - - - 140121698315264 - 10311778 - - - 140121702223872 - 19165731 - - - 140121565182976 - 13394495 - - - 140121700768768 - 7212409 - - - 140121697034240 - 47059077 - - - 140121695969280 - 40987206 - - - 140121567788032 - 35141711 - - - 140121698067456 - 28157048 - - - 140121564345344 - 22272759 - - - 140121701859328 - 16520480 - - - 140121567323136 - 10960892 - - - 140121562926080 - 5514745 - - - 140121702797312 - 48000171 - - - 140121561836544 - 42029419 - - - 140121703603200 - 36354881 - - - 140121697716224 - 30641533 - - - 140121569017856 - 24856404 - - - 140121565803520 - 18688500 - - - 140121698779136 - 12793818 - - - 140121699842048 - 7111198 - - - 140121699639296 - 46765544 - - - 140121569503232 - 40234310 - - - 140121702080512 - 34759861 - - - 140121696019456 - 28834247 - - - 140121562959872 - 23501108 - - - 140121567480832 - 17359721 - - - 140121700521984 - 11504628 - - - 140121563999232 - 5721027 - - - 140121565347840 - 45629889 - - - 140121567408128 - 40059275 - - - 140121700328448 - 34246574 - - - 140121563567104 - 28298614 - - - 140121699418112 - 22574570 - - - 140121568492544 - 19311609 - - - 140121697359872 - 11616162 - - - 140121567518720 - 6154136 - - - 140121698510848 - 43997746 - - - 140121700233216 - 38153662 - - - 140121702654976 - 32582578 - - - 140121564813312 - 7248214 - - - 140121564522496 - 22086169 - - - 140121697013760 - 16840158 - - - 140121568257024 - 11492846 - - - 140121701139456 - 5652655 - - - 140121702796288 - 44140817 - - - 140121697485824 - 38847831 - - - 140121567526912 - 33045585 - - - 140121697810432 - 441375 - - - 140121562103808 - 22012603 - - - 140121700912128 - 16365315 - - - 140121564462080 - 11318350 - - - 140121697285120 - 5941960 - - - 140121569286144 - 44247664 - - - 140121568002048 - 39004647 - - - 140121565787136 - 33882169 - - - 140121564726272 - 28651665 - - - 140121566946304 - 22917593 - - - 140121696054272 - 1501439 - - - 140121563737088 - 11557530 - - - 140121701739520 - 5894095 - - - 140121696526336 - 43654266 - - - 140121700695040 - 38518025 - - - 140121702483968 - 33156496 - - - 140121703717888 - 27628852 - - - 140121567877120 - 22447414 - - - 140121700767744 - 16742983 - - - 140121564232704 - 11298402 - - - 140121569950720 - 6144871 - - - 140121568228352 - 41831429 - - - 140121703851008 - 37139082 - - - 140121704122368 - 31388505 - - - 140121565891584 - 25958251 - - - 140121698121728 - 20954569 - - - 140121563490304 - 16229228 - - - 140121701343232 - 10793856 - - - 140121567900672 - 5323731 - - - 140121702745088 - 41012315 - - - 140121565754368 - 36132846 - - - 140121697090560 - 30967251 - - - 140121565258752 - 13943369 - - - 140121567134720 - 20245022 - - - 140121696131072 - 15371082 - - - 140121702166528 - 10367239 - - - 140121701009408 - 5252669 - - - 140121565049856 - 42241159 - - - 140121566227456 - 37617553 - - - 140121565072384 - 34648864 - - - 140121563073536 - 27473722 - - - 140121697884160 - 22381989 - - - 140121698424832 - 17137253 - - - 140121564578816 - 11090030 - - - 140121699614720 - 6027756 - - - 140121564683264 - 39903237 - - - 140121566440448 - 29927125 - - - 140121698503680 - 24823818 - - - 140121696179200 - 19826194 - - - 140121568259072 - 15187940 - - - 140121699057664 - 10911176 - - - 140121702507520 - 5601844 - - - 140121570895872 - 40849237 - - - 140121564466176 - 35945656 - - - 140121702054912 - 30939321 - - - 140121566152704 - 25512808 - - - 140121699545088 - 20272458 - - - 140121696985088 - 15476343 - - - 140121570051072 - 10442560 - - - 140121698695168 - 5400284 - - - 140121565257728 - 39514951 - - - 140121698225152 - 34061713 - - - 140121696998400 - 29451125 - - - 140121567034368 - 24673612 - - - 140121702040576 - 19967770 - - - 140121700198400 - 14991397 - - - 140121566629888 - 10213969 - - - 140121701885952 - 5027634 - - - 140121566216192 - 40971212 - - - 140121698462720 - 36266960 - - - 140121701320704 - 31399847 - - - 140121563959296 - 24180973 - - - 140121697554432 - 21021104 - - - 140121566894080 - 15536359 - - - 140121565625344 - 10313262 - - - 140121702170624 - 34136185 - - - 140121568672768 - 38882648 - - - 140121703067648 - 29115331 - - - 140121564765184 - 19503802 - - - 140121565286400 - 14004175 - - - 140121701808128 - 9383644 - - - 140121571172352 - 4999973 - - - 140121696854016 - 38506461 - - - 140121698387968 - 33386466 - - - 140121567893504 - 28898332 - - - 140121567792128 - 24030412 - - - 140121563994112 - 19506311 - - - 140121698992128 - 14308885 - - - 140121697921024 - 9556234 - - - 140121696456704 - 5173160 - - - 140121563503616 - 35001667 - - - 140121564009472 - 31071893 - - - 140121569087488 - 26547129 - - - 140121564868608 - 22459608 - - - 140121698456576 - 18299700 - - - 140121702868992 - 9570026 - - - 140121702410240 - 4781030 - - - 140121570070528 - 35515965 - - - 140121567650816 - 31326960 - - - 140121561931776 - 27102423 - - - 140121561944064 - 22494789 - - - 140121697480704 - 17458049 - - - 140121563837440 - 13517140 - - - 140121696250880 - 8881900 - - - 140121562377216 - 4548193 - - - 140121703830528 - 36879251 - - - 140121697207296 - 32030522 - - - 140121570599936 - 27592227 - - - 140121702650880 - 22354244 - - - 140121703197696 - 18243824 - - - 140121697883136 - 13720287 - - - 140121562634240 - 9570553 - - - 140121703795712 - 4815271 - - - 140121703353344 - 34363487 - - - 140121697512448 - 30588318 - - - 140121698046976 - 26305481 - - - 140121702603776 - 22653067 - - - 140121700630528 - 18929860 - - - 140121703696384 - 14683155 - - - 140121567645696 - 10357306 - - - 140121565177856 - 5622399 - - - 140121697330176 - 32994507 - - - 140121568114688 - 28755625 - - - 140121700392960 - 25017824 - - - 140121698561024 - 21086984 - - - 140121702780928 - 16856090 - - - 140121697675264 - 1398782 - - - 140121699376128 - 8067900 - - - 140121699282944 - 3938432 - - - 140121702243328 - 34972266 - - - 140121703686144 - 5414879 - - - 140121562791936 - 23049500 - - - 140121566723072 - 18690277 - - - 140121564569600 - 14468629 - - - 140121570584576 - 10413447 - - - 140121566284800 - 5892925 - - - 140121568629760 - 33540177 - - - 140121571174400 - 29449467 - - - 140121699494912 - 25379423 - - - 140121566342144 - 21398690 - - - 140121563571200 - 16902273 - - - 140121703605248 - 12659052 - - - 140121568479232 - 8591294 - - - 140121701564416 - 4623130 - - - 140121702426624 - 40199784 - - - 140121697183744 - 36226166 - - - 140121567883264 - 10011230 - - - 140121697747968 - 27063676 - - - 140121695728640 - 21878112 - - - 140121561868288 - 16905506 - - - 140121698903040 - 11875688 - - - 140121563944960 - 6327812 - - - 140121564692480 - 34232807 - - - 140121563255808 - 28985988 - - - 140121696203776 - 24335854 - - - 140121567539200 - 20458205 - - - 140121700514816 - 2717284 - - - 140121696230400 - 12014009 - - - 140121696833536 - 8196839 - - - 140121701752832 - 4089966 - - - 140121569760256 - 33605718 - - - 140121700135936 - 29206531 - - - 140121570845696 - 25122759 - - - 140121696260096 - 20688360 - - - 140121700518912 - 16873514 - - - 140121702833152 - 12546010 - - - 140121700933632 - 7955267 - - - 140121702847488 - 3977274 - - - 140121562542080 - 31979812 - - - 140121566400512 - 28011013 - - - 140121698051072 - 24138352 - - - 140121703668736 - 20241956 - - - 140121566993408 - 16285487 - - - 140121562059776 - 12090203 - - - 140121700680704 - 8158442 - - - 140121570042880 - 4267706 - - - 140121564773376 - 33222652 - - - 140121696577536 - 29758182 - - - 140121699382272 - 25060531 - - - 140121702318080 - 20960391 - - - 140121702727680 - 16299978 - - - 140121700672512 - 13053555 - - - 140121697855488 - 20176851 - - - 140121567983616 - 23789726 - - - 140121701892096 - 31669216 - - - 140121700793344 - 27949218 - - - 140121563237376 - 16614649 - - - 140121696548864 - 12845357 - - - 140121562877952 - 9670545 - - - 140121703560192 - 5408267 - - - 140121564268544 - 29488475 - - - 140121562832896 - 25962904 - - - 140121702452224 - 21932585 - - - 140121698279424 - 18219157 - - - 140121698550784 - 14595364 - - - 140121698224128 - 11128619 - - - 140121699572736 - 24911383 - - - 140121700308992 - 4168507 - - - 140121701526528 - 29016618 - - - 140121698239488 - 21570946 - - - 140121565619200 - 16890402 - - - 140121698353152 - 14209567 - - - 140121699324928 - 10836728 - - - 140121562352640 - 7581624 - - - 140121697653760 - 3981142 - - - 140121699623936 - 25995670 - - - 140121700039680 - 22403569 - - - 140121566074880 - 19599009 - - - 140121699526656 - 16543701 - - - 140121702690816 - 13298488 - - - 140121703273472 - 9925265 - - - 140121699463168 - 24046426 - - - 140121564214272 - 3274407 - - - 140121697881088 - 27284265 - - - 140121562513408 - 20598064 - - - 140121698684928 - 17268133 - - - 140121568475136 - 14343405 - - - 140121564760064 - 10549990 - - - 140121699604480 - 7059800 - - - 140121703383040 - 3459068 - - - 140121566374912 - 27166790 - - - 140121700646912 - 24219290 - - - 140121703633920 - 20968653 - - - 140121567164416 - 17741006 - - - 140121566633984 - 6870854 - - - 140121699273728 - 11134947 - - - 140121565469696 - 7591368 - - - 140121565907968 - 3910254 - - - 140121570490368 - 27073833 - - - 140121567062016 - 23946912 - - - 140121564560384 - 21013256 - - - 140121565652992 - 18020040 - - - 140121702268928 - 14604486 - - - 140121699005440 - 11195002 - - - 140121571207168 - 7365391 - - - 140121699034112 - 3856365 - - - 140121701351424 - 26389849 - - - 140121699957760 - 23228700 - - - 140121563662336 - 20123233 - - - 140121566621696 - 16703182 - - - 140121701561344 - 13370697 - - - 140121566238720 - 10029418 - - - 140121699971072 - 6566865 - - - 140121700032512 - 3342989 - - - 140121701417984 - 26639762 - - - 140121568947200 - 21917829 - - - 140121702301696 - 16870839 - - - 140121564417024 - 13436971 - - - 140121702098944 - 10176571 - - - 140121698857984 - 7167000 - - - 140121699046400 - 3976182 - - - 140121566539776 - 25178134 - - - 140121703215104 - 1004267 - - - 140121562575872 - 15617256 - - - 140121567614976 - 12702792 - - - 140121702994944 - 9678567 - - - 140121698447360 - 1567252 - - - 140121701918720 - 3361466 - - - 140121700653056 - 26339265 - - - 140121566770176 - 23164126 - - - 140121697224704 - 20231631 - - - 140121563555840 - 13686164 - - - 140121697778688 - 10254801 - - - 140121696745472 - 7406107 - - - 140121700193280 - 4195682 - - - 140121699421184 - 26143149 - - - 140121699295232 - 23098210 - - - 140121564256256 - 19689300 - - - 140121562924032 - 16473079 - - - 140121562022912 - 12895817 - - - 140121562403840 - 9443099 - - - 140121702574080 - 1213620 - - - 140121703886848 - 3663880 - - - 140121561937920 - 25802851 - - - 140121564022784 - 22808445 - - - 140121702290432 - 19779336 - - - 140121702984704 - 16241706 - - - 140121697610752 - 14627282 - - - 140121702993920 - 9605513 - - - 140121697289216 - 5801485 - - - 140121698861056 - 3121566 - - - 140121701134336 - 21837111 - - - 140121698301952 - 16876219 - - - 140121701507072 - 11331705 - - - 140121697265664 - 8740350 - - - 140121698393088 - 6352052 - - - 140121697219584 - 3711167 - - - 140121562449920 - 21110193 - - - 140121697787904 - 18395088 - - - 140121701088256 - 15930195 - - - 140121702491136 - 13453020 - - - 140121696967680 - 10603673 - - - 140121562594304 - 7998008 - - - 140121566674944 - 5490548 - - - 140121562323968 - 17628297 - - - 140121696521216 - 19904470 - - - 140121699235840 - 15309109 - - - 140121563499520 - 13113709 - - - 140121563294720 - 10626175 - - - 140121561897984 - 8023379 - - - 140121700142080 - 5524703 - - - 140121565093888 - 3281583 - - - 140121696753664 - 21147937 - - - 140121696835584 - 18189895 - - - 140121702356992 - 15402465 - - - 140121567202304 - 12708526 - - - 140121697735680 - 10339627 - - - 140121701790720 - 8145780 - - - 140121566676992 - 5719025 - - - 140121698369536 - 3342137 - - - 140121567049728 - 20731979 - - - 140121696869376 - 18394830 - - - 140121699063808 - 16312411 - - - 140121699118080 - 13949651 - - - 140121563012096 - 11532296 - - - 140121701734400 - 9156959 - - - 140121701824512 - 6655899 - - - 140121702851584 - 20141999 - - - 140121699995648 - 15553471 - - - 140121696279552 - 12508282 - - - 140121701070848 - 10365078 - - - 140121701032960 - 7782978 - - - 140121703041024 - 2910744 - - - 140121564680192 - 19830540 - - - 140121697164288 - 17467172 - - - 140121564666880 - 15427884 - - - 140121703609344 - 11214272 - - - 140121697073152 - 9824548 - - - 140121568669696 - 7452537 - - - 140121564657664 - 5339645 - - - 140121702525952 - 3230597 - - - 140121697630208 - 19826158 - - - 140121568962560 - 17203452 - - - 140121696604160 - 16514100 - - - 140121696696320 - 12768427 - - - 140121697361920 - 19295446 - - - 140121699476480 - 5623931 - - - 140121696850944 - 6005800 - - - 140121700475904 - 3744515 - - - 140121566484480 - 22465460 - - - 140121564195840 - 13218313 - - - 140121700985856 - 8171796 - - - 140121696428032 - 5481418 - - - 140121697670144 - 3294109 - - - 140121701163008 - 19138914 - - - 140121562242048 - 16635400 - - - 140121564587008 - 14257585 - - - 140121699856384 - 12036169 - - - 140121697033216 - 4241897 - - - 140121568946176 - 7301820 - - - 140121696391168 - 4813573 - - - 140121699043328 - 2624867 - - - 140121702554624 - 16304103 - - - 140121696327680 - 14215748 - - - 140121696544768 - 11970794 - - - 140121703131136 - 14043975 - - - 140121703913472 - 7154045 - - - 140121701620736 - 4562733 - - - 140121564972032 - 16244754 - - - 140121701127168 - 18736703 - - - 140121566319616 - 11954150 - - - 140121699030016 - 9565162 - - - 140121570857984 - 877616 - - - 140121700528128 - 5073281 - - - 140121702037504 - 2612436 - - - 140121566427136 - 16498687 - - - 140121561924608 - 13998322 - - - 140121567843328 - 12071531 - - - 140121567418368 - 9698702 - - - 140121565983744 - 7814590 - - - 140121563071488 - 6128534 - - - 140121703183360 - 3969133 - - - 140121567980544 - 2181668 - - - 140121566970880 - 14654820 - - - 140121562652672 - 12431990 - - - 140121700869120 - 10234184 - - - 140121564689408 - 8264057 - - - 140121563955200 - 6740022 - - - 140121697087488 - 1122960 - - - 140121699378176 - 3096687 - - - 140121701672960 - 1582761 - - - 140121702910976 - 15346137 - - - 140121567741952 - 13936477 - - - 140121565414400 - 12246834 - - - 140121702859776 - 10374854 - - - 140121565809664 - 8103960 - - - 140121696785408 - 5794408 - - - 140121563904000 - 4062291 - - - 140121700866048 - 2494745 - - - 140121696235520 - 13708215 - - - 140121701562368 - 12228175 - - - 140121701409792 - 10747584 - - - 140121565029376 - 9142988 - - - 140121701291008 - 7548479 - - - 140121698891776 - 5808922 - - - 140121697344512 - 3719771 - - - 140121702576128 - 2058516 - - - 140121563732992 - 12874508 - - - 140121702712320 - 13342693 - - - 140121703036928 - 11722104 - - - 140121700509696 - 9858308 - - - 140121701651456 - 8029676 - - - 140121702528000 - 6409926 - - - 140121561998336 - 8939997 - - - 140121566121984 - 14555374 - - - 140121697882112 - 11314082 - - - 140121697478656 - 9040956 - - - 140121700482048 - 5571961 - - - 140121567566848 - 3955450 - - - 140121700901888 - 2264295 - - - 140121702068224 - 14252778 - - - 140121569062912 - 12547569 - - - 140121696670720 - 10983528 - - - 140121563628544 - 1320860 - - - 140121564663808 - 7952639 - - - 140121703198720 - 2810841 - - - 140121562433536 - 4464019 - - - 140121699195904 - 2868791 - - - 140121562978304 - 14706633 - - - 140121703110656 - 12857638 - - - 140121563478016 - 9423833 - - - 140121561933824 - 7612765 - - - 140121702890496 - 6177916 - - - 140121698897920 - 4154722 - - - 140121569470464 - 2518816 - - - 140121570874368 - 16111868 - - - 140121564711936 - 14255508 - - - 140121567594496 - 11570561 - - - 140121701766144 - 9172674 - - - 140121696193536 - 7354943 - - - 140121562132480 - 5509297 - - - 140121563597824 - 3608866 - - - 140121566032896 - 1658382 - - - 140121566415872 - 13312583 - - - 140121701689344 - 11676592 - - - 140121566482432 - 10191739 - - - 140121562415104 - 8914913 - - - 140121563663360 - 7083178 - - - 140121569956864 - 5383903 - - - 140121696237568 - 3679052 - - - 140121701737472 - 1947821 - - - 140121564324864 - 14371770 - - - 140121562264576 - 12855578 - - - 140121697984512 - 11469608 - - - 140121564633088 - 8000982 - - - 140121703135232 - 6117010 - - - 140121696148480 - 4294963 - - - 140121562085376 - 2539918 - - - 140121564023808 - 12982363 - - - 140121567406080 - 11508344 - - - 140121703261184 - 9747040 - - - 140121697176576 - 8194133 - - - 140121698958336 - 6546499 - - - 140121565788160 - 5052137 - - - 140121562835968 - 10527206 - - - 140121567105024 - 2171598 - - - 140121565105152 - 12136930 - - - 140121567181824 - 7331691 - - - 140121567009792 - 5926500 - - - 140121698492416 - 4203260 - - - 140121565699072 - 2770640 - - - 140121566036992 - 1600556 - - - 140121698718720 - 9500516 - - - 140121701282816 - 7958322 - - - 140121571187712 - 5350186 - - - 140121700830208 - 4652418 - - - 140121700715520 - 4493014 - - - 140121562035200 - 6014704 - - - 140121698652160 - 2194856 - - - 140121697042432 - 6847807 - - - 140121699584000 - 8143025 - - - 140121570506752 - 4180351 - - - 140121565010944 - 3236190 - - - 140121698955264 - 2491379 - - - 140121696742400 - 11610546 - - - 140121702293504 - 10310597 - - - 140121564019712 - 514073 - - - 140121703309312 - 7143144 - - - 140121564707840 - 5573920 - - - 140121698028544 - 3932498 - - - 140121696585728 - 2774537 - - - 140121562624000 - 1387385 - - - 140121700896768 - 6116224 - - - 140121570837504 - 4973742 - - - 140121568119808 - 4258514 - - - 140121564070912 - 2868872 - - - 140121699172352 - 1881834 - - - 140121566089216 - 6774241 - - - 140121697651712 - 7470737 - - - 140121561877504 - 5730057 - - - 140121562343424 - 5019691 - - - 140121564402688 - 3501144 - - - 140121564020736 - 2592532 - - - 140121564084224 - 1898411 - - - 140121570590720 - 6182782 - - - 140121566191616 - 6847069 - - - 140121700340736 - 2160085 - - - 140121697742848 - 4267719 - - - 140121697088512 - 3310012 - - - 140121569220608 - 2656331 - - - 140121567543296 - 1562222 - - - 140121703510016 - 902548 - - - 140121565166592 - 7054800 - - - 140121701638144 - 6358788 - - - 140121564344320 - 2670079 - - - 140121697556480 - 4425074 - - - 140121565987840 - 2828441 - - - 140121566913536 - 2257689 - - - 140121703026688 - 1075284 - - - 140121702765568 - 7739620 - - - 140121699136512 - 6135976 - - - 140121699862528 - 5490226 - - - 140121699342336 - 4303019 - - - 140121565861888 - 3572173 - - - 140121701623808 - 1438277 - - - 140121562079232 - 1699218 - - - 140121569974272 - 1163928 - - - 140121700002816 - 5798841 - - - 140121702343680 - 5421594 - - - 140121563622400 - 4655143 - - - 140121562870784 - 3886461 - - - 140121562360832 - 3205604 - - - 140121698565120 - 2440725 - - - 140121700797440 - 1723368 - - - 140121700904960 - 5315522 - - - 140121561989120 - 4878431 - - - 140121703392256 - 4196763 - - - 140121696380928 - 3297397 - - - 140121697594368 - 2504111 - - - 140121562003456 - 1837989 - - - 140121700537344 - 3059512 - - - 140121564359680 - 3385484 - - - 140121565363200 - 3326902 - - - 140121567395840 - 2558477 - - - 140121703454720 - 1960566 - - - 140121697923072 - 1538733 - - - 140121564488704 - 905985 - - - 140121562058752 - 374509 - - - 140121698648064 - 4176821 - - - 140121697368064 - 3596012 - - - 140121697315840 - 2948442 - - - 140121696025600 - 2139711 - - - 140121701443584 - 1737416 - - - 140121699499008 - 1248573 - - - 140121697986560 - 4162061 - - - 140121564290048 - 3590882 - - - 140121563200512 - 3143086 - - - 140121701093376 - 2651721 - - - 140121567021056 - 2423466 - - - 140121697966080 - 1952738 - - - 140121562123264 - 1577602 - - - 140121696508928 - 3595700 - - - 140121696321536 - 3103092 - - - 140121563233280 - 2816057 - - - 140121699617792 - 2314917 - - - 140121565759488 - 1934781 - - - 140121696842752 - 1294507 - - - 140121562245120 - 900682 - - - 140121562317824 - 1666811 - - - 140121567512576 - 3459604 - - - 140121696990208 - 2858515 - - - 140121696736256 - 2239042 - - - 140121569284096 - 1707120 - - - 140121696574464 - 1362463 - - - 140121697305600 - 1162701 - - - 140121566387200 - 2577565 - - - 140121699470336 - 2717194 - - - 140121567978496 - 2656770 - - - 140121697694720 - 2572942 - - - 140121697823744 - 2590146 - - - 140121696917504 - 2553469 - - - 140121703054336 - 1565948 - - - 140121702200320 - 1211158 - - - 140121698286592 - 1168571 - - - 140121697123328 - 1098949 - - - 140121564205056 - 2532094 - - - 140121697024000 - 1480095 - - - 140121698988032 - 1459347 - - - 140121702517760 - 719995 - - - 140121570575360 - 2038612 - - - 140121562256384 - 2014659 - - - 140121703680000 - 1281061 - - - 140121702495232 - 1166750 - - - 140121701008384 - 1141793 - - - 140121701111808 - 349176 - - - 140121562865664 - 308478 - - - 140121703623680 - 2602892 - - - 140121565096960 - 2636215 - - - 140121700861952 - 2649089 - - - 140121562087424 - 2684123 - - - 140121700326400 - 2028926 - - - 140121562283008 - 2922511 - - - 140121564554240 - 1985743 - - - 140121696046080 - 1958338 - - - 140121569010688 - 1138520 - - - 140121562936320 - 1884953 - - - 140121702379520 - 1872566 - - - 140121567639552 - 1829040 - - - 140121701829632 - 969787 - - - 140121702660096 - 931788 - - - 140121566471168 - 1723616 - - - 140121701709824 - 1697369 - - - 140121702455296 - 823795 - - - 140121696154624 - 781515 - - - 140121564718080 - 1606137 - - - 140121567911936 - 708974 - - - 140121699372032 - 687527 - - - 140121697833984 - 658937 - - - 140121699092480 - 1501596 - - - 140121701729280 - 586196 - - - 140121696389120 - 554690 - - - 140121698294784 - 530202 - - - 140121701135360 - 1267040 - - - 140121562541056 - 1239347 - - - 140121696503808 - 393767 - - - 140121697639424 - 259931 - - - 140121698118656 - 3322202 - - - 140121699553280 - 3242745 - - - 140121569218560 - 3212381 - - - 140121696638976 - 3184783 - - - 140121564987392 - 3161248 - - - 140121703798784 - 3145831 - - - 140121702348800 - 2888207 - - - 140121698481152 - 2854117 - - - 140121564881920 - 2792264 - - - 140121699520512 - 2777399 - - - 140121566452736 - 2760182 - - - 140121567082496 - 2738596 - - - 140121565889536 - 2493650 - - - 140121565978624 - 2445403 - - - 140121566188544 - 2420640 - - - 140121567191040 - 2404008 - - - 140121699907584 - 2386781 - - - 140121703097344 - 2370167 - - - 140121565405184 - 2351585 - - - 140121701898240 - 2324299 - - - 140121703552000 - 2302943 - - - 140121696306176 - 2270262 - - - 140121564555264 - 2249040 - - - 140121569756160 - 2233693 - - - 140121700338688 - 2216578 - - - 140121566498816 - 2197599 - - - 140121696070656 - 2179012 - - - 140121697682432 - 2134096 - - - 140121697324032 - 2105010 - - - 140121562558464 - 2084603 - - - 140121703766016 - 2065949 - - - 140121569553408 - 1999759 - - - 140121699879936 - 1931064 - - - 140121700517888 - 1899122 - - - 140121696714752 - 1848081 - - - 140121698114560 - 1804362 - - - 140121566324736 - 1766319 - - - 140121703558144 - 1661153 - - - 140121702294528 - 1636327 - - - 140121567924224 - 1588936 - - - 140121698505728 - 1543370 - - - 140121702922240 - 1522378 - - - 140121696265216 - 1481638 - - - 140121564376064 - 1469247 - - - 140121565028352 - 1452509 - - - 140121566779392 - 1433725 - - - 140121702261760 - 1414368 - - - 140121697182720 - 1184027 - - - 140121563084800 - 1111653 - - - 140121565299712 - 1091398 - - - 140121697647616 - 1045806 - - - 140121698015232 - 1015528 - - - 140121699931136 - 1003207 - - - 140121697172480 - 986199 - - - 140121566206976 - 967007 - - - 140121699981312 - 935931 - - - 140121697587200 - 917109 - - - 140121700534272 - 883982 - - - 140121697335296 - 806335 - - - 140121703808000 - 786865 - - - 140121567138816 - 747282 - - - 140121700766720 - 720067 - - - 140121564723200 - 701793 - - - 140121703028736 - 669003 - - - 140121699854336 - 654532 - - - 140121700152320 - 634202 - - - 140121703462912 - 584510 - - - 140121700004864 - 567516 - - - 140121696395264 - 533733 - - - 140121567605760 - 486827 - - - 140121562990592 - 426898 - - - 140121567452160 - 392658 - - - - - - - - - - - - 140121999644672 - - 95104 - - - - 140121999645056 - - 93782 - - - - - - 140121999644672 - - 140121999645056 - 95104 - - - - 140121999645056 - - 140121999644672 - 93782 - - - - - - 140121999644672 - - 1 - - - - 140121999645056 - - 1 - - - - - - 140121999644672 - - 140121999645056 - 1 - - - - 140121999645056 - - 0 - 1 - - - - - 140121571600384 - 1 - - - 140121571164672 - 378 - - - 140121569859072 - 82 - - - 140121570731520 - 192 - - - 140121570937856 - 100 - - - 140121568525824 - 125 - - - 140121570677248 - 225 - - - 140121568505856 - 342 - - - 140121569187328 - 311 - - - 140121571423744 - 235 - - - 140121570478080 - 323 - - - 140121569621504 - 297 - - - 140121570731008 - 62 - - - 140121571644416 - 2 - - - 140121568517632 - 160 - - - 140121570954752 - 93 - - - 140121571703296 - 2 - - - 140121571597824 - 2 - - - 140121570697728 - 56 - - - 140121568558080 - 290 - - - 140121570975232 - 354 - - - 140121569154048 - 202 - - - 140121568828928 - 167 - - - 140121569816064 - 349 - - - 140121569594880 - 179 - - - 140121570426368 - 18 - - - 140121570959872 - 77 - - - 140121571764224 - 2 - - - 140121568574464 - 273 - - - 140121571421696 - 139 - - - 140121569864704 - 44 - - - 140121569835520 - 151 - - - 140121571701760 - 3 - - - 140121569180160 - 286 - - - 140121568880640 - 76 - - - 140121571110912 - 187 - - - 140121568881152 - 134 - - - 140121569661952 - 42 - - - 140121569126400 - 139 - - - 140121570750976 - 150 - - - 140121571121664 - 281 - - - 140121571604480 - 1 - - - 140121571150336 - 88 - - - 140121571622912 - 1 - - - 140121569860096 - 118 - - - 140121569856000 - 341 - - - 140121571146752 - 301 - - - 140121569640960 - 198 - - - 140121568892928 - 270 - - - 140121568509440 - 282 - - - 140121570478592 - 67 - - - 140121569167360 - 294 - - - 140121570442240 - 297 - - - 140121569640448 - 288 - - - 140121568514048 - 298 - - - 140121568543232 - 151 - - - 140121568868864 - 4 - - - 140121571448832 - 9 - - - 140121568277504 - 256 - - - 140121571645952 - 3 - - - 140121569835008 - 236 - - - 140121568553472 - 60 - - - 140121569605632 - 353 - - - 140121568518144 - 85 - - - 140121571125760 - 319 - - - 140121570409472 - 304 - - - 140121568795136 - 188 - - - 140121569611264 - 330 - - - 140121571597312 - 1 - - - 140121571149824 - 343 - - - 140121570452480 - 273 - - - 140121568499712 - 144 - - - 140121571140608 - 100 - - - 140121569575424 - 169 - - - 140121569843200 - 356 - - - 140121569172480 - 70 - - - 140121570393600 - 47 - - - 140121570723328 - 251 - - - 140121570958336 - 288 - - - 140121568278016 - 339 - - - 140121571396608 - 325 - diff --git a/probing-tools/systemtap/savina_xml_output/ThreadRing.XML b/probing-tools/systemtap/savina_xml_output/ThreadRing.XML deleted file mode 100644 index e69de29bb..000000000 diff --git a/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML b/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML deleted file mode 100644 index 9876368be..000000000 --- a/probing-tools/systemtap/savina_xml_output/TrapezoidalApproximation.XML +++ /dev/null @@ -1,1857 +0,0 @@ - - - - - - - - - - - - - - - - - - - 139717030822912 - 7383301 - - - 139717030821888 - 7374515 - - - 139717030820864 - 7363444 - - - 139717030819840 - 7356630 - - - 139717030818816 - 7349797 - - - 139717030816768 - 7340283 - - - 139717030815744 - 7333341 - - - 139717030814720 - 7327757 - - - 139717030813696 - 7322298 - - - 139717030811648 - 7315173 - - - 139717030810624 - 7309466 - - - 139717030809600 - 7304236 - - - 139717030808576 - 7297370 - - - 139717030806528 - 7291554 - - - 139717030805504 - 7286237 - - - 139717030804480 - 7278971 - - - 139717030803456 - 7273490 - - - 139717030802432 - 7268441 - - - 139717030801408 - 7263193 - - - 139717030800384 - 7256182 - - - 139717030799360 - 7250762 - - - 139717030797312 - 7245211 - - - 139717030796288 - 7237942 - - - 139717030795264 - 7232414 - - - 139717030794240 - 7226993 - - - 139717030792192 - 7219900 - - - 139717030791168 - 7214385 - - - 139717030790144 - 7209079 - - - 139717030789120 - 7203503 - - - 139717030787072 - 7196349 - - - 139717030786048 - 7191283 - - - 139717030785024 - 7186071 - - - 139717030784000 - 7179614 - - - 139717030766592 - 7168656 - - - 139717030765568 - 7163721 - - - 139717030764544 - 7158679 - - - 139717030763520 - 7152079 - - - 139717030761472 - 7147002 - - - 139717030760448 - 7141764 - - - 139717030759424 - 7134008 - - - 139717030758400 - 7129088 - - - 139717030757376 - 7124200 - - - 139717030756352 - 7119353 - - - 139717030755328 - 7112754 - - - 139717030754304 - 7107756 - - - 139717030752256 - 7102503 - - - 139717030751232 - 7093692 - - - 139717030750208 - 7088699 - - - 139717030749184 - 7083649 - - - 139717030748160 - 7078770 - - - 139717030747136 - 7072161 - - - 139717030746112 - 7067166 - - - 139717030745088 - 7062096 - - - 139717030743040 - 7055247 - - - 139717030740992 - 7049431 - - - 139717030739968 - 7044365 - - - 139717030738944 - 7037598 - - - 139717030737920 - 7032647 - - - 139717030736896 - 7027744 - - - 139717030735872 - 7022771 - - - 139717030734848 - 7016212 - - - 139717030732800 - 7011207 - - - 139717030731776 - 7006377 - - - 139717030730752 - 6999958 - - - 139717030729728 - 6994917 - - - 139717030728704 - 6989882 - - - 139717030727680 - 6984871 - - - 139717030726656 - 6978379 - - - 139717030725632 - 6973520 - - - 139717030723584 - 6968560 - - - 139717030722560 - 6962081 - - - 139717030721536 - 6957116 - - - 139717030720512 - 6952229 - - - 139717030719488 - 6946930 - - - 139717030718464 - 6939511 - - - 139717030717440 - 6934141 - - - 139717030716416 - 6928846 - - - 139717030714368 - 6922201 - - - 139717030713344 - 6917042 - - - 139717030712320 - 6912061 - - - 139717030711296 - 6907089 - - - 139717030710272 - 6900628 - - - 139717030709248 - 6895668 - - - 139717030708224 - 6890711 - - - 139717030707200 - 6885693 - - - 139717030705152 - 6879199 - - - 139717030703104 - 6874160 - - - 139717030702080 - 6866060 - - - 139717030701056 - 6860924 - - - 139717030700032 - 6855916 - - - 139717030699008 - 6850970 - - - 139717030697984 - 6844434 - - - 139717030696960 - 6839376 - - - 139717030694912 - 6834261 - - - 139717030693888 - 6827318 - - - 139717030692864 - 6821877 - - - 139717030691840 - 6816558 - - - 139717030690816 - 6810619 - - - 139717030689792 - 6803245 - - - 139717030688768 - 6796087 - - - - - - 139717030822912 - - - 139717275489280 - - 5456806 - - - - 139717030821888 - - - 139717275489280 - - 41692 - - - - 139717030820864 - - - 139717275489280 - - 34511 - - - - 139717030819840 - - - 139717275489280 - - 34088 - - - - 139717030818816 - - - 139717275489280 - - 36029 - - - - 139717030816768 - - - 139717275489280 - - 751172 - - - - 139717030819840 - - - 139717275489280 - - 1 - - - - 139717030821888 - - - 139717275489280 - - 1 - - - - 139717030816768 - - - 139717275489280 - - 1 - - - - 139717030820864 - - - 139717275489280 - - 1 - - - - 139717030818816 - - - 139717275489280 - - 1 - - - - 139717030822912 - - - 139717275489280 - - 1 - - - - 139717030819840 - - 1 - - - - 139717030821888 - - 1 - - - - 139717030816768 - - 1 - - - - 139717030820864 - - 1 - - - - 139717030818816 - - 1 - - - - 139717030822912 - - 1 - - - - 139717275489280 - - 6 - - - - - - 139717275489280 - - - 139717030766592 - - 1 - - - - 139717275489280 - - - 139717030713344 - - 1 - - - - 139717275489280 - - - 139717030794240 - - 1 - - - - 139717275489280 - - - 139717030700032 - - 1 - - - - 139717275489280 - - - 139717030802432 - - 1 - - - - 139717275489280 - - - 139717030689792 - - 1 - - - - 139717275489280 - - - 139717030818816 - - 1 - - - - 139717275489280 - - - 139717030720512 - - 1 - - - - 139717275489280 - - - 139717030738944 - - 1 - - - - 139717275489280 - - - 139717030745088 - - 1 - - - - 139717275489280 - - - 139717030737920 - - 1 - - - - 139717275489280 - - - 139717030747136 - - 1 - - - - 139717275489280 - - - 139717030726656 - - 1 - - - - 139717275489280 - - - 139717030800384 - - 1 - - - - 139717275489280 - - - 139717030752256 - - 1 - - - - 139717275489280 - - - 139717030736896 - - 1 - - - - 139717275489280 - - - 139717030691840 - - 1 - - - - 139717275489280 - - - 139717030792192 - - 1 - - - - 139717275489280 - - - 139717030785024 - - 1 - - - - 139717275489280 - - - 139717030702080 - - 1 - - - - 139717275489280 - - - 139717030705152 - - 1 - - - - 139717275489280 - - - 139717030795264 - - 1 - - - - 139717275489280 - - - 139717030697984 - - 1 - - - - 139717275489280 - - - 139717030810624 - - 1 - - - - 139717275489280 - - - 139717030739968 - - 1 - - - - 139717275489280 - - - 139717030789120 - - 1 - - - - 139717275489280 - - - 139717030703104 - - 1 - - - - 139717275489280 - - - 139717030804480 - - 1 - - - - 139717275489280 - - - 139717030806528 - - 1 - - - - 139717275489280 - - - 139717030759424 - - 1 - - - - 139717275489280 - - - 139717030714368 - - 1 - - - - 139717275489280 - - - 139717030722560 - - 1 - - - - 139717275489280 - - - 139717030690816 - - 1 - - - - 139717275489280 - - - 139717030760448 - - 1 - - - - 139717275489280 - - - 139717030813696 - - 1 - - - - 139717275489280 - - - 139717030799360 - - 1 - - - - 139717275489280 - - - 139717030797312 - - 1 - - - - 139717275489280 - - - 139717030725632 - - 1 - - - - 139717275489280 - - - 139717030692864 - - 1 - - - - 139717275489280 - - - 139717030808576 - - 1 - - - - 139717275489280 - - - 139717030708224 - - 1 - - - - 139717275489280 - - - 139717030786048 - - 1 - - - - 139717275489280 - - - 139717030740992 - - 1 - - - - 139717275489280 - - - 139717030822912 - - 1 - - - - 139717275489280 - - - 139717030749184 - - 1 - - - - 139717275489280 - - - 139717030712320 - - 1 - - - - 139717275489280 - - - 139717030735872 - - 1 - - - - 139717275489280 - - - 139717030755328 - - 1 - - - - 139717275489280 - - - 139717030750208 - - 1 - - - - 139717275489280 - - - 139717030717440 - - 1 - - - - 139717275489280 - - - 139717030743040 - - 1 - - - - 139717275489280 - - - 139717030815744 - - 1 - - - - 139717275489280 - - - 139717030732800 - - 1 - - - - 139717275489280 - - - 139717030688768 - - 1 - - - - 139717275489280 - - - 139717030761472 - - 1 - - - - 139717275489280 - - - 139717030701056 - - 1 - - - - 139717275489280 - - - 139717030821888 - - 1 - - - - 139717275489280 - - - 139717030707200 - - 1 - - - - 139717275489280 - - - 139717030748160 - - 1 - - - - 139717275489280 - - - 139717030730752 - - 1 - - - - 139717275489280 - - - 139717030711296 - - 1 - - - - 139717275489280 - - - 139717030699008 - - 1 - - - - 139717275489280 - - - 139717030727680 - - 1 - - - - 139717275489280 - - - 139717030756352 - - 1 - - - - 139717275489280 - - - 139717030734848 - - 1 - - - - 139717275489280 - - - 139717030796288 - - 1 - - - - 139717275489280 - - - 139717030728704 - - 1 - - - - 139717275489280 - - - 139717030693888 - - 1 - - - - 139717275489280 - - - 139717030729728 - - 1 - - - - 139717275489280 - - - 139717030763520 - - 1 - - - - 139717275489280 - - - 139717030721536 - - 1 - - - - 139717275489280 - - - 139717030716416 - - 1 - - - - 139717275489280 - - - 139717030709248 - - 1 - - - - 139717275489280 - - - 139717030809600 - - 1 - - - - 139717275489280 - - - 139717030819840 - - 1 - - - - 139717275489280 - - - 139717030791168 - - 1 - - - - 139717275489280 - - - 139717030751232 - - 1 - - - - 139717275489280 - - - 139717030790144 - - 1 - - - - 139717275489280 - - - 139717030754304 - - 1 - - - - 139717275489280 - - - 139717030696960 - - 1 - - - - 139717275489280 - - - 139717030764544 - - 1 - - - - 139717275489280 - - - 139717030820864 - - 1 - - - - 139717275489280 - - - 139717030731776 - - 1 - - - - 139717275489280 - - - 139717030718464 - - 1 - - - - 139717275489280 - - - 139717030803456 - - 1 - - - - 139717275489280 - - - 139717030787072 - - 1 - - - - 139717275489280 - - - 139717030694912 - - 1 - - - - 139717275489280 - - - 139717030710272 - - 1 - - - - 139717275489280 - - - 139717030814720 - - 1 - - - - 139717275489280 - - - 139717030758400 - - 1 - - - - 139717275489280 - - - 139717030801408 - - 1 - - - - 139717275489280 - - - 139717030811648 - - 1 - - - - 139717275489280 - - - 139717030816768 - - 1 - - - - 139717275489280 - - - 139717030765568 - - 1 - - - - 139717275489280 - - - 139717030723584 - - 1 - - - - 139717275489280 - - - 139717030805504 - - 1 - - - - 139717275489280 - - - 139717030746112 - - 1 - - - - 139717275489280 - - - 139717030757376 - - 1 - - - - 139717275489280 - - - 139717030719488 - - 1 - - - - 139717275489280 - - - 139717030784000 - - 1 - - - - - - - - 139717569259520 - - 93 - - - - 139717569259904 - - 2 - - - - - - 139717569259520 - - 139717569259904 - 93 - - - - 139717569259904 - - 139717569259520 - 2 - - - - - - 139717569259520 - - 1 - - - - 139717569259904 - - 1 - - - - - - 139717569259520 - - 139717569259904 - 1 - - - - 139717569259904 - - 0 - 1 - - - - - 139717030921728 - 2 - - - 139717030920704 - 2 - - - 139717030848512 - 1 - - - 139717030844928 - 1 - - - 139717030904832 - 1 - - - 139717275489280 - 2 - - - 139717030827008 - 1 - - - 139717030914048 - 2 - - - 139717030831616 - 1 - - - 139717030865920 - 1 - - - 139717030916608 - 1 - - - 139717030859264 - 1 - - - 139717030924800 - 1 - - - 139717030835200 - 1 - - - 139717030922240 - 1 - - - 139717030870016 - 1 - - - 139717030866944 - 1 - - - 139717030868992 - 1 - - - 139717030854144 - 1 - - - 139717030864384 - 1 - - - 139717030910464 - 1 - - - 139717030920192 - 1 - - - 139717030857728 - 1 - - - 139717030830592 - 1 - - - 139717030921216 - 1 - - - 139717030911488 - 2 - - - 139717030841344 - 1 - - - 139717030932480 - 2 - - - 139717030908928 - 1 - - - 139717030836224 - 1 - - - 139717030858752 - 1 - - - 139717030913536 - 2 - - - 139717030853120 - 1 - - - 139717030905344 - 1 - - - 139717030915072 - 2 - - - 139717030831104 - 1 - - - 139717030826496 - 1 - - - 139717030929920 - 1 - - - 139717030836736 - 1 - - - 139717030930944 - 2 - - - 139717030860800 - 1 - - - 139717030848000 - 1 - - - 139717030837248 - 1 - - - 139717030916096 - 2 - - - 139717030932992 - 2 - - - 139717030832640 - 1 - - - 139717030832128 - 1 - - - 139717030855168 - 1 - - - 139717030930432 - 2 - - - 139717030825984 - 1 - - - 139717030922752 - 2 - - - 139717030870528 - 1 - - - 139717030850048 - 1 - - - 139717030865408 - 1 - - - 139717030846976 - 1 - - - 139717030913024 - 1 - - - 139717030909952 - 1 - - - 139717030856192 - 1 - - - 139717030858240 - 1 - - - 139717030919168 - 1 - - - 139717030907904 - 1 - - - 139717030871040 - 1 - - - 139717030914560 - 1 - - - 139717030909440 - 1 - - - 139717030929408 - 2 - - - 139717030910976 - 1 - - - 139717030833664 - 1 - - - 139717030861312 - 1 - - - 139717030924288 - 2 - - - 139717030843392 - 1 - - - 139717030860288 - 1 - - - 139717030919680 - 1 - - - 139717030842368 - 1 - - - 139717030908416 - 1 - - - 139717030915584 - 1 - - - 139717030849024 - 1 - - - 139717030835712 - 1 - - - 139717030838272 - 1 - - - 139717030869504 - 1 - - - 139717569261056 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/concdict.XML b/probing-tools/systemtap/savina_xml_output/concdict.XML deleted file mode 100644 index cbb140620..000000000 --- a/probing-tools/systemtap/savina_xml_output/concdict.XML +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139648585160704 - - 1 - - - - 139648585161088 - - 3 - - - - - - 139648585160704 - - 139648585161088 - 1 - - - - 139648585161088 - - 139648585160704 - 3 - - - - - - 139648585160704 - - 1 - - - - 139648585161088 - - 1 - - - - - - 139648585160704 - - 139648585161088 - 1 - - - - 139648585161088 - - 139648585160704 - 1 - - - - - 139648157335552 - 2 - - - 139648585162240 - 1 - - - 139648291390464 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/fib.XML b/probing-tools/systemtap/savina_xml_output/fib.XML deleted file mode 100644 index d260c1dde..000000000 --- a/probing-tools/systemtap/savina_xml_output/fib.XML +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139916710766976 - - 1 - - - - - - 139916710766976 - - 139916710766592 - 1 - - - - - - 139916710766592 - - 1 - - - - 139916710766976 - - 1 - - - - - - 139916710766592 - - 0 - 1 - - - - 139916710766976 - - 0 - 1 - - - - - 139916710768128 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/fjcreate.XML b/probing-tools/systemtap/savina_xml_output/fjcreate.XML deleted file mode 100644 index e69de29bb..000000000 diff --git a/probing-tools/systemtap/savina_xml_output/fjthrput.XML b/probing-tools/systemtap/savina_xml_output/fjthrput.XML deleted file mode 100644 index c20cbe650..000000000 --- a/probing-tools/systemtap/savina_xml_output/fjthrput.XML +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139927817410560 - - 1 - - - - 139927817410944 - - 44125 - - - - - - 139927817410560 - - 139927817410944 - 1 - - - - 139927817410944 - - 139927817410560 - 44125 - - - - - - 139927817410560 - - 1 - - - - 139927817410944 - - 1 - - - - - - 139927817410560 - - 139927817410944 - 1 - - - - 139927817410944 - - 0 - 1 - - - - - 139927817412096 - 2 - - - 139927523638784 - 735 - - - 139927523570176 - 735 - - - 139927523635712 - 735 - - - 139927523616768 - 735 - - - 139927523634688 - 735 - - - 139927523628544 - 736 - - - 139927523619840 - 736 - - - 139927523575296 - 736 - - - 139927523567616 - 735 - - - 139927523563008 - 734 - - - 139927523629056 - 736 - - - 139927523564032 - 734 - - - 139927523571200 - 736 - - - 139927523559936 - 734 - - - 139927523614208 - 736 - - - 139927523563520 - 734 - - - 139927523574272 - 735 - - - 139927523610624 - 736 - - - 139927523611648 - 736 - - - 139927523635200 - 735 - - - 139927523617280 - 736 - - - 139927523625472 - 736 - - - 139927523621888 - 736 - - - 139927523564544 - 734 - - - 139927523569664 - 735 - - - 139927523612160 - 736 - - - 139927523625984 - 736 - - - 139927523566592 - 735 - - - 139927523614720 - 735 - - - 139927523638272 - 736 - - - 139927523568128 - 735 - - - 139927523573760 - 736 - - - 139927523576320 - 735 - - - 139927523572736 - 736 - - - 139927523622912 - 736 - - - 139927523615232 - 736 - - - 139927523618816 - 736 - - - 139927523620352 - 736 - - - 139927523574784 - 736 - - - 139927523619328 - 736 - - - 139927523618304 - 735 - - - 139927523628032 - 736 - - - 139927523629568 - 736 - - - 139927523561984 - 734 - - - 139927523573248 - 736 - - - 139927523623424 - 736 - - - 139927523626496 - 736 - - - 139927523611136 - 735 - - - 139927523559424 - 734 - - - 139927523565056 - 735 - - - 139927523570688 - 735 - - - 139927523634176 - 735 - - - 139927523562496 - 735 - - - 139927523624960 - 736 - - - 139927523617792 - 736 - - - 139927523613696 - 736 - - - 139927523561472 - 734 - - - 139927523622400 - 736 - - - 139927523567104 - 735 - - - 139927523575808 - 736 - - - diff --git a/probing-tools/systemtap/savina_xml_output/output.XML b/probing-tools/systemtap/savina_xml_output/output.XML deleted file mode 100644 index 3961f2f05..000000000 --- a/probing-tools/systemtap/savina_xml_output/output.XML +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - - - - - - - - 140697346967552 - 1778768247 - - - 140697346965504 - 1778756431 - - - 140697346962432 - 1778747485 - - - 140697346960384 - 1778385365 - - - - - - 140697346962432 - - - 140697640736768 - - 343739 - - - - 140697346967552 - - - 140697640736768 - - 1746597672 - - - - 140697346967552 - - - 140697346971136 - - 1746597937 - - - - 140697346967552 - - - 140697640736768 - - 1 - - - - 140697346962432 - - - 140697640736768 - - 1 - - - - 140697346967552 - - - 140697346971136 - - 1 - - - - 140697346967552 - - 2 - - - - 140697346962432 - - 1 - - - - 140697640736768 - - 2 - - - - 140697346971136 - - 1 - - - - - - 140697640736768 - - - 140697346962432 - - 1 - - - - 140697640736768 - - - 140697346967552 - - 1 - - - - 140697346971136 - - - 140697346967552 - - 1 - - - - - - 140697346967552 - - - 140697640736768 - - 1 - - - - - - 140697640741248 - - 1 - - - - - - 140697640741248 - - 140697640740864 - 1 - - - - - - 140697640740864 - - 1 - - - - 140697640741248 - - 1 - - - - - - 140697640740864 - - 0 - 1 - - - - 140697640741248 - - 0 - 1 - - - - - 140697346970624 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/pingpong.XML b/probing-tools/systemtap/savina_xml_output/pingpong.XML deleted file mode 100644 index 8328c1235..000000000 --- a/probing-tools/systemtap/savina_xml_output/pingpong.XML +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 140020443933056 - - 1 - - - - - - 140020443933056 - - 140020443932672 - 1 - - - - - - 140020443932672 - - 1 - - - - 140020443933056 - - 1 - - - - - - 140020443932672 - - 140020443933056 - 1 - - - - 140020443933056 - - 140020443932672 - 1 - - - - - 140020443934208 - 1 - - - diff --git a/probing-tools/systemtap/savina_xml_output/recmatmult.XML b/probing-tools/systemtap/savina_xml_output/recmatmult.XML deleted file mode 100644 index 7da70b38f..000000000 --- a/probing-tools/systemtap/savina_xml_output/recmatmult.XML +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - - - - - - - - - - 140343382242304 - 503048285 - - - 140343382240256 - 503046185 - - - 140343382237184 - 503043888 - - - 140343382236160 - 503051822 - - - 140343382235136 - 503050266 - - - 140343382234112 - 503048549 - - - 140343382233088 - 503047985 - - - 140343382231040 - 503044994 - - - 140343382230016 - 503044680 - - - 140343382228992 - 503042524 - - - 140343382227968 - 503041017 - - - 140343382226944 - 503039254 - - - 140343382225920 - 503038603 - - - 140343382224896 - 503036281 - - - 140343382206464 - 503028187 - - - 140343382204416 - 503026308 - - - 140343541706752 - 502916678 - - - 140343541702656 - 502903950 - - - 140343541701632 - 502892812 - - - 140343541700608 - 502883505 - - - 140343541699584 - 502874244 - - - 140343541698560 - 502864555 - - - 140343541696512 - 502852229 - - - 140343541679104 - 502840889 - - - - - - - - - - 140343382206464 - - 1 - - - - 140343382230016 - - 1 - - - - 140343382242304 - - 1 - - - - 140343382237184 - - 1 - - - - 140343382233088 - - 1 - - - - 140343382225920 - - 1 - - - - 140343382235136 - - 1 - - - - 140343382227968 - - 1 - - - - - - 140343835494400 - - 11 - - - - 140343835494784 - - 5 - - - - - - 140343835494400 - - 140343835494784 - 11 - - - - 140343835494784 - - 140343835494400 - 5 - - - - - - 140343835494400 - - 1 - - - - 140343835494784 - - 1 - - - - - - 140343835494400 - - 140343835494784 - 1 - - - - 140343835494784 - - 140343835494400 - 1 - - - - - 140343382266880 - 1 - - - 140343382261760 - 2 - - - 140343541723136 - 3 - - - 140343407669760 - 1 - - - 140343382254080 - 1 - - - 140343382253568 - 1 - - - 140343382262272 - 1 - - - 140343382253056 - 1 - - - 140343382267392 - 1 - - - 140343835495936 - 3 - - - 140343407669248 - 1 - - - From 0155a4de3c462dc5a5db8bb9616c204958bafd50 Mon Sep 17 00:00:00 2001 From: ElieOaks Date: Tue, 26 Mar 2019 08:57:13 +0100 Subject: [PATCH 71/77] Creates a README This contains exscripts from the full repport. It is sufficient to understand the tools, how to compile them and what can be expected from them. --- probing-tools/README.md | 886 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 886 insertions(+) create mode 100644 probing-tools/README.md diff --git a/probing-tools/README.md b/probing-tools/README.md new file mode 100644 index 000000000..6b444873e --- /dev/null +++ b/probing-tools/README.md @@ -0,0 +1,886 @@ +A Probing Toolset for the Encore Programming Language + +Using DTrace and SystemTap + +Note that is this is not the full repport but ony contains certain exscripts from it to give sufficient instructions +on how the tools work and what can be expected from them. If you only want the lines to code to compile the probes +or run the parser, please see the section Prerequisites. + +### Ardalan Samimi, Ulf Sigvardsson, Joy van den Eijkhof + +### January 2019 + +``` +Abstract +Encore is an actor based programming language in development at Uppsala University. This +README describes the of two probing tools, intended to quantify the internal char- +acteristics of a running Encore program, using the tracing systems SystemTap and DTrace. +They are generators of raw data that can be processed to gain insight into the behaviour of +the Encore compiler. +``` + +## Contents + + +- 1 Introduction + - 1.1 SystemTap and DTrace +- 2 Tool specification + - 2.1 Prerequisites + - 2.1.1 Setup + - 2.1.2 Example use +- 3 Results + - 3.1 DTrace + - 3.1.1 Errors + - 3.2 SystemTap + - 3.2.1 Errors + - 3.3 Data Output +- 5 Bibliography +- Appendices +- A Contributions + - A.1 Joy van den Eijkhof + - A.2 Ulf Sigvardsson + - A.3 Ardalan Samimi +- B Source Code, DTrace Probes +- C Source Code, SystemTap Probes +- D XML Tags Specification +- E Example Output + +### 1.1 SystemTap and DTrace + +DTrace is a dynamic tracing framework for MacOS, while SystemTap is a tracing framework for +Linux based operating systems. These tracing frameworks allow for probing and tracing the be- +haviour of a computer program. Aside from allowing for actions such as tracing method calls in +user space, measuring the number of objects created of a specific class et cetera, the primary benefit +of a probing tool is the ability to measure kernel level execution within a user space program, not +usually accessible by the programmer. System calls such as memory allocation, scheduler activity +and CPU diagnostics can be probed, giving a deeper insight of the behaviour of a program or system. + +Tracing is done by writing scripts and applying them to a program to trace. DTrace scripts are +written in the D language [4] and SystemTap scripts in the SystemTap Scripting Language[2]. These +scripts are written using probes. A probe is a handle into a a specific application or kernel event. +The probe fires when the code related to the event is executed. + +A script consists of dynamic probes, each associated with an action. When the condition of a probe +is met, the probe fires. + +The general syntax of a DTrace probe is + + +provider:module:function:name +/predicate/ +{ +//action statements +} + +The work to be done when a probe is fired is written in the probe body. Thefunctionfield +specifies the function to be probed, such asmalloc, andnamespecifies what action to trace, e.g. +entry, firing at the entry of the function. Probes may take arguments that can then be referenced +in the probe body. Additionally, a slew of built-in variables such as the process ID of the current +process, the current CPU and the current thread executing is accessible in both tracing languages. +By using these variables and the arguments, data regarding the traced program can be accumulated +and presented in a comprehensive way. Furthermore, a predicate can be specified in order to discard +probes not of interest. + +The SystemTap equivalence is + +probe event +{ +//action statements +} + +The event field contains information regarding what tracing event is being probed, and multiple +events can be attached to the same probe and separated by a comma. It can, for example, specify +that it is probing for a kernel function in a specific kernel source file, or for the event that a static +probe is fired. The probe body contains instructions to be executed, and works mostly the same +way as for DTrace. + +## 2 Tool specification + +This section describes the tools that has been developed. The DTrace and SystemTap scripts both have +two output modes, either outputting data in a human readable format or in XML format. + +### 2.1 Prerequisites + +The DTrace tool requires a computer running the operating system MacOS with DTrace installed. +The SystemTap tool requires a Linux operating system with SystemTap installed. To run the +parser, NodeJS and the Node Package Manager is required. + +#### 2.1.1 Setup + +In order for the probing tools to function, the Encore compiler must be built with the probes en- +abled. This can be done by the following command:make use=dtrace. Furthermore, for certain +probes to function on MacOS, System Integrity Protection must be turned off[6]. + +As the parser uses various external packages, run the following command in theprobing-tools/parser +subdirectory to install these. + +``` +npm install +``` +#### 2.1.2 Example use + +To probe a program using DTrace and retrieve the information in XML format, from the command +line, run + +``` +dtrace -o ../output.xml -Cs dtrace.d -c ./[target binary] XML +``` +This assumes that the working directory isprobing-tools/dtrace, paths would have to be +modified accordingly if this is not the case. To display the default output, substitute theXML +argument withNORMAL. + +The flags used in this example are: + +- -o: redirects the output of the script tooutput.xml. +- -C: enables preprocessing of C code, enabling C structs et cetera. +- -s: specifies a DTrace script to use when probing. + + +- -c: specifies an executable for DTrace to probe. + +To probe the program using SystemTap, from the command line, run + +``` +stap systemTapXML.stp -c [target binary} -o output.XML +``` +This assumes that the working directory isprobing-tools/systemtap. To display the default +output, run with the SystemTap scriptsystemTap.stpinstead. + +The flags used in the example are: + +- -c: specifies the compiled Encore program, whose execution determines when the probing + begins and ends. +- -o: specifies the output file that will contain the output from the probing tool, and not from + the program being probed. + +To parse the XML output, simply run the following command: + +``` +node parser/index.js /path/to/output.xml +``` +This assumes that the working directory isprobing-tools. + + +## 3 Results + +Here follows the results of probing the selected Savina benchmark tests with both probing tools. +Errors encountered are covered as well as suggestions on how to avoid them. + +### 3.1 DTrace + +When applying the DTrace tool to the existing Savina Benchmark Suite Encore programs, these +were the results. + +#### 3.1.1 Errors + +Two common errors are related toaggregation buffer sizeanddynamic variable space size. These +correspond to the number of entries in a given aggregation and the maximum size of an associated +array, respectively. Since the nature of Encore, as an actor based language, often require vast num- +bers of actors, the default limits of these variables are often surpassed. + +To modify the maximum aggregation size for the DTrace script, option-x aggsize=Nmmust be +passed to DTrace, whereNis the desired aggregation size in megabytes. For the benchmarks tested, +16MB has been sufficient to avoid any errors. + +The maximum dynamic variable size is modified similarly with-x dynvarsize=Nm. A value of +8MB allowed for the benchmarks to pass. + + +### 3.2 SystemTap + +When applying the SystemTap tool to the existing Savina Benchmark Suite Encore programs, these +were the results. + +#### 3.2.1 Errors + +As these benchmark tests are meant to be stress tests, some programs create a multitude of futures or +actors, or create some other kind of edge case to explore how Encore fares under those circumstances. +Applying the SystemTap probing tool to some of these programs did not work. SystemTap has +certain limitations, such as how many of one probe it can handle, how much memory it allows +for its arrays and how many actions it is allowed to perform per dynamic probing event. When +these limitations are exceeded, the tracing script aborts its execution. Below are the the encountered +errors, and the reason for the failure and what remedies were possible to make SystemTap functional. + +**Probe overhead exceeded threshold** This is a run-time error, generated when the han- +dle time of some probe is greater than the allowed fraction of the total real time of the trac- +ing program. It was encountered when applying the probing script to the benchmark program +ThreadRing, which creates and sends a large amount of messages, resulting in the dynamic probe +actor-msg-sendtaking up too much of the total probing time. This can be remedied by ignoring +such time limits by executing the probing tool with the flags-gand --suppress-time-limits +[1]. However, the-gflag enables what is calledguru-mode, removing code and data memory +reference protection, and is not recommended for inexperienced users due to potentially unsafe +operations [2]. + +**MAXMAPENTRIES** Run-time error generated if any array exceeds the pre-defined, or default maxi- +mum number of rows. In the probing tool, no arrays have a predefined size, thus certain benchmark +tests create more than 2048 entries that is the default maximum. This error was encountered when +attempting to probe benchmark programs that generated either a lot of futures or actors, such +asForkJoin, which measures the time it takes to create and terminate actors, and does so by +creating a multitude of actors. It is possible to increase this maximum by recompiling the probing +tool with the flag-DMAXMAPENTRIE=NN, whereNNis the new threshold [11]. + +**MAXACTION** This is another run-time error that is generated due to too many actions occurring +within a probe, as a probe may at most execute 1000 instructions at any event. This was generated +inside of the final probeprobe end, executed upon the completion of the probing. Within it, all +data is printed usingforeach-loops. When applying the probing tool to benchmarks generating +a lot of actors or futures, each actor might be listed to count how many times it was stolen by a +scheduler for example, easily surpassing the default maximum. This threshold can be increased by +recompiling the probing tool with the flag-DMAXACTION=NN, whereNNis the new threshold [1]. + +**Transport failure** This error is generated when there are too many output printing state- +ments. As the probing output is entirely made up of printing statements, this can be expected to +occur for the same reason as withMAXACTION, namely too many actors or futures for which to +print collected data. This be avoided by running the probing tool with a greater trace buffer by +compiling with the flag-s NN, whereNNis the new threshold in MB. In this case, however,NN + + +must be between 1 and 4095[1], and as a result of this constraint certain benchmark tests could not +be probed. + +### 3.3 Data Output + +Assuming that the probing occurred without problems, the results from the probing will either +print out to standard output, or to an indicated output file. The XML output can then be parsed +using the provided parser, or handled as desired as any XML output can be. An example of a part +of an output handled by the created parser can be seen in Appendix E. It shows which schedulers +have been successful and unsuccessful in stealing work from another scheduler. + +The actors, futures, and schedulers can be identified by their IDs (e.g. memory addresses), and are +presented as integers in the output, corresponding to these addresses. The goal was to be able to +map an actor’s address to the name of the active class that it was an instance of. However, due to +the way that these names is stored in Encore, our attempts were unsuccessful. + +## 5 Bibliography + +References + +``` +[1] William Cohen Don Domingo.Exhausted resource errors. +url:https://sourceware.org/systemtap/wiki/TipExhaustedResourceErrors +(visited on [visited on 03/25/2019]). +[2] William Cohen Don Domingo.SystemTap Beginners Guide. +url:https://sourceware.org/systemtap/SystemTap_Beginners_Guide/(vis- +ited on [visited on 03/22/2019]). +[3] William Cohen Don Domingo.SystemTap Tapset Reference Manual. +url:https://sourceware.org/systemtap/tapsets/index.html/(visited on +[visited on 03/22/2019]). +[4] The D Language Foundation.D Programming Language. +url:https://dlang.org(visited on [visited on 02/01/2019]). +[5] Shams Imam and Vivek Sarkar.Savina - An Actor Benchmark Suite. Rice University, Hous- +ton, USA., 2014. +[6] Joseph Keller.How to turn off System Integrity Protection on your Mac. +url:https://www.imore.com/how-turn-system-integrity-protection- +macos(visited on [visited on 03/26/2019]). +[7] Oracle.About DTrace. +url:http://dtrace.org/blogs/about/(visited on [visited on 02/01/2019]). +[8] Oracle.DTrace Aggregations. +url:https://docs.oracle.com/cd/E18752_01/html/819-5488/gcggh.html +(visited on [visited on 02/01/2019]). +[9] Oracle.DTrace Built-in Variables. +url:https : / / www. oracle. com / technetwork / server - storage / solaris / +dtrace-built-in-vars-137322.html(visited on [visited on 02/01/2019]). +``` +[10] Oracle.DTrace Providers. +url:https : / / www. oracle. com / technetwork / server - storage / solaris / +dtrace-providers-140248.html(visited on [visited on 02/01/2019]). + +[11] SystemTap Language Reference. +url:https://sourceware.org/systemtap/langref.pdf(visited on [visited on +03/25/2019]). + +[12] The Encore Programming Language. +url:https://stw.gitbooks.io/the-encore-programming-language/content/ +nutshell.html(visited on [visited on 02/01/2019]). + + +## Appendices + +## A Contributions + +This section covers each team member’s contribution to the project. + +### A.1 Joy van den Eijkhof + +Joy van den Eijkhof has written the SystemTap scripts, in close collaboration with Ardalan Samimi +and Ulf Sigvardsson to solve mutual problems in the different versions the probing tools, and to make +sure the same data is produced in a similar fassion so the tools could be consider interchangable. + +### A.2 Ulf Sigvardsson + +Ulf Sigvardsson has, together with Ardalan Samimi, written the DTrace script and in close col- +laboration with Joy van den Eijkhof to solve mutual problems, and make descisions regarding the +DTrace and SystemTap probing tools + +### A.3 Ardalan Samimi + +Ardalan Samimi has written the parser, and has together with Ulf Sigvardsson, written the DTrace +script in close collaboration with Joy van den Eijkhof to solve mutual problems, and make decisions +regarding the DTrace and SystemTap probing tools. + + +## B Source Code, DTrace Probes + +pony$target:::actor-msg-send { +@counts[probename] = count(); +} + +``` +Figure 2: DTrace implementation ofactor-msg-send +``` +// arg0: scheduler +// arg1: the actor +pony$target:::actor-scheduled { +cpus[arg1].cpu = cpu;// current CPU of the actor +} + +``` +Figure 3: DTrace implementation ofactor-scheduled +``` +// arg1: pointer to the future structure +encore +$target:::future-create { +@counts[probename] = count(); +// Used for lifetime of a future +future-create-starttime[arg1] = timestamp; +} + +``` +Figure 4: DTrace implementation offuture-create +``` +// arg0: actor context +// arg1: pointer to the future struct +encore$target:::future-block { +ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); +actorPointer = (uintptr_t)ctx->current; +@counts[probename] = count(); +@future_block[arg1] = count(); +@actor_blocked[actorPointer] = count(); +@future_blocked_actor[arg1, actorPointer] = count(); +future_block_starttime[arg1, actorPointer] = timestamp; +} + +``` +Figure 5: DTrace implementation offuture-block. +``` + +// arg0: actor context +// arg1: pointer to future struct +encore$target:::future-unblock { +ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); +actorPointer = (uintptr_t)ctx->current; +@counts[probename] = count(); +@future_block_lifetime[arg1, actorPointer] = +sum(timestamp - future_block_starttime[arg1, actorPointer]); +} + +``` +Figure 6: DTrace implementation offuture-unblock +``` +// arg0: actor context +// arg1: pointer to the future struct +// arg2: the type being returned by the future +encore$target:::future-chaining { +@counts[probename] = count(); +@future_chaining[arg1] = count(); +} + +``` +Figure 7: DTrace implementation offuture-chaining +``` +// arg0: actor context +// arg1: pointer to the future struct +encore$target:::future-get { +ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); +actorPointer = (uintptr_t)ctx->current; +@future_get[actorPointer, arg1] = count(); +@counts[probename] = count(); +} + +``` +Figure 8: DTrace implementation offuture-get +``` +// arg1: pointer to the future struct +encore$target:::future-destroy { +@counts[probename] = count(); +@future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); +} + +``` +Figure 9: DTrace implementation offuture-destroy +``` + +// arg0: the scheduler that stole the job +// arg1: the victim that the scheduler stole from +// arg2: actor that was stolen from the victim +pony$target:::work-steal-successful { +**if** (cpu != cpus[arg2].cpu) { +@counts["core-switches"] = count(); +} + +@counts[probename] = count(); +@counts["work-steal-attempt"] = count(); +@steal_success_count[arg0] = count(); +@successful_steal_from_scheduler[arg0, arg1] = count(); +@stolen_actor[arg2] = count(); +} + +``` +Figure 10: DTrace implementation ofwork-steal-successful +``` +// arg0: the scheduler that attempted theft $ +// arg1: the scheduler failed to steal from +pony$target:::work-steal-failure { +@counts["work-steal-attempt"] = count(); +@counts[probename] = count(); +@steal_fail_count[arg0] = count(); +@failed_steal_from_scheduler[arg0, arg1] = count(); +} + +``` +Figure 11: DTrace implementation ofwork-steal-failure +``` + +## C Source Code, SystemTap Probes + +probe process.mark("actor-msg-send") { +actor_msg_send <<< 1; +} + +``` +Figure 12: SystemTap implementation ofactor-msg-send +``` +probe process.mark("actor-scheduled") { +actor = sprint($arg2) +cpus[actor] = cpu() +} + +``` +Figure 13: SystemTap implementation ofactor-scheduled +``` +# $arg2: pointer to the future structure +probe process.mark("future-create") { +future_create <<< 1; +future = sprint($arg2) +future-create-starttime[future] = gettimeofday_ns() +} + +``` +Figure 14: SystemTap implementation offuture-create +``` +# $arg1: pointer context +# $arg2: pointer to the future struct +probe process.mark("future-block") { +actor = sprint(@cast($arg1, "pony_ctx_t")->current) +future = sprint($arg2) +future_block <<< 1 +future_block_count[future] <<< 1 +actor_block_count[actor] <<< 1 +future_block_actor[future, actor] <<< 1 +list_future_block_lifetime[future, actor] = gettimeofday_ns() +} + +``` +Figure 15: SystemTap implementation offuture-block. +``` + +# $arg1: actor context +# $arg2: pointer to future struct +probe process.mark("future-unblock") { +actor = sprint(@cast($arg1, "pony_ctx_t")->current) +future = sprint($arg2) +future_unblock <<< 1 +list_future_block_lifetime[future, actor] = +gettimeofday_ns()-list_future_block_lifetime[future, actor] +} + +``` +Figure 16: SystemTap implementation offuture-unblock +``` +# $arg1: actor context +# $arg2: pointer to the future struct +# $arg3: the type being returned by the future +probe process.mark("future-chaining") { +future_chaining <<< 1 +future = sprint($arg2) +chained_actor_future_list[future] <<< 1; +} + +``` +Figure 17: SystemTap implementation offuture-chaining +``` +# $arg1: actor context +# $arg2: pointer to the future struct +probe process.mark("future-get") { +actor = sprint(@cast($arg1, "pony_ctx_t")->current) +future = sprint($arg2) +actor_get_future[actor, future] <<< 1 +future_get <<< 1 +} + +``` +Figure 18: SystemTap implementation offuture-get +``` +probe process.mark("future-destroy") { +future_destroy <<< 1 +future = sprint($arg2) +list_future_lifetime[future] = gettimeofday_ns()-list_future_lifetime[future] +} + +``` +Figure 19: SystemTap implementation offuture-destroy +``` + +probe process.mark("work-steal-successful") { +scheduler = sprint($arg1) +victim = sprint($arg2) +actor = sprint($arg3) + +**if** (cpu() != cpus[actor]) { +core_switches <<< 1 +cpus[actor] = cpu() +} +successful_steals <<< 1 +total_steals <<< 1 +steal_success_count[scheduler] <<< 1 +stolen_actor[actor] <<< 1 +successful_steal_from_scheduler[scheduler, victim] <<< 1 +} + +``` +Figure 20: SystemTap implementation ofwork-steal-successful +``` +# $arg1: the scheduler that attempted theft $ +# $arg2: the scheduler failed to steal from +probe process.mark("work-steal-failure") { +scheduler = sprint($arg1) +victim = sprint($arg2) +failed_steals <<< 1; +total_steals <<< 1; +failed_steals_count[scheduler] <<< 1 +scheduler_from_scheduler_fail[scheduler, victim] <<< 1 +} + +``` +Figure 21: SystemTap implementation ofwork-steal-failure +``` + +## D XML Tags Specification + +The XML tags used for the input file for the parser is described below. The document must start +and end with theroottag. + +### id + +Represents an id. Its value must be an integer. + +``` +< id >... +``` +### duration + +Represents a duration. Its value must be an integer. + +``` +< duration >... +``` +### future + +Represents a future. Consists of at least theelement. It may also optionally contain +element. + +< **future** > +< **id** >... +< **duration** >... + + +### actor + +Represents an actor and consists of theelement. + +``` +< actor > +< id >... + +``` +### scheduler + +Represents a scheduler and consists of theelement. + +### futures + +Encloseselements and holds information on all futures created during the runtime. This +tag must not consist of any other elements. + + +``` +< scheduler > +< id >... + +``` +``` +< futures > +< future > +< id >X1 +< duration >Y1 + +< future > +< id >X2 +< duration >Y2 + + +``` +### counts + +Encloses tags describing the number of times a probe has been fired. Child tags are of the format +seen below, whereXandY are integers andname-of-enumerationis the name of the probe +fired. + +``` +< counts > +< name-of-enumeration count="X" /> +< name-of-enumeration count="Y" /> + +``` +### future-blocks + +This tag encapsulates data gathered on future blocking and consists of several child elements: +future-block-lifetime,future-block-actor-count,future-block-countand +actor-block-count. + +### future-block-lifetime + +Child element of thetag. Describes how long a future has blocked a certain +actor. Consists of aelement, anelement and theelement. + + +``` +< future-block-lifetime > +< future > +< id >... + +< actor > +< id >... + +< duration >... + +``` +### future-block-actor-count + +Child element of thetag. Describes how many times a future has blocked a +certain actor. Consists of aelement, anelement and theelement. + +``` +< future-block-actor-count > +< future > +< id >... + +< actor > +< id >... + +< count >... + +``` +### future-block-count + +Child element of thetag. Describes how many times a future has blocked in +total. Consists of aelement and theelement. + +``` +< future-block-count > +< future > +< id >... + +< count >... + +``` +### actor-block-count + +Child element of thetag. Describes how many times an actor has been blocked +in total. Consists of anelement and theelement. + + +``` +< actor-block-count > +< actor > +< id >... + +< count >... + +``` +### actor-block-count + +Child element of thetag. Describes how many times an actor has been blocked +in total. Consists of anelement and theelement. + +``` +< actor-block-count > +< actor > +< id >... + +< count >... + +``` +### future-gets + +This tag encloseselements. + +### future-get + +Child element of theelement. Describes how many times an actor has called +geton a future. Consists of the,andelements. + +``` +< future-get > +< actor >< id >... +< future >< id >... +< count >... + +``` +### future-chainings + +This tag encloseselements. + +### future-chaining + +Child element of theelement. Describes how many times a future has +been chained. Consists of theandelements. + + +``` +< future-get > +< actor >< id >... +< future >< id >... +< count >... + +``` +### work-steal-successes + +This tag encloseselements. + +### work-steal-success-from + +This tag encloseselements, with the requirement that these elements +contains theelement. + +### work-steal-failures + +This tag encloseselements. + +### work-steal-success-failure-from + +This tag encloseselements, with the requirement that these elements +contains theelement. + +### work-steal-success + +Describes how many times a scheduler has successfully stolen work from another. Consists of the +andelements. It may also contain the optional element. + +``` +< work-steal-success > +< scheduler >< id >... +< victim >... +< count >... + +``` +### work-steal-failure + +Describes how many times a scheduler has failed to steal work from another. Consists of the +andelements. It may also contain the optional element. + + +``` +< work-steal-failure > +< scheduler >< id >... +< victim >... +< count >... + +``` +### actor-stolen + +Describes how many times an actor has switched scheduler. Consists of theand +elements. + +``` +< actor-stolen > +< actor >< id >... +< count >... + +``` + +## E Example Output + +------------------------------- Schedulers ------------------------------ +------------------------------------------------------------------------- +| (index) | id | successfulSteals | failedSteals | +------------------------------------------------------------------------- +| 139717569259520 | '139717569259520' | 93 | 1 | +| 139717569259904 | '139717569259904' | 2 | 1 | +------------------------------------------------------------------------- + +--------------------------- Work steal success --------------------------- +----------------------------------------------------------- +| (index) | scheduler | victim | count | +|---------------------------------------------------------| +| 0 | '139717569259520' | '139717569259904' | 93 | +| 1 | '139717569259904' | '139717569259520' | 2 | +----------------------------------------------------------- + +--------------------------- Work steal failure --------------------------- +----------------------------------------------------------- +| (index) | scheduler | victim | count | +|---------------------------------------------------------| +| 0 | '139717569259520' | '139717569259904' | 1 | +| 1 | '139717569259904' | '0' | 1 | +----------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 91970afa6739048f0080a030cb7f400c4f1fcdca Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:39:32 +0100 Subject: [PATCH 72/77] Update README --- probing-tools/README.md | 938 +++++----------------------------------- 1 file changed, 109 insertions(+), 829 deletions(-) diff --git a/probing-tools/README.md b/probing-tools/README.md index 6b444873e..8d6c3192d 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -1,886 +1,166 @@ -A Probing Toolset for the Encore Programming Language +# Probing toolsets for Encore -Using DTrace and SystemTap +These probing tools allows the user to gain insight into how many actors and futures are created, how work stealing occurs, succeeds or fails, and how many messages are sent and more, in a running Encore program. -Note that is this is not the full repport but ony contains certain exscripts from it to give sufficient instructions -on how the tools work and what can be expected from them. If you only want the lines to code to compile the probes -or run the parser, please see the section Prerequisites. +## Table of contents -### Ardalan Samimi, Ulf Sigvardsson, Joy van den Eijkhof +* [Installation](#installation) + * [Prerequisites](#prerequisites) + * [Setup](#setup) + * [MacOS 10.11+](#macos-10.11+) + * [Parser](#parser) +* [Usage](#usage) + * [Dtrace](#dtrace) + * [SystemTap](#systemtap) + * [Parsing](#parsing) +* [Further work](#further-work) +* [Authors](#authors) -### January 2019 +## Installation -``` -Abstract -Encore is an actor based programming language in development at Uppsala University. This -README describes the of two probing tools, intended to quantify the internal char- -acteristics of a running Encore program, using the tracing systems SystemTap and DTrace. -They are generators of raw data that can be processed to gain insight into the behaviour of -the Encore compiler. -``` - -## Contents - - -- 1 Introduction - - 1.1 SystemTap and DTrace -- 2 Tool specification - - 2.1 Prerequisites - - 2.1.1 Setup - - 2.1.2 Example use -- 3 Results - - 3.1 DTrace - - 3.1.1 Errors - - 3.2 SystemTap - - 3.2.1 Errors - - 3.3 Data Output -- 5 Bibliography -- Appendices -- A Contributions - - A.1 Joy van den Eijkhof - - A.2 Ulf Sigvardsson - - A.3 Ardalan Samimi -- B Source Code, DTrace Probes -- C Source Code, SystemTap Probes -- D XML Tags Specification -- E Example Output - -### 1.1 SystemTap and DTrace - -DTrace is a dynamic tracing framework for MacOS, while SystemTap is a tracing framework for -Linux based operating systems. These tracing frameworks allow for probing and tracing the be- -haviour of a computer program. Aside from allowing for actions such as tracing method calls in -user space, measuring the number of objects created of a specific class et cetera, the primary benefit -of a probing tool is the ability to measure kernel level execution within a user space program, not -usually accessible by the programmer. System calls such as memory allocation, scheduler activity -and CPU diagnostics can be probed, giving a deeper insight of the behaviour of a program or system. - -Tracing is done by writing scripts and applying them to a program to trace. DTrace scripts are -written in the D language [4] and SystemTap scripts in the SystemTap Scripting Language[2]. These -scripts are written using probes. A probe is a handle into a a specific application or kernel event. -The probe fires when the code related to the event is executed. - -A script consists of dynamic probes, each associated with an action. When the condition of a probe -is met, the probe fires. - -The general syntax of a DTrace probe is - - -provider:module:function:name -/predicate/ -{ -//action statements -} - -The work to be done when a probe is fired is written in the probe body. Thefunctionfield -specifies the function to be probed, such asmalloc, andnamespecifies what action to trace, e.g. -entry, firing at the entry of the function. Probes may take arguments that can then be referenced -in the probe body. Additionally, a slew of built-in variables such as the process ID of the current -process, the current CPU and the current thread executing is accessible in both tracing languages. -By using these variables and the arguments, data regarding the traced program can be accumulated -and presented in a comprehensive way. Furthermore, a predicate can be specified in order to discard -probes not of interest. - -The SystemTap equivalence is - -probe event -{ -//action statements -} - -The event field contains information regarding what tracing event is being probed, and multiple -events can be attached to the same probe and separated by a comma. It can, for example, specify -that it is probing for a kernel function in a specific kernel source file, or for the event that a static -probe is fired. The probe body contains instructions to be executed, and works mostly the same -way as for DTrace. - -## 2 Tool specification - -This section describes the tools that has been developed. The DTrace and SystemTap scripts both have -two output modes, either outputting data in a human readable format or in XML format. - -### 2.1 Prerequisites - -The DTrace tool requires a computer running the operating system MacOS with DTrace installed. -The SystemTap tool requires a Linux operating system with SystemTap installed. To run the -parser, NodeJS and the Node Package Manager is required. - -#### 2.1.1 Setup - -In order for the probing tools to function, the Encore compiler must be built with the probes en- -abled. This can be done by the following command:make use=dtrace. Furthermore, for certain -probes to function on MacOS, System Integrity Protection must be turned off[6]. - -As the parser uses various external packages, run the following command in theprobing-tools/parser -subdirectory to install these. - -``` -npm install -``` -#### 2.1.2 Example use +The toolset works only on MacOS, BSD or Linux systems. -To probe a program using DTrace and retrieve the information in XML format, from the command -line, run +### Prerequisites -``` -dtrace -o ../output.xml -Cs dtrace.d -c ./[target binary] XML -``` -This assumes that the working directory isprobing-tools/dtrace, paths would have to be -modified accordingly if this is not the case. To display the default output, substitute theXML -argument withNORMAL. +* DTrace / SystemTap +* NodeJS (**above version 8**) -The flags used in this example are: +### Setup -- -o: redirects the output of the script tooutput.xml. -- -C: enables preprocessing of C code, enabling C structs et cetera. -- -s: specifies a DTrace script to use when probing. +In order for the probing tools to function, the Encore compiler must first be built with DTrace probes enabled, which can be done with the following command: - -- -c: specifies an executable for DTrace to probe. - -To probe the program using SystemTap, from the command line, run - -``` -stap systemTapXML.stp -c [target binary} -o output.XML +```bash +$ make config=release use=dtrace ``` -This assumes that the working directory isprobing-tools/systemtap. To display the default -output, run with the SystemTap scriptsystemTap.stpinstead. -The flags used in the example are: +#### MacOS 10.11+ -- -c: specifies the compiled Encore program, whose execution determines when the probing - begins and ends. -- -o: specifies the output file that will contain the output from the probing tool, and not from - the program being probed. +Systems running MacOS 10.11 or above, must first disable **System Integrity Protection** (SIP) for DTrace to work. This can be done by booting into recovery mode, and running the following commands in the Terminal: -To parse the XML output, simply run the following command: - -``` -node parser/index.js /path/to/output.xml +```bash +$ csrutil clear +$ csrutil enable --without dtrace ``` -This assumes that the working directory isprobing-tools. - - -## 3 Results - -Here follows the results of probing the selected Savina benchmark tests with both probing tools. -Errors encountered are covered as well as suggestions on how to avoid them. - -### 3.1 DTrace - -When applying the DTrace tool to the existing Savina Benchmark Suite Encore programs, these -were the results. - -#### 3.1.1 Errors - -Two common errors are related toaggregation buffer sizeanddynamic variable space size. These -correspond to the number of entries in a given aggregation and the maximum size of an associated -array, respectively. Since the nature of Encore, as an actor based language, often require vast num- -bers of actors, the default limits of these variables are often surpassed. - -To modify the maximum aggregation size for the DTrace script, option-x aggsize=Nmmust be -passed to DTrace, whereNis the desired aggregation size in megabytes. For the benchmarks tested, -16MB has been sufficient to avoid any errors. - -The maximum dynamic variable size is modified similarly with-x dynvarsize=Nm. A value of -8MB allowed for the benchmarks to pass. - - -### 3.2 SystemTap - -When applying the SystemTap tool to the existing Savina Benchmark Suite Encore programs, these -were the results. - -#### 3.2.1 Errors - -As these benchmark tests are meant to be stress tests, some programs create a multitude of futures or -actors, or create some other kind of edge case to explore how Encore fares under those circumstances. -Applying the SystemTap probing tool to some of these programs did not work. SystemTap has -certain limitations, such as how many of one probe it can handle, how much memory it allows -for its arrays and how many actions it is allowed to perform per dynamic probing event. When -these limitations are exceeded, the tracing script aborts its execution. Below are the the encountered -errors, and the reason for the failure and what remedies were possible to make SystemTap functional. -**Probe overhead exceeded threshold** This is a run-time error, generated when the han- -dle time of some probe is greater than the allowed fraction of the total real time of the trac- -ing program. It was encountered when applying the probing script to the benchmark program -ThreadRing, which creates and sends a large amount of messages, resulting in the dynamic probe -actor-msg-sendtaking up too much of the total probing time. This can be remedied by ignoring -such time limits by executing the probing tool with the flags-gand --suppress-time-limits -[1]. However, the-gflag enables what is calledguru-mode, removing code and data memory -reference protection, and is not recommended for inexperienced users due to potentially unsafe -operations [2]. +If it still does not work, you may disable SIP entirely, with the command ``csrutil disable`` (but do this at your own risk). -**MAXMAPENTRIES** Run-time error generated if any array exceeds the pre-defined, or default maxi- -mum number of rows. In the probing tool, no arrays have a predefined size, thus certain benchmark -tests create more than 2048 entries that is the default maximum. This error was encountered when -attempting to probe benchmark programs that generated either a lot of futures or actors, such -asForkJoin, which measures the time it takes to create and terminate actors, and does so by -creating a multitude of actors. It is possible to increase this maximum by recompiling the probing -tool with the flag-DMAXMAPENTRIE=NN, whereNNis the new threshold [11]. +#### Parser -**MAXACTION** This is another run-time error that is generated due to too many actions occurring -within a probe, as a probe may at most execute 1000 instructions at any event. This was generated -inside of the final probeprobe end, executed upon the completion of the probing. Within it, all -data is printed usingforeach-loops. When applying the probing tool to benchmarks generating -a lot of actors or futures, each actor might be listed to count how many times it was stolen by a -scheduler for example, easily surpassing the default maximum. This threshold can be increased by -recompiling the probing tool with the flag-DMAXACTION=NN, whereNNis the new threshold [1]. +To setup the parser, just run ``npm install`` in the subdirectory ``probing-tools/parser``. -**Transport failure** This error is generated when there are too many output printing state- -ments. As the probing output is entirely made up of printing statements, this can be expected to -occur for the same reason as withMAXACTION, namely too many actors or futures for which to -print collected data. This be avoided by running the probing tool with a greater trace buffer by -compiling with the flag-s NN, whereNNis the new threshold in MB. In this case, however,NN +## Usage +Although the two scripts give the same output, depending on whether you have DTrace or SystemTap on your system, the usage will differ somewhat. -must be between 1 and 4095[1], and as a result of this constraint certain benchmark tests could not -be probed. -### 3.3 Data Output -Assuming that the probing occurred without problems, the results from the probing will either -print out to standard output, or to an indicated output file. The XML output can then be parsed -using the provided parser, or handled as desired as any XML output can be. An example of a part -of an output handled by the created parser can be seen in Appendix E. It shows which schedulers -have been successful and unsuccessful in stealing work from another scheduler. +### DTrace -The actors, futures, and schedulers can be identified by their IDs (e.g. memory addresses), and are -presented as integers in the output, corresponding to these addresses. The goal was to be able to -map an actor’s address to the name of the active class that it was an instance of. However, due to -the way that these names is stored in Encore, our attempts were unsuccessful. - -## 5 Bibliography - -References +To probe a program using DTrace, run the following command: ``` -[1] William Cohen Don Domingo.Exhausted resource errors. -url:https://sourceware.org/systemtap/wiki/TipExhaustedResourceErrors -(visited on [visited on 03/25/2019]). -[2] William Cohen Don Domingo.SystemTap Beginners Guide. -url:https://sourceware.org/systemtap/SystemTap_Beginners_Guide/(vis- -ited on [visited on 03/22/2019]). -[3] William Cohen Don Domingo.SystemTap Tapset Reference Manual. -url:https://sourceware.org/systemtap/tapsets/index.html/(visited on -[visited on 03/22/2019]). -[4] The D Language Foundation.D Programming Language. -url:https://dlang.org(visited on [visited on 02/01/2019]). -[5] Shams Imam and Vivek Sarkar.Savina - An Actor Benchmark Suite. Rice University, Hous- -ton, USA., 2014. -[6] Joseph Keller.How to turn off System Integrity Protection on your Mac. -url:https://www.imore.com/how-turn-system-integrity-protection- -macos(visited on [visited on 03/26/2019]). -[7] Oracle.About DTrace. -url:http://dtrace.org/blogs/about/(visited on [visited on 02/01/2019]). -[8] Oracle.DTrace Aggregations. -url:https://docs.oracle.com/cd/E18752_01/html/819-5488/gcggh.html -(visited on [visited on 02/01/2019]). -[9] Oracle.DTrace Built-in Variables. -url:https : / / www. oracle. com / technetwork / server - storage / solaris / -dtrace-built-in-vars-137322.html(visited on [visited on 02/01/2019]). +$ dtrace -o ../output.xml -Cs dtrace.d -c ./[target binary] XML ``` -[10] Oracle.DTrace Providers. -url:https : / / www. oracle. com / technetwork / server - storage / solaris / -dtrace-providers-140248.html(visited on [visited on 02/01/2019]). - -[11] SystemTap Language Reference. -url:https://sourceware.org/systemtap/langref.pdf(visited on [visited on -03/25/2019]). - -[12] The Encore Programming Language. -url:https://stw.gitbooks.io/the-encore-programming-language/content/ -nutshell.html(visited on [visited on 02/01/2019]). - - -## Appendices - -## A Contributions - -This section covers each team member’s contribution to the project. - -### A.1 Joy van den Eijkhof - -Joy van den Eijkhof has written the SystemTap scripts, in close collaboration with Ardalan Samimi -and Ulf Sigvardsson to solve mutual problems in the different versions the probing tools, and to make -sure the same data is produced in a similar fassion so the tools could be consider interchangable. - -### A.2 Ulf Sigvardsson - -Ulf Sigvardsson has, together with Ardalan Samimi, written the DTrace script and in close col- -laboration with Joy van den Eijkhof to solve mutual problems, and make descisions regarding the -DTrace and SystemTap probing tools - -### A.3 Ardalan Samimi - -Ardalan Samimi has written the parser, and has together with Ulf Sigvardsson, written the DTrace -script in close collaboration with Joy van den Eijkhof to solve mutual problems, and make decisions -regarding the DTrace and SystemTap probing tools. - -## B Source Code, DTrace Probes +This assumes that the working directory is ``probing-tools/dtrace``, and will produce an XML-file in the parent directory with the output from the DTrace script. -pony$target:::actor-msg-send { -@counts[probename] = count(); -} +**Note:** If you want the output to be in a human readable format, you can ommit the ``-o`` flag, and replace the ``XML`` argument with an arbitrary argument (you can not leave it empty, though). -``` -Figure 2: DTrace implementation ofactor-msg-send -``` -// arg0: scheduler -// arg1: the actor -pony$target:::actor-scheduled { -cpus[arg1].cpu = cpu;// current CPU of the actor -} - -``` -Figure 3: DTrace implementation ofactor-scheduled -``` -// arg1: pointer to the future structure -encore -$target:::future-create { -@counts[probename] = count(); -// Used for lifetime of a future -future-create-starttime[arg1] = timestamp; -} - -``` -Figure 4: DTrace implementation offuture-create -``` -// arg0: actor context -// arg1: pointer to the future struct -encore$target:::future-block { -ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); -actorPointer = (uintptr_t)ctx->current; -@counts[probename] = count(); -@future_block[arg1] = count(); -@actor_blocked[actorPointer] = count(); -@future_blocked_actor[arg1, actorPointer] = count(); -future_block_starttime[arg1, actorPointer] = timestamp; -} - -``` -Figure 5: DTrace implementation offuture-block. -``` - -// arg0: actor context -// arg1: pointer to future struct -encore$target:::future-unblock { -ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); -actorPointer = (uintptr_t)ctx->current; -@counts[probename] = count(); -@future_block_lifetime[arg1, actorPointer] = -sum(timestamp - future_block_starttime[arg1, actorPointer]); -} - -``` -Figure 6: DTrace implementation offuture-unblock -``` -// arg0: actor context -// arg1: pointer to the future struct -// arg2: the type being returned by the future -encore$target:::future-chaining { -@counts[probename] = count(); -@future_chaining[arg1] = count(); -} - -``` -Figure 7: DTrace implementation offuture-chaining -``` -// arg0: actor context -// arg1: pointer to the future struct -encore$target:::future-get { -ctx = ( **struct** pony_ctx_t*)copyin(arg0, sizeof( **struct** pony_ctx_t)); -actorPointer = (uintptr_t)ctx->current; -@future_get[actorPointer, arg1] = count(); -@counts[probename] = count(); -} - -``` -Figure 8: DTrace implementation offuture-get -``` -// arg1: pointer to the future struct -encore$target:::future-destroy { -@counts[probename] = count(); -@future_lifetime[arg1] = sum(timestamp - future_create_starttime[arg1]); -} - -``` -Figure 9: DTrace implementation offuture-destroy -``` - -// arg0: the scheduler that stole the job -// arg1: the victim that the scheduler stole from -// arg2: actor that was stolen from the victim -pony$target:::work-steal-successful { -**if** (cpu != cpus[arg2].cpu) { -@counts["core-switches"] = count(); -} - -@counts[probename] = count(); -@counts["work-steal-attempt"] = count(); -@steal_success_count[arg0] = count(); -@successful_steal_from_scheduler[arg0, arg1] = count(); -@stolen_actor[arg2] = count(); -} - -``` -Figure 10: DTrace implementation ofwork-steal-successful -``` -// arg0: the scheduler that attempted theft $ -// arg1: the scheduler failed to steal from -pony$target:::work-steal-failure { -@counts["work-steal-attempt"] = count(); -@counts[probename] = count(); -@steal_fail_count[arg0] = count(); -@failed_steal_from_scheduler[arg0, arg1] = count(); -} - -``` -Figure 11: DTrace implementation ofwork-steal-failure -``` - -## C Source Code, SystemTap Probes - -probe process.mark("actor-msg-send") { -actor_msg_send <<< 1; -} - -``` -Figure 12: SystemTap implementation ofactor-msg-send -``` -probe process.mark("actor-scheduled") { -actor = sprint($arg2) -cpus[actor] = cpu() -} - -``` -Figure 13: SystemTap implementation ofactor-scheduled -``` -# $arg2: pointer to the future structure -probe process.mark("future-create") { -future_create <<< 1; -future = sprint($arg2) -future-create-starttime[future] = gettimeofday_ns() -} - -``` -Figure 14: SystemTap implementation offuture-create -``` -# $arg1: pointer context -# $arg2: pointer to the future struct -probe process.mark("future-block") { -actor = sprint(@cast($arg1, "pony_ctx_t")->current) -future = sprint($arg2) -future_block <<< 1 -future_block_count[future] <<< 1 -actor_block_count[actor] <<< 1 -future_block_actor[future, actor] <<< 1 -list_future_block_lifetime[future, actor] = gettimeofday_ns() -} - -``` -Figure 15: SystemTap implementation offuture-block. -``` - -# $arg1: actor context -# $arg2: pointer to future struct -probe process.mark("future-unblock") { -actor = sprint(@cast($arg1, "pony_ctx_t")->current) -future = sprint($arg2) -future_unblock <<< 1 -list_future_block_lifetime[future, actor] = -gettimeofday_ns()-list_future_block_lifetime[future, actor] -} - -``` -Figure 16: SystemTap implementation offuture-unblock -``` -# $arg1: actor context -# $arg2: pointer to the future struct -# $arg3: the type being returned by the future -probe process.mark("future-chaining") { -future_chaining <<< 1 -future = sprint($arg2) -chained_actor_future_list[future] <<< 1; -} - -``` -Figure 17: SystemTap implementation offuture-chaining -``` -# $arg1: actor context -# $arg2: pointer to the future struct -probe process.mark("future-get") { -actor = sprint(@cast($arg1, "pony_ctx_t")->current) -future = sprint($arg2) -actor_get_future[actor, future] <<< 1 -future_get <<< 1 -} - -``` -Figure 18: SystemTap implementation offuture-get -``` -probe process.mark("future-destroy") { -future_destroy <<< 1 -future = sprint($arg2) -list_future_lifetime[future] = gettimeofday_ns()-list_future_lifetime[future] -} - -``` -Figure 19: SystemTap implementation offuture-destroy -``` - -probe process.mark("work-steal-successful") { -scheduler = sprint($arg1) -victim = sprint($arg2) -actor = sprint($arg3) - -**if** (cpu() != cpus[actor]) { -core_switches <<< 1 -cpus[actor] = cpu() -} -successful_steals <<< 1 -total_steals <<< 1 -steal_success_count[scheduler] <<< 1 -stolen_actor[actor] <<< 1 -successful_steal_from_scheduler[scheduler, victim] <<< 1 -} - -``` -Figure 20: SystemTap implementation ofwork-steal-successful -``` -# $arg1: the scheduler that attempted theft $ -# $arg2: the scheduler failed to steal from -probe process.mark("work-steal-failure") { -scheduler = sprint($arg1) -victim = sprint($arg2) -failed_steals <<< 1; -total_steals <<< 1; -failed_steals_count[scheduler] <<< 1 -scheduler_from_scheduler_fail[scheduler, victim] <<< 1 -} - -``` -Figure 21: SystemTap implementation ofwork-steal-failure -``` - -## D XML Tags Specification - -The XML tags used for the input file for the parser is described below. The document must start -and end with theroottag. - -### id - -Represents an id. Its value must be an integer. - -``` -< id >... -``` -### duration +### SystemTap -Represents a duration. Its value must be an integer. +To probe the program using SystemTap, run the following command: ``` -< duration >... +$ stap systemTapXML.stp -c [target binary} -o output.XML ``` -### future -Represents a future. Consists of at least theelement. It may also optionally contain -element. +This assumes that the working directory is ``probing-tools/systemtap``, and will produce an XML-file in the parent directory with the output from the SystemTap script. -< **future** > -< **id** >... -< **duration** >... - +**Note:** If you want the output to be in a human readable format, you may use the script ``systemTap.stp`` instead. -### actor +### Parsing -Represents an actor and consists of theelement. +A simple parser is available to parse the XMl output produced by the DTrace / SystemTap scripts. -``` -< actor > -< id >... - -``` -### scheduler - -Represents a scheduler and consists of theelement. - -### futures - -Encloseselements and holds information on all futures created during the runtime. This -tag must not consist of any other elements. - - -``` -< scheduler > -< id >... - -``` -``` -< futures > -< future > -< id >X1 -< duration >Y1 - -< future > -< id >X2 -< duration >Y2 - - -``` -### counts - -Encloses tags describing the number of times a probe has been fired. Child tags are of the format -seen below, whereXandY are integers andname-of-enumerationis the name of the probe -fired. - -``` -< counts > -< name-of-enumeration count="X" /> -< name-of-enumeration count="Y" /> - -``` -### future-blocks - -This tag encapsulates data gathered on future blocking and consists of several child elements: -future-block-lifetime,future-block-actor-count,future-block-countand -actor-block-count. - -### future-block-lifetime - -Child element of thetag. Describes how long a future has blocked a certain -actor. Consists of aelement, anelement and theelement. - - -``` -< future-block-lifetime > -< future > -< id >... - -< actor > -< id >... - -< duration >... - -``` -### future-block-actor-count - -Child element of thetag. Describes how many times a future has blocked a -certain actor. Consists of aelement, anelement and theelement. - -``` -< future-block-actor-count > -< future > -< id >... - -< actor > -< id >... - -< count >... - -``` -### future-block-count - -Child element of thetag. Describes how many times a future has blocked in -total. Consists of aelement and theelement. - -``` -< future-block-count > -< future > -< id >... - -< count >... - -``` -### actor-block-count - -Child element of thetag. Describes how many times an actor has been blocked -in total. Consists of anelement and theelement. - - -``` -< actor-block-count > -< actor > -< id >... - -< count >... - -``` -### actor-block-count - -Child element of thetag. Describes how many times an actor has been blocked -in total. Consists of anelement and theelement. - -``` -< actor-block-count > -< actor > -< id >... - -< count >... - -``` -### future-gets - -This tag encloseselements. - -### future-get - -Child element of theelement. Describes how many times an actor has called -geton a future. Consists of the,andelements. +To parse the XML output, simply run the following command: ``` -< future-get > -< actor >< id >... -< future >< id >... -< count >... - +node parser/index.js /path/to/output.xml ``` -### future-chainings -This tag encloseselements. - -### future-chaining - -Child element of theelement. Describes how many times a future has -been chained. Consists of theandelements. - - -``` -< future-get > -< actor >< id >... -< future >< id >... -< count >... - +This assumes that the working directory ``probing-tools``, and will give an organized overview of the data gathered: + +```bash +┌───────────────────────┬────────┐ +│ (index) │ Values │ +├───────────────────────┼────────┤ +│ core-switches │ 2 │ +│ work-steal-failure │ 2 │ +│ work-steal-successful │ 3 │ +│ work-steal-attempt │ 5 │ +│ actor-msg-send │ 27 │ +└───────────────────────┴────────┘ +--------------------------- ACTORS --------------------------- +┌────────────┬──────────────┬──────────────┬──────────────────────┬─────────────────────┐ +│ (index) │ id │ numberOfGets │ numberOfTimesBlocked │ numberOfTimesStolen │ +├────────────┼──────────────┼──────────────┼──────────────────────┼─────────────────────┤ +│ 4430339584 │ '4430339584' │ 0 │ 0 │ 1 │ +│ 4933481472 │ '4933481472' │ 0 │ 0 │ 2 │ +└────────────┴──────────────┴──────────────┴──────────────────────┴─────────────────────┘ +--------------------------- Schedulers --------------------------- +┌────────────┬──────────────┬──────────────────┬──────────────┐ +│ (index) │ id │ successfulSteals │ failedSteals │ +├────────────┼──────────────┼──────────────────┼──────────────┤ +│ 4430338432 │ '4430338432' │ 1 │ 1 │ +│ 4430338048 │ '4430338048' │ 2 │ 1 │ +└────────────┴──────────────┴──────────────────┴──────────────┘ +--------------------------- Work steal success --------------------------- +┌─────────┬──────────────┬──────────────┬───────┐ +│ (index) │ scheduler │ victim │ count │ +├─────────┼──────────────┼──────────────┼───────┤ +│ 0 │ '4430338432' │ '4430338048' │ 1 │ +│ 1 │ '4430338048' │ '4430338432' │ 2 │ +└─────────┴──────────────┴──────────────┴───────┘ +--------------------------- Work steal failure --------------------------- +┌─────────┬──────────────┬──────────────┬───────┐ +│ (index) │ scheduler │ victim │ count │ +├─────────┼──────────────┼──────────────┼───────┤ +│ 0 │ '4430338048' │ '0' │ 1 │ +│ 1 │ '4430338432' │ '4430338048' │ 1 │ +└─────────┴──────────────┴──────────────┴───────┘ ``` -### work-steal-successes -This tag encloseselements. +## Further work -### work-steal-success-from +While the parser allows for an automated analysis of an Encore program, currently there is no script that does anything fancy with the data. -This tag encloseselements, with the requirement that these elements -contains theelement. +The data will be collected and accessible through a few properties of the parser, as seen below: -### work-steal-failures +```js +// index.js +const parser = new Parser(nodes); +parser.start(); // Start parsing -This tag encloseselements. - -### work-steal-success-failure-from - -This tag encloseselements, with the requirement that these elements -contains theelement. - -### work-steal-success - -Describes how many times a scheduler has successfully stolen work from another. Consists of the -andelements. It may also contain the optional element. - -``` -< work-steal-success > -< scheduler >< id >... -< victim >... -< count >... - +const counts = parser.counts; // Holds a bunch of enumerations +const futures = parser.futures; // Holds info on all futures created +const futureGets = parser.futureGets; // Holds info on all future gets +const futureBlocks = parser.blocks; // Holds info on all blocks made +const actors = parser.actors; // Holds info on all actors +const schedulers = parser.schedulers; // Holds info on all schedulers +const workStealSuccess = parser.workStealSuccess; // Holds info on all successful work steals +const workStealFailure = parser.workStealFailure; // Holds info on all failed work steals ``` -### work-steal-failure - -Describes how many times a scheduler has failed to steal work from another. Consists of the -andelements. It may also contain the optional element. +For example, to get the ratio between number of messages sent and number of futures created, you can do the following: -``` -< work-steal-failure > -< scheduler >< id >... -< victim >... -< count >... - -``` -### actor-stolen +```js +const counts = parser.counts; +const ratio = parser.counts['actor-msg-send'] / parser.counts['future-create']; -Describes how many times an actor has switched scheduler. Consists of theand -elements. - -``` -< actor-stolen > -< actor >< id >... -< count >... - +console.log(ratio); ``` - -## E Example Output - -------------------------------- Schedulers ------------------------------ -------------------------------------------------------------------------- -| (index) | id | successfulSteals | failedSteals | -------------------------------------------------------------------------- -| 139717569259520 | '139717569259520' | 93 | 1 | -| 139717569259904 | '139717569259904' | 2 | 1 | -------------------------------------------------------------------------- - ---------------------------- Work steal success --------------------------- ------------------------------------------------------------ -| (index) | scheduler | victim | count | -|---------------------------------------------------------| -| 0 | '139717569259520' | '139717569259904' | 93 | -| 1 | '139717569259904' | '139717569259520' | 2 | ------------------------------------------------------------ - ---------------------------- Work steal failure --------------------------- ------------------------------------------------------------ -| (index) | scheduler | victim | count | -|---------------------------------------------------------| -| 0 | '139717569259520' | '139717569259904' | 1 | -| 1 | '139717569259904' | '0' | 1 | ------------------------------------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +## Authors +The toolset was created by [Ardalan Samimi](https://github.com/pkrll), [Ulf Sigvardsson](https://github.com/ulfsigvardsson) and [Joy van den Eijkhof](https://github.com/elieoaks). From da377bfe2d4c7fbe4d4681beaf08e208cf103233 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:41:00 +0100 Subject: [PATCH 73/77] Update README --- probing-tools/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probing-tools/README.md b/probing-tools/README.md index 8d6c3192d..648d063fa 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -7,7 +7,7 @@ These probing tools allows the user to gain insight into how many actors and fut * [Installation](#installation) * [Prerequisites](#prerequisites) * [Setup](#setup) - * [MacOS 10.11+](#macos-10.11+) + * [MacOS 10.11+](#macos-1011) * [Parser](#parser) * [Usage](#usage) * [Dtrace](#dtrace) From c38c827480efbb5b6adff4a9434a0a9cbbd77601 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:43:54 +0100 Subject: [PATCH 74/77] Update README --- probing-tools/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probing-tools/README.md b/probing-tools/README.md index 648d063fa..1470143da 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -71,7 +71,7 @@ This assumes that the working directory is ``probing-tools/dtrace``, and will pr To probe the program using SystemTap, run the following command: ``` -$ stap systemTapXML.stp -c [target binary} -o output.XML +$ stap systemTapXML.stp -c [target binary] -o output.XML ``` This assumes that the working directory is ``probing-tools/systemtap``, and will produce an XML-file in the parent directory with the output from the SystemTap script. From 1c2150e9822874a502d2c250c2033ccf9604c161 Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:45:21 +0100 Subject: [PATCH 75/77] Update README --- probing-tools/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/probing-tools/README.md b/probing-tools/README.md index 1470143da..50604c75a 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -71,7 +71,7 @@ This assumes that the working directory is ``probing-tools/dtrace``, and will pr To probe the program using SystemTap, run the following command: ``` -$ stap systemTapXML.stp -c [target binary] -o output.XML +$ stap systemTapXML.stp -c [target binary] -o ../output.XML ``` This assumes that the working directory is ``probing-tools/systemtap``, and will produce an XML-file in the parent directory with the output from the SystemTap script. @@ -80,7 +80,7 @@ This assumes that the working directory is ``probing-tools/systemtap``, and will ### Parsing -A simple parser is available to parse the XMl output produced by the DTrace / SystemTap scripts. +A simple parser is available to parse the XML output produced by the DTrace / SystemTap scripts. To parse the XML output, simply run the following command: From b773acf6169aea0729f3aa5cc0ca8f5b4c15301b Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:47:43 +0100 Subject: [PATCH 76/77] Update README --- probing-tools/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/probing-tools/README.md b/probing-tools/README.md index 50604c75a..85b6bca31 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -66,6 +66,12 @@ This assumes that the working directory is ``probing-tools/dtrace``, and will pr **Note:** If you want the output to be in a human readable format, you can ommit the ``-o`` flag, and replace the ``XML`` argument with an arbitrary argument (you can not leave it empty, though). +**Note:** If you need to pass an argument to the Encore program, you may do that by enclosing the target binary and the arguments in quotation marks, like so: + +``` +$ dtrace -o ../output.xml -Cs dtrace.d -c "./[target binary] someArgument" XML +``` + ### SystemTap To probe the program using SystemTap, run the following command: From da4ac15e33e937d73d22eb021dee3e05f0445a2e Mon Sep 17 00:00:00 2001 From: Ardalan Samimi Date: Tue, 26 Mar 2019 13:51:50 +0100 Subject: [PATCH 77/77] Update README --- probing-tools/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probing-tools/README.md b/probing-tools/README.md index 85b6bca31..53491d1b9 100644 --- a/probing-tools/README.md +++ b/probing-tools/README.md @@ -1,4 +1,4 @@ -# Probing toolsets for Encore +# Probing toolset for Encore These probing tools allows the user to gain insight into how many actors and futures are created, how work stealing occurs, succeeds or fails, and how many messages are sent and more, in a running Encore program.