mirror of https://github.com/artizirk/dotfiles
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.4 KiB
86 lines
2.4 KiB
#!/bin/bash |
|
# Source: https://wiki.tnonline.net/w/Blog/Zswap_statistics |
|
|
|
# System page size |
|
page_size=$(getconf PAGESIZE) |
|
|
|
# Location of zswap settings |
|
settings_dir="/sys/module/zswap/parameters" |
|
|
|
# Location of zswap statistics |
|
statistics_dir="/sys/kernel/debug/zswap" |
|
|
|
# Array of zswap settings |
|
settings=("accept_threshold_percent" "compressor" "enabled" "max_pool_percent") |
|
|
|
# Array of zswap statistics |
|
statistics=("pool_limit_hit" "pool_total_size" "reject_alloc_fail" "reject_compress_poor" "reject_kmemcache_fail" "reject_reclaim_fail" "stored_pages") |
|
|
|
# Declare an associative array to store zswap data |
|
declare -A zswap_data |
|
|
|
# Read zswap settings |
|
for setting in "${settings[@]}"; do |
|
read -r value < "$settings_dir/$setting" |
|
zswap_data["$setting"]=$value |
|
done |
|
|
|
# Read zswap statistics |
|
for stat in "${statistics[@]}"; do |
|
read -r value < "$statistics_dir/$stat" |
|
zswap_data["$stat"]=$value |
|
done |
|
|
|
# Determine the maximum length of keys (setting/statistic names) |
|
max_length=0 |
|
for key in "${!zswap_data[@]}"; do |
|
if [ ${#key} -gt $max_length ]; then |
|
max_length=${#key} |
|
fi |
|
done |
|
((width = max_length + 4)) |
|
|
|
# Calculate the total size and compressed size in MiB |
|
total_size=$((zswap_data["stored_pages"] * page_size / (1024 * 1024) )) |
|
compressed_size=$((zswap_data["pool_total_size"] / (1024 * 1024) )) |
|
|
|
# Calculate the compression ratio |
|
if [ "${zswap_data["stored_pages"]}" -ne 0 ]; then |
|
compression_ratio=$(bc <<< "scale=2; (${zswap_data["stored_pages"]} * $page_size / ${zswap_data["pool_total_size"]})") |
|
else |
|
compression_ratio=0 |
|
fi |
|
|
|
|
|
# Output the zswap settings |
|
printf "========\n" |
|
printf "SETTINGS" |
|
printf "\n========\n" |
|
for key in "${settings[@]}"; do |
|
# Get the value from the associative array |
|
value=${zswap_data["$key"]} |
|
|
|
# Output the key (name) and value in columns |
|
printf "%-*s%s\n" "$width" "$key" "$value" |
|
done |
|
|
|
# Output the zswap data |
|
printf "\n========\n" |
|
printf "VALUES" |
|
printf "\n========\n" |
|
for key in "${statistics[@]}"; do |
|
# Get the value from the associative array |
|
value=${zswap_data["$key"]} |
|
|
|
# Output the key (name) and value in columns |
|
printf "%-*s%s\n" "$width" "$key" "$value" |
|
done |
|
|
|
# Output the total size, compressed size, and compression ratio |
|
printf "\n========\n" |
|
printf "SUMMARY" |
|
printf "\n========\n" |
|
printf "%-*s%s MiB\n" "$width" "Total Size:" "$total_size" |
|
printf "%-*s%s MiB\n" "$width" "Compressed Size:" "$compressed_size" |
|
printf "%-*s%s\n" "$width" "Compression Ratio:" "$compression_ratio" |
|
|
|
|