Date: Sun, 4 Apr 2010 22:53:20 GMT From: Alex Bakhtin <Alex.Bakhtin@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/145395: [nanobsd] [patch] Extremely slow nanobsd disk image creation and 100% disk load on zfs Message-ID: <201004042253.o34MrKJk019282@www.freebsd.org> Resent-Message-ID: <201004042300.o34N0ENT065767@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 145395 >Category: bin >Synopsis: [nanobsd] [patch] Extremely slow nanobsd disk image creation and 100% disk load on zfs >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Apr 04 23:00:13 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Alex Bakhtin >Release: 8.0-STABLE >Organization: >Environment: FreeBSD tarzan-new.private.flydrag.ru 8.0-STABLE FreeBSD 8.0-STABLE #1: Sat Apr 3 04:54:06 UTC 2010 bakhtin@tarzan-new.private.flydrag.ru:/mnt/obj/usr/src.old/sys/DEBUG amd64 >Description: Extremely slow nanobsd disk image creation discovered on zfs. Image write speed is near 1 Megabyte/sec with 100% load of all zfs vdevs. This is because default -o sync behavior of mdconfig causing zfs to syncronize on every write. I think the best way to fix this is to provide an option in nanobsd.sh to allow user to switch to async mode (and use sync by default - POLA): # Use -o async option for mdconfig NANO_MD_ASYNC=0 After applying this patch image write speed is near 30 megs/sec on my HW. >How-To-Repeat: set NANO_OBJ to some zfs file system check image creation/partition duplication speed and disk load (f.e. using gstat). >Fix: Patch attached with submission follows: --- /usr/src/tools/tools/nanobsd/nanobsd.sh 2010-04-02 03:42:47.000000000 +0000 +++ nanobsd.sh 2010-04-05 06:43:41.000000000 +0000 @@ -128,6 +128,9 @@ # Can be "file" or "swap" NANO_MD_BACKING="file" +# Use -o async option for mdconfig +NANO_MD_ASYNC=0 + # Progress Print level PPLEVEL=3 @@ -428,6 +431,11 @@ MNT=${NANO_OBJ}/_.mnt mkdir -p ${MNT} + _NANO_MDCONFIG_OPTIONS=' ' + if [ "${NANO_MD_ASYNC}" == 1 ] ; then + _NANO_MDCONFIG_OPTIONS="-o async" + fi + if [ "${NANO_MD_BACKING}" = "swap" ] ; then MD=`mdconfig -a -t swap -s ${NANO_MEDIASIZE} -x ${NANO_SECTS} \ -y ${NANO_HEADS}` @@ -436,7 +444,7 @@ dd if=/dev/zero of=${IMG} bs=${NANO_SECTS}b \ count=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \ - -y ${NANO_HEADS}` + -y ${NANO_HEADS} ${_NANO_MDCONFIG_OPTIONS}` fi trap "echo 'Running exit trap code' ; df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004042253.o34MrKJk019282>