|
|
|
@ -11,6 +11,7 @@ import (
|
|
|
|
|
"os/exec"
|
|
|
|
|
|
|
|
|
|
"github.com/shirou/gopsutil/internal/common"
|
|
|
|
|
"golang.org/x/sys/unix"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func GetPageSize() (uint64, error) {
|
|
|
|
@ -18,17 +19,7 @@ func GetPageSize() (uint64, error) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetPageSizeWithContext(ctx context.Context) (uint64, error) {
|
|
|
|
|
mib := []int32{CTLVm, VmUvmexp}
|
|
|
|
|
buf, length, err := common.CallSyscall(mib)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
if length < sizeOfUvmexp {
|
|
|
|
|
return 0, fmt.Errorf("short syscall ret %d bytes", length)
|
|
|
|
|
}
|
|
|
|
|
var uvmexp Uvmexp
|
|
|
|
|
br := bytes.NewReader(buf)
|
|
|
|
|
err = common.Read(br, binary.LittleEndian, &uvmexp)
|
|
|
|
|
uvmexp, err := unix.SysctlUvmexp("vm.uvmexp")
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
@ -40,17 +31,7 @@ func VirtualMemory() (*VirtualMemoryStat, error) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {
|
|
|
|
|
mib := []int32{CTLVm, VmUvmexp}
|
|
|
|
|
buf, length, err := common.CallSyscall(mib)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if length < sizeOfUvmexp {
|
|
|
|
|
return nil, fmt.Errorf("short syscall ret %d bytes", length)
|
|
|
|
|
}
|
|
|
|
|
var uvmexp Uvmexp
|
|
|
|
|
br := bytes.NewReader(buf)
|
|
|
|
|
err = common.Read(br, binary.LittleEndian, &uvmexp)
|
|
|
|
|
uvmexp, err := unix.SysctlUvmexp("vm.uvmexp")
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
@ -69,8 +50,8 @@ func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {
|
|
|
|
|
ret.Used = ret.Total - ret.Available
|
|
|
|
|
ret.UsedPercent = float64(ret.Used) / float64(ret.Total) * 100.0
|
|
|
|
|
|
|
|
|
|
mib = []int32{CTLVfs, VfsGeneric, VfsBcacheStat}
|
|
|
|
|
buf, length, err = common.CallSyscall(mib)
|
|
|
|
|
mib := []int32{CTLVfs, VfsGeneric, VfsBcacheStat}
|
|
|
|
|
buf, length, err := common.CallSyscall(mib)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
@ -78,7 +59,7 @@ func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {
|
|
|
|
|
return nil, fmt.Errorf("short syscall ret %d bytes", length)
|
|
|
|
|
}
|
|
|
|
|
var bcs Bcachestats
|
|
|
|
|
br = bytes.NewReader(buf)
|
|
|
|
|
br := bytes.NewReader(buf)
|
|
|
|
|
err = common.Read(br, binary.LittleEndian, &bcs)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|