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