1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
2018-11-12 01:30:24 -08:00

374 lines
14 KiB
Go

package linux
import (
"io/ioutil"
"strconv"
"strings"
)
type VMStat struct {
NrFreePages uint64 `json:"nr_free_pages"`
NrAllocBatch uint64 `json:"nr_alloc_batch"`
NrInactiveAnon uint64 `json:"nr_inactive_anon"`
NrActiveAnon uint64 `json:"nr_active_anon"`
NrInactiveFile uint64 `json:"nr_inactive_file"`
NrActiveFile uint64 `json:"nr_active_file"`
NrUnevictable uint64 `json:"nr_unevictable"`
NrMlock uint64 `json:"nr_mlock"`
NrAnonPages uint64 `json:"nr_anon_pages"`
NrMapped uint64 `json:"nr_mapped"`
NrFilePages uint64 `json:"nr_file_pages"`
NrDirty uint64 `json:"nr_dirty"`
NrWriteback uint64 `json:"nr_writeback"`
NrSlabReclaimable uint64 `json:"nr_slab_reclaimable"`
NrSlabUnreclaimable uint64 `json:"nr_slab_unreclaimable"`
NrPageTablePages uint64 `json:"nr_page_table_pages"`
NrKernelStack uint64 `json:"nr_kernel_stack"`
NrUnstable uint64 `json:"nr_unstable"`
NrBounce uint64 `json:"nr_bounce"`
NrVmscanWrite uint64 `json:"nr_vmscan_write"`
NrVmscanImmediateReclaim uint64 `json:"nr_vmscan_immediate_reclaim"`
NrWritebackTemp uint64 `json:"nr_writeback_temp"`
NrIsolatedAnon uint64 `json:"nr_isolated_anon"`
NrIsolatedFile uint64 `json:"nr_isolated_file"`
NrShmem uint64 `json:"nr_shmem"`
NrDirtied uint64 `json:"nr_dirtied"`
NrWritten uint64 `json:"nr_written"`
NumaHit uint64 `json:"numa_hit"`
NumaMiss uint64 `json:"numa_miss"`
NumaForeign uint64 `json:"numa_foreign"`
NumaInterleave uint64 `json:"numa_interleave"`
NumaLocal uint64 `json:"numa_local"`
NumaOther uint64 `json:"numa_other"`
WorkingsetRefault uint64 `json:"workingset_refault"`
WorkingsetActivate uint64 `json:"workingset_activate"`
WorkingsetNodereclaim uint64 `json:"workingset_nodereclaim"`
NrAnonTransparentHugepages uint64 `json:"nr_anon_transparent_hugepages"`
NrFreeCma uint64 `json:"nr_free_cma"`
NrDirtyThreshold uint64 `json:"nr_dirty_threshold"`
NrDirtyBackgroundThreshold uint64 `json:"nr_dirty_background_threshold"`
PagePagein uint64 `json:"pgpgin"`
PagePageout uint64 `json:"pgpgout"`
PageSwapin uint64 `json:"pswpin"`
PageSwapout uint64 `json:"pswpout"`
PageAllocDMA uint64 `json:"pgalloc_dma"`
PageAllocDMA32 uint64 `json:"pgalloc_dma32"`
PageAllocNormal uint64 `json:"pgalloc_normal"`
PageAllocMovable uint64 `json:"pgalloc_movable"`
PageFree uint64 `json:"pgfree"`
PageActivate uint64 `json:"pgactivate"`
PageDeactivate uint64 `json:"pgdeactivate"`
PageFault uint64 `json:"pgfault"`
PageMajorFault uint64 `json:"pgmajfault"`
PageRefillDMA uint64 `json:"pgrefill_dma"`
PageRefillDMA32 uint64 `json:"pgrefill_dma32"`
PageRefillMormal uint64 `json:"pgrefill_normal"`
PageRefillMovable uint64 `json:"pgrefill_movable"`
PageStealKswapdDMA uint64 `json:"pgsteal_kswapd_dma"`
PageStealKswapdDMA32 uint64 `json:"pgsteal_kswapd_dma32"`
PageStealKswapdNormal uint64 `json:"pgsteal_kswapd_normal"`
PageStealKswapdMovable uint64 `json:"pgsteal_kswapd_movable"`
PageStealDirectDMA uint64 `json:"pgsteal_direct_dma"`
PageStealDirectDMA32 uint64 `json:"pgsteal_direct_dma32"`
PageStealDirectNormal uint64 `json:"pgsteal_direct_normal"`
PageStealDirectMovable uint64 `json:"pgsteal_direct_movable"`
PageScanKswapdDMA uint64 `json:"pgscan_kswapd_dma"`
PageScanKswapdDMA32 uint64 `json:"pgscan_kswapd_dma32"`
PageScanKswapdNormal uint64 `json:"pgscan_kswapd_normal"`
PageScanKswapdMovable uint64 `json:"pgscan_kswapd_movable"`
PageScanDirectDMA uint64 `json:"pgscan_direct_dma"`
PageScanDirectDMA32 uint64 `json:"pgscan_direct_dma32"`
PageScanDirectNormal uint64 `json:"pgscan_direct_normal"`
PageScanDirectMovable uint64 `json:"pgscan_direct_movable"`
PageScanDirectThrottle uint64 `json:"pgscan_direct_throttle"`
ZoneReclaimFailed uint64 `json:"zone_reclaim_failed"`
PageInodeSteal uint64 `json:"pginodesteal"`
SlabsScanned uint64 `json:"slabs_scanned"`
KswapdInodesteal uint64 `json:"kswapd_inodesteal"`
KswapdLowWatermarkHitQuickly uint64 `json:"kswapd_low_wmark_hit_quickly"`
KswapdHighWatermarkHitQuickly uint64 `json:"kswapd_high_wmark_hit_quickly"`
PageoutRun uint64 `json:"pageoutrun"`
AllocStall uint64 `json:"allocstall"`
PageRotated uint64 `json:"pgrotated"`
DropPagecache uint64 `json:"drop_pagecache"`
DropSlab uint64 `json:"drop_slab"`
NumaPteUpdates uint64 `json:"numa_pte_updates"`
NumaHugePteUpdates uint64 `json:"numa_huge_pte_updates"`
NumaHintFaults uint64 `json:"numa_hint_faults"`
NumaHintFaults_local uint64 `json:"numa_hint_faults_local"`
NumaPagesMigrated uint64 `json:"numa_pages_migrated"`
PageMigrateSuccess uint64 `json:"pgmigrate_success"`
PageMigrateFail uint64 `json:"pgmigrate_fail"`
CompactMigrateScanned uint64 `json:"compact_migrate_scanned"`
CompactFreeScanned uint64 `json:"compact_free_scanned"`
CompactIsolated uint64 `json:"compact_isolated"`
CompactStall uint64 `json:"compact_stall"`
CompactFail uint64 `json:"compact_fail"`
CompactSuccess uint64 `json:"compact_success"`
HtlbBuddyAllocSuccess uint64 `json:"htlb_buddy_alloc_success"`
HtlbBuddyAllocFail uint64 `json:"htlb_buddy_alloc_fail"`
UnevictablePagesCulled uint64 `json:"unevictable_pgs_culled"`
UnevictablePagesScanned uint64 `json:"unevictable_pgs_scanned"`
UnevictablePagesRescued uint64 `json:"unevictable_pgs_rescued"`
UnevictablePagesMlocked uint64 `json:"unevictable_pgs_mlocked"`
UnevictablePagesMunlocked uint64 `json:"unevictable_pgs_munlocked"`
UnevictablePagesCleared uint64 `json:"unevictable_pgs_cleared"`
UnevictablePagesStranded uint64 `json:"unevictable_pgs_stranded"`
THPFaultAlloc uint64 `json:"thp_fault_alloc"`
THPFaultFallback uint64 `json:"thp_fault_fallback"`
THPCollapseAlloc uint64 `json:"thp_collapse_alloc"`
THPCollapseAllocFailed uint64 `json:"thp_collapse_alloc_failed"`
THPSplit uint64 `json:"thp_split"`
THPZeroPageAlloc uint64 `json:"thp_zero_page_alloc"`
THPZeroPageAllocFailed uint64 `json:"thp_zero_page_alloc_failed"`
}
func ReadVMStat(path string) (*VMStat, error) {
b, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
content := string(b)
lines := strings.Split(content, "\n")
vmstat := VMStat{}
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) != 2 {
continue
}
name := fields[0]
value, _ := strconv.ParseUint(fields[1], 10, 64)
switch name {
case "nr_free_pages":
vmstat.NrFreePages = value
case "nr_alloc_batch":
vmstat.NrAllocBatch = value
case "nr_inactive_anon":
vmstat.NrInactiveAnon = value
case "nr_active_anon":
vmstat.NrActiveAnon = value
case "nr_inactive_file":
vmstat.NrInactiveFile = value
case "nr_active_file":
vmstat.NrActiveFile = value
case "nr_unevictable":
vmstat.NrUnevictable = value
case "nr_mlock":
vmstat.NrMlock = value
case "nr_anon_pages":
vmstat.NrAnonPages = value
case "nr_mapped":
vmstat.NrMapped = value
case "nr_file_pages":
vmstat.NrFilePages = value
case "nr_dirty":
vmstat.NrDirty = value
case "nr_writeback":
vmstat.NrWriteback = value
case "nr_slab_reclaimable":
vmstat.NrSlabReclaimable = value
case "nr_slab_unreclaimable":
vmstat.NrSlabUnreclaimable = value
case "nr_page_table_pages":
vmstat.NrPageTablePages = value
case "nr_kernel_stack":
vmstat.NrKernelStack = value
case "nr_unstable":
vmstat.NrUnstable = value
case "nr_bounce":
vmstat.NrBounce = value
case "nr_vmscan_write":
vmstat.NrVmscanWrite = value
case "nr_vmscan_immediate_reclaim":
vmstat.NrVmscanImmediateReclaim = value
case "nr_writeback_temp":
vmstat.NrWritebackTemp = value
case "nr_isolated_anon":
vmstat.NrIsolatedAnon = value
case "nr_isolated_file":
vmstat.NrIsolatedFile = value
case "nr_shmem":
vmstat.NrShmem = value
case "nr_dirtied":
vmstat.NrDirtied = value
case "nr_written":
vmstat.NrWritten = value
case "numa_hit":
vmstat.NumaHit = value
case "numa_miss":
vmstat.NumaMiss = value
case "numa_foreign":
vmstat.NumaForeign = value
case "numa_interleave":
vmstat.NumaInterleave = value
case "numa_local":
vmstat.NumaLocal = value
case "numa_other":
vmstat.NumaOther = value
case "workingset_refault":
vmstat.WorkingsetRefault = value
case "workingset_activate":
vmstat.WorkingsetActivate = value
case "workingset_nodereclaim":
vmstat.WorkingsetNodereclaim = value
case "nr_anon_transparent_hugepages":
vmstat.NrAnonTransparentHugepages = value
case "nr_free_cma":
vmstat.NrFreeCma = value
case "nr_dirty_threshold":
vmstat.NrDirtyThreshold = value
case "nr_dirty_background_threshold":
vmstat.NrDirtyBackgroundThreshold = value
case "pgpgin":
vmstat.PagePagein = value
case "pgpgout":
vmstat.PagePageout = value
case "pswpin":
vmstat.PageSwapin = value
case "pswpout":
vmstat.PageSwapout = value
case "pgalloc_dma":
vmstat.PageAllocDMA = value
case "pgalloc_dma32":
vmstat.PageAllocDMA32 = value
case "pgalloc_normal":
vmstat.PageAllocNormal = value
case "pgalloc_movable":
vmstat.PageAllocMovable = value
case "pgfree":
vmstat.PageFree = value
case "pgactivate":
vmstat.PageActivate = value
case "pgdeactivate":
vmstat.PageDeactivate = value
case "pgfault":
vmstat.PageFault = value
case "pgmajfault":
vmstat.PageMajorFault = value
case "pgrefill_dma":
vmstat.PageRefillDMA = value
case "pgrefill_dma32":
vmstat.PageRefillDMA32 = value
case "pgrefill_normal":
vmstat.PageRefillMormal = value
case "pgrefill_movable":
vmstat.PageRefillMovable = value
case "pgsteal_kswapd_dma":
vmstat.PageStealKswapdDMA = value
case "pgsteal_kswapd_dma32":
vmstat.PageStealKswapdDMA32 = value
case "pgsteal_kswapd_normal":
vmstat.PageStealKswapdNormal = value
case "pgsteal_kswapd_movable":
vmstat.PageStealKswapdMovable = value
case "pgsteal_direct_dma":
vmstat.PageStealDirectDMA = value
case "pgsteal_direct_dma32":
vmstat.PageStealDirectDMA32 = value
case "pgsteal_direct_normal":
vmstat.PageStealDirectNormal = value
case "pgsteal_direct_movable":
vmstat.PageStealDirectMovable = value
case "pgscan_kswapd_dma":
vmstat.PageScanKswapdDMA = value
case "pgscan_kswapd_dma32":
vmstat.PageScanKswapdDMA32 = value
case "pgscan_kswapd_normal":
vmstat.PageScanKswapdNormal = value
case "pgscan_kswapd_movable":
vmstat.PageScanKswapdMovable = value
case "pgscan_direct_dma":
vmstat.PageScanDirectDMA = value
case "pgscan_direct_dma32":
vmstat.PageScanDirectDMA32 = value
case "pgscan_direct_normal":
vmstat.PageScanDirectNormal = value
case "pgscan_direct_movable":
vmstat.PageScanDirectMovable = value
case "pgscan_direct_throttle":
vmstat.PageScanDirectThrottle = value
case "zone_reclaim_failed":
vmstat.ZoneReclaimFailed = value
case "pginodesteal":
vmstat.PageInodeSteal = value
case "slabs_scanned":
vmstat.SlabsScanned = value
case "kswapd_inodesteal":
vmstat.KswapdInodesteal = value
case "kswapd_low_wmark_hit_quickly":
vmstat.KswapdLowWatermarkHitQuickly = value
case "kswapd_high_wmark_hit_quickly":
vmstat.KswapdHighWatermarkHitQuickly = value
case "pageoutrun":
vmstat.PageoutRun = value
case "allocstall":
vmstat.AllocStall = value
case "pgrotated":
vmstat.PageRotated = value
case "drop_pagecache":
vmstat.DropPagecache = value
case "drop_slab":
vmstat.DropSlab = value
case "numa_pte_updates":
vmstat.NumaPteUpdates = value
case "numa_huge_pte_updates":
vmstat.NumaHugePteUpdates = value
case "numa_hint_faults":
vmstat.NumaHintFaults = value
case "numa_hint_faults_local":
vmstat.NumaHintFaults_local = value
case "numa_pages_migrated":
vmstat.NumaPagesMigrated = value
case "pgmigrate_success":
vmstat.PageMigrateSuccess = value
case "pgmigrate_fail":
vmstat.PageMigrateFail = value
case "compact_migrate_scanned":
vmstat.CompactMigrateScanned = value
case "compact_free_scanned":
vmstat.CompactFreeScanned = value
case "compact_isolated":
vmstat.CompactIsolated = value
case "compact_stall":
vmstat.CompactStall = value
case "compact_fail":
vmstat.CompactFail = value
case "compact_success":
vmstat.CompactSuccess = value
case "htlb_buddy_alloc_success":
vmstat.HtlbBuddyAllocSuccess = value
case "htlb_buddy_alloc_fail":
vmstat.HtlbBuddyAllocFail = value
case "unevictable_pgs_culled":
vmstat.UnevictablePagesCulled = value
case "unevictable_pgs_scanned":
vmstat.UnevictablePagesScanned = value
case "unevictable_pgs_rescued":
vmstat.UnevictablePagesRescued = value
case "unevictable_pgs_mlocked":
vmstat.UnevictablePagesMlocked = value
case "unevictable_pgs_munlocked":
vmstat.UnevictablePagesMunlocked = value
case "unevictable_pgs_cleared":
vmstat.UnevictablePagesCleared = value
case "unevictable_pgs_stranded":
vmstat.UnevictablePagesStranded = value
case "thp_fault_alloc":
vmstat.THPFaultAlloc = value
case "thp_fault_fallback":
vmstat.THPFaultFallback = value
case "thp_collapse_alloc":
vmstat.THPCollapseAlloc = value
case "thp_collapse_alloc_failed":
vmstat.THPCollapseAllocFailed = value
case "thp_split":
vmstat.THPSplit = value
case "thp_zero_page_alloc":
vmstat.THPZeroPageAlloc = value
case "thp_zero_page_alloc_failed":
vmstat.THPZeroPageAllocFailed = value
}
}
return &vmstat, nil
}