From 521eafacb254ac5abcbfaff67de77d19245c8828 Mon Sep 17 00:00:00 2001 From: Kirill Berezin Date: Sat, 5 Mar 2016 08:52:18 +0300 Subject: [PATCH 1/3] Workstation tuning params --- zramstart | 29 +++++++++++++++++------------ zramstat | 33 ++++++++++++++++++++++++++------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/zramstart b/zramstart index 7df5429..b2c4469 100755 --- a/zramstart +++ b/zramstart @@ -3,20 +3,25 @@ num_cpus=$(grep -c processor /proc/cpuinfo) [ "$num_cpus" != 0 ] || num_cpus=1 -last_cpu=$((num_cpus - 1)) -FACTOR=33 +threads=$((num_cpus * 4)) +last_thread=$((threads - 1)) +FACTOR=200 + [ -f /etc/sysconfig/zram ] && source /etc/sysconfig/zram || true factor=$FACTOR # percentage memtotal=$(grep MemTotal /proc/meminfo | awk ' { print $2 } ') -mem_by_cpu=$(($memtotal/$num_cpus*$factor/100*1024)) - -modprobe -q zram num_devices=$num_cpus - -for i in $(seq 0 $last_cpu); do - #enable lz4 if that supported - grep -q lz4 /sys/block/zram$i/comp_algorithm && echo lz4 > /sys/block/zram$i/comp_algorithm - echo $mem_by_cpu > /sys/block/zram$i/disksize - mkswap /dev/zram$i - swapon -p 100 /dev/zram$i +mem_by_cpu=$(($memtotal/$threads*$factor/100*1024)) +modprobe -q zram num_devices=$threads +for i in $(seq 0 $last_thread); do + #enable lz4 if that supported + grep -q lz4 /sys/block/zram$i/comp_algorithm && echo lz4 > /sys/block/zram$i/comp_algorithm + echo $mem_by_cpu > /sys/block/zram$i/disksize + mkswap /dev/zram$i + swapon -p 100 /dev/zram$i done + +echo 100 > /proc/sys/vm/swappiness +echo 15 > /proc/sys/vm/dirty_ratio +echo 3 > /proc/sys/vm/dirty_background_ratio +echo 100000 > /proc/sys/vm/vfs_cache_pressure diff --git a/zramstat b/zramstat index 66274c0..13c8b1f 100755 --- a/zramstat +++ b/zramstat @@ -2,12 +2,31 @@ ls /sys/block/zram* > /dev/null 2>&1 || exit 0 +sum_compr=0 +sum_orig=0 + +while [ 1 ]; do + for i in /sys/block/zram*; do - compr=$(< $i/compr_data_size) - orig=$(< $i/orig_data_size) - ratio=0 - if [ $compr -gt 0 ]; then - ratio=$(echo "scale=2; $orig*100/$compr" | bc -q) - fi - echo -e "/dev/${i/*\/}:\t$ratio% ($orig -> $compr)" + compr=$(< $i/compr_data_size) + orig=$(< $i/orig_data_size) + sum_compr=$((sum_compr+compr)) + sum_orig=$((sum_orig+orig)) + ratio=0 + if [ $compr -gt 0 ]; then + ratio=$(echo "scale=2; $orig*100/$compr" | bc -q) + fi +# echo -e "/dev/${i/*\/}:\t$ratio% ($orig -> $compr)" +done + +ratio=0 +if [ $sum_compr -gt 0 ]; then + ratio=$(echo "scale=2; $sum_orig*100/$sum_compr" | bc -q) +fi +sum_orig=$((sum_orig/1024/1024)) +sum_compr=$((sum_compr/1024/1024)) +diff=$((sum_orig-sum_compr)) + +echo -ne "\t GAINED $diff MB by using $sum_compr MB\r " +sleep 1 done From 02c67f043a8fabf226bf81268d713cfc90a2a2d5 Mon Sep 17 00:00:00 2001 From: Kirill Berezin Date: Wed, 7 Dec 2016 20:13:20 +0300 Subject: [PATCH 2/3] Fix IO hung / freeze system After several months of experience, i noticed that huge IO operations will hung system. --- zramstart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/zramstart b/zramstart index b2c4469..351ccd7 100755 --- a/zramstart +++ b/zramstart @@ -21,7 +21,11 @@ for i in $(seq 0 $last_thread); do swapon -p 100 /dev/zram$i done -echo 100 > /proc/sys/vm/swappiness -echo 15 > /proc/sys/vm/dirty_ratio -echo 3 > /proc/sys/vm/dirty_background_ratio -echo 100000 > /proc/sys/vm/vfs_cache_pressure +# vm.vfs_cache_pressure=50 +# vm.dirty_ratio=30 +# vm.dirty_background_ratio=20 + +# ON SSD +# vm.swappiness=5 +# ON HDD +# vm.swappiness=99 From 4e075a915a1a46f6d3871f60087041b54f74ee5e Mon Sep 17 00:00:00 2001 From: Kirill Berezin Date: Wed, 7 Dec 2016 20:18:29 +0300 Subject: [PATCH 3/3] Also don't forget prioritize kswap0 --- zramstart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zramstart b/zramstart index 351ccd7..9804655 100755 --- a/zramstart +++ b/zramstart @@ -29,3 +29,6 @@ done # vm.swappiness=5 # ON HDD # vm.swappiness=99 + +# if you having SSD, you may try class 1 (realtime) +# ionice -c 2 -p `pgrep kswapd0`