From f9e238c38b5f16a36794dd2f0f751c7376c64a60 Mon Sep 17 00:00:00 2001 From: Minje Park Date: Fri, 14 Dec 2018 00:48:38 +0900 Subject: [PATCH] SReclaimable should be added to Cached Memory --- mem/mem.go | 3 ++- mem/mem_linux.go | 5 +++++ mem/mem_test.go | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mem/mem.go b/mem/mem.go index e505662..995364f 100644 --- a/mem/mem.go +++ b/mem/mem.go @@ -44,7 +44,7 @@ type VirtualMemoryStat struct { // FreeBSD specific numbers: // https://reviews.freebsd.org/D8467 - Laundry uint64 `json:"laundry"` + Laundry uint64 `json:"laundry"` // Linux specific numbers // https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html @@ -57,6 +57,7 @@ type VirtualMemoryStat struct { WritebackTmp uint64 `json:"writebacktmp"` Shared uint64 `json:"shared"` Slab uint64 `json:"slab"` + SReclaimable uint64 `json:"sreclaimable"` PageTables uint64 `json:"pagetables"` SwapCached uint64 `json:"swapcached"` CommitLimit uint64 `json:"commitlimit"` diff --git a/mem/mem_linux.go b/mem/mem_linux.go index fcc9a3f..a3425d7 100644 --- a/mem/mem_linux.go +++ b/mem/mem_linux.go @@ -61,6 +61,8 @@ func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) { ret.Shared = t * 1024 case "Slab": ret.Slab = t * 1024 + case "SReclaimable": + ret.SReclaimable = t * 1024 case "PageTables": ret.PageTables = t * 1024 case "SwapCached": @@ -97,6 +99,9 @@ func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) { ret.HugePageSize = t * 1024 } } + + ret.Cached += ret.SReclaimable + if !memavail { ret.Available = ret.Free + ret.Buffers + ret.Cached } diff --git a/mem/mem_test.go b/mem/mem_test.go index 2a18299..0651a61 100644 --- a/mem/mem_test.go +++ b/mem/mem_test.go @@ -71,7 +71,7 @@ func TestVirtualMemoryStat_String(t *testing.T) { UsedPercent: 30.1, Free: 40, } - e := `{"total":10,"available":20,"used":30,"usedPercent":30.1,"free":40,"active":0,"inactive":0,"wired":0,"laundry":0,"buffers":0,"cached":0,"writeback":0,"dirty":0,"writebacktmp":0,"shared":0,"slab":0,"pagetables":0,"swapcached":0,"commitlimit":0,"committedas":0,"hightotal":0,"highfree":0,"lowtotal":0,"lowfree":0,"swaptotal":0,"swapfree":0,"mapped":0,"vmalloctotal":0,"vmallocused":0,"vmallocchunk":0,"hugepagestotal":0,"hugepagesfree":0,"hugepagesize":0}` + e := `{"total":10,"available":20,"used":30,"usedPercent":30.1,"free":40,"active":0,"inactive":0,"wired":0,"laundry":0,"buffers":0,"cached":0,"writeback":0,"dirty":0,"writebacktmp":0,"shared":0,"slab":0,"sreclaimable":0,"pagetables":0,"swapcached":0,"commitlimit":0,"committedas":0,"hightotal":0,"highfree":0,"lowtotal":0,"lowfree":0,"swaptotal":0,"swapfree":0,"mapped":0,"vmalloctotal":0,"vmallocused":0,"vmallocchunk":0,"hugepagestotal":0,"hugepagesfree":0,"hugepagesize":0}` if e != fmt.Sprintf("%v", v) { t.Errorf("VirtualMemoryStat string is invalid: %v", v) }