1
0
Fork 0

Adding upstream version 1.34.4.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-24 07:26:29 +02:00
parent e393c3af3f
commit 4978089aab
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
4963 changed files with 677545 additions and 0 deletions

View file

@ -0,0 +1,115 @@
# Kernel Input Plugin
This plugin gathers metrics about the [Linux kernel][kernel] including, among
others, the [available entropy][entropy], [Kernel Samepage Merging][ksm] and
[Pressure Stall Information][psi].
⭐ Telegraf v0.11.0
🏷️ system
💻 linux
[kernel]: https://kernel.org/
[entropy]: https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html#random
[ksm]: https://www.kernel.org/doc/html/latest/mm/ksm.html
[psi]: https://www.kernel.org/doc/html/latest/accounting/psi.html
## Global configuration options <!-- @/docs/includes/plugin_config.md -->
In addition to the plugin-specific configuration settings, plugins support
additional global and plugin configuration settings. These settings are used to
modify metrics, tags, and field or create aliases and configure ordering, etc.
See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
## Configuration
```toml @sample.conf
# Plugin to collect various Linux kernel statistics.
# This plugin ONLY supports Linux
[[inputs.kernel]]
## Additional gather options
## Possible options include:
## * ksm - kernel same-page merging
## * psi - pressure stall information
# collect = []
```
Please check the documentation of the underlying kernel interfaces in the
`/proc/stat` section of the [proc man page][man_proc], as well as in the
`/proc interfaces` section of the [random man page][man_random].
Kernel Samepage Merging is generally documented in the
[kernel documentation][ksm] and the available metrics exposed via sysfs
are documented in the [admin guide][ksm_admin].
Pressure Stall Information is exposed through `/proc/pressure` and is documented
in [kernel documentation][psi]. Kernel version 4.20+ is required.
[ksm_admin]: https://www.kernel.org/doc/html/latest/admin-guide/mm/ksm.html#ksm-daemon-sysfs-interface
[man_proc]: http://man7.org/linux/man-pages/man5/proc.5.html
[man_random]: https://man7.org/linux/man-pages/man4/random.4.html
## Metrics
- kernel
- boot_time (integer, seconds since epoch, `btime`)
- context_switches (integer, `ctxt`)
- disk_pages_in (integer, `page (0)`)
- disk_pages_out (integer, `page (1)`)
- interrupts (integer, `intr`)
- processes_forked (integer, `processes`)
- entropy_avail (integer, `entropy_available`)
- ksm_full_scans (integer, how many times all mergeable areas have been scanned, `full_scans`)
- ksm_max_page_sharing (integer, maximum sharing allowed for each KSM page, `max_page_sharing`)
- ksm_merge_across_nodes (integer, whether pages should be merged across NUMA nodes, `merge_across_nodes`)
- ksm_pages_shared (integer, how many shared pages are being used, `pages_shared`)
- ksm_pages_sharing (integer,how many more sites are sharing them , `pages_sharing`)
- ksm_pages_to_scan (integer, how many pages to scan before ksmd goes to sleep, `pages_to_scan`)
- ksm_pages_unshared (integer, how many pages unique but repeatedly checked for merging, `pages_unshared`)
- ksm_pages_volatile (integer, how many pages changing too fast to be placed in a tree, `pages_volatile`)
- ksm_run (integer, whether ksm is running or not, `run`)
- ksm_sleep_millisecs (integer, how many milliseconds ksmd should sleep between scans, `sleep_millisecs`)
- ksm_stable_node_chains (integer, the number of KSM pages that hit the max_page_sharing limit, `stable_node_chains`)
- ksm_stable_node_chains_prune_millisecs (integer, how frequently KSM checks the metadata of the pages that hit the deduplication limit, `stable_node_chains_prune_millisecs`)
- ksm_stable_node_dups (integer, number of duplicated KSM pages, `stable_node_dups`)
- ksm_use_zero_pages (integer, whether empty pages should be treated specially, `use_zero_pages`)
- pressure (if `psi` is included in `collect`)
- tags:
- resource: cpu, memory, or io
- type: some or full
- floating-point fields: avg10, avg60, avg300
- integer fields: total
## Example Output
Default config:
```text
kernel boot_time=1690487872i,context_switches=321398652i,entropy_avail=256i,interrupts=141868628i,processes_forked=946492i 1691339564000000000
```
If `ksm` is included in `collect`:
```text
kernel boot_time=1690487872i,context_switches=321252729i,entropy_avail=256i,interrupts=141783427i,ksm_full_scans=0i,ksm_max_page_sharing=256i,ksm_merge_across_nodes=1i,ksm_pages_shared=0i,ksm_pages_sharing=0i,ksm_pages_to_scan=100i,ksm_pages_unshared=0i,ksm_pages_volatile=0i,ksm_run=0i,ksm_sleep_millisecs=20i,ksm_stable_node_chains=0i,ksm_stable_node_chains_prune_millisecs=2000i,ksm_stable_node_dups=0i,ksm_use_zero_pages=0i,processes_forked=946467i 1691339522000000000
```
If `psi` is included in `collect`:
```text
pressure,resource=cpu,type=some avg10=1.53,avg60=1.87,avg300=1.73 1700000000000000000
pressure,resource=memory,type=some avg10=0.00,avg60=0.00,avg300=0.00 1700000000000000000
pressure,resource=memory,type=full avg10=0.00,avg60=0.00,avg300=0.00 1700000000000000000
pressure,resource=io,type=some avg10=0.0,avg60=0.0,avg300=0.0 1700000000000000000
pressure,resource=io,type=full avg10=0.0,avg60=0.0,avg300=0.0 1700000000000000000
pressure,resource=cpu,type=some total=1088168194i 1700000000000000000
pressure,resource=memory,type=some total=3463792i 1700000000000000000
pressure,resource=memory,type=full total=1429641i 1700000000000000000
pressure,resource=io,type=some total=68568296i 1700000000000000000
pressure,resource=io,type=full total=54982338i 1700000000000000000
```
Note that the combination for `resource=cpu,type=full` is omitted because it is
always zero.

View file

@ -0,0 +1,207 @@
//go:generate ../../../tools/readme_config_includer/generator
//go:build linux
package kernel
import (
"bytes"
_ "embed"
"fmt"
"os"
"path/filepath"
"strconv"
"github.com/prometheus/procfs"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs"
)
//go:embed sample.conf
var sampleConfig string
// /proc/stat file line prefixes to gather stats on:
var (
interrupts = []byte("intr")
contextSwitches = []byte("ctxt")
processesForked = []byte("processes")
diskPages = []byte("page")
bootTime = []byte("btime")
)
type Kernel struct {
ConfigCollect []string `toml:"collect"`
optCollect map[string]bool
statFile string
entropyStatFile string
ksmStatsDir string
psiDir string
procfs procfs.FS
}
func (*Kernel) SampleConfig() string {
return sampleConfig
}
func (k *Kernel) Init() error {
k.optCollect = make(map[string]bool, len(k.ConfigCollect))
for _, v := range k.ConfigCollect {
k.optCollect[v] = true
}
if k.optCollect["ksm"] {
if _, err := os.Stat(k.ksmStatsDir); os.IsNotExist(err) {
// ksm probably not enabled in the kernel, bail out early
return fmt.Errorf("directory %q does not exist. KSM is not enabled in this kernel", k.ksmStatsDir)
}
}
if k.optCollect["psi"] {
procdir := filepath.Dir(k.psiDir)
var err error
if k.procfs, err = procfs.NewFS(procdir); err != nil {
// psi probably not supported in the kernel, bail out early
return fmt.Errorf("failed to initialize procfs on %s: %w", procdir, err)
}
}
return nil
}
func (k *Kernel) Gather(acc telegraf.Accumulator) error {
data, err := getProcValueBytes(k.statFile)
if err != nil {
return err
}
entropyValue, err := getProcValueInt(k.entropyStatFile)
if err != nil {
return err
}
fields := make(map[string]interface{})
fields["entropy_avail"] = entropyValue
dataFields := bytes.Fields(data)
for i, field := range dataFields {
switch {
case bytes.Equal(field, interrupts):
m, err := strconv.ParseInt(string(dataFields[i+1]), 10, 64)
if err != nil {
return err
}
fields["interrupts"] = m
case bytes.Equal(field, contextSwitches):
m, err := strconv.ParseInt(string(dataFields[i+1]), 10, 64)
if err != nil {
return err
}
fields["context_switches"] = m
case bytes.Equal(field, processesForked):
m, err := strconv.ParseInt(string(dataFields[i+1]), 10, 64)
if err != nil {
return err
}
fields["processes_forked"] = m
case bytes.Equal(field, bootTime):
m, err := strconv.ParseInt(string(dataFields[i+1]), 10, 64)
if err != nil {
return err
}
fields["boot_time"] = m
case bytes.Equal(field, diskPages):
in, err := strconv.ParseInt(string(dataFields[i+1]), 10, 64)
if err != nil {
return err
}
out, err := strconv.ParseInt(string(dataFields[i+2]), 10, 64)
if err != nil {
return err
}
fields["disk_pages_in"] = in
fields["disk_pages_out"] = out
}
}
if k.optCollect["ksm"] {
stats := []string{
"full_scans", "max_page_sharing",
"merge_across_nodes", "pages_shared",
"pages_sharing", "pages_to_scan",
"pages_unshared", "pages_volatile",
"run", "sleep_millisecs",
"stable_node_chains", "stable_node_chains_prune_millisecs",
"stable_node_dups", "use_zero_pages",
}
// these exist in very recent Linux versions only, but useful to include if there.
extraStats := []string{"general_profit"}
for _, f := range stats {
m, err := getProcValueInt(filepath.Join(k.ksmStatsDir, f))
if err != nil {
return err
}
fields["ksm_"+f] = m
}
for _, f := range extraStats {
m, err := getProcValueInt(filepath.Join(k.ksmStatsDir, f))
if err != nil {
// if an extraStats metric doesn't exist in our kernel version, ignore it.
continue
}
fields["ksm_"+f] = m
}
}
acc.AddCounter("kernel", fields, make(map[string]string))
if k.optCollect["psi"] {
if err := k.gatherPressure(acc); err != nil {
return err
}
}
return nil
}
func getProcValueBytes(path string) ([]byte, error) {
if _, err := os.Stat(path); os.IsNotExist(err) {
return nil, fmt.Errorf("path %q does not exist", path)
} else if err != nil {
return nil, err
}
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("failed to read from %q: %w", path, err)
}
return data, nil
}
func getProcValueInt(path string) (int64, error) {
data, err := getProcValueBytes(path)
if err != nil {
return -1, err
}
m, err := strconv.ParseInt(string(bytes.TrimSpace(data)), 10, 64)
if err != nil {
return -1, fmt.Errorf("failed to parse %q as an integer: %w", data, err)
}
return m, nil
}
func init() {
inputs.Add("kernel", func() telegraf.Input {
return &Kernel{
statFile: "/proc/stat",
entropyStatFile: "/proc/sys/kernel/random/entropy_avail",
ksmStatsDir: "/sys/kernel/mm/ksm",
psiDir: "/proc/pressure",
}
})
}

View file

@ -0,0 +1,33 @@
//go:generate ../../../tools/readme_config_includer/generator
//go:build !linux
package kernel
import (
_ "embed"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs"
)
//go:embed sample.conf
var sampleConfig string
type Kernel struct {
Log telegraf.Logger `toml:"-"`
}
func (*Kernel) SampleConfig() string { return sampleConfig }
func (k *Kernel) Init() error {
k.Log.Warn("Current platform is not supported")
return nil
}
func (*Kernel) Gather(_ telegraf.Accumulator) error { return nil }
func init() {
inputs.Add("kernel", func() telegraf.Input {
return &Kernel{}
})
}

View file

@ -0,0 +1,208 @@
//go:build linux
package kernel
import (
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
"github.com/influxdata/telegraf/testutil"
)
func TestGetProcValueInt(t *testing.T) {
d, err := getProcValueInt("testdata/entropy_stat_file_full")
require.NoError(t, err)
require.IsType(t, int64(1), d)
}
func TestGetProcValueByte(t *testing.T) {
d, err := getProcValueBytes("testdata/entropy_stat_file_full")
require.NoError(t, err)
require.IsType(t, []byte("test"), d)
}
func TestFullProcFile(t *testing.T) {
k := Kernel{
statFile: "testdata/stat_file_full",
entropyStatFile: "testdata/entropy_stat_file_full",
}
acc := testutil.Accumulator{}
require.NoError(t, k.Gather(&acc))
expected := []telegraf.Metric{
metric.New(
"kernel",
map[string]string{},
map[string]interface{}{
"boot_time": int64(1457505775),
"context_switches": int64(2626618),
"disk_pages_in": int64(5741),
"disk_pages_out": int64(1808),
"interrupts": int64(1472736),
"processes_forked": int64(10673),
"entropy_avail": int64(1024),
},
time.Unix(0, 0),
1,
),
}
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
}
func TestPartialProcFile(t *testing.T) {
k := Kernel{
statFile: "testdata/stat_file_partial",
entropyStatFile: "testdata/entropy_stat_file_partial",
}
acc := testutil.Accumulator{}
require.NoError(t, k.Gather(&acc))
fields := map[string]interface{}{
"boot_time": int64(1457505775),
"context_switches": int64(2626618),
"disk_pages_in": int64(5741),
"disk_pages_out": int64(1808),
"interrupts": int64(1472736),
"entropy_avail": int64(1024),
}
acc.AssertContainsFields(t, "kernel", fields)
}
func TestInvalidProcFile1(t *testing.T) {
// missing btime measurement
k := Kernel{
statFile: "testdata/stat_file_invalid",
entropyStatFile: "testdata/entropy_stat_file_invalid",
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.Error(t, err)
require.Contains(t, err.Error(), "invalid syntax")
}
func TestInvalidProcFile2(t *testing.T) {
// missing second page measurement
k := Kernel{
statFile: "testdata/stat_file_invalid2",
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.Error(t, err)
require.Contains(t, err.Error(), "does not exist")
}
func TestNoProcFile(t *testing.T) {
k := Kernel{
statFile: "testdata/this_file_does_not_exist",
}
acc := testutil.Accumulator{}
err := k.Gather(&acc)
require.Error(t, err)
require.Contains(t, err.Error(), "does not exist")
}
func TestInvalidCollectOption(t *testing.T) {
k := Kernel{
statFile: "testdata/stat_file_full",
entropyStatFile: "testdata/entropy_stat_file_full",
ConfigCollect: []string{"invalidOption"},
}
acc := testutil.Accumulator{}
require.NoError(t, k.Init())
require.NoError(t, k.Gather(&acc))
}
func TestKsmEnabledValidKsmDirectory(t *testing.T) {
k := Kernel{
statFile: "testdata/stat_file_full",
entropyStatFile: "testdata/entropy_stat_file_full",
ksmStatsDir: "testdata/ksm/valid",
ConfigCollect: []string{"ksm"},
}
require.NoError(t, k.Init())
acc := testutil.Accumulator{}
require.NoError(t, k.Gather(&acc))
expected := []telegraf.Metric{
metric.New(
"kernel",
map[string]string{},
map[string]interface{}{
"boot_time": int64(1457505775),
"context_switches": int64(2626618),
"disk_pages_in": int64(5741),
"disk_pages_out": int64(1808),
"interrupts": int64(1472736),
"processes_forked": int64(10673),
"entropy_avail": int64(1024),
"ksm_full_scans": int64(123),
"ksm_max_page_sharing": int64(10000),
"ksm_merge_across_nodes": int64(1),
"ksm_pages_shared": int64(12922),
"ksm_pages_sharing": int64(28384),
"ksm_pages_to_scan": int64(12928),
"ksm_pages_unshared": int64(92847),
"ksm_pages_volatile": int64(2824171),
"ksm_run": int64(1),
"ksm_sleep_millisecs": int64(1000),
"ksm_stable_node_chains": int64(0),
"ksm_stable_node_chains_prune_millisecs": int64(0),
"ksm_stable_node_dups": int64(0),
"ksm_use_zero_pages": int64(1),
},
time.Unix(0, 0),
1,
),
}
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
}
func TestKSMEnabledMissingFile(t *testing.T) {
k := Kernel{
statFile: "/proc/stat",
entropyStatFile: "/proc/sys/kernel/random/entropy_avail",
ksmStatsDir: "testdata/ksm/missing",
ConfigCollect: []string{"ksm"},
}
require.NoError(t, k.Init())
acc := testutil.Accumulator{}
require.ErrorContains(t, k.Gather(&acc), "does not exist")
}
func TestKSMEnabledWrongDir(t *testing.T) {
k := Kernel{
ksmStatsDir: "testdata/this_file_does_not_exist",
ConfigCollect: []string{"ksm"},
}
require.ErrorContains(t, k.Init(), "KSM is not enabled in this kernel")
}
func TestKSMDisabledNoKSMTags(t *testing.T) {
k := Kernel{
statFile: "testdata/stat_file_full",
entropyStatFile: "testdata/entropy_stat_file_full",
ksmStatsDir: "testdata/this_file_does_not_exist",
}
acc := testutil.Accumulator{}
require.NoError(t, k.Init())
require.NoError(t, k.Gather(&acc))
require.False(t, acc.HasField("kernel", "ksm_run"))
}

View file

@ -0,0 +1,51 @@
//go:build linux
package kernel
import (
"fmt"
"time"
"github.com/prometheus/procfs"
"github.com/influxdata/telegraf"
)
// Gather PSI metrics
func (k *Kernel) gatherPressure(acc telegraf.Accumulator) error {
for _, resource := range []string{"cpu", "memory", "io"} {
now := time.Now()
psiStats, err := k.procfs.PSIStatsForResource(resource)
if err != nil {
return fmt.Errorf("failed to read %s pressure: %w", resource, err)
}
stats := map[string]*procfs.PSILine{
"some": psiStats.Some,
"full": psiStats.Full,
}
for _, typ := range []string{"some", "full"} {
if resource == "cpu" && typ == "full" {
// resource=cpu,type=full is omitted because it is always zero
continue
}
tags := map[string]string{
"resource": resource,
"type": typ,
}
stat := stats[typ]
acc.AddCounter("pressure", map[string]interface{}{
"total": stat.Total,
}, tags, now)
acc.AddGauge("pressure", map[string]interface{}{
"avg10": stat.Avg10,
"avg60": stat.Avg60,
"avg300": stat.Avg300,
}, tags, now)
}
}
return nil
}

View file

@ -0,0 +1,170 @@
//go:build linux
package kernel
import (
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/metric"
"github.com/influxdata/telegraf/testutil"
)
func TestPSIEnabledWrongDir(t *testing.T) {
k := Kernel{
psiDir: "testdata/this_directory_does_not_exist/stub",
ConfigCollect: []string{"psi"},
}
require.ErrorContains(t, k.Init(), "failed to initialize procfs on ")
}
func TestPSIStats(t *testing.T) {
k := Kernel{
psiDir: "testdata/pressure",
ConfigCollect: []string{"psi"},
}
require.NoError(t, k.Init())
var acc testutil.Accumulator
require.NoError(t, k.gatherPressure(&acc))
expected := []telegraf.Metric{
metric.New(
"pressure",
map[string]string{
"resource": "cpu",
"type": "some",
},
map[string]interface{}{
"avg10": float64(10),
"avg60": float64(60),
"avg300": float64(300),
},
time.Unix(0, 0),
telegraf.Gauge,
),
metric.New(
"pressure",
map[string]string{
"resource": "cpu",
"type": "some",
},
map[string]interface{}{
"total": uint64(114514),
},
time.Unix(0, 0),
telegraf.Counter,
),
metric.New(
"pressure",
map[string]string{
"resource": "memory",
"type": "some",
},
map[string]interface{}{
"avg10": float64(10),
"avg60": float64(60),
"avg300": float64(300),
},
time.Unix(0, 0),
telegraf.Gauge,
),
metric.New(
"pressure",
map[string]string{
"resource": "memory",
"type": "some",
},
map[string]interface{}{
"total": uint64(114514),
},
time.Unix(0, 0),
telegraf.Counter,
),
metric.New(
"pressure",
map[string]string{
"resource": "io",
"type": "some",
},
map[string]interface{}{
"avg10": float64(10),
"avg60": float64(60),
"avg300": float64(300),
},
time.Unix(0, 0),
telegraf.Gauge,
),
metric.New(
"pressure",
map[string]string{
"resource": "io",
"type": "some",
},
map[string]interface{}{
"total": uint64(114514),
},
time.Unix(0, 0),
telegraf.Counter,
),
metric.New(
"pressure",
map[string]string{
"resource": "memory",
"type": "full",
},
map[string]interface{}{
"avg10": float64(1),
"avg60": float64(6),
"avg300": float64(30),
},
time.Unix(0, 0),
telegraf.Gauge,
),
metric.New(
"pressure",
map[string]string{
"resource": "memory",
"type": "full",
},
map[string]interface{}{
"total": uint64(11451),
},
time.Unix(0, 0),
telegraf.Counter,
),
metric.New(
"pressure",
map[string]string{
"resource": "io",
"type": "full",
},
map[string]interface{}{
"avg10": float64(1),
"avg60": float64(6),
"avg300": float64(30),
},
time.Unix(0, 0),
telegraf.Gauge,
),
metric.New(
"pressure",
map[string]string{
"resource": "io",
"type": "full",
},
map[string]interface{}{
"total": uint64(11451),
},
time.Unix(0, 0),
telegraf.Counter,
),
}
actual := acc.GetTelegrafMetrics()
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime(), testutil.SortMetrics())
}

View file

@ -0,0 +1,8 @@
# Plugin to collect various Linux kernel statistics.
# This plugin ONLY supports Linux
[[inputs.kernel]]
## Additional gather options
## Possible options include:
## * ksm - kernel same-page merging
## * psi - pressure stall information
# collect = []

View file

@ -0,0 +1 @@
1024

View file

@ -0,0 +1 @@
1024

View file

@ -0,0 +1 @@
123A

View file

@ -0,0 +1 @@
10000

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
12922

View file

@ -0,0 +1 @@
28384

View file

@ -0,0 +1 @@
12928

View file

@ -0,0 +1 @@
92847

View file

@ -0,0 +1 @@
2824171

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
1000

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
123

View file

@ -0,0 +1 @@
10000

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
12922

View file

@ -0,0 +1 @@
28384

View file

@ -0,0 +1 @@
12928

View file

@ -0,0 +1 @@
92847

View file

@ -0,0 +1 @@
2824171

View file

@ -0,0 +1 @@
1000

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
123

View file

@ -0,0 +1 @@
10000

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
12922

View file

@ -0,0 +1 @@
28384

View file

@ -0,0 +1 @@
12928

View file

@ -0,0 +1 @@
92847

View file

@ -0,0 +1 @@
2824171

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1 @@
1000

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
0

View file

@ -0,0 +1 @@
1

View file

@ -0,0 +1,2 @@
some avg10=10.00 avg60=60.00 avg300=300.00 total=114514
full avg10=0.00 avg60=0.00 avg300=0.00 total=0

View file

@ -0,0 +1,2 @@
some avg10=10.00 avg60=60.00 avg300=300.00 total=114514
full avg10=1.00 avg60=6.00 avg300=30.00 total=11451

View file

@ -0,0 +1,2 @@
some avg10=10.00 avg60=60.00 avg300=300.00 total=114514
full avg10=1.00 avg60=6.00 avg300=30.00 total=11451

View file

@ -0,0 +1,12 @@
cpu 6796 252 5655 10444977 175 0 101 0 0 0
cpu0 6796 252 5655 10444977 175 0 101 0 0 0
intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2626618
btime 1457505775
processes 10673
procs_running 2
procs_blocked 0
softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
page 5741 1808
swap 1 0
entropy_avail 1024

View file

@ -0,0 +1,12 @@
cpu 6796 252 5655 10444977 175 0 101 0 0 0
cpu0 6796 252 5655 10444977 175 0 101 0 0 0
intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2626618
btime
processes 10673
procs_running 2
procs_blocked 0
softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
page 5741 1808
swap 1 0
entropy_avail 1024

View file

@ -0,0 +1,10 @@
cpu 6796 252 5655 10444977 175 0 101 0 0 0
cpu0 6796 252 5655 10444977 175 0 101 0 0 0
intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2626618
processes 10673
procs_running 2
page 5741
procs_blocked 0
softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
entropy_avail 1024 2048

View file

@ -0,0 +1,9 @@
cpu 6796 252 5655 10444977 175 0 101 0 0 0
cpu0 6796 252 5655 10444977 175 0 101 0 0 0
intr 1472736 57 10 0 0 0 0 0 0 0 0 0 0 156 0 0 0 0 0 0 111551 42541 12356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2626618
btime 1457505775
procs_running 2
procs_blocked 0
softirq 1031662 0 649485 20946 111071 11620 0 1 0 994 237545
page 5741 1808