Skip to content

Commit 952cb1c

Browse files
authored
Merge pull request #963 from gastoner/add-memavailable-to-meminfo
feat(system): add MemAvailable field to MemInfo struct
2 parents a16900e + 2563ce0 commit 952cb1c

6 files changed

Lines changed: 19 additions & 5 deletions

File tree

storage/pkg/system/meminfo.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ type MemInfo struct {
99
// Amount of free memory.
1010
MemFree int64
1111

12+
// An estimate of how much memory is available for starting new
13+
// applications, without swapping.
14+
// Set to -1 on platforms where this information is not available.
15+
MemAvailable int64
16+
1217
// Total amount of swap space available.
1318
SwapTotal int64
1419

storage/pkg/system/meminfo_freebsd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ func ReadMemInfo() (*MemInfo, error) {
7878
// Total memory is total physical memory less than memory locked by kernel
7979
meminfo.MemTotal = MemTotal
8080
meminfo.MemFree = MemFree
81+
meminfo.MemAvailable = -1
8182
meminfo.SwapTotal = SwapTotal
8283
meminfo.SwapFree = SwapFree
8384

storage/pkg/system/meminfo_linux.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ReadMemInfo() (*MemInfo, error) {
2525
// a MemInfo object given an io.Reader to the file.
2626
// Throws error if there are problems reading from the file
2727
func parseMemInfo(reader io.Reader) (*MemInfo, error) {
28-
meminfo := &MemInfo{}
28+
meminfo := &MemInfo{MemAvailable: -1}
2929
scanner := bufio.NewScanner(reader)
3030
for scanner.Scan() {
3131
// Expected format: ["MemTotal:", "1234", "kB"]
@@ -48,6 +48,8 @@ func parseMemInfo(reader io.Reader) (*MemInfo, error) {
4848
meminfo.MemTotal = bytes
4949
case "MemFree:":
5050
meminfo.MemFree = bytes
51+
case "MemAvailable:":
52+
meminfo.MemAvailable = bytes
5153
case "SwapTotal:":
5254
meminfo.SwapTotal = bytes
5355
case "SwapFree:":

storage/pkg/system/meminfo_solaris.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ func ReadMemInfo() (*MemInfo, error) {
9797
// Total memory is total physical memory less than memory locked by kernel
9898
meminfo.MemTotal = MemTotal - int64(ppKernel)
9999
meminfo.MemFree = MemFree
100+
meminfo.MemAvailable = -1
100101
meminfo.SwapTotal = SwapTotal
101102
meminfo.SwapFree = SwapFree
102103

storage/pkg/system/meminfo_unix_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ func TestMemInfo(t *testing.T) {
1414
const input = `
1515
MemTotal: 1 kB
1616
MemFree: 2 kB
17+
MemAvailable: 5 kB
1718
SwapTotal: 3 kB
1819
SwapFree: 4 kB
1920
Malformed1:
@@ -31,6 +32,9 @@ func TestMemInfo(t *testing.T) {
3132
if meminfo.MemFree != 2*units.KiB {
3233
t.Fatalf("Unexpected MemFree: %d", meminfo.MemFree)
3334
}
35+
if meminfo.MemAvailable != 5*units.KiB {
36+
t.Fatalf("Unexpected MemAvailable: %d", meminfo.MemAvailable)
37+
}
3438
if meminfo.SwapTotal != 3*units.KiB {
3539
t.Fatalf("Unexpected SwapTotal: %d", meminfo.SwapTotal)
3640
}

storage/pkg/system/meminfo_windows.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ func ReadMemInfo() (*MemInfo, error) {
3838
return &MemInfo{}, nil
3939
}
4040
return &MemInfo{
41-
MemTotal: int64(msi.ullTotalPhys),
42-
MemFree: int64(msi.ullAvailPhys),
43-
SwapTotal: int64(msi.ullTotalPageFile),
44-
SwapFree: int64(msi.ullAvailPageFile),
41+
MemTotal: int64(msi.ullTotalPhys),
42+
MemFree: int64(msi.ullAvailPhys),
43+
MemAvailable: -1,
44+
SwapTotal: int64(msi.ullTotalPageFile),
45+
SwapFree: int64(msi.ullAvailPageFile),
4546
}, nil
4647
}

0 commit comments

Comments
 (0)