#
# pmrep(1) configuration file - see pmrep.conf(5)
#


#
# General options
#
[options]
#version = 1
#source = local:
#output = stdout
#speclocal =
#derived = /path/derived.conf
#header = yes
#unitinfo = yes
#globals = yes
#timestamp = no
#samples =
#interval = 1s
#delay = no
#type = default
#ignore_incompat = no
#ignore_unknown = no
#names_change = ignore
#instances =
#live_filter = no
#rank =
#overall_rank = no
#overall_rank_alt = no
#limit_filter =
#limit_filter_force =
#invert_filter = no
#predicate =
#sort_metric =
#omit_flat = no
#colxrow =
#width =
#width_force =
#precision = 3
#precision_force =
#delimiter =
#extheader = no
#fixed_header = no
#repeat_header = no
#dynamic_header = no
#separate_header = no
#timefmt = %H:%M:%S
#interpol = yes
#count_scale =
#count_scale_force =
#space_scale =
#space_scale_force =
#time_scale =
#time_scale_force =


# Compact metric specifications are of form (see pmrep(1)):
#pcp.metric.name = label,instance(s),unit/scale,type,column-width


#
# Global metrics - included as part of other sets (unless disabled with -G)
#
[global]
#nproc               = kernel.all.runnable
#kernel.all.runnable = nproc,,,,


#
# Per process metricsets
#
[proc-info]
proc.psinfo.pid     = ,,
proc.id.uid_nm      = ,,
proc.psinfo.cmd     = ,,,,16
proc.psinfo.psargs  = ,,,,32
proc.psinfo.ttyname = ,,
proc.psinfo.age     = ,,

[proc-info-ext]
proc.psinfo.pid     = ,,
proc.psinfo.ppid    = ,,
proc.psinfo.session = ,,
proc.id.uid         = ,,
proc.id.gid         = ,,
proc.id.euid        = ,,
proc.id.egid        = ,,
proc.namespaces.pid = ,,
proc.namespaces.sid = ,,

[proc-essential]
proc.psinfo.pid   = ,,
proc.psinfo.cmd   = ,,,,16
cpupct            = proc.psinfo.cpu.pct
cpupct.formula    = 100 * (rate(proc.psinfo.utime) + rate(proc.psinfo.stime))
cpuratio          = proc.psinfo.cpu.ratio
cpuratio.formula  = 100 * (instant(proc.psinfo.utime) + instant(proc.psinfo.stime)) / (kernel.all.uptime - proc.psinfo.start_time)
mempct            = proc.memory.pct
mempct.formula    = 100 * ((proc.memory.vmrss + proc.memory.vmswap) / hinv.physmem)
memreal           = proc.memory.vmreal
memreal.formula   = proc.memory.vmrss + proc.memory.vmswap
proc.memory.vmhwm = ,,
iopct             = p.i.io_pct
iopct.formula     = 100 * ((delta(proc.io.read_bytes) + delta(proc.io.write_bytes) - delta(proc.io.cancelled_write_bytes)) / (delta(disk.all.read_bytes) + delta(disk.all.write_bytes)))
iotot             = proc.io.total_bytes
iotot.formula     = instant(proc.io.read_bytes) + instant(proc.io.write_bytes) - instant(proc.io.cancelled_write_bytes)
iotot.unit        = kb/s
iototal           = p.i.cum_bytes
iototal.formula   = instant(proc.io.read_bytes) + instant(proc.io.write_bytes) - instant(proc.io.cancelled_write_bytes)
iototal.unit      = kb

[proc-cpu]
proc.psinfo.processor = ,,
proc.psinfo.priority  = ,,
proc.psinfo.nice      = ,,
cpupct                = proc.psinfo.cpu.pct
cpupct.formula        = 100 * (rate(proc.psinfo.utime) + rate(proc.psinfo.stime))
cpuratio              = proc.psinfo.cpu.ratio
cpuratio.formula      = 100 * (instant(proc.psinfo.utime) + instant(proc.psinfo.stime)) / (kernel.all.uptime - proc.psinfo.start_time)
proc.psinfo.threads   = ,,
proc.psinfo.sname     = ,,
proc.psinfo.utime     = ,,
proc.psinfo.stime     = ,,

[proc-cpu-ext]
proc.psinfo.vctxsw       = ,,
proc.psinfo.nvctxsw      = ,,
proc.psinfo.minflt       = ,,
proc.psinfo.maj_flt      = ,,
proc.schedstat.cpu_time  = ,,ms/s
proc.schedstat.pcount    = ,,
proc.schedstat.run_delay = ,,ms/s
proc.psinfo.wchan_s      = ,,
proc.psinfo.blocked_s    = ,,,,16

[proc-mem]
proc.memory.vmsize   = ,,
proc.memory.vmreal   = ,,
proc.memory.vmrss    = ,,
proc.memory.vmlib    = ,,
proc.memory.vmnonlib = ,,
proc.memory.vmswap   = ,,

[proc-mem-ext]
proc.memory.vmdata  = ,,
proc.memory.vmexe   = ,,
proc.memory.vmpeak  = ,,
proc.memory.vmhwm   = ,,
proc.memory.vmlock  = ,,
proc.memory.vmstack = ,,

[proc-io]
proc.fd.count       = ,,
proc.io.total_bytes = ,,kb/s
proc.io.read_bytes  = ,,kb/s
proc.io.write_bytes = ,,kb/s
proc.io.rchar       = ,,kb/s
proc.io.wchar       = ,,kb/s

[proc-io-ext]
proc.io.syscr                    = ,,
proc.io.syscw                    = ,,
proc.io.cancelled_write_bytes    = ,,
proc.psinfo.delayacct_blkio_time = ,,
#bcc.proc.io.total                = ,,

[proc-net]
bcc.proc.io.net.total.rx = ,,
bcc.proc.io.net.total.tx = ,,

#[proc-net-ext]

[proc-children]
proc.psinfo.cmin_flt = ,,
proc.psinfo.cmaj_flt = ,,
proc.psinfo.cutime   = ,,ms/s
proc.psinfo.cstime   = ,,ms/s

#[proc-java]
#bcc.usdt.jvm.threads.start = ,,
#bcc.usdt.jvm.threads.stop  = ,,

#[proc-java-ext]
#bcc.usdt.jvm.alloc = ,,

#[proc-int-stats]
#bcc.usdt.hits                = ,,
#bcc.uprobe.hits              = ,,
#bcc.tracepoint.hits          = ,,
#bcc.proc.syscall.count       = ,,
#bcc.proc.syscall.latency.avg = ,,
#bcc.proc.syscall.latency.cml = ,,

#[proc-int-stats-ext]
#bcc.proc.ucall.count       = ,,
#bcc.proc.ucall.latency.avg = ,,
#bcc.proc.ucall.latency.cml = ,,
#bcc.proc.ustat.thread      = ,,
#bcc.proc.ustat.method      = ,,
#bcc.proc.ustat.object      = ,,
#bcc.proc.ustat.class       = ,,
#bcc.proc.ustat.except      = ,,
#bcc.proc.ustat.gc          = ,,

[proc-os-stats]
kernel.all.sysfork = ,,
proc.runq.runnable = ,,
proc.runq.blocked  = ,,
proc.runq.sleeping = ,,
proc.runq.stopped  = ,,
proc.runq.swapped  = ,,
proc.runq.defunct  = ,,
proc.runq.unknown  = ,,
proc.runq.kernel   = ,,


#
# Common utilities emulation
#

[iostat_v10-dktx]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "      Device:"
disk.dev.read_merge  = rrqm/s,,,,8
disk.dev.write_merge = wrqm/s,,,,8
disk.dev.read        = r/s,,,,7
disk.dev.write       = w/s,,,,7
disk.dev.read_bytes  = rkB/s,,KB,,8
disk.dev.write_bytes = wkB/s,,KB,,8
disk.dev.avg_rqsz    = avgrq-sz_kb,,,,11
disk.dev.avg_qlen    = avgqu-sz,,,,8
disk.dev.await       = await,,,,7
disk.dev.r_await     = r_await,,,,7
disk.dev.w_await     = w_await,,,,7
svctm                = svctm,,,,6
svctm.formula        = 1000 * rate(disk.dev.avactive) / rate(disk.dev.total)
disk.dev.util        = %%util,,,,6

[iostat-dktx]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "      Device"
disk.dev.read        = r/s,,,,7
disk.dev.write       = w/s,,,,7
disk.dev.read_bytes  = rkB/s,,KB,,9
disk.dev.write_bytes = wkB/s,,KB,,9
disk.dev.read_merge  = rrqm/s,,,,8
disk.dev.write_merge = wrqm/s,,,,8
rrqm_pc              = %%rrqm,,,,6
rrqm_pc.formula      = 100 * rate(disk.dev.read_merge)  / rate(disk.dev.read)
wrqm_pc              = %%wrqm,,,,6
wrqm_pc.formula      = 100 * rate(disk.dev.write_merge) / rate(disk.dev.write)
disk.dev.r_await     = r_await,,,,7
disk.dev.w_await     = w_await,,,,7
disk.dev.avg_qlen    = aqu-sz,,,,6
disk.dev.r_avg_rqsz  = rareq-sz,,,,8
disk.dev.w_avg_rqsz  = wareq-sz,,,,8
svctm                = svctm,,,,6
svctm.formula        = 1000 * rate(disk.dev.avactive) / rate(disk.dev.total)
disk.dev.util        = %%util,,,,6

[mpstat]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "    CPU"
vuser              = %%usr,,,,7
vuser.formula      = 100 * rate(kernel.all.cpu.vuser) / hinv.ncpu
vnice              = %%nice,,,,7
vnice.formula      = 100 * rate(kernel.all.cpu.vnice) / hinv.ncpu
sys                = %%sys,,,,7
sys.formula        = 100 * rate(kernel.all.cpu.sys) / hinv.ncpu
wait               = %%iowait,,,,7
wait.formula       = 100 * rate(kernel.all.cpu.wait.total) / hinv.ncpu
hardirq            = %%irq,,,,7
hardirq.formula    = 100 * rate(kernel.all.cpu.irq.hard) / hinv.ncpu
softirq            = %%soft,,,,7
softirq.formula    = 100 * rate(kernel.all.cpu.irq.soft) / hinv.ncpu
steal              = %%steal,,,,7
steal.formula      = 100 * rate(kernel.all.cpu.steal) / hinv.ncpu
guest              = %%guest,,,,7
guest.formula      = 100 * rate(kernel.all.cpu.guest) / hinv.ncpu
guest_nice         = %%gnice,,,,7
guest_nice.formula = 100 * rate(kernel.all.cpu.guest_nice) / hinv.ncpu
aidle              = kernel.all.cpu.idlep
aidle.label        = %%idle
aidle.formula      = 100 * kernel.all.cpu.idle / hinv.ncpu
aidle.unit         = s
aidle.width        = 7

[mpstat-I-SUM]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "    CPU"
kernel.all.intr = intr/s,,,,9

[mpstat-P-ALL]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "    CPU"
vuser              = %%usr,,,,7
vuser.formula      = 100 * rate(kernel.all.cpu.vuser) / hinv.ncpu
vnice              = %%nice,,,,7
vnice.formula      = 100 * rate(kernel.all.cpu.vnice) / hinv.ncpu
sys                = %%sys,,,,7
sys.formula        = 100 * rate(kernel.all.cpu.sys) / hinv.ncpu
wait               = %%iowait,,,,7
wait.formula       = 100 * rate(kernel.all.cpu.wait.total) / hinv.ncpu
hardirq            = %%irq,,,,7
hardirq.formula    = 100 * rate(kernel.all.cpu.irq.hard) / hinv.ncpu
softirq            = %%soft,,,,7
softirq.formula    = 100 * rate(kernel.all.cpu.irq.soft) / hinv.ncpu
steal              = %%steal,,,,7
steal.formula      = 100 * rate(kernel.all.cpu.steal) / hinv.ncpu
guest              = %%guest,,,,7
guest.formula      = 100 * rate(kernel.all.cpu.guest) / hinv.ncpu
guest_nice         = %%gnice,,,,7
guest_nice.formula = 100 * rate(kernel.all.cpu.guest_nice) / hinv.ncpu
aidle              = kernel.all.cpu.idlep
aidle.label        = %%idle
aidle.formula      = 100 * kernel.all.cpu.idle / hinv.ncpu
aidle.unit         = s
aidle.width        = 7
puser              = kernel.percpu.util.vuser
puser.label        = %%usr
puser.formula      = 100 * rate(kernel.percpu.cpu.vuser)
puser.width        = 7
pnice              = kernel.percpu.util.nice
pnice.label        = %%nice
pnice.formula      = 100 * rate(kernel.percpu.cpu.nice)
pnice.width        = 7
psys               = kernel.percpu.util.sys
psys.label         = %%sys
psys.formula       = 100 * rate(kernel.percpu.cpu.sys)
psys.width         = 7
pwait              = kernel.percpu.util.wait
pwait.label        = %%iowait
pwait.formula      = 100 * rate(kernel.percpu.cpu.wait.total)
pwait.width        = 7
pintr              = kernel.percpu.util.hard
pintr.label        = %%irq
pintr.formula      = 100 * rate(kernel.percpu.cpu.irq.hard)
pintr.width        = 7
psoft              = kernel.percpu.util.soft
psoft.label        = %%soft
psoft.formula      = 100 * rate(kernel.percpu.cpu.irq.soft)
psoft.width        = 7
psteal             = kernel.percpu.util.steal
psteal.label       = %%steal
psteal.formula     = 100 * rate(kernel.percpu.cpu.steal)
psteal.width       = 7
pguest             = kernel.percpu.util.guest
pguest.label       = %%guest
pguest.formula     = 100 * rate(kernel.percpu.cpu.guest)
pguest.width       = 7
pgnice             = kernel.percpu.util.guest_nice
pgnice.label       = %%gnice
pgnice.formula     = 100 * rate(kernel.percpu.cpu.guest_nice)
pgnice.width       = 7
pidle              = kernel.percpu.percpu.idlep
pidle.label        = %%idle
pidle.formula      = 100 * rate(kernel.percpu.cpu.idle)
pidle.width        = 7

[pidstat]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "   PID"
proc.id.uid           = UID,,,,11
upct                  = proc.psinfo.cpu.util.user
upct.formula          = 100 * rate(proc.psinfo.utime)
upct.label            = %%usr
upct.width            = 7
spct                  = proc.psinfo.cpu.util.sys
spct.formula          = 100 * rate(proc.psinfo.stime)
spct.label            = %%system
spct.width            = 7
gpct                  = proc.psinfo.cpu.util.guest_time
gpct.formula          = 100 * rate(proc.psinfo.guest_time)
gpct.label            = %%guest
gpct.width            = 7
#wpct                  = proc.psinfo.cpu.util.wait
#wpct.formula          = 100 * rate(proc.psinfo.wait)
#wpct.label            = %%wait
#wpct.width            = 7
allcpu                = proc.psinfo.alltime
allcpu.label          = %%CPU
allcpu.formula        = 100 * (proc.psinfo.utime + proc.psinfo.stime + proc.psinfo.guest_time)
allcpu.unit           = s
allcpu.width          = 7
proc.psinfo.processor = CPU,,,,5
proc.psinfo.cmd       = Command,,,,16

#[pidstat-d]
#[pidstat-R]
#[pidstat-r]
#[pidstat-s]
#[pidstat-u]
#[pidstat-v]
#[pidstat-w]

[sar]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       CPU"
kernel.cpu.util.user  = %%user,,,,
kernel.cpu.util.nice  = %%nice,,,,
kernel.cpu.util.sys   = %%system,,,,
kernel.cpu.util.wait  = %%iowait,,,,
kernel.cpu.util.steal = %%steal,,,,
kernel.cpu.util.idle  = %%idle,,,,

[sar-B]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
mem.vmstat.pgpgin        = pgpgin/s,,,,12
mem.vmstat.pgpgout       = pgpgout/s,,,,
mem.vmstat.pgfault       = fault/s,,,,
mem.vmstat.pgmajfault    = majflt/s,,,,
mem.vmstat.pgfree        = pgfree/s,,,,
mem.vmstat.pgscan_kswapd = pgscank/s,,,,
pgscand                  = mem.vmstat.pgscan_direct_all
pgscand.formula          = mem.vmstat.pgscan_direct + mem.vmstat.pgscan_direct_throttle
pgscand.label            = pgscand/s
pgsteal                  = mem.vmstat.pgsteal_all
pgsteal.label            = pgsteal/s
pgsteal.formula          = mem.vmstat.pgsteal_kswapd + mem.vmstat.pgsteal_direct
vmeff                    = mem.vmstat.vmeff
vmeff.label              = %%vmeff
vmeff.formula            =
 (
  delta(mem.vmstat.pgscan_kswapd) +
  delta(mem.vmstat.pgscan_direct) +
  delta(mem.vmstat.pgscan_direct_throttle)
 ) == 0
 ? mkconst(0, type="double", semantics="instant")
 : 100 *
   (
    delta(mem.vmstat.pgsteal_kswapd) +
    delta(mem.vmstat.pgsteal_direct)
   )
  /
   (
    delta(mem.vmstat.pgscan_kswapd) +
    delta(mem.vmstat.pgscan_direct) +
    delta(mem.vmstat.pgscan_direct_throttle)
   )

[sar-B-old-kernel]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
mem.vmstat.pgpgin     = pgpgin/s,,,,12
mem.vmstat.pgpgout    = pgpgout/s,,,,
mem.vmstat.pgfault    = fault/s,,,,
mem.vmstat.pgmajfault = majflt/s,,,,
mem.vmstat.pgfree     = pgfree/s,,,,
pgscank               = pgscank/s,,,,
pgscank.formula       = mem.vmstat.pgscan_kswapd_dma + mem.vmstat.pgscan_kswapd_dma32 + mem.vmstat.pgscan_kswapd_normal
pgscand               = pgscand/s,,,,
pgscand.formula       = mem.vmstat.pgscan_direct_dma + mem.vmstat.pgscan_direct_dma32 + mem.vmstat.pgscan_direct_normal
pgsteal               = pgsteal/s,,,,
pgsteal.formula       = mem.vmstat.pgsteal_kswapd_dma + mem.vmstat.pgsteal_kswapd_dma32 + mem.vmstat.pgsteal_kswapd_normal + mem.vmstat.pgsteal_kswapd_movable + mem.vmstat.pgsteal_direct_dma + mem.vmstat.pgsteal_direct_dma32 + mem.vmstat.pgsteal_direct_normal + mem.vmstat.pgsteal_direct_movable

[sar-b]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
disk.all.total    = tps,,,,12
disk.all.read     = rtps,,,,
disk.all.write    = wtps,,,,
disk.all.blkread  = bread/s,,,,
disk.all.blkwrite = bwrtn/s,,,,

[sar-d-dev]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "         DEV"
disk.dev.total       = tps,,,,
disk.dev.read_bytes  = rkB/s,,kB,,
disk.dev.write_bytes = wkB/s,,kB,,
disk.dev.avg_rqsz    = areq-sz,,,,
disk.dev.avg_qlen    = aqu_sz,,,,
disk.dev.await       = await,,,,,
svctm                = svctm,,,,
svctm.formula        = 1000 * rate(disk.dev.avactive) / rate(disk.dev.total)
disk.dev.util        = %%util

[sar-d-dm]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "         DEV"
disk.dm.total       = tps,,,,
disk.dm.read_bytes  = rkB/s,,KB,,
disk.dm.write_bytes = wkB/s,,KB,,
disk.dm.avg_rqsz    = avgrq-sz_kb,,,,
disk.dm.avg_qlen    = avgqu-sz,,,,
disk.dm.await       = await,,,,
svctm               = svctm,,,,
svctm.formula       = 1000 * rate(disk.dm.avactive) / rate(disk.dm.total)
disk.dm.util        = %%util,,,,

[sar-F]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "            FILESYSTEM"
filesys.free      = MBfsfree,,MB,,,0
filesys.used      = MBfsused,,MB,,,0
fsusedp           = filesys.used_pct
fsusedp.label     = %%fsused
fsusedp.formula   = 100 * (filesys.used / filesys.capacity)
ufsusedp          = filesys.user_used_pct
ufsusedp.label    = %%ufsused
ufsusedp.formula  = 100 * ((filesys.capacity - filesys.avail) / filesys.capacity)
filesys.freefiles = Ifree,,,,11
filesys.usedfiles = Iused,,,,11
iusedp            = filesys.usedfiles_pct
iusedp.label      = %%Iused
iusedp.formula    = 100 * (filesys.usedfiles / filesys.maxfiles)

[sar-H]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
mem.util.hugepagesFreeBytes = kbhugfree,,kB,,12,0
mem.util.hugepagesRsvdBytes = kbhugused,,kB,,,0
hugusedp                    = mem.util.hugepagesRsvd_pct
hugusedp.label              = %%hugused
hugusedp.formula            = 100 * ((mem.util.hugepagesTotalBytes - mem.util.hugepagesFreeBytes) / mem.util.hugepagesTotalBytes)

[sar-I-SUM]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       INTR"
kernel.all.intr = intr/s,,,,

#[sar-m]

[sar-n-DEV]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       IFACE"
network.interface.in.packets     = rxpck/s,,,,
network.interface.out.packets    = txpck/s,,,,
network.interface.in.bytes       = rxkB/s,,KB,,
network.interface.out.bytes      = txkB/s,,KB,,
network.interface.in.compressed  = rxcmp/s,,,,
network.interface.out.compressed = txcmp/s,,,,
network.interface.in.mcasts      = rxmcst/s,,,,
ifutil                           = network.interface.util
ifutil.label                     = %%ifutil
ifutil.formula                   =
  network.interface.duplex == 1
  ?
    100 *
    (delta(network.interface.in.bytes) +
     delta(network.interface.out.bytes))
    / network.interface.baudrate
  :
    (
      delta(network.interface.in.bytes) >
      delta(network.interface.out.bytes)
      ?
        100 *
        delta(network.interface.in.bytes) /
        network.interface.baudrate
      :
        100 *
        delta(network.interface.out.bytes) /
        network.interface.baudrate
    )

[sar-n-EDEV]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       IFACE"
network.interface.in.errors   = rxerr/s,,,,
network.interface.out.errors  = txerr/s,,,,
network.interface.collisions  = coll/s,,,,
network.interface.in.drops    = rxdrop/s,,,,
network.interface.out.drops   = txdrop/s,,,,
network.interface.out.carrier = txcarr/s,,,,
network.interface.in.frame    = rxfram/s,,,,
network.interface.in.fifo     = rxfifo/s,,,,
network.interface.out.fifo    = txfifo/s,,,,

[sar-n-NFSv4]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
rpc.client.rpccnt     = call/s,,,,12
rpc.client.rpcretrans = retrans/s,,
ops                   = nfs4.client.reqs
ops.instances         = (read|write|access|getattr)
ops.label             = ops/s

[sar-n-NFSDv4]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
rpc.server.rpccnt    = scall/s,,,,12
rpc.server.rpcerr    = badcall/s,,
rpc.server.netcnt    = packet/s,,
rpc.server.netudpcnt = udp/s,,
rpc.server.nettcpcnt = tcp/s,,
rpc.server.rchits    = hit/s,,
rpc.server.rcmisses  = miss/s,,
ops                  = nfs4.server.reqs
ops.instances        = (read|write|access|getattr)
ops.label            = ops/s

[sar-n-SOCK]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
network.sockstat.total      = totsck,,,,12
network.sockstat.tcp.inuse  = tcpsck,,,,
network.sockstat.udp.inuse  = udpsck,,,,
network.sockstat.raw.inuse  = rawsck,,,,
network.sockstat.frag.inuse = ip-frag,,,,
network.sockstat.tcp.tw     = tcp-tw,,,,

[sar-n-TCP-ETCP]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
network.tcp.activeopens   = active/s,,,,12
network.tcp.passiveopens  = passive/s,,,,
network.tcp.insegs        = iseg/s,,,,
network.tcp.outsegs       = oseg/s,,,,
network.tcp.attemptfails  = atmptf/s,,,,
network.tcp.estabresets   = estres/s,,,,
network.tcp.retranssegs   = retrans/s,,,,
network.tcp.inerrs        = isegerr/s,,,,
network.tcp.outrsts       = orsts/s,,,,

[sar-q]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
proc.runq.runnable = runq-sz,,,,12
kernel.all.nprocs  = plist-sz,,,,
kernel.all.load    = ldavg,,,,
kernel.all.blocked = blocked,,,,

[sar-r]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
mem.freemem        = kbmemfree,,,,12
mem.util.available = kbmemavail,,,,
mem.util.used      = kbmemused,,,,
memused            = %%memused,,,,
memused.formula    = 100 * mem.util.used / mem.physmem
mem.util.bufmem    = kbbuffers,,,,
mem.util.cached    = kbcached,,,,
kbcommit           = mem.util.committed_AS
kbcommit.label     = kbcommit
commit             = %%commit,,,,
commit.formula     = 100 * mem.util.committed_AS / (mem.physmem + mem.util.swapTotal)
mem.util.active    = kbactive,,,,
mem.util.inactive  = kbinact,,,,
mem.util.dirty     = kbdirty,,,,

[sar-S]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
kbswpfree          = mem.util.swapFree
kbswpfree.label    = kbswpfree
kbswpfree.width    = 12
kb_swpused         = kbswpused,,,,
kb_swpused.formula = mem.util.swapTotal - mem.util.swapFree
swpused            = %%swpused,,,,
swpused.formula    = 100 * (mem.util.swapTotal - mem.util.swapFree) / mem.util.swapTotal
kbswpcad           = mem.util.swapCached
kbswpcad.label     = kbswpcad
swpcad             = %%swpcad,,,,
swpcad.formula     = 100 * mem.util.swapCached / (mem.util.swapTotal - mem.util.swapFree)

[sar-u-ALL]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       CPU"
usr            = %%usr,,s,,
usr.formula    = 100 * kernel.all.cpu.vuser      / hinv.ncpu
nice           = %%nice,,s,,
nice.formula   = 100 * kernel.all.cpu.nice       / hinv.ncpu
sys            = %%sys,,s,,
sys.formula    = 100 * kernel.all.cpu.sys        / hinv.ncpu
iowait         = %%iowait,,s,,
iowait.formula = 100 * kernel.all.cpu.wait.total / hinv.ncpu
steal          = %%steal,,s,,
steal.formula  = 100 * kernel.all.cpu.steal      / hinv.ncpu
irq            = %%irq,,s,,
irq.formula    = 100 * kernel.all.cpu.irq.hard   / hinv.ncpu
soft           = %%soft,,s,,
soft.formula   = 100 * kernel.all.cpu.irq.soft   / hinv.ncpu
guest          = %%guest,,s,,
guest.formula  = 100 * kernel.all.cpu.guest      / hinv.ncpu
gnice          = %%gnice,,s,,
gnice.formula  = 100 * kernel.all.cpu.guest_nice / hinv.ncpu
idle           = %%idle,,s,,
idle.formula   = 100 * kernel.all.cpu.idle       / hinv.ncpu

[sar-u-ALL-P-ALL]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "       CPU"
usr             = %%usr,,s,,
usr.formula     = 100 * kernel.all.cpu.vuser      / hinv.ncpu
nice            = %%nice,,s,,
nice.formula    = 100 * kernel.all.cpu.nice       / hinv.ncpu
sys             = %%sys,,s,,
sys.formula     = 100 * kernel.all.cpu.sys        / hinv.ncpu
iowait          = %%iowait,,s,,
iowait.formula  = 100 * kernel.all.cpu.wait.total / hinv.ncpu
steal           = %%steal,,s,,
steal.formula   = 100 * kernel.all.cpu.steal      / hinv.ncpu
irq             = %%irq,,s,,
irq.formula     = 100 * kernel.all.cpu.irq.hard   / hinv.ncpu
soft            = %%soft,,s,,
soft.formula    = 100 * kernel.all.cpu.irq.soft   / hinv.ncpu
guest           = %%guest,,s,,
guest.formula   = 100 * kernel.all.cpu.guest      / hinv.ncpu
gnice           = %%gnice,,s,,
gnice.formula   = 100 * kernel.all.cpu.guest_nice / hinv.ncpu
idle            = %%idle,,s,,
idle.formula    = 100 * kernel.all.cpu.idle       / hinv.ncpu
pusr            = %%usr,,s,,
pusr.formula    = 100 * kernel.percpu.cpu.vuser
pnice           = %%nice,,s,,
pnice.formula   = 100 * kernel.percpu.cpu.nice
psys            = %%sys,,s,,
psys.formula    = 100 * kernel.percpu.cpu.sys
piowait         = %%iowait,,s,,
piowait.formula = 100 * kernel.percpu.cpu.wait.total
psteal          = %%steal,,s,,
psteal.formula  = 100 * kernel.percpu.cpu.steal
pirq            = %%irq,,s,,
pirq.formula    = 100 * kernel.percpu.cpu.irq.hard
psoft           = %%soft,,s,,
psoft.formula   = 100 * kernel.percpu.cpu.irq.soft
pguest          = %%guest,,s,,
pguest.formula  = 100 * kernel.percpu.cpu.guest
pgnice          = %%gnice,,s,,
pgnice.formula  = 100 * kernel.percpu.cpu.guest_nice
pidle           = %%idle,,s,,
pidle.formula   = 100 * kernel.percpu.cpu.idle

#[sar-v]

[sar-W]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
mem.vmstat.pswpin  = pswpin/s,,,,12
mem.vmstat.pswpout = pswpout/s,,,,9

[sar-w]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
kernel.all.sysfork = proc/s,,,,12
kernel.all.pswitch = cswch/s,,,,9

[sar-y]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "         TTY"
tty.serial.rx      = rcvin/s
tty.serial.tx      = txmtin/s
tty.serial.frame   = framerr/s
tty.serial.parity  = prtyerr/s
tty.serial.brk     = brk/s
tty.serial.overrun = ovrun/s

[vmstat]
header = yes
unitinfo = no
globals = no
timestamp = no
precision = 0
delimiter = " "
kernel.all.running = r,,,,3
kernel.all.blocked = b,,,,3
swap.used          = swpd,,kB,,7
mem.util.free      = free,,kB,,8
mem.util.bufmem    = buff,,kB,,7
allcache           = mem.util.allcache
allcache.label     = cache
allcache.formula   = mem.util.cached + mem.util.slab
allcache.unit      = kB
allcache.width     = 7
swap.pagesin       = si,,,,5
swap.pagesout      = so,,,,5
mem.vmstat.pgpgin  = bi,,,,6
mem.vmstat.pgpgout = bo,,,,6
kernel.all.intr    = in,,,,5
kernel.all.pswitch = cs,,,,6
alluser            = kernel.all.cpu.alluserp
alluser.label      = us
alluser.formula    = 100 * (kernel.all.cpu.user + kernel.all.cpu.nice) / hinv.ncpu
alluser.unit       = s
sys                = kernel.all.cpu.sysp
sys.label          = sy
sys.formula        = 100 * kernel.all.cpu.sys / hinv.ncpu
sys.unit           = s
idle               = kernel.all.cpu.idlep
idle.label         = id
idle.formula       = 100 * kernel.all.cpu.idle / hinv.ncpu
idle.unit          = s
wtotal             = kernel.all.cpu.wait.totalp
wtotal.label       = wa
wtotal.formula     = 100 * kernel.all.cpu.wait.total / hinv.ncpu
wtotal.unit        = s
steal              = kernel.all.cpu.stealp
steal.label        = st
steal.formula      = 100 * kernel.all.cpu.steal / hinv.ncpu
steal.unit         = s

[vmstat-a]
header = yes
unitinfo = no
globals = no
timestamp = no
precision = 0
delimiter = " "
kernel.all.running = r,,,,3
kernel.all.blocked = b,,,,3
swap.used          = swpd,,kB,,7
mem.util.free      = free,,kB,,8
mem.util.inactive  = inact,,kB,,7
mem.util.active    = active,,kB,,7
swap.pagesin       = si,,,,5
swap.pagesout      = so,,,,5
mem.vmstat.pgpgin  = bi,,,,6
mem.vmstat.pgpgout = bo,,,,6
kernel.all.intr    = in,,,,5
kernel.all.pswitch = cs,,,,6
alluser            = kernel.all.cpu.alluserp
alluser.label      = us
alluser.formula    = 100 * (kernel.all.cpu.user + kernel.all.cpu.nice) / hinv.ncpu
alluser.unit       = s
sys                = kernel.all.cpu.sysp
sys.label          = sy
sys.formula        = 100 * kernel.all.cpu.sys / hinv.ncpu
sys.unit           = s
idle               = kernel.all.cpu.idlep
idle.label         = id
idle.formula       = 100 * kernel.all.cpu.idle / hinv.ncpu
idle.unit          = s
wtotal             = kernel.all.cpu.wait.totalp
wtotal.label       =  wa
wtotal.formula     = 100 * kernel.all.cpu.wait.total / hinv.ncpu
wtotal.unit        = s
steal              = kernel.all.cpu.stealp
steal.label        = st
steal.formula      = 100 * kernel.all.cpu.steal / hinv.ncpu
steal.unit         = s

#[vmstat-d]
#[vmstat-p]

[vmstat-w]
header = yes
unitinfo = no
globals = no
timestamp = no
precision = 0
delimiter = " "
kernel.all.running = r,,,,3
kernel.all.blocked = b,,,,3
swap.used          = swpd,,kB,,13
mem.util.free      = free,,kB,,13
mem.util.bufmem    = buff,,kB,,13
allcache           = mem.util.allcache
allcache.label     = cache
allcache.formula   = mem.util.cached + mem.util.slab
allcache.unit      = kB
allcache.width     = 13
swap.pagesin       = si,,,,5
swap.pagesout      = so,,,,5
mem.vmstat.pgpgin  = bi,,,,6
mem.vmstat.pgpgout = bo,,,,6
kernel.all.intr    = in,,,,5
kernel.all.pswitch = cs,,,,6
alluser            = kernel.all.cpu.alluserp
alluser.label      = us
alluser.formula    = 100 * (kernel.all.cpu.user + kernel.all.cpu.nice) / hinv.ncpu
alluser.unit       = s
alluser.width      = 4
sys                = kernel.all.cpu.sysp
sys.label          = sy
sys.formula        = 100 * kernel.all.cpu.sys / hinv.ncpu
sys.unit           = s
sys.width          = 4
idle               = kernel.all.cpu.idlep
idle.label         = id
idle.formula       = 100 * kernel.all.cpu.idle / hinv.ncpu
idle.unit          = s
idle.width         = 4
wtotal             = kernel.all.cpu.wait.totalp
wtotal.label       = wa
wtotal.formula     = 100 * kernel.all.cpu.wait.total / hinv.ncpu
wtotal.unit        = s
wtotal.width       = 4
steal              = kernel.all.cpu.stealp
steal.label        = st
steal.formula      = 100 * kernel.all.cpu.steal / hinv.ncpu
steal.unit         = s
steal.width        = 4

[numa-hint-faults]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 15
precision = 2
delimiter = " "
mem.vmstat.numa_hint_faults       = faults/s,,,,
mem.vmstat.numa_hint_faults_local = faults_local/s,,,,
local                             = mem.vmstat.numa_hint_faults_local_percent
local.label                       = %%local
local.formula                     =
  100 *
  (rate(mem.vmstat.numa_hint_faults)
  ?
    rate(mem.vmstat.numa_hint_faults_local)/rate(mem.vmstat.numa_hint_faults)
  :
    mkconst(1, type="double", semantics="instant") )
local.width                       = 7
faults_remote                     = mem.vmstat.numa_hint_faults_remote
faults_remote.formula             = mem.vmstat.numa_hint_faults - mem.vmstat.numa_hint_faults_local
faults_remote.label               = faults_remote/s
remote                            = mem.vmstat.numa_hint_faults_remote_percent
remote.formula                    =
  100 *
  (rate(mem.vmstat.numa_hint_faults)
  ?
    (1 - rate(mem.vmstat.numa_hint_faults_local)/rate(mem.vmstat.numa_hint_faults))
  :
    mkconst(0, type="double", semantics="instant") )
remote.label                      = %%remote
remote.width                      = 7

[numa-per-node-cpu]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 9
precision = 2
delimiter = " "
colxrow = "   NUMA n"
nusr            = %%usr,,s,,
nusr.formula    = 100 * kernel.pernode.cpu.vuser      / (hinv.ncpu/hinv.nnode)
nnice           = %%nice,,s,,
nnice.formula   = 100 * kernel.pernode.cpu.nice       / (hinv.ncpu/hinv.nnode)
nsys            = %%sys,,s,,
nsys.formula    = 100 * kernel.pernode.cpu.sys        / (hinv.ncpu/hinv.nnode)
niowait         = %%iowait,,s,,
niowait.formula = 100 * kernel.pernode.cpu.wait.total / (hinv.ncpu/hinv.nnode)
nsteal          = %%steal,,s,,
nsteal.formula  = 100 * kernel.pernode.cpu.steal      / (hinv.ncpu/hinv.nnode)
nirq            = %%irq,,s,,
nirq.formula    = 100 * kernel.pernode.cpu.irq.hard   / (hinv.ncpu/hinv.nnode)
nsoft           = %%soft,,s,,
nsoft.formula   = 100 * kernel.pernode.cpu.irq.soft   / (hinv.ncpu/hinv.nnode)
nguest          = %%guest,,s,,
nguest.formula  = 100 * kernel.pernode.cpu.guest      / (hinv.ncpu/hinv.nnode)
ngnice          = %%gnice,,s,,
ngnice.formula  = 100 * kernel.pernode.cpu.guest_nice / (hinv.ncpu/hinv.nnode)
nidle           = %%idle,,s,,
nidle.formula   = 100 * kernel.pernode.cpu.idle       / (hinv.ncpu/hinv.nnode)

[numa-pgmigrate-per-node]
header = yes
unitinfo = no
globals = no
timestamp = yes
width = 15
precision = 3
delimiter = " "
node_bw              = mem.vmstat.numa_bandwidth
node_bw.label        = MB/s/node
node_bw.formula      =
  rate(mem.vmstat.numa_pages_migrated) *
  hinv.pagesize/hinv.nnode/mkconst(1000000, type="double", semantics="instant")
node_pg              = mem.vmstat.numa_pages
node_pg.label        = auto pg/s/node
node_pg.formula      = rate(mem.vmstat.numa_pages_migrated)/hinv.nnode
node_succ_pg         = mem.vmstat.numa_pgmigrate_success
node_succ_pg.label   = success/s/node
node_succ_pg.formula = rate(mem.vmstat.pgmigrate_success)/hinv.nnode
node_fail_pg         = mem.vmstat.numa_pgmigrate_fail
node_fail_pg.label   = fail/s/node
node_fail_pg.formula = rate(mem.vmstat.pgmigrate_fail)/hinv.nnode


#
# Emulation of assorted collectl(1) reports
#
[collectl-sc]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
cpu                = %%cpu,,,,5
cpu.label          = cpu
cpu.formula        = 100 * (kernel.all.cpu.user + kernel.all.cpu.nice) / hinv.ncpu
cpu.unit           = s
sys                = %%sys,,,,5
sys.label          = sys
sys.formula        = 100 * rate(kernel.all.cpu.sys) / hinv.ncpu
kernel.all.intr    = intr/s,,,,7
kernel.all.pswitch = cswch/s,,,,8

[collectl-sm]
mem.freemem       = Free,,GB,,5
mem.util.bufmem   = Buff,,GB,,5
mem.util.cached   = Cach,,GB,,5
mem.util.inactive = Inac,,GB,,5
mem.util.slab     = Slab,,GB,,5
mem.util.mapped   = Map,,GB,,5

[collectl-sd]
# KBRead  Reads KBWrit Writes
disk.all.read_bytes  = KBRead,,KB,,6
disk.all.read        = Reads,,,,6
disk.all.write_bytes = KBWrite,,KB,,6
disk.all.write       = Writes,,,,6

[collectl-sD]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "      Device"
disk.dev.read_bytes  = rkB/s,,KB,,9
disk.dev.read_merge  = rrqm/s,,,,8
disk.dev.read        = r/s,,,,7
disk.dev.r_avg_rqsz  = rareq-sz,,,,8
r_await              = r_await,,,,7
r_await.formula      = delta(disk.dev.read_rawactive) / delta(disk.dev.read)
disk.dev.write_bytes = wkB/s,,KB,,9
disk.dev.write_merge = wrqm/s,,,,8
disk.dev.write       = w/s,,,,7
disk.dev.w_avg_rqsz  = wareq-sz,,,,8
w_await              = w_await,,,,7
w_await.formula      = delta(disk.dev.write_rawactive) / delta(disk.dev.write)
wait                 = wait,,,,7
wait.formula         = delta(disk.dev.total_rawactive) / delta(disk.dev.total)
disk.dev.avg_qlen    = aqu-sz,,,,6
svctm                = svctm,,,,6
svctm.formula        = 1000 * rate(disk.dev.avactive) / rate(disk.dev.total)
disk.dev.util        = %%util,,,,6

[collectl-dm-sD]
header = yes
unitinfo = no
globals = no
timestamp = yes
precision = 2
delimiter = " "
colxrow = "  Mapped Device"
hinv.map.dmname     = DM,,,,6
disk.dm.read_bytes  = rkB/s,,KB,,7
disk.dm.read_merge  = rrqm/s,,,,6
disk.dm.read        = r/s,,,,7
disk.dm.r_avg_rqsz  = rareq-sz,,,,8
r_await             = r_await,,,,7
r_await.formula     = delta(disk.dm.read_rawactive) / delta(disk.dm.read)
disk.dm.write_bytes = wkB/s,,KB,,9
disk.dm.write_merge = wrqm/s,,,,8
disk.dm.write       = w/s,,,,7
disk.dm.w_avg_rqsz  = wareq-sz,,,,8
w_await             = w_await,,,,7
w_await.formula     = delta(disk.dm.write_rawactive) / delta(disk.dm.write)
wait                = wait,,,,7
wait.formula        = delta(disk.dm.total_rawactive) / delta(disk.dm.total)
disk.dm.avg_qlen    = aqu-sz,,,,6
svctm               = svctm,,,,6
svctm.formula       = 1000 * rate(disk.dm.avactive) / rate(disk.dm.total)
disk.dm.util        = %%util,,,,6

[collectl-sn]
kbin           = KBIn,,KB,,6
kbin.formula   = sum(network.interface.in.bytes)
pktin          = PktIn,,,,6
pktin.formula  = sum(network.interface.in.packets)
kbout          = KBOut,,KB,,6
kbout.formula  = sum(network.interface.out.bytes)
pktout         = PktOut,,,,6
pktout.formula = sum(network.interface.out.packets)
