]> git.proxmox.com Git - mirror_zfs.git/blame - tests/zfs-tests/tests/functional/trim/trim.kshlib
Add trim support to zpool wait
[mirror_zfs.git] / tests / zfs-tests / tests / functional / trim / trim.kshlib
CommitLineData
1b939560
BB
1#!/bin/ksh -p
2#
3# This file and its contents are supplied under the terms of the
4# Common Development and Distribution License ("CDDL"), version 1.0.
5# You may only use this file in accordance with the terms of version
6# 1.0 of the CDDL.
7#
8# A full copy of the text of the CDDL should have accompanied this
9# source. A copy of the CDDL is also available via the Internet at
10# http://www.illumos.org/license/CDDL.
11#
12
13#
14# Copyright (c) 2019 by Tim Chase. All rights reserved.
15# Copyright (c) 2019 Lawrence Livermore National Security, LLC.
16#
17
18. $STF_SUITE/tests/functional/cli_root/zpool_trim/zpool_trim.kshlib
19
20#
ade306a9 21# Get the actual size on disk for the provided file.
1b939560
BB
22#
23function get_size_mb
24{
25 typeset rval=$(du --block-size 1048576 -s "$1" | awk '{print $1}')
26 echo -n "$rval"
27}
28
29#
30# Get the number of trim IOs issued for the pool (ind or agg).
31#
32function get_trim_io
33{
34 typeset pool="${1-:$TESTPOOL}"
35 typeset type="${2-:ind}"
36 typeset rval
37
38 # Sum the ind or agg columns of the trim request size histogram.
39 case "$type" in
40 "ind")
41 rval=$(zpool iostat -pr $pool | awk \
42 '$1 ~ /[0-9].*/ { sum += $12 } END { print sum }')
43 echo -n "$rval"
44 ;;
45 "agg")
46 rval=$(zpool iostat -pr $pool | awk \
47 '$1 ~ /[0-9].*/ { sum += $13 } END { print sum }')
48 echo -n "$rval"
49 ;;
50 *)
51 log_fail "Type must be 'ind' or 'agg'"
52 ;;
53 esac
54}
55
56#
57# Verify that trim IOs were send to devices in the pool.
58#
59function verify_trim_io
60{
61 typeset pool="${1:-$TESTPOOL}"
62 typeset type="${2:-ind}"
63 typeset min_trim_ios=${3:-100}
64 typeset ios
65
66 ios=$(get_trim_io $pool $type)
67 if [[ $ios -ge $min_trim_ios ]]; then
68 log_note "Issued $ios $type trim IOs for pool $pool"
69 else
70 log_fail "Too few trim IOs issued $ios/$min_trim_ios"
71 fi
72}
73
74#
75# Run N txgs which should be enough to trim the entire pool.
76#
77function wait_trim_io # pool type txgs
78{
79 typeset pool="${1-:$TESTPOOL}"
80 typeset type="${2-:ind}"
81 typeset txgs=${3:-10}
82 typeset timeout=120
83 typeset stop_time=$(( $(date +%s) + $timeout ))
84
85 typeset -i i=0
86 while [[ $i -lt $txgs ]]; do
87 if [ "$(date +%s)" -ge $stop_time ]; then
88 log_fail "Exceeded trim time limit of ${timeout}s"
89 return
90 fi
91
92 zpool sync -f
93 ((i = i + 1))
94 done
95
96 typeset ios=$(get_trim_io $pool $type)
97 log_note "Waited for $txgs txgs, $ios $type TRIM IOs"
98}
99
100#
101# Verify that file vdevs against a target value.
102#
103function verify_vdevs # op size vdevs
104{
105 typeset tgt_op=$1
106 typeset tgt_size=$2
107 shift 2
108 typeset vdevs=$@
109
110 for vdev in $vdevs; do
111 typeset size=$(get_size_mb $vdev)
112 if test $size $tgt_op $tgt_size; then
113 log_note "Success $vdev is $size MB which is $tgt_op" \
114 "than $tgt_size MB"
115 else
116 log_fail "Failure $vdev is $size MB which is not" \
117 "$tgt_op than $tgt_size MB"
118 fi
119 done
120}