xref: /illumos-gate/usr/src/test/zfs-tests/tests/functional/l2arc/l2arc_mfuonly_pos.ksh (revision 9e3493cb8a0cfe96c9aef9b7da42c6c9b5c24b43)
1*9e3493cbSJason King#!/bin/ksh -p
2*9e3493cbSJason King#
3*9e3493cbSJason King# CDDL HEADER START
4*9e3493cbSJason King#
5*9e3493cbSJason King# This file and its contents are supplied under the terms of the
6*9e3493cbSJason King# Common Development and Distribution License ("CDDL"), version 1.0.
7*9e3493cbSJason King# You may only use this file in accordance with the terms of version
8*9e3493cbSJason King# 1.0 of the CDDL.
9*9e3493cbSJason King#
10*9e3493cbSJason King# A full copy of the text of the CDDL should have accompanied this
11*9e3493cbSJason King# source.  A copy of the CDDL is also available via the Internet at
12*9e3493cbSJason King# http://www.illumos.org/license/CDDL.
13*9e3493cbSJason King#
14*9e3493cbSJason King# CDDL HEADER END
15*9e3493cbSJason King#
16*9e3493cbSJason King
17*9e3493cbSJason King#
18*9e3493cbSJason King# Copyright (c) 2020, George Amanakis. All rights reserved.
19*9e3493cbSJason King#
20*9e3493cbSJason King
21*9e3493cbSJason King. $STF_SUITE/include/libtest.shlib
22*9e3493cbSJason King. $STF_SUITE/tests/functional/l2arc/l2arc.cfg
23*9e3493cbSJason King
24*9e3493cbSJason King#
25*9e3493cbSJason King# DESCRIPTION:
26*9e3493cbSJason King#	l2arc_mfuonly does not cache MRU buffers
27*9e3493cbSJason King#
28*9e3493cbSJason King# STRATEGY:
29*9e3493cbSJason King#	1. Set l2arc_mfuonly=yes
30*9e3493cbSJason King#	2. Create pool with a cache device.
31*9e3493cbSJason King#	3. Create a random file in that pool, smaller than the cache device
32*9e3493cbSJason King#		and random read for 10 sec.
33*9e3493cbSJason King#	4. Export and re-import the pool. This is necessary as some MFU ghost
34*9e3493cbSJason King#		buffers with prefetch status may transition to MRU eventually.
35*9e3493cbSJason King#		By re-importing the pool the l2 arcstats reflect the ARC state
36*9e3493cbSJason King#		of L2ARC buffers upon their caching in L2ARC.
37*9e3493cbSJason King#	5. Verify l2arc_mru_asize is 0.
38*9e3493cbSJason King#
39*9e3493cbSJason King
40*9e3493cbSJason Kingverify_runnable "global"
41*9e3493cbSJason King
42*9e3493cbSJason Kinglog_assert "l2arc_mfuonly does not cache MRU buffers."
43*9e3493cbSJason King
44*9e3493cbSJason Kingfunction cleanup
45*9e3493cbSJason King{
46*9e3493cbSJason King	if poolexists $TESTPOOL ; then
47*9e3493cbSJason King		destroy_pool $TESTPOOL
48*9e3493cbSJason King	fi
49*9e3493cbSJason King
50*9e3493cbSJason King	log_must set_tunable32 l2arc_noprefetch $noprefetch
51*9e3493cbSJason King	log_must set_tunable32 l2arc_mfuonly $mfuonly
52*9e3493cbSJason King	log_must set_tunable32 zfs_prefetch_disable $zfsprefetch
53*9e3493cbSJason King}
54*9e3493cbSJason Kinglog_onexit cleanup
55*9e3493cbSJason King
56*9e3493cbSJason King# l2arc_noprefetch is set to 1 as some prefetched buffers may
57*9e3493cbSJason King# transition to MRU.
58*9e3493cbSJason Kingtypeset noprefetch=$(get_tunable l2arc_noprefetch)
59*9e3493cbSJason Kinglog_must set_tunable32 l2arc_noprefetch 1
60*9e3493cbSJason King
61*9e3493cbSJason Kingtypeset mfuonly=$(get_tunable l2arc_mfuonly)
62*9e3493cbSJason Kinglog_must set_tunable32 l2arc_mfuonly 1
63*9e3493cbSJason King
64*9e3493cbSJason Kingtypeset zfsprefetch=$(get_tunable zfs_prefetch_disable)
65*9e3493cbSJason Kinglog_must set_tunable32 zfs_prefetch_disable 1
66*9e3493cbSJason King
67*9e3493cbSJason Kingtypeset fill_mb=800
68*9e3493cbSJason Kingtypeset cache_sz=$(( 1.4 * $fill_mb ))
69*9e3493cbSJason Kingexport FILE_SIZE=$(( floor($fill_mb / $NUMJOBS) ))M
70*9e3493cbSJason King
71*9e3493cbSJason Kinglog_must truncate -s ${cache_sz}M $VDEV_CACHE
72*9e3493cbSJason King
73*9e3493cbSJason Kingtypeset log_blk_start=$(get_arcstat l2_log_blk_writes)
74*9e3493cbSJason King
75*9e3493cbSJason Kinglog_must zpool create -f $TESTPOOL $VDEV cache $VDEV_CACHE
76*9e3493cbSJason King
77*9e3493cbSJason Kinglog_must fio $FIO_SCRIPTS/mkfiles.fio
78*9e3493cbSJason Kinglog_must fio $FIO_SCRIPTS/random_reads.fio
79*9e3493cbSJason King
80*9e3493cbSJason Kinglog_must zpool export $TESTPOOL
81*9e3493cbSJason Kinglog_must zpool import -d $VDIR $TESTPOOL
82*9e3493cbSJason King
83*9e3493cbSJason King# Regardless of l2arc_noprefetch, some MFU buffers might be evicted
84*9e3493cbSJason King# from ARC, accessed later on as prefetches and transition to MRU as
85*9e3493cbSJason King# prefetches.
86*9e3493cbSJason King# If accessed again they are counted as MRU and the l2arc_mru_asize arcstat
87*9e3493cbSJason King# will not be 0 (mentioned also in zfs-module-parameters.5)
88*9e3493cbSJason King# For the purposes of this test we mitigate this by disabling (predictive)
89*9e3493cbSJason King# ZFS prefetches with zfs_prefetch_disable=1.
90*9e3493cbSJason Kinglog_must test $(get_arcstat l2_mru_asize) -eq 0
91*9e3493cbSJason King
92*9e3493cbSJason Kinglog_must zpool destroy -f $TESTPOOL
93*9e3493cbSJason King
94*9e3493cbSJason Kinglog_pass "l2arc_mfuonly does not cache MRU buffers."
95