diff --git a/mem/mem_linux.go b/mem/mem_linux.go index 72faf22b9..f9cb8f260 100644 --- a/mem/mem_linux.go +++ b/mem/mem_linux.go @@ -73,86 +73,226 @@ func fillFromMeminfoWithContext(ctx context.Context) (*VirtualMemoryStat, *Virtu value := strings.TrimSpace(fields[1]) value = strings.Replace(value, " kB", "", -1) - t, err := strconv.ParseUint(value, 10, 64) - if err != nil { - return ret, retEx,err - } switch key { case "MemTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Total = t * 1024 case "MemFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Free = t * 1024 case "MemAvailable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } memavail = true ret.Available = t * 1024 case "Buffers": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Buffers = t * 1024 case "Cached": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Cached = t * 1024 case "Active": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Active = t * 1024 case "Inactive": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Inactive = t * 1024 case "Active(anon)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.ActiveAnon = t * 1024 case "Inactive(anon)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.InactiveAnon = t * 1024 case "Active(file)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } activeFile = true retEx.ActiveFile = t * 1024 case "Inactive(file)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } inactiveFile = true retEx.InactiveFile = t * 1024 case "Unevictable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.Unevictable = t * 1024 case "Writeback": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Writeback = t * 1024 case "WritebackTmp": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.WritebackTmp = t * 1024 case "Dirty": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Dirty = t * 1024 case "Shmem": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Shared = t * 1024 case "Slab": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Slab = t * 1024 case "SReclaimable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } sReclaimable = true ret.SReclaimable = t * 1024 case "SUnreclaim": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SUnreclaim = t * 1024 case "PageTables": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.PageTables = t * 1024 case "SwapCached": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapCached = t * 1024 case "CommitLimit": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.CommitLimit = t * 1024 case "Committed_AS": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.CommittedAS = t * 1024 case "HighTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HighTotal = t * 1024 case "HighFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HighFree = t * 1024 case "LowTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.LowTotal = t * 1024 case "LowFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.LowFree = t * 1024 case "SwapTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapTotal = t * 1024 case "SwapFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapFree = t * 1024 case "Mapped": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Mapped = t * 1024 case "VmallocTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VMallocTotal = t * 1024 case "VmallocUsed": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VMallocUsed = t * 1024 case "VmallocChunk": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VMallocChunk = t * 1024 case "HugePages_Total": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePagesTotal = t case "HugePages_Free": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePagesFree = t case "Hugepagesize": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePageSize = t * 1024 } } diff --git a/mem/mem_linux_test.go b/mem/mem_linux_test.go new file mode 100644 index 000000000..0d1500a1d --- /dev/null +++ b/mem/mem_linux_test.go @@ -0,0 +1,117 @@ +package mem + +import ( + "os" + "path/filepath" + "reflect" + "testing" +) + +func TestVirtualMemoryEx(t *testing.T) { + v, err := VirtualMemoryEx() + if err != nil { + t.Error(err) + } + + t.Log(v) +} + +var virtualMemoryTests = []struct { + mockedRootFS string + stat *VirtualMemoryStat +}{ + {"intelcorei5", &VirtualMemoryStat{ + Total: 16502300672, + Available: 11495358464, + Used: 3437277184, + UsedPercent: 20.82907863769651, + Free: 8783491072, + Active: 4347392000, + Inactive: 2938834944, + Wired: 0, + Laundry: 0, + Buffers: 212496384, + Cached: 4069036032, + Writeback: 0, + Dirty: 176128, + WritebackTmp: 0, + Shared: 1222402048, + Slab: 253771776, + SReclaimable: 186470400, + SUnreclaim: 67301376, + PageTables: 65241088, + SwapCached: 0, + CommitLimit: 16509730816, + CommittedAS: 12360818688, + HighTotal: 0, + HighFree: 0, + LowTotal: 0, + LowFree: 0, + SwapTotal: 8258580480, + SwapFree: 8258580480, + Mapped: 1172627456, + VMallocTotal: 35184372087808, + VMallocUsed: 0, + VMallocChunk: 0, + HugePagesTotal: 0, + HugePagesFree: 0, + HugePageSize: 2097152}, + }, + {"issue1002", &VirtualMemoryStat{ + Total: 260579328, + Available: 215199744, + Used: 34328576, + UsedPercent: 13.173944481121694, + Free: 124506112, + Active: 108785664, + Inactive: 8581120, + Wired: 0, + Laundry: 0, + Buffers: 4915200, + Cached: 96829440, + Writeback: 0, + Dirty: 0, + WritebackTmp: 0, + Shared: 0, + Slab: 9293824, + SReclaimable: 2764800, + SUnreclaim: 6529024, + PageTables: 405504, + SwapCached: 0, + CommitLimit: 130289664, + CommittedAS: 25567232, + HighTotal: 134217728, + HighFree: 67784704, + LowTotal: 126361600, + LowFree: 56721408, + SwapTotal: 0, + SwapFree: 0, + Mapped: 38793216, + VMallocTotal: 1996488704, + VMallocUsed: 0, + VMallocChunk: 0, + HugePagesTotal: 0, + HugePagesFree: 0, + HugePageSize: 0}, + }, +} + +func TestVirtualMemoryLinux(t *testing.T) { + origProc := os.Getenv("HOST_PROC") + defer os.Setenv("HOST_PROC", origProc) + + for _, tt := range virtualMemoryTests { + t.Run(tt.mockedRootFS, func(t *testing.T) { + os.Setenv("HOST_PROC", filepath.Join("testdata/linux/virtualmemory/", tt.mockedRootFS, "proc")) + + stat, err := VirtualMemory() + skipIfNotImplementedErr(t, err) + if err != nil { + t.Errorf("error %v", err) + } + if !reflect.DeepEqual(stat, tt.stat) { + t.Errorf("got: %+v\nwant: %+v", stat, tt.stat) + } + }) + } +} diff --git a/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo b/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo new file mode 100644 index 000000000..6736d0edf --- /dev/null +++ b/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo @@ -0,0 +1,46 @@ +MemTotal: 16115528 kB +MemFree: 8577628 kB +MemAvailable: 11225936 kB +Buffers: 207516 kB +Cached: 3791568 kB +SwapCached: 0 kB +Active: 4245500 kB +Inactive: 2869956 kB +Active(anon): 3123508 kB +Inactive(anon): 1186612 kB +Active(file): 1121992 kB +Inactive(file): 1683344 kB +Unevictable: 32 kB +Mlocked: 32 kB +SwapTotal: 8065020 kB +SwapFree: 8065020 kB +Dirty: 172 kB +Writeback: 0 kB +AnonPages: 3116472 kB +Mapped: 1145144 kB +Shmem: 1193752 kB +Slab: 247824 kB +SReclaimable: 182100 kB +SUnreclaim: 65724 kB +KernelStack: 14224 kB +PageTables: 63712 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 16122784 kB +Committed_AS: 12071112 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 0 kB +ShmemPmdMapped: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 143564 kB +DirectMap2M: 6871040 kB +DirectMap1G: 10485760 kB diff --git a/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo b/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo new file mode 100644 index 000000000..7a7a4ec9d --- /dev/null +++ b/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo @@ -0,0 +1,42 @@ + total: used: free: shared: buffers: cached: +Mem: 260579328 136073216 124506112 0 4915200 94064640 +Swap: 0 0 0 +MemTotal: 254472 kB +MemFree: 121588 kB +MemShared: 0 kB +Buffers: 4800 kB +Cached: 91860 kB +SwapCached: 0 kB +Active: 106236 kB +Inactive: 8380 kB +MemAvailable: 210156 kB +Active(anon): 17956 kB +Inactive(anon): 0 kB +Active(file): 88280 kB +Inactive(file): 8380 kB +Unevictable: 0 kB +Mlocked: 0 kB +HighTotal: 131072 kB +HighFree: 66196 kB +LowTotal: 123400 kB +LowFree: 55392 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 0 kB +Writeback: 0 kB +AnonPages: 17992 kB +Mapped: 37884 kB +Shmem: 0 kB +Slab: 9076 kB +SReclaimable: 2700 kB +SUnreclaim: 6376 kB +KernelStack: 624 kB +PageTables: 396 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 127236 kB +Committed_AS: 24968 kB +VmallocTotal: 1949696 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB diff --git a/v3/mem/mem_linux.go b/v3/mem/mem_linux.go index c9ef47bad..dea5f9052 100644 --- a/v3/mem/mem_linux.go +++ b/v3/mem/mem_linux.go @@ -73,86 +73,226 @@ func fillFromMeminfoWithContext(ctx context.Context) (*VirtualMemoryStat, *Virtu value := strings.TrimSpace(fields[1]) value = strings.Replace(value, " kB", "", -1) - t, err := strconv.ParseUint(value, 10, 64) - if err != nil { - return ret, retEx,err - } switch key { case "MemTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Total = t * 1024 case "MemFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Free = t * 1024 case "MemAvailable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } memavail = true ret.Available = t * 1024 case "Buffers": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Buffers = t * 1024 case "Cached": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Cached = t * 1024 case "Active": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Active = t * 1024 case "Inactive": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Inactive = t * 1024 case "Active(anon)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.ActiveAnon = t * 1024 case "Inactive(anon)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.InactiveAnon = t * 1024 case "Active(file)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } activeFile = true retEx.ActiveFile = t * 1024 case "Inactive(file)": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } inactiveFile = true retEx.InactiveFile = t * 1024 case "Unevictable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } retEx.Unevictable = t * 1024 case "WriteBack": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.WriteBack = t * 1024 case "WriteBackTmp": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.WriteBackTmp = t * 1024 case "Dirty": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Dirty = t * 1024 case "Shmem": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Shared = t * 1024 case "Slab": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Slab = t * 1024 - case "Sreclaimable": + case "SReclaimable": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } sReclaimable = true ret.Sreclaimable = t * 1024 - case "Sunreclaim": + case "SUnreclaim": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Sunreclaim = t * 1024 case "PageTables": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.PageTables = t * 1024 case "SwapCached": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapCached = t * 1024 case "CommitLimit": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.CommitLimit = t * 1024 case "Committed_AS": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.CommittedAS = t * 1024 case "HighTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HighTotal = t * 1024 case "HighFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HighFree = t * 1024 case "LowTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.LowTotal = t * 1024 case "LowFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.LowFree = t * 1024 case "SwapTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapTotal = t * 1024 case "SwapFree": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.SwapFree = t * 1024 case "Mapped": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.Mapped = t * 1024 case "VmallocTotal": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VmallocTotal = t * 1024 case "VmallocUsed": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VmallocUsed = t * 1024 case "VmallocChunk": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.VmallocChunk = t * 1024 case "HugePages_Total": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePagesTotal = t case "HugePages_Free": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePagesFree = t case "Hugepagesize": + t, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return ret, retEx, err + } ret.HugePageSize = t * 1024 } } diff --git a/v3/mem/mem_linux_test.go b/v3/mem/mem_linux_test.go index eb29e335b..34b4003d9 100644 --- a/v3/mem/mem_linux_test.go +++ b/v3/mem/mem_linux_test.go @@ -1,6 +1,9 @@ package mem import ( + "os" + "path/filepath" + "reflect" "testing" ) @@ -12,3 +15,103 @@ func TestVirtualMemoryEx(t *testing.T) { t.Log(v) } + +var virtualMemoryTests = []struct { + mockedRootFS string + stat *VirtualMemoryStat +}{ + {"intelcorei5", &VirtualMemoryStat{ + Total: 16502300672, + Available: 11495358464, + Used: 3437277184, + UsedPercent: 20.82907863769651, + Free: 8783491072, + Active: 4347392000, + Inactive: 2938834944, + Wired: 0, + Laundry: 0, + Buffers: 212496384, + Cached: 4069036032, + WriteBack: 0, + Dirty: 176128, + WriteBackTmp: 0, + Shared: 1222402048, + Slab: 253771776, + Sreclaimable: 186470400, + Sunreclaim: 67301376, + PageTables: 65241088, + SwapCached: 0, + CommitLimit: 16509730816, + CommittedAS: 12360818688, + HighTotal: 0, + HighFree: 0, + LowTotal: 0, + LowFree: 0, + SwapTotal: 8258580480, + SwapFree: 8258580480, + Mapped: 1172627456, + VmallocTotal: 35184372087808, + VmallocUsed: 0, + VmallocChunk: 0, + HugePagesTotal: 0, + HugePagesFree: 0, + HugePageSize: 2097152}, + }, + {"issue1002", &VirtualMemoryStat{ + Total: 260579328, + Available: 215199744, + Used: 34328576, + UsedPercent: 13.173944481121694, + Free: 124506112, + Active: 108785664, + Inactive: 8581120, + Wired: 0, + Laundry: 0, + Buffers: 4915200, + Cached: 96829440, + WriteBack: 0, + Dirty: 0, + WriteBackTmp: 0, + Shared: 0, + Slab: 9293824, + Sreclaimable: 2764800, + Sunreclaim: 6529024, + PageTables: 405504, + SwapCached: 0, + CommitLimit: 130289664, + CommittedAS: 25567232, + HighTotal: 134217728, + HighFree: 67784704, + LowTotal: 126361600, + LowFree: 56721408, + SwapTotal: 0, + SwapFree: 0, + Mapped: 38793216, + VmallocTotal: 1996488704, + VmallocUsed: 0, + VmallocChunk: 0, + HugePagesTotal: 0, + HugePagesFree: 0, + HugePageSize: 0}, + }, +} + +func TestVirtualMemoryLinux(t *testing.T) { + origProc := os.Getenv("HOST_PROC") + defer os.Setenv("HOST_PROC", origProc) + + for _, tt := range virtualMemoryTests { + t.Run(tt.mockedRootFS, func(t *testing.T) { + os.Setenv("HOST_PROC", filepath.Join("testdata/linux/virtualmemory/", tt.mockedRootFS, "proc")) + + stat, err := VirtualMemory() + skipIfNotImplementedErr(t, err) + if err != nil { + t.Errorf("error %v", err) + } + if !reflect.DeepEqual(stat, tt.stat) { + t.Errorf("got: %+v\nwant: %+v", stat, tt.stat) + } + }) + } +} diff --git a/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo b/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo new file mode 100644 index 000000000..6736d0edf --- /dev/null +++ b/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo @@ -0,0 +1,46 @@ +MemTotal: 16115528 kB +MemFree: 8577628 kB +MemAvailable: 11225936 kB +Buffers: 207516 kB +Cached: 3791568 kB +SwapCached: 0 kB +Active: 4245500 kB +Inactive: 2869956 kB +Active(anon): 3123508 kB +Inactive(anon): 1186612 kB +Active(file): 1121992 kB +Inactive(file): 1683344 kB +Unevictable: 32 kB +Mlocked: 32 kB +SwapTotal: 8065020 kB +SwapFree: 8065020 kB +Dirty: 172 kB +Writeback: 0 kB +AnonPages: 3116472 kB +Mapped: 1145144 kB +Shmem: 1193752 kB +Slab: 247824 kB +SReclaimable: 182100 kB +SUnreclaim: 65724 kB +KernelStack: 14224 kB +PageTables: 63712 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 16122784 kB +Committed_AS: 12071112 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 0 kB +ShmemPmdMapped: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 143564 kB +DirectMap2M: 6871040 kB +DirectMap1G: 10485760 kB diff --git a/v3/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo b/v3/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo new file mode 100644 index 000000000..7a7a4ec9d --- /dev/null +++ b/v3/mem/testdata/linux/virtualmemory/issue1002/proc/meminfo @@ -0,0 +1,42 @@ + total: used: free: shared: buffers: cached: +Mem: 260579328 136073216 124506112 0 4915200 94064640 +Swap: 0 0 0 +MemTotal: 254472 kB +MemFree: 121588 kB +MemShared: 0 kB +Buffers: 4800 kB +Cached: 91860 kB +SwapCached: 0 kB +Active: 106236 kB +Inactive: 8380 kB +MemAvailable: 210156 kB +Active(anon): 17956 kB +Inactive(anon): 0 kB +Active(file): 88280 kB +Inactive(file): 8380 kB +Unevictable: 0 kB +Mlocked: 0 kB +HighTotal: 131072 kB +HighFree: 66196 kB +LowTotal: 123400 kB +LowFree: 55392 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 0 kB +Writeback: 0 kB +AnonPages: 17992 kB +Mapped: 37884 kB +Shmem: 0 kB +Slab: 9076 kB +SReclaimable: 2700 kB +SUnreclaim: 6376 kB +KernelStack: 624 kB +PageTables: 396 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 127236 kB +Committed_AS: 24968 kB +VmallocTotal: 1949696 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB