+zram_stats()
+{
+ #print various stats info about zram swap device
+ local zdev="/sys/block/$( basename "$1" )"
+
+ printf "\nGathering stats info for zram device \"$( basename "$1" )\"\n\n"
+
+ printf "Z-RAM\n-----\n"
+ printf "%-25s - %s\n" "Block device" $zdev
+ awk '{ printf "%-25s - %d MiB\n", "Device size", $1/1024/1024 }' <$zdev/disksize
+ printf "%-25s - %s\n" "Compression algo" "$(cat $zdev/comp_algorithm)"
+ printf "%-25s - %s\n" "Compression streams" "$( cat $zdev/max_comp_streams)"
+
+ awk 'BEGIN { fmt = "%-25s - %.2f %s\n"
+ fmt2 = "%-25s - %d\n"
+ print "\nDATA\n----" }
+ { printf fmt, "Original data size", $1/1024/1024, "MiB"
+ printf fmt, "Compressed data size", $2/1024/1024, "MiB"
+ printf fmt, "Compress ratio", $1/$2, ""
+ print "\nMEMORY\n------"
+ printf fmt, "Memory used, total", $3/1024/1024, "MiB"
+ printf fmt, "Allocator overhead", ($3-$2)/1024/1024, "MiB"
+ printf fmt, "Allocator efficiency", $2/$3*100, "%"
+ printf fmt, "Maximum memory ever used", $5/1024/1024, "MiB"
+ printf fmt, "Memory limit", $4/1024/1024, "MiB"
+ print "\nPAGES\n-----"
+ printf fmt2, "Same pages count", $6
+ printf fmt2, "Pages compacted", $7 }' <$zdev/mm_stat
+
+ awk '{ printf "%-25s - %d\n", "Free pages discarded", $4 }' <$zdev/io_stat
+}
+
+zram_compact()
+{
+ # compact zram device (reduce memory allocation overhead)
+ local zdev="/sys/block/$( basename "$1" )"
+
+ old_mem_used=`awk '{print $3}' <$zdev/mm_stat`
+ old_overhead=`awk '{print $3-$2}' <$zdev/mm_stat`
+
+ echo ""
+ echo "Compacting zram device..."
+ echo 1 > $zdev/compact
+ awk -v old_mem="$old_mem_used" -v ovr="$old_overhead" 'BEGIN { fmt = "%-25s - %.1f %s\n" }
+ { printf fmt, "Memory usage reduced by ", (old_mem-$3)/1024/1024, "MiB"
+ printf fmt, "Overhead reduced by", (ovr-($3-$2))/ovr*100, "%" }' <$zdev/mm_stat
+}
+