xref: /xnu-8019.80.24/tests/vm/perf_madvise.lua (revision a325d9c4a84054e40bbe985afedcb50ab80993ea)
1*a325d9c4SApple OSS Distributions#!/usr/local/bin/recon
2*a325d9c4SApple OSS Distributions
3*a325d9c4SApple OSS Distributionslocal benchrun = require 'benchrun'
4*a325d9c4SApple OSS Distributionslocal perfdata = require 'perfdata'
5*a325d9c4SApple OSS Distributionslocal csv = require 'csv'
6*a325d9c4SApple OSS Distributions
7*a325d9c4SApple OSS Distributionsrequire 'strict'
8*a325d9c4SApple OSS Distributions
9*a325d9c4SApple OSS Distributionslocal kDefaultDuration = 15
10*a325d9c4SApple OSS Distributionslocal kDefaultSizeMb = 16
11*a325d9c4SApple OSS Distributions
12*a325d9c4SApple OSS Distributionslocal benchmark = benchrun.new {
13*a325d9c4SApple OSS Distributions    name = 'xnu.madvise',
14*a325d9c4SApple OSS Distributions    version = 1,
15*a325d9c4SApple OSS Distributions    arg = arg,
16*a325d9c4SApple OSS Distributions    modify_argparser = function(parser)
17*a325d9c4SApple OSS Distributions        parser:argument {
18*a325d9c4SApple OSS Distributions          name = 'path',
19*a325d9c4SApple OSS Distributions          description = 'Path to perf_madvise binary'
20*a325d9c4SApple OSS Distributions        }
21*a325d9c4SApple OSS Distributions        parser:option{
22*a325d9c4SApple OSS Distributions          name = '--duration',
23*a325d9c4SApple OSS Distributions          description = 'How long, in seconds, to run each iteration',
24*a325d9c4SApple OSS Distributions          default = kDefaultDuration
25*a325d9c4SApple OSS Distributions        }
26*a325d9c4SApple OSS Distributions        parser:option{
27*a325d9c4SApple OSS Distributions            name = '--variant',
28*a325d9c4SApple OSS Distributions            description = 'Which benchmark variant to run (MADV_FREE)',
29*a325d9c4SApple OSS Distributions            default = 'MADV_FREE',
30*a325d9c4SApple OSS Distributions            choices = {"MADV_FREE"}
31*a325d9c4SApple OSS Distributions        }
32*a325d9c4SApple OSS Distributions        parser:option{
33*a325d9c4SApple OSS Distributions            name = '--verbose',
34*a325d9c4SApple OSS Distributions            description = 'Enable verbose logging',
35*a325d9c4SApple OSS Distributions        }
36*a325d9c4SApple OSS Distributions        parser:option{
37*a325d9c4SApple OSS Distributions            name = '--size',
38*a325d9c4SApple OSS Distributions            description = 'Madvise buffer size (MB)',
39*a325d9c4SApple OSS Distributions            default = kDefaultSizeMb
40*a325d9c4SApple OSS Distributions        }
41*a325d9c4SApple OSS Distributions    end
42*a325d9c4SApple OSS Distributions}
43*a325d9c4SApple OSS Distributions
44*a325d9c4SApple OSS Distributionslocal unit = perfdata.unit.custom('pages/sec')
45*a325d9c4SApple OSS Distributionslocal tests = {
46*a325d9c4SApple OSS Distributions    path = benchmark.opt.path,
47*a325d9c4SApple OSS Distributions}
48*a325d9c4SApple OSS Distributions
49*a325d9c4SApple OSS Distributionslocal args = {benchmark.opt.path, benchmark.opt.variant, benchmark.opt.duration, benchmark.opt.size}
50*a325d9c4SApple OSS Distributionsif benchmark.opt.verbose then
51*a325d9c4SApple OSS Distributions    table.insert(args, "-v")
52*a325d9c4SApple OSS Distributionsend
53*a325d9c4SApple OSS Distributionsargs.echo = true
54*a325d9c4SApple OSS Distributionsfor out in benchmark:run(args) do
55*a325d9c4SApple OSS Distributions    local result = out:match("-----Results-----\n(.*)")
56*a325d9c4SApple OSS Distributions    benchmark:assert(result, "Unable to find result data in output")
57*a325d9c4SApple OSS Distributions    local data = csv.openstring(result, {header = true})
58*a325d9c4SApple OSS Distributions    for field in data:lines() do
59*a325d9c4SApple OSS Distributions        for k, v in pairs(field) do
60*a325d9c4SApple OSS Distributions            benchmark.writer:add_value(k, unit, tonumber(v), {
61*a325d9c4SApple OSS Distributions              [perfdata.larger_better] = true,
62*a325d9c4SApple OSS Distributions              variant = benchmark.opt.variant
63*a325d9c4SApple OSS Distributions            })
64*a325d9c4SApple OSS Distributions        end
65*a325d9c4SApple OSS Distributions    end
66*a325d9c4SApple OSS Distributionsend
67*a325d9c4SApple OSS Distributionsbenchmark.writer:set_primary_metric("Throughput (bytes / CPU second)")
68*a325d9c4SApple OSS Distributions
69*a325d9c4SApple OSS Distributionsbenchmark:finish()
70