HomeFreeBSD

speed up ar(1) on UFS file systems

Description

speed up ar(1) on UFS file systems

Fault in the buffer prior to writing to workaround poor performance due
to interaction with kernel fs deadlock avoidance code. See the comment
prior to vn_io_fault_doio() in sys/kern/vfs_vnops.c for details of the
issue.

On my stable/10 desktop with a 16MB obj.o and "ar r out.a obj.o" I see
the following run times (seconds):

x ar.r284891
+ ar.patched
+----------------------------------------------------------------------+

+
+ x
+ xx
AA

+----------------------------------------------------------------------+

N         Min          Max        Median           Avg        Stddev

x 3 1.307 1.321 1.315 1.3143333 0.0070237692
+ 3 0.020 0.023 0.022 0.021666667 0.0015275252
Difference at 95.0% confidence

-1.29267 +/- 0.0115203
-98.3515% +/- 0.876513%
(Student's t, pooled s = 0.00508265)

Thanks to kib for diagnosing and explaining the issue and suggesting
the workaround.

Reviewed by: eadler, kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D2933

Details

Provenance
emasteAuthored on
Reviewer
eadler
Differential Revision
D2933: Significantly speed up ar(1) on UFS file systems
Parents
rS284927: Simplify code, no need to test the flag before clearing it.
Branches
Unknown
Tags
Unknown