# prepare echo always > /sys/kernel/mm/transparent_hugepage/hugepages-64kB/enabled tmpfile=$(mktemp) # record data before test pgfault1=$(cat /proc/vmstat | grep pgfault | awk '{print $2}') cat /sys/block/zram0/mm_stat > $tmpfile # used to calculate zram compress ratio prev_zram_total_size=$(cat $tmpfile | awk '{print $1}') prev_zram_used_size=$(cat $tmpfile | awk '{print $2}') # used to calculate hugepage alloc success ratio prev_anon_fault_alloc=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/anon_fault_alloc) prev_anon_fault_fallback=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/anon_fault_fallback) # used to calculate hugepage swapout success ratio prev_swpout_alloc=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout) prev_swpout_fault_fallback=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout_fallback) # used to calculate zram multipage read/write success ratio if [ -f /sys/block/zram0/multi_pages_debug_stat ]; then cat /sys/block/zram0/multi_pages_debug_stat > $tmpfile prev_nr_write_multipage=$(head -n 1 $tmpfile | awk '{print $5}') prev_nr_read_multipage=$(head -n 1 $tmpfile | awk '{print $6}') prev_nr_write_failed_multipage=$(cat $tmpfile | grep "failed" | awk '{print $6}') prev_nr_read_failed_multipage=$(cat $tmpfile | grep "failed" | awk '{print $7}') fi # start test cat /sys/block/zram0/mm_stat ./test_swap > $tmpfile cat /sys/block/zram0/mm_stat # check data pgfault2=$(cat /proc/vmstat | grep pgfault | awk '{print $2}') pgfault_inc=$(($pgfault2-$pgfault1)) bandwidth_swapout=$(head -n 1 $tmpfile | awk '{print $4}') bandwidth_swapin=$(tail -n 1 $tmpfile | awk '{print $4}') cat /sys/block/zram0/mm_stat > $tmpfile # calculate zram comp_ratio new_zram_total_size=$(cat $tmpfile | awk '{print $1}') new_zram_used_size=$(cat $tmpfile | awk '{print $2}') zram_total_size_inc=$(($new_zram_total_size-$prev_zram_total_size)) zram_used_size_inc=$(($new_zram_used_size-$prev_zram_used_size)) zram_total_size_should=524288000 comp_ratio=`echo "scale=4; $zram_total_size_inc / $zram_used_size_inc" | bc` comp_ratio_should=`echo "scale=4; $zram_total_size_should / $zram_used_size_inc" | bc` # calculate huge page alloc success ratio new_anon_fault_alloc=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/anon_fault_alloc) new_anon_fault_fallback=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/anon_fault_fallback) anon_fault_alloc_inc=$(($new_anon_fault_alloc-$prev_anon_fault_alloc)) anon_fault_fallback_inc=$(($new_anon_fault_fallback-$prev_anon_fault_fallback)) anon_fault_total_inc=$(($anon_fault_alloc_inc+$anon_fault_fallback_inc)) anon_fault_success_ratio=`echo "scale=4; $anon_fault_alloc_inc / $anon_fault_total_inc" | bc` # calculate huge page swapout success ratio new_swpout_alloc=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout) new_swpout_fault_fallback=$(cat /sys/kernel/mm/transparent_hugepage/hugepages-64kB/stats/swpout_fallback) swpout_alloc_inc=$(($new_swpout_alloc-$prev_swpout_alloc)) swpout_fault_fallback_inc=$(($new_swpout_fault_fallback-$prev_swpout_fault_fallback)) swpout_total_inc=$(($swpout_alloc_inc+$swpout_fault_fallback_inc)) swapout_success_ratio=`echo "scale=4; $swpout_alloc_inc / $swpout_total_inc" | bc` if [ -f /sys/block/zram0/multi_pages_debug_stat ]; then cat /sys/block/zram0/multi_pages_debug_stat > $tmpfile new_nr_write_multipage=$(head -n 1 $tmpfile | awk '{print $5}') new_nr_read_multipage=$(head -n 1 $tmpfile | awk '{print $6}') new_nr_write_failed_multipage=$(cat $tmpfile | grep "failed" | awk '{print $6}') new_nr_read_failed_multipage=$(cat $tmpfile | grep "failed" | awk '{print $7}') nr_write_multipage_inc=$(($new_nr_write_multipage-$prev_nr_write_multipage)) nr_read_multipage_inc=$(($new_nr_read_multipage-$prev_nr_read_multipage)) nr_write_failed_multipage_inc=$(($new_nr_write_failed_multipage-$prev_nr_write_failed_multipage)) nr_read_failed_multipage_inc=$(($new_nr_read_failed_multipage-$prev_nr_read_failed_multipage)) nr_write_succeed_multipage_inc=$(($nr_write_multipage_inc-$nr_write_failed_multipage_inc)) nr_read_succeed_multipage_inc=$(($nr_read_multipage_inc-$nr_read_failed_multipage_inc)) zram_write_multipage_ratio=`echo "scale=4; $nr_write_succeed_multipage_inc / $nr_write_multipage_inc" | bc` zram_read_multipage_ratio=`echo "scale=4; $nr_read_succeed_multipage_inc / $nr_read_multipage_inc" | bc` fi echo "swapout_bandwidth $bandwidth_swapout" echo "swapin_bandwidth $bandwidth_swapin" echo "comp_ratio $comp_ratio" echo "pagefault increased $pgfault_inc" echo "anon_fault_success_ratio $anon_fault_success_ratio" echo "swapout_success_ratio $swapout_success_ratio" if [ -f /sys/block/zram0/multi_pages_debug_stat ]; then echo "zram_write_multipage_ratio $zram_write_multipage_ratio" echo "zram_read_multipage_ratio $zram_read_multipage_ratio" fi killall test_swap rm $tmpfile