From 2b7aa4c3038bb4cc62a06e83b47184017359b66f Mon Sep 17 00:00:00 2001 From: ston1th Date: Sat, 3 Apr 2021 15:52:28 +0200 Subject: [PATCH] Fix wrong value for OpenBSD memory buffer cache Fixes #1972 Signed-off-by: ston1th --- collector/meminfo_openbsd_amd64.go | 38 +++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/collector/meminfo_openbsd_amd64.go b/collector/meminfo_openbsd_amd64.go index 814cdb2e..368e640e 100644 --- a/collector/meminfo_openbsd_amd64.go +++ b/collector/meminfo_openbsd_amd64.go @@ -20,18 +20,54 @@ import ( "unsafe" ) +const ( + CTL_VFS = 10 + VFS_GENERIC = 0 + VFS_BCACHESTAT = 3 +) + +type bcachestats struct { + Numbufs int64 + Numbufpages int64 + Numdirtypages int64 + Numcleanpages int64 + Pendingwrites int64 + Pendingreads int64 + Numwrites int64 + Numreads int64 + Cachehits int64 + Busymapped int64 + Dmapages int64 + Highpages int64 + Delwribufs int64 + Kvaslots int64 + Kvaslots_avail int64 + Highflips int64 + Highflops int64 + Dmaflips int64 +} + func (c *meminfoCollector) getMemInfo() (map[string]float64, error) { uvmexpb, err := unix.SysctlRaw("vm.uvmexp") if err != nil { return nil, err } + + mib := [3]_C_int{CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT} + bcstatsb, err := sysctl(mib[:]) + if err != nil { + return nil, err + } + uvmexp := *(*unix.Uvmexp)(unsafe.Pointer(&uvmexpb[0])) ps := float64(uvmexp.Pagesize) + bcstats := *(*bcachestats)(unsafe.Pointer(&bcstatsb[0])) + // see uvm(9) return map[string]float64{ "active_bytes": ps * float64(uvmexp.Active), - "cache_bytes": ps * float64(uvmexp.Vnodepages), + "cache_bytes": ps * float64(bcstats.Numbufpages), "free_bytes": ps * float64(uvmexp.Free), "inactive_bytes": ps * float64(uvmexp.Inactive), "size_bytes": ps * float64(uvmexp.Npages),