etc/systemd/zfs-mount-generator: rewrite in C

A plain rewrite of the shell version, and generates identical
units, save for replacing some empty lines with nothing, having fewer
meaningless spaces in After=s and different spacing in the lock scripts,
for a clean git diff -w

This is a gain of anywhere from 0m0.336s vs 0m0.022s (15.27x)
to 0m0.202s vs 0m0.006s (33.67x), depending on the hardware,
a.k.a. from "absolutely unusable" to "perfectly fine"

This also properly deals with canmount=noauto units across multiple
pools

See PR for detailed timings (of an early version) and diffs

Reviewed-by: Antonio Russo <aerusso@aerusso.net>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
Reviewed-by: InsanePrawn <insane.prawny@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Issue #11915
Closes #11917
This commit is contained in:
наб
2021-04-19 20:56:10 +02:00
committed by Brian Behlendorf
parent 0bb736ce0b
commit 5a1fb060fd
5 changed files with 1119 additions and 491 deletions
+18 -13
View File
@@ -22,7 +22,7 @@
.\" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
.\" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.TH ZFS-MOUNT-GENERATOR 8 "Aug 24, 2020" OpenZFS
.TH ZFS-MOUNT-GENERATOR 8 "Apr 19, 2021" OpenZFS
.SH "NAME"
zfs\-mount\-generator \- generates systemd mount units for ZFS
@@ -83,19 +83,13 @@ zfs list -H -o name,mountpoint,canmount,atime,relatime,devices,exec,readonly,set
.RE
.PP
for datasets that should be mounted by systemd, should be kept
separate from the pool, at
.PP
.RS 4
.RI @sysconfdir@/zfs/zfs-list.cache/ POOLNAME
.
.RE
separate from the pool at
.RI @sysconfdir@/zfs/zfs-list.cache/ POOLNAME .
.PP
The cache file, if writeable, will be kept synchronized with the pool
state by the ZEDLET
.PP
.RS 4
history_event-zfs-list-cacher.sh .
.RE
state by the
.I history_event-zfs-list-cacher.sh
ZEDLET.
.PP
.sp
.SS PROPERTIES
@@ -189,6 +183,17 @@ See also
.BR systemd.mount (5)
.PP
.SH ENVIRONMENT
The
.BR $ZFS_DEBUG
environment variable, which can either be 0 (default),
1 (print summary accounting information at the end),
or at least 2 (print accounting information for each subprocess as it finishes).
If not present, /proc/cmdline is additionally checked for
.BR debug ,
in which case the debug level is set to 2.
.SH EXAMPLE
To begin, enable tracking for the pool:
.PP
@@ -221,7 +226,7 @@ This forces an update to the stale cache file.
To test the generator output, run
.PP
.RS 4
@systemdgeneratordir@/zfs-mount-generator /tmp/zfs-mount-generator . .
@systemdgeneratordir@/zfs-mount-generator /tmp/zfs-mount-generator
.RE
.PP
This will generate units and dependencies in