softnet-stat
softnet-stat copied to clipboard
Parse the `/proc/net/softnet_stat` file into something more readable.
softnet-stat
Parse the /proc/net/softnet_stat file into something more readable. For more information about /proc/net/softnet_stat, I suggest reading Monitoring and Tuning the Linux Networking Stack: Receiving Data.
Compatible Systems
This parser should work on all Linux kernels since v2.6.32. In later versions of the kernel, more fields were added. Currently, the parser will default these fields to a value of 0 if they are not found in the file.
Distribution
The softnet-stat binary is distributed via the hjr3/softnet-stat repository on packagecloud.io
Build
This software was built Rust using v1.56.0. All dependencies are listed in Cargo.toml. To build: $ cargo build.
The v1.x.x releases were built using Rust v1.10.0.
Static Binary
To build a completely static binary for production use, the binary can use musl as a target.
For Linux:
$ cargo build --target=x86_64-unknown-linux-musl
For macOS:
docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder cargo build --release
Release
To create a new rpm, do the following:
$ mkdir target/x86_64-unknown-linux-musl/release/$VERSION
$ docker run --rm -v $(pwd):/data skandyla/fpm -s dir -t rpm -n "softnet_stat" -v $VERSION -p /data -C /data/target/x86_64-unknown-linux-musl/release ./
This will put something like softnet_stat-1.2.0-1.x86_64.rpm in the current directory.
Tests
This program has been tested against /proc/net/softnet_stat files from these Linux versions:
v2.6.32v2.6.36v3.11.xv5.10.47v6.4.x
To exercise these tests: $ cargo test.
Examples
Formatted
./softnet-stat
Cpu Processed Dropped Time Squeezed Cpu Collision Received RPS Flow Limit Count
0 1842008611 0 1 0 0 0
1 1863193957 0 2 0 0 0
2 1711764716 0 3 0 0 0
3 1640600369 0 0 0 0 0
4 1737798067 0 5 0 0 0
5 1686686610 0 1 0 0 0
Json
./softnet-stat --json
[{"processed":1842008611,"dropped":0,"time_squeeze":1,"cpu_collision":0,"received_rps":null,"flow_limit_count":null},{"processed":1863193957,"dropped":0,"time_squeeze":2,"cpu_collision":0,"received_rps":null,"flow_limit_count":null},{"processed":1711764716,"dropped":0,"time_squeeze":3,"cpu_collision":0,"received_rps":null,"flow_limit_count":null},{"processed":1640600369,"dropped":0,"time_squeeze":0,"cpu_collision":0,"received_rps":null,"flow_limit_count":null},{"processed":1737798067,"dropped":0,"time_squeeze":5,"cpu_collision":0,"received_rps":null,"flow_limit_count":null},{"processed":1686686610,"dropped":0,"time_squeeze":1,"cpu_collision":0,"received_rps":null,"flow_limit_count":null}]
Read From Stdin
$ cat /path/to/file | ./target/debug/softnet-stat -s
Cpu Processed Dropped Time Squeezed Cpu Collision Received RPS Flow Limit Count
0 1842008611 0 1 0 0 0
1 1863193957 0 2 0 0 0
2 1711764716 0 3 0 0 0
3 1640600369 0 0 0 0 0
4 1737798067 0 5 0 0 0
5 1686686610 0 1 0 0 0