File: test-dm-writeboost.sh

package info (click to toggle)
dm-writeboost 2.2.19-0.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 268 kB
  • sloc: ansic: 3,184; sh: 103; makefile: 32
file content (128 lines) | stat: -rwxr-xr-x 2,980 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/sh
# Requires: dm-writeboost-dkms stress-ng
# If not started as root, should allow sudo without password

# Size of test volumes in GB
B_SIZE=10
C_SIZE=4

# Names for loop files and mount point
B_NAME="backing-$$.img"
C_NAME="cache-$$.img"
M_NAME="wbmnt-$$"

DoCleanup() {
	if [ "$(mount|grep $M_NAME)" != "" ]; then
		echo "II: Unmounting $M_NAME..."
		sudo umount $M_NAME
	fi
	if [ -d $M_NAME ]; then
		echo "II: Removing mount directory..."
		rmdir $M_NAME
	fi
	if [ "$(sudo dmsetup ls|grep ^wbtgt)" != "" ]; then
		echo "II: Deleting dm-writeboost target..."
		sudo dmsetup remove wbtgt
	fi
	DEVNAME=$(losetup -j $C_NAME | cut -d: -f1)
	if [ "$DEVNAME" != "" ]; then
		echo "II: Detaching $DEVNAME..."
		sudo losetup -d $DEVNAME
	fi
	DEVNAME=$(losetup -j $B_NAME | cut -d: -f1)
	if [ "$DEVNAME" != "" ]; then
		echo "II: Detaching $DEVNAME..."
		sudo losetup -d $DEVNAME
	fi
	echo "II: Deleting file images..."
	rm -f $B_NAME $C_NAME
}

FailAbort() {
	echo "FAILED!"
	DoCleanup
	echo "EE: FAIL"
	exit 1
}

# Want to fit both image files (+1G safety margin) into current path
AVAIL=$(df -BG --output=avail .|tail -1|tr -d ' G')

echo -n "II: Checking for $(($B_SIZE + $C_SIZE + 1))G available disk space...$AVAIL..."
if [ $AVAIL -lt $(($B_SIZE + $C_SIZE + 1)) ]; then
	echo "SKIP"
	exit 77
fi
echo "OK"

CPU_NUM=$(getconf _NPROCESSORS_ONLN)
echo -n "II: Checking for 8 available CPUs...$CPU_NUM..."
if [ $CPU_NUM -lt 8 ]; then
	echo "SKIP"
	exit 77
fi
echo "OK"

echo "II: Creating loop files:"
echo -n "II: - $B_NAME..."
fallocate -l ${B_SIZE}G ${B_NAME} || FailAbort
echo "OK"
echo -n "II: - $C_NAME..."
fallocate -l ${C_SIZE}G ${C_NAME} || FailAbort
echo "OK"

echo "II: Connecting to loop devices:"
B_DEV=$(losetup -f)
echo -n "II: - $B_NAME -> $B_DEV..."
sudo losetup $B_DEV $B_NAME || FailAbort
echo "OK"
C_DEV=$(losetup -f)
echo -n "II: - $C_NAME -> $C_DEV..."
sudo losetup $C_DEV $C_NAME || FailAbort
echo "OK"

echo -n "II: Initialize cache..."
sudo dd if=/dev/zero of=$C_DEV oflag=direct bs=1M count=1 status=none || \
	FailAbort
echo "OK"

if ! lsmod | grep -q dm.writeboost; then
	echo -n "II: Loading dm-writeboost module..."
	sudo modprobe dm-writeboost || FailAbort
	echo "OK"
fi

SIZE=$(sudo blockdev --getsize $B_DEV)
echo -n "II: Creating dm-writeboost logical device..."
sudo dmsetup create wbtgt \
	--table "0 $SIZE writeboost $B_DEV $C_DEV" || FailAbort
echo "OK"

echo -n "II: Creating mount-point..."
mkdir $M_NAME || FailAbort
echo "OK"

echo -n "II: Create filesystem on dm-writeboost target..."
sudo mkfs.ext4 /dev/mapper/wbtgt >/dev/null 2>&1 || FailAbort
echo "OK"

echo -n "II: Mounting dm-writeboost target to $M_NAME..."
sudo mount /dev/mapper/wbtgt $M_NAME || FailAbort
echo "OK"

echo "II: Testing..."
if [ $CPU_NUM -gt 8 ]; then
	CPU_NUM=8
fi
HDD_SIZE=$((8 / $CPU_NUM))
(
	cd $M_NAME
	sudo stress-ng --timeout=5m --hdd=$CPU_NUM --verify --hdd-opts=wr-rnd \
		--hdd-bytes=${HDD_SIZE}g
) 2>&1 || FailAbort

DoCleanup
echo "PASS"

exit 0