summaryrefslogtreecommitdiffstats
path: root/examples/test_throughput.lua
diff options
context:
space:
mode:
Diffstat (limited to 'examples/test_throughput.lua')
-rwxr-xr-xexamples/test_throughput.lua539
1 files changed, 0 insertions, 539 deletions
diff --git a/examples/test_throughput.lua b/examples/test_throughput.lua
deleted file mode 100755
index b936c41..0000000
--- a/examples/test_throughput.lua
+++ /dev/null
@@ -1,539 +0,0 @@
-#!/usr/bin/env dnsjit
-local ffi = require("ffi")
-local object = require("dnsjit.core.objects")
-local clock = require("dnsjit.lib.clock")
-local log = require("dnsjit.core.log")
-local getopt = require("dnsjit.lib.getopt").new({
- { "v", "verbose", 0, "Enable and increase verbosity for each time given", "?+" },
- { "s", "split", false, "Test also with dnsjit.filter.split", "?" },
- { "t", "thread", false, "Test also with dnsjit.core.thread using dnsjit.core.channel", "?" },
-})
-local num, runs = unpack(getopt:parse())
-if getopt:val("help") then
- getopt:usage()
- return
-end
-local v = getopt:val("v")
-if v > 0 then
- log.enable("warning")
-end
-if v > 1 then
- log.enable("notice")
-end
-if v > 2 then
- log.enable("info")
-end
-if v > 3 then
- log.enable("debug")
-end
-
-if num == nil then
- print("usage: "..arg[1].." <num> [runs]")
- return
-else
- num = tonumber(num)
-end
-
-if runs == nil then
- runs = 1
-else
- runs = tonumber(runs)
-end
-
-print("zero:receiver() -> null:receive()")
-local run
-for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local o = require("dnsjit.output.null").new()
-
- i:receiver(o)
- local start_sec, start_nsec = clock:monotonic()
- i:run(num)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o:packets())
-end
-
-print("lua -> null:receive()")
-local run
-for run = 1, runs do
- local o = require("dnsjit.output.null").new()
- local recv, rctx = o:receive()
- local pkt = ffi.new("core_object_null_t")
- pkt.obj_type = object.NULL
- local obj = ffi.cast("core_object_t*", pkt)
-
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num do
- recv(rctx, obj)
- end
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o:packets())
-end
-
--- TODO: use core.thread
-
-print("zero:produce() <- null:producer()")
-local run
-for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local o = require("dnsjit.output.null").new()
-
- local start_sec, start_nsec = clock:monotonic()
- o:producer(i)
- o:run(num)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o:packets())
-end
-
-print("zero:produce() <- lua")
-local run
-for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local prod, pctx = i:produce()
-
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num do
- prod(pctx)
- end
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", num)
-end
-
-print("zero:produce() <- lua -> null:receive()")
-local run
-for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local o = require("dnsjit.output.null").new()
- local prod, pctx = i:produce()
- local recv, rctx = o:receive()
-
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num do
- recv(rctx, prod(pctx))
- end
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", num)
-end
-
-if getopt:val("s") then
- print("zero:receiver() -> split:receiver() -> null:receive() x1")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local s = require("dnsjit.filter.split").new()
- local o1 = require("dnsjit.output.null").new()
-
- s:receiver(o1)
- i:receiver(s)
- local start_sec, start_nsec = clock:monotonic()
- i:run(num)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o1:packets(), o1:packets())
- end
-
- print("zero:receiver() -> split:receiver() -> null:receive() x2")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local s = require("dnsjit.filter.split").new()
- local o1 = require("dnsjit.output.null").new()
- local o2 = require("dnsjit.output.null").new()
-
- s:receiver(o1)
- s:receiver(o2)
- i:receiver(s)
- local start_sec, start_nsec = clock:monotonic()
- i:run(num)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o1:packets() + o2:packets(), o1:packets(), o2:packets())
- end
-
- print("zero:receiver() -> split:receiver() -> null:receive() x4")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local s = require("dnsjit.filter.split").new()
- local o1 = require("dnsjit.output.null").new()
- local o2 = require("dnsjit.output.null").new()
- local o3 = require("dnsjit.output.null").new()
- local o4 = require("dnsjit.output.null").new()
-
- s:receiver(o1)
- s:receiver(o2)
- s:receiver(o3)
- s:receiver(o4)
- i:receiver(s)
- local start_sec, start_nsec = clock:monotonic()
- i:run(num)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o1:packets() + o2:packets() + o3:packets() + o4:packets(), o1:packets(), o2:packets(), o3:packets(), o4:packets())
- end
-
- print("zero:receiver() -> lua split table -> null:receive() x4")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local o1 = require("dnsjit.output.null").new()
- local o2 = require("dnsjit.output.null").new()
- local o3 = require("dnsjit.output.null").new()
- local o4 = require("dnsjit.output.null").new()
-
- local prod, pctx = i:produce()
- local recv, rctx = {}, {}
-
- local f, c = o1:receive()
- table.insert(recv, f)
- table.insert(rctx, c)
- f, c = o2:receive()
- table.insert(recv, f)
- table.insert(rctx, c)
- f, c = o3:receive()
- table.insert(recv, f)
- table.insert(rctx, c)
- f, c = o4:receive()
- table.insert(recv, f)
- table.insert(rctx, c)
-
- local start_sec, start_nsec = clock:monotonic()
- local idx = 1
- for n = 1, num do
- local f, c = recv[idx], rctx[idx]
- if not f then
- idx = 1
- f, c = recv[1], rctx[1]
- end
- f(c, prod(pctx))
- idx = idx + 1
- end
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o1:packets() + o2:packets() + o3:packets() + o4:packets(), o1:packets(), o2:packets(), o3:packets(), o4:packets())
- end
-
- print("zero:receiver() -> lua split gen code -> null:receive() x4")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local o1 = require("dnsjit.output.null").new()
- local o2 = require("dnsjit.output.null").new()
- local o3 = require("dnsjit.output.null").new()
- local o4 = require("dnsjit.output.null").new()
-
- local prod, pctx = i:produce()
- local f1, c1 = o1:receive()
- local f2, c2 = o2:receive()
- local f3, c3 = o3:receive()
- local f4, c4 = o4:receive()
-
- local code = "return function (num, prod, pctx, f1, c1, f2, c2, f3, c3, f4, c4)\nlocal n = 0\nwhile n < num do\n"
- code = code .. "f1(c1,prod(pctx))\n"
- code = code .. "n = n + 1\n"
- code = code .. "f2(c2,prod(pctx))\n"
- code = code .. "n = n + 1\n"
- code = code .. "f3(c3,prod(pctx))\n"
- code = code .. "n = n + 1\n"
- code = code .. "f4(c4,prod(pctx))\n"
- code = code .. "n = n + 1\n"
- code = code .. "end\n"
- code = code .. "end"
- local f = assert(loadstring(code))()
-
- local start_sec, start_nsec = clock:monotonic()
- f(num, prod, pctx, f1, c1, f2, c2, f3, c3, f4, c4)
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec", o1:packets() + o2:packets() + o3:packets() + o4:packets(), o1:packets(), o2:packets(), o3:packets(), o4:packets())
- end
-end
-
-if getopt:val("t") then
- print("zero:receiver() -> thread lua x1")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local c = require("dnsjit.core.channel").new()
- local t = require("dnsjit.core.thread").new()
-
- t:start(function(t)
- local c = t:pop()
-
- while true do
- local o = c:get()
- if o == nil then break end
- end
- end)
- t:push(c)
-
- local prod, pctx = i:produce()
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num do
- c:put(prod(pctx))
- end
- c:close()
- t:stop()
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec")
- end
-
- print("zero:receiver() -> thread lua x2")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local c = require("dnsjit.core.channel").new()
- local c2 = require("dnsjit.core.channel").new()
- local t = require("dnsjit.core.thread").new()
- local t2 = require("dnsjit.core.thread").new()
-
- local f = function(t)
- local c = t:pop()
-
- while true do
- local o = c:get()
- if o == nil then break end
- end
- end
-
- t:start(f)
- t2:start(f)
- t:push(c)
- t2:push(c2)
-
- local prod, pctx = i:produce()
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num/2 do
- c:put(prod(pctx))
- c2:put(prod(pctx))
- end
- c:close()
- c2:close()
- t:stop()
- t2:stop()
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec")
- end
-
- print("zero:receiver() -> thread lua x4")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local c = require("dnsjit.core.channel").new()
- local c2 = require("dnsjit.core.channel").new()
- local c3 = require("dnsjit.core.channel").new()
- local c4 = require("dnsjit.core.channel").new()
- local t = require("dnsjit.core.thread").new()
- local t2 = require("dnsjit.core.thread").new()
- local t3 = require("dnsjit.core.thread").new()
- local t4 = require("dnsjit.core.thread").new()
-
- local f = function(t)
- local c = t:pop()
-
- while true do
- local o = c:get()
- if o == nil then break end
- end
- end
-
- t:start(f)
- t2:start(f)
- t3:start(f)
- t4:start(f)
- t:push(c)
- t2:push(c2)
- t3:push(c3)
- t4:push(c4)
-
- local prod, pctx = i:produce()
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num/4 do
- c:put(prod(pctx))
- c2:put(prod(pctx))
- c3:put(prod(pctx))
- c4:put(prod(pctx))
- end
- c:close()
- c2:close()
- c3:close()
- c4:close()
- t:stop()
- t2:stop()
- t3:stop()
- t4:stop()
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec")
- end
-
- print("zero:receiver() -> thread lua x1 -> null:receiver()")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local c = require("dnsjit.core.channel").new()
- local t = require("dnsjit.core.thread").new()
-
- t:start(function(t)
- local c = t:pop()
- local o = require("dnsjit.output.null").new()
-
- local recv, rctx = o:receive()
- while true do
- local obj = c:get()
- if obj == nil then break end
- recv(rctx, obj)
- end
- end)
- t:push(c)
-
- local prod, pctx = i:produce()
- local start_sec, start_nsec = clock:monotonic()
- for n = 1, num do
- c:put(prod(pctx))
- end
- c:close()
- t:stop()
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec")
- end
-
- print("zero:receiver() -> thread x1 -> null:receiver()")
- local run
- for run = 1, runs do
- local i = require("dnsjit.input.zero").new()
- local c = require("dnsjit.core.channel").new()
- local t = require("dnsjit.core.thread").new()
-
- t:start(function(t)
- local c = t:pop()
- local o = require("dnsjit.output.null").new()
-
- c:receiver(o)
- c:run()
- end)
- t:push(c)
-
- i:receiver(c)
- local start_sec, start_nsec = clock:monotonic()
- i:run(num)
- c:close()
- t:stop()
- local end_sec, end_nsec = clock:monotonic()
-
- local runtime = 0
- if end_sec > start_sec then
- runtime = ((end_sec - start_sec) - 1) + ((1000000000 - start_nsec + end_nsec)/1000000000)
- elseif end_sec == start_sec and end_nsec > start_nsec then
- runtime = (end_nsec - start_nsec) / 1000000000
- end
-
- print(run, "runtime", runtime, num/runtime, "/sec")
- end
-end