1
// Code generated by go run tools/import_commands.go --talos-version v1.7.1 memory
4
// This Source Code Form is subject to the terms of the Mozilla Public
5
// License, v. 2.0. If a copy of the MPL was not distributed with this
6
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
16
"github.com/spf13/cobra"
17
"google.golang.org/grpc"
18
"google.golang.org/grpc/peer"
20
"github.com/siderolabs/talos/cmd/talosctl/pkg/talos/helpers"
21
"github.com/siderolabs/talos/pkg/cli"
22
machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine"
23
"github.com/siderolabs/talos/pkg/machinery/client"
28
// memoryCmd represents the processes command.
29
var memoryCmd = &cobra.Command{
31
Aliases: []string{"m", "free"},
32
Short: "Show memory usage",
35
RunE: func(cmd *cobra.Command, args []string) error {
36
return WithClient(func(ctx context.Context, c *client.Client) error {
37
var remotePeer peer.Peer
39
resp, err := c.Memory(ctx, grpc.Peer(&remotePeer))
42
return fmt.Errorf("error getting memory stats: %s", err)
45
cli.Warning("%s", err)
49
verboseRender(&remotePeer, resp)
51
err = briefRender(&remotePeer, resp)
57
return helpers.CheckErrors(resp.Messages...)
62
func briefRender(remotePeer *peer.Peer, resp *machineapi.MemoryResponse) error {
63
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
64
fmt.Fprintln(w, "NODE\tTOTAL\tUSED\tFREE\tSHARED\tBUFFERS\tCACHE\tAVAILABLE")
66
defaultNode := client.AddrFromPeer(remotePeer)
68
for _, msg := range resp.Messages {
71
if msg.Metadata != nil {
72
node = msg.Metadata.Hostname
75
// Default to displaying output as MB
76
fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
78
msg.Meminfo.Memtotal/1024,
79
(msg.Meminfo.Memtotal-msg.Meminfo.Memfree-msg.Meminfo.Cached-msg.Meminfo.Buffers)/1024,
80
msg.Meminfo.Memfree/1024,
81
msg.Meminfo.Shmem/1024,
82
msg.Meminfo.Buffers/1024,
83
msg.Meminfo.Cached/1024,
84
msg.Meminfo.Memavailable/1024,
91
func verboseRender(remotePeer *peer.Peer, resp *machineapi.MemoryResponse) {
92
defaultNode := client.AddrFromPeer(remotePeer)
94
// Dump as /proc/meminfo
95
for _, msg := range resp.Messages {
98
if msg.Metadata != nil {
99
node = msg.Metadata.Hostname
102
fmt.Printf("%s: %s\n", "NODE", node)
103
fmt.Printf("%s: %d %s\n", "MemTotal", msg.Meminfo.Memtotal, "kB")
104
fmt.Printf("%s: %d %s\n", "MemFree", msg.Meminfo.Memfree, "kB")
105
fmt.Printf("%s: %d %s\n", "MemAvailable", msg.Meminfo.Memavailable, "kB")
106
fmt.Printf("%s: %d %s\n", "Buffers", msg.Meminfo.Buffers, "kB")
107
fmt.Printf("%s: %d %s\n", "Cached", msg.Meminfo.Cached, "kB")
108
fmt.Printf("%s: %d %s\n", "SwapCached", msg.Meminfo.Swapcached, "kB")
109
fmt.Printf("%s: %d %s\n", "Active", msg.Meminfo.Active, "kB")
110
fmt.Printf("%s: %d %s\n", "Inactive", msg.Meminfo.Inactive, "kB")
111
fmt.Printf("%s: %d %s\n", "ActiveAnon", msg.Meminfo.Activeanon, "kB")
112
fmt.Printf("%s: %d %s\n", "InactiveAnon", msg.Meminfo.Inactiveanon, "kB")
113
fmt.Printf("%s: %d %s\n", "ActiveFile", msg.Meminfo.Activefile, "kB")
114
fmt.Printf("%s: %d %s\n", "InactiveFile", msg.Meminfo.Inactivefile, "kB")
115
fmt.Printf("%s: %d %s\n", "Unevictable", msg.Meminfo.Unevictable, "kB")
116
fmt.Printf("%s: %d %s\n", "Mlocked", msg.Meminfo.Mlocked, "kB")
117
fmt.Printf("%s: %d %s\n", "SwapTotal", msg.Meminfo.Swaptotal, "kB")
118
fmt.Printf("%s: %d %s\n", "SwapFree", msg.Meminfo.Swapfree, "kB")
119
fmt.Printf("%s: %d %s\n", "Dirty", msg.Meminfo.Dirty, "kB")
120
fmt.Printf("%s: %d %s\n", "Writeback", msg.Meminfo.Writeback, "kB")
121
fmt.Printf("%s: %d %s\n", "AnonPages", msg.Meminfo.Anonpages, "kB")
122
fmt.Printf("%s: %d %s\n", "Mapped", msg.Meminfo.Mapped, "kB")
123
fmt.Printf("%s: %d %s\n", "Shmem", msg.Meminfo.Shmem, "kB")
124
fmt.Printf("%s: %d %s\n", "Slab", msg.Meminfo.Slab, "kB")
125
fmt.Printf("%s: %d %s\n", "SReclaimable", msg.Meminfo.Sreclaimable, "kB")
126
fmt.Printf("%s: %d %s\n", "SUnreclaim", msg.Meminfo.Sunreclaim, "kB")
127
fmt.Printf("%s: %d %s\n", "KernelStack", msg.Meminfo.Kernelstack, "kB")
128
fmt.Printf("%s: %d %s\n", "PageTables", msg.Meminfo.Pagetables, "kB")
129
fmt.Printf("%s: %d %s\n", "NFSUnstable", msg.Meminfo.Nfsunstable, "kB")
130
fmt.Printf("%s: %d %s\n", "Bounce", msg.Meminfo.Bounce, "kB")
131
fmt.Printf("%s: %d %s\n", "WritebackTmp", msg.Meminfo.Writebacktmp, "kB")
132
fmt.Printf("%s: %d %s\n", "CommitLimit", msg.Meminfo.Commitlimit, "kB")
133
fmt.Printf("%s: %d %s\n", "CommittedAS", msg.Meminfo.Committedas, "kB")
134
fmt.Printf("%s: %d %s\n", "VmallocTotal", msg.Meminfo.Vmalloctotal, "kB")
135
fmt.Printf("%s: %d %s\n", "VmallocUsed", msg.Meminfo.Vmallocused, "kB")
136
fmt.Printf("%s: %d %s\n", "VmallocChunk", msg.Meminfo.Vmallocchunk, "kB")
137
fmt.Printf("%s: %d %s\n", "HardwareCorrupted", msg.Meminfo.Hardwarecorrupted, "kB")
138
fmt.Printf("%s: %d %s\n", "AnonHugePages", msg.Meminfo.Anonhugepages, "kB")
139
fmt.Printf("%s: %d %s\n", "ShmemHugePages", msg.Meminfo.Shmemhugepages, "kB")
140
fmt.Printf("%s: %d %s\n", "ShmemPmdMapped", msg.Meminfo.Shmempmdmapped, "kB")
141
fmt.Printf("%s: %d %s\n", "CmaTotal", msg.Meminfo.Cmatotal, "kB")
142
fmt.Printf("%s: %d %s\n", "CmaFree", msg.Meminfo.Cmafree, "kB")
143
fmt.Printf("%s: %d\n", "HugePagesTotal", msg.Meminfo.Hugepagestotal)
144
fmt.Printf("%s: %d\n", "HugePagesFree", msg.Meminfo.Hugepagesfree)
145
fmt.Printf("%s: %d\n", "HugePagesRsvd", msg.Meminfo.Hugepagesrsvd)
146
fmt.Printf("%s: %d\n", "HugePagesSurp", msg.Meminfo.Hugepagessurp)
147
fmt.Printf("%s: %d %s\n", "Hugepagesize", msg.Meminfo.Hugepagesize, "kB")
148
fmt.Printf("%s: %d %s\n", "DirectMap4k", msg.Meminfo.Directmap4K, "kB")
149
fmt.Printf("%s: %d %s\n", "DirectMap2M", msg.Meminfo.Directmap2M, "kB")
150
fmt.Printf("%s: %d %s\n", "DirectMap1G", msg.Meminfo.Directmap1G, "kB")
155
memoryCmd.Flags().StringSliceVarP(&memoryCmdFlags.configFiles,
156
"file", "f", nil, "specify config files or patches in a YAML file (can specify multiple)",
158
memoryCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
160
len(GlobalArgs.Nodes) > 0
161
endpointsFromArgs := len(GlobalArgs.Endpoints) > 0
162
for _, configFile := range memoryCmdFlags.configFiles {
163
if err := processModelineAndUpdateGlobals(configFile, nodesFromArgs,
164
endpointsFromArgs, false); err != nil {
171
memoryCmd.Flags().BoolVarP(&verbose, "verbose", "v", false, "display extended memory statistics")
172
addCommand(memoryCmd)
175
var memoryCmdFlags struct {