func get()

in metric/memory/memory_openbsd.go [160:208]


func get(_ resolve.Resolver) (Memory, error) {

	memData := Memory{}

	n := uintptr(0)
	var uvmexp Uvmexp
	mib := [2]int32{C.CTL_VM, C.VM_UVMEXP}
	n = uintptr(0)
	// First we determine how much memory we'll need to pass later on (via `n`)
	_, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 2, 0, uintptr(unsafe.Pointer(&n)), 0, 0)
	if errno != 0 || n == 0 {
		return memData, fmt.Errorf("Error in size VM_UVMEXP sysctl call, errno %d", errno)
	}

	_, _, errno = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 2, uintptr(unsafe.Pointer(&uvmexp)), uintptr(unsafe.Pointer(&n)), 0, 0)
	if errno != 0 || n == 0 {
		return memData, fmt.Errorf("Error in VM_UVMEXP sysctl call, errno %d", errno)
	}

	var bcachestats Bcachestats
	mib3 := [3]int32{C.CTL_VFS, C.VFS_GENERIC, C.VFS_BCACHESTAT}
	n = uintptr(0)
	_, _, errno = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib3[0])), 3, 0, uintptr(unsafe.Pointer(&n)), 0, 0)
	if errno != 0 || n == 0 {
		return memData, fmt.Errorf("Error in size VFS_BCACHESTAT sysctl call, errno %d", errno)
	}
	_, _, errno = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib3[0])), 3, uintptr(unsafe.Pointer(&bcachestats)), uintptr(unsafe.Pointer(&n)), 0, 0)
	if errno != 0 || n == 0 {
		return memData, fmt.Errorf("Error in VFS_BCACHESTAT sysctl call, errno %d", errno)
	}

	memFree := uint64(uvmexp.free) << uvmexp.pageshift
	memUsed := uint64(uvmexp.npages-uvmexp.free) << uvmexp.pageshift

	memData.Total = opt.UintWith(uint64(uvmexp.npages) << uvmexp.pageshift)
	memData.Used.Bytes = opt.UintWith(memUsed)
	memData.Free = opt.UintWith(memFree)

	memData.Actual.Free = opt.UintWith(memFree + (uint64(bcachestats.numbufpages) << uvmexp.pageshift))
	memData.Actual.Used.Bytes = opt.UintWith(memUsed - (uint64(bcachestats.numbufpages) << uvmexp.pageshift))

	var err error
	memData.Swap, err = getSwap()
	if err != nil {
		return memData, fmt.Errorf("error getting swap data: %w", err)
	}

	return memData, nil
}