1*39acb7fdSMateusz Piotrowski.\" 2*39acb7fdSMateusz Piotrowski.\" Copyright (c) 2019 Greg White <gkwhite@gmail.com>. All rights reserved. 3*39acb7fdSMateusz Piotrowski.\" Copyright (c) 2025 Mateusz Piotrowski <0mp@FreeBSD.org> 4*39acb7fdSMateusz Piotrowski.\" 5*39acb7fdSMateusz Piotrowski.\" SPDX-License-Identifier: BSD-2-Clause 6*39acb7fdSMateusz Piotrowski.\" 7*39acb7fdSMateusz Piotrowski.Dd November 9, 2025 8*39acb7fdSMateusz Piotrowski.Dt GEOM_ZERO 4 9*39acb7fdSMateusz Piotrowski.Os 10*39acb7fdSMateusz Piotrowski.Sh NAME 11*39acb7fdSMateusz Piotrowski.Nm gzero , 12*39acb7fdSMateusz Piotrowski.Nm geom_zero 13*39acb7fdSMateusz Piotrowski.Nd GEOM-based zero disk/block device 14*39acb7fdSMateusz Piotrowski.Sh SYNOPSIS 15*39acb7fdSMateusz Piotrowski.Cd "options GEOM_ZERO" 16*39acb7fdSMateusz Piotrowski.Pp 17*39acb7fdSMateusz PiotrowskiIn 18*39acb7fdSMateusz Piotrowski.Xr loader.conf 5 19*39acb7fdSMateusz Piotrowskior 20*39acb7fdSMateusz Piotrowski.Xr sysctl.conf 5 : 21*39acb7fdSMateusz Piotrowski.Cd kern.geom.zero.byte 22*39acb7fdSMateusz Piotrowski.Cd kern.geom.zero.clear 23*39acb7fdSMateusz Piotrowski.Sh DESCRIPTION 24*39acb7fdSMateusz Piotrowski.Nm 25*39acb7fdSMateusz Piotrowskiis a 26*39acb7fdSMateusz Piotrowski.Xr GEOM 4 27*39acb7fdSMateusz Piotrowskidevice simulating a one-exabyte disk. 28*39acb7fdSMateusz PiotrowskiIt throws away any data written to it, 29*39acb7fdSMateusz Piotrowskiand returns the value of 30*39acb7fdSMateusz Piotrowski.Va kern.geom.zero.byte 31*39acb7fdSMateusz Piotrowskifor every byte read from it. 32*39acb7fdSMateusz Piotrowski.Pp 33*39acb7fdSMateusz Piotrowski.Nm 34*39acb7fdSMateusz Piotrowskidiffers from 35*39acb7fdSMateusz Piotrowski.Xr zero 4 , 36*39acb7fdSMateusz Piotrowskiwhich is a regular character device and has an infinite length, 37*39acb7fdSMateusz Piotrowskiwhile 38*39acb7fdSMateusz Piotrowski.Pa /dev/gzero 39*39acb7fdSMateusz Piotrowskiis a 40*39acb7fdSMateusz Piotrowski.Xr GEOM 4 41*39acb7fdSMateusz Piotrowskiprovider of large, but limited, size. 42*39acb7fdSMateusz Piotrowski.Pp 43*39acb7fdSMateusz PiotrowskiConsult 44*39acb7fdSMateusz Piotrowski.Xr geom 8 45*39acb7fdSMateusz Piotrowskifor instructions on how to use the supported commands of the 46*39acb7fdSMateusz Piotrowski.Xr GEOM 4 47*39acb7fdSMateusz Piotrowski.Nm ZERO 48*39acb7fdSMateusz Piotrowskiclass. 49*39acb7fdSMateusz Piotrowski.Pp 50*39acb7fdSMateusz Piotrowski.Nm 51*39acb7fdSMateusz Piotrowskiis useful for benchmarking performance of GEOM and GEOM classes 52*39acb7fdSMateusz Piotrowskiwhere compression of the data does not affect the results 53*39acb7fdSMateusz Piotrowski.Po blocks from 54*39acb7fdSMateusz Piotrowski.Pa /dev/gzero 55*39acb7fdSMateusz Piotrowskicompress exceptionally well 56*39acb7fdSMateusz Piotrowski.Pc . 57*39acb7fdSMateusz PiotrowskiExamples of such benchmarks include 58*39acb7fdSMateusz Piotrowskicomparing the speed of two disk encryption algorithms and 59*39acb7fdSMateusz Piotrowskicomparing a hardware versus software implementation 60*39acb7fdSMateusz Piotrowskiof a single encryption algorithm. 61*39acb7fdSMateusz Piotrowski.Sh MIB VARIABLES 62*39acb7fdSMateusz PiotrowskiThe following variables are available as both 63*39acb7fdSMateusz Piotrowski.Xr sysctl 8 64*39acb7fdSMateusz Piotrowskivariables and 65*39acb7fdSMateusz Piotrowski.Xr loader 8 66*39acb7fdSMateusz Piotrowskitunables: 67*39acb7fdSMateusz Piotrowski.Bl -tag -width "kern.geom.zero.clear" 68*39acb7fdSMateusz Piotrowski.It Va kern.geom.zero.byte 69*39acb7fdSMateusz PiotrowskiThis variable sets the fill byte of the 70*39acb7fdSMateusz Piotrowski.Nm 71*39acb7fdSMateusz Piotrowskidevice. 72*39acb7fdSMateusz PiotrowskiDefault: 73*39acb7fdSMateusz Piotrowski.Ql 0 . 74*39acb7fdSMateusz Piotrowski.It Va kern.geom.zero.clear 75*39acb7fdSMateusz PiotrowskiThis variable controls the clearing of the read data buffer. 76*39acb7fdSMateusz PiotrowskiIf set to 77*39acb7fdSMateusz Piotrowski.Ql 0 , 78*39acb7fdSMateusz Piotrowski.Nm 79*39acb7fdSMateusz Piotrowskiwill not copy any data into the read data buffers 80*39acb7fdSMateusz Piotrowskiand just return the read data buffers as they are without modifying them. 81*39acb7fdSMateusz PiotrowskiIn particular, it will not not fill the read buffer with the value of 82*39acb7fdSMateusz Piotrowski.Va kern.geom.zero.byte . 83*39acb7fdSMateusz PiotrowskiThis is useful for read benchmarking to reduce the measurement noise 84*39acb7fdSMateusz Piotrowskicaused by extra memory initialization. 85*39acb7fdSMateusz PiotrowskiDefault: 86*39acb7fdSMateusz Piotrowski.Ql 1 . 87*39acb7fdSMateusz Piotrowski.El 88*39acb7fdSMateusz Piotrowski.Sh FILES 89*39acb7fdSMateusz Piotrowski.Bl -tag -width /dev/gzero 90*39acb7fdSMateusz Piotrowski.It Pa /dev/gzero 91*39acb7fdSMateusz PiotrowskiThe 92*39acb7fdSMateusz Piotrowski.Nm 93*39acb7fdSMateusz Piotrowskidevice. 94*39acb7fdSMateusz Piotrowski.El 95*39acb7fdSMateusz Piotrowski.Sh EXAMPLES 96*39acb7fdSMateusz PiotrowskiCreate the 97*39acb7fdSMateusz Piotrowski.Pa /dev/gzero 98*39acb7fdSMateusz Piotrowskidevice by loading the 99*39acb7fdSMateusz Piotrowski.Nm geom_zero 100*39acb7fdSMateusz Piotrowskikernel module: 101*39acb7fdSMateusz Piotrowski.Bd -literal -offset indent 102*39acb7fdSMateusz Piotrowski# geom zero load 103*39acb7fdSMateusz Piotrowski.Ed 104*39acb7fdSMateusz Piotrowski.Pp 105*39acb7fdSMateusz PiotrowskiShow information about the 106*39acb7fdSMateusz Piotrowski.Nm 107*39acb7fdSMateusz Piotrowskidevice: 108*39acb7fdSMateusz Piotrowski.Bd -literal -offset indent 109*39acb7fdSMateusz Piotrowski# geom zero list 110*39acb7fdSMateusz PiotrowskiGeom name: gzero 111*39acb7fdSMateusz PiotrowskiProviders: 112*39acb7fdSMateusz Piotrowski1. Name: gzero 113*39acb7fdSMateusz Piotrowski Mediasize: 1152921504606846976 (1.0E) 114*39acb7fdSMateusz Piotrowski Sectorsize: 512 115*39acb7fdSMateusz Piotrowski Mode: r0w0egzero0 116*39acb7fdSMateusz Piotrowski.Ed 117*39acb7fdSMateusz Piotrowski.Pp 118*39acb7fdSMateusz PiotrowskiSet the fill byte of the 119*39acb7fdSMateusz Piotrowski.Nm 120*39acb7fdSMateusz Piotrowskidevice to 70 121*39acb7fdSMateusz Piotrowski.Po decimal for letter 122*39acb7fdSMateusz Piotrowski.Dq F 123*39acb7fdSMateusz Piotrowskiin 124*39acb7fdSMateusz Piotrowski.Xr ascii 7 125*39acb7fdSMateusz Piotrowski.Pc : 126*39acb7fdSMateusz Piotrowski.Bd -literal -offset indent 127*39acb7fdSMateusz Piotrowski# sysctl kern.geom.zero.byte=70 128*39acb7fdSMateusz Piotrowskikern.geom.zero.byte: 0 -> 70 129*39acb7fdSMateusz Piotrowski# head -c 1 /dev/gzero 130*39acb7fdSMateusz PiotrowskiF 131*39acb7fdSMateusz Piotrowski.Ed 132*39acb7fdSMateusz Piotrowski.Pp 133*39acb7fdSMateusz PiotrowskiBenchmark read and write throughput of 134*39acb7fdSMateusz Piotrowski.Xr geli 8 Ap s 135*39acb7fdSMateusz Piotrowskidefault encryption algorithm with a 4-KiB sector size: 136*39acb7fdSMateusz Piotrowski.Bd -literal -offset indent 137*39acb7fdSMateusz Piotrowski# geom zero load 138*39acb7fdSMateusz Piotrowski# geli onetime -s 4096 gzero 139*39acb7fdSMateusz Piotrowski# sysctl kern.geom.zero.clear=0 140*39acb7fdSMateusz Piotrowski# dd if=/dev/gzero.eli of=/dev/zero bs=4k count=$((1024 * 256)) 141*39acb7fdSMateusz Piotrowski262144+0 records in 142*39acb7fdSMateusz Piotrowski262144+0 records out 143*39acb7fdSMateusz Piotrowski1073741824 bytes transferred in 1.258195 secs (853398307 bytes/sec) 144*39acb7fdSMateusz Piotrowski# dd if=/dev/zero of=/dev/gzero.eli bs=4k count=$((1024 * 256)) 145*39acb7fdSMateusz Piotrowski262144+0 records in 146*39acb7fdSMateusz Piotrowski262144+0 records out 147*39acb7fdSMateusz Piotrowski1073741824 bytes transferred in 1.663118 secs (645619658 bytes/sec) 148*39acb7fdSMateusz Piotrowski.Ed 149*39acb7fdSMateusz Piotrowski.Sh SEE ALSO 150*39acb7fdSMateusz Piotrowski.Xr GEOM 4 , 151*39acb7fdSMateusz Piotrowski.Xr zero 4 , 152*39acb7fdSMateusz Piotrowski.Xr geom 8 , 153*39acb7fdSMateusz Piotrowski.Xr sysctl 8 , 154*39acb7fdSMateusz Piotrowski.Xr bio 9 155*39acb7fdSMateusz Piotrowski.Sh HISTORY 156*39acb7fdSMateusz PiotrowskiA 157*39acb7fdSMateusz Piotrowski.Nm 158*39acb7fdSMateusz Piotrowskidevice first appeared in 159*39acb7fdSMateusz Piotrowski.Fx 6 . 160*39acb7fdSMateusz Piotrowski.Sh AUTHORS 161*39acb7fdSMateusz Piotrowski.An -nosplit 162*39acb7fdSMateusz PiotrowskiThe 163*39acb7fdSMateusz Piotrowski.Nm 164*39acb7fdSMateusz Piotrowskidevice was written by 165*39acb7fdSMateusz Piotrowski.An Paweł Jakub Dawidek Aq Mt pjd@FreeBSD.org . 166*39acb7fdSMateusz Piotrowski.Pp 167*39acb7fdSMateusz PiotrowskiThe 168*39acb7fdSMateusz Piotrowski.Nm 169*39acb7fdSMateusz Piotrowskimanual page was originally written by 170*39acb7fdSMateusz Piotrowski.An Greg White Aq Mt gkwhite@gmail.com 171*39acb7fdSMateusz Piotrowskiand rewritten by 172*39acb7fdSMateusz Piotrowski.An Mateusz Piotrowski Aq Mt 0mp@FreeBSD.org 173*39acb7fdSMateusz Piotrowskibefore landing in 174*39acb7fdSMateusz Piotrowski.Fx . 175