OpenZFS and L2ARC

From: Stefan Esser <se_at_freebsd.org>
Date: Tue, 8 Sep 2020 09:43:03 +0200
OpenZFS seems to work quite well for me, in general, but I have 
questions regarding the L2ARC statistics.

The system uses a 3 * 6 TB raidz1 (plus further ZFS volumes that
are not relevant here, since without level 2 ARC) and an 1 TB M.2
SSD with a 256 GB partition for the L2ARC (and most of it currently
unused, else).

The L2ARC seems to have filled to the limit of 256 GB, but after
several reboots, sysctl reports a L2ARC size of nearly twice the
allocated space:

kstat.zfs.misc.arcstats.l2_size: 534620858880

That is 497 GiB, and might be possible with a lz4 compression
factor of 2 - if the value reported is not the space allocated,
but the actual (uncompressed) data held by the L2ARC.


The sysutils/zfs-stats port reports the following values for
this system, BTW:

------------------------------------------------------------------------
ZFS Subsystem Report				Tue Sep  8 09:02:46 2020
------------------------------------------------------------------------

L2 ARC Summary: (HEALTHY)
	Passed Headroom:			0
	Tried Lock Failures:			0
	IO In Progress:				0
	Low Memory Aborts:			7
	Free on Write:				123
	Writes While Full:			0
	R/W Clashes:				0
	Bad Checksums:				0
	IO Errors:				0
	SPA Mismatch:				0

L2 ARC Size: (Adaptive)				497.91	GiB
	Header Size:			0.11%	558.83	MiB

L2 ARC Evicts:
	Lock Retries:				6
	Upon Reading:				0

L2 ARC Breakdown:				5.75	m
	Hit Ratio:			81.94%	4.71	m
	Miss Ratio:			18.06%	1.04	m
	Feeds:					235.04	k

L2 ARC Buffer:
	Bytes Scanned:				0	Bytes
	Buffer Iterations:			0
	List Iterations:			0
	NULL List Iterations:			0

L2 ARC Writes:
	Writes Sent:			100.00%	22.67	k

------------------------------------------------------------------------

With the FreeBSD ZFS (without persistent L2ARC) I never got more
than 20% hit ratio on the L2ARC between reboots.

Quite a number of sysctl variable names have changed, and the port
needs to be adapted to the new names (therefore there are lots of 0
values in the -L output).

The following names used by zfs-stats do not exist in OpenZFS:

kstat.zfs.misc.arcstats.recycle_miss
kstat.zfs.misc.arcstats.l2_write_buffer_bytes_scanned
kstat.zfs.misc.arcstats.l2_write_buffer_iter
kstat.zfs.misc.arcstats.l2_write_buffer_list_iter
kstat.zfs.misc.arcstats.l2_write_buffer_list_null_iter
kstat.zfs.misc.arcstats.l2_write_full
kstat.zfs.misc.arcstats.l2_write_in_l2
kstat.zfs.misc.arcstats.l2_write_io_in_progress
kstat.zfs.misc.arcstats.l2_write_not_cacheable
kstat.zfs.misc.arcstats.l2_write_passed_headroom
kstat.zfs.misc.arcstats.l2_write_pios
kstat.zfs.misc.arcstats.l2_write_spa_mismatch
kstat.zfs.misc.arcstats.l2_write_trylock_fail
kstat.zfs.misc.arcstats.l2_writes_hdr_miss
vfs.zfs.vdev.cache.size

The existence of vfs.zfs.vdev.cache.size vs vfs.zfs.vdev.cache_size
can be used to detect OpenZFS, and is easily fixed.

But the above listed L2ARC values seem to have been removed from or
have never existed in OpenZFS, and I did not find any substitutes.

Are there any plans to re-create them in OpenZFS on FreeBSD or are
they gone for good?

I'd like to update the zfs-stats port for compatibilíty with OpenZFS ...
Received on Tue Sep 08 2020 - 05:43:08 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:25 UTC