>Number:         146108
>Category:       kern
>Synopsis:       [zfs] [patch] write throttling bugfix (onnv 9366)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Apr 28 09:50:04 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Martin Matuska
>Release:        FreeBSD 8.0-STABLE amd64
>Organization:
>Environment:
System: FreeBSD neo.vx.sk 8.0-STABLE FreeBSD 8.0-STABLE #10 r207271M: Tue Apr 
27 21:36:49 CEST 2010 r...@neo.vx.sk:/usr/obj/stable/sys/NEO amd64
>Description:
- fix improper pool write throughput calculation [1]
- make vfs.zfs.write_limit_override tunable (like in OpenSolaris)

The tunable is in bytes and enables fine-tuning of ZFS write bursts (tradeoff 
stalls vs. lower write throughput)

Discussed with and approved by: pjd@

MFS suggestion: 2 weeks

Sources:
OpenSolaris bug-id: 6817339 [1]
Onnv revision: 9366 [1]

>How-To-Repeat:
>Fix:
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c   (revision 
207314)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c   (working copy)
@@ -47,6 +47,11 @@
 uint64_t zfs_write_limit_override = 0;
 extern uint64_t zfs_write_limit_min;
 
+SYSCTL_DECL(_vfs_zfs);
+TUNABLE_ULONG("vfs.zfs.write_limit_override", &zfs_write_limit_override);
+SYSCTL_ULONG(_vfs_zfs, OID_AUTO, write_limit_override, CTLFLAG_RW, 
&zfs_write_limit_override, 0,
+       "Override maximum TXG size");
+
 kmutex_t zfs_write_limit_lock;
 
 static pgcnt_t old_physmem = 0;
@@ -300,6 +305,7 @@
        tx = dmu_tx_create_assigned(dp, txg);
 
        dp->dp_read_overhead = 0;
+       start = gethrtime();
        zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED);
        while (ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) {
                if (!list_link_active(&ds->ds_synced_link))
@@ -310,7 +316,6 @@
        }
        DTRACE_PROBE(pool_sync__1setup);
 
-       start = gethrtime();
        err = zio_wait(zio);
        write_time = gethrtime() - start;
        ASSERT(err == 0);
>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to