120 lines
4.9 KiB
Bash
120 lines
4.9 KiB
Bash
# 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 "comp_ratio_asume $comp_ratio_should"
|
|
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
|