xref: /freebsd/share/man/man4/geom_zero.4 (revision 39acb7fd86eda721df402c2f1368b78cede161c3)
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