DF-2621 / trigger3.sh
#!/bin/sh # DF-2621 trigger v3 (amplification): quantify the per-merge leak with 8 # same-clid devices. NO umount (avoids the unrelated teardown wedge) - the # leak accumulates while the first device stays mounted. D=/root/poc/df2621 LOG=$D/run3.log exec > $LOG 2>&1 set -x for i in 0 1 2 3 4 5 6 7; do vnconfig -u vn$i 2>/dev/null; done ls /dev/vn* || (cd /dev && sh MAKEDEV vn0 vn1 vn2 vn3 vn4 vn5 vn6 vn7 2>/dev/null; ls /dev/vn*) rm -f $D/base.img $D/c[1-7].img truncate -s 64M $D/base.img newfs_hammer2 -L testvol $D/base.img i=1 while [ $i -le 7 ]; do dd if=$D/base.img of=$D/c$i.img bs=1m 2>/dev/null i=$((i+1)) done vnconfig -c vn0 $D/base.img i=1 while [ $i -le 7 ]; do vnconfig -c vn$i $D/c$i.img i=$((i+1)) done mkdir -p /mnt/h2 zmem() { vmstat -m | grep -i 'HAMMER2-mount' || true } tcnt() { ps axlw | grep "h2xop-testvol" | grep -v grep | wc -l } echo "=== 0. baseline ===" zmem echo -n "T0="; tcnt vmstat -m | grep -i hammer2 > $D/z3.base echo "=== 1. mount vn0 ===" mount -t hammer2 -o ro /dev/vn0@testvol /mnt/h2 echo MOUNT1_RC=$? zmem echo -n "T1="; tcnt echo "=== 2. seven same-clid merges (each EBUSY, each leaks) ===" i=1 while [ $i -le 7 ]; do mount -t hammer2 -o ro /dev/vn$i@testvol /mnt/h2 echo "MOUNT_vn${i}_RC=$?" echo -n "T_m$i="; tcnt zmem i=$((i+1)) done echo "=== 3. totals ===" vmstat -m | grep -i hammer2 > $D/z3.after echo "--- before ---"; cat $D/z3.base echo "--- after ---"; cat $D/z3.after echo -n "T_final="; tcnt echo -n "mem in HAMMER2-mount zone: " vmstat -m | grep -i 'HAMMER2-mount' | awk '{print $3}' echo TRIGGER_V3_DONE |