mirror_zfs/module/zfs
Etienne Dechamps 5d7a86d114 Use the slog even with logbias=throughput.
In the current code, logbias=throughput implies the following:
 1) All synchronous writes are logged in indirect mode.
 2) The slog is not used.

(1) makes sense because it avoids writing the data twice, which is
obviously a good thing when the user wants maximum pool throughput.

(2), however, is a surprising decision. Considering all writes are
indirect, the log record doesn't contain the actual data, only pointers
to DMU blocks. As a result, log records written in logbias=throughput
mode are quite small, and as such, it doesn't make any sense to write
them to the main pool since slogs are usually optimized for small
synchronous writes.

In fact, the current behavior is actually harmful for performance,
because log blocks and data blocks from dmu_sync() seldom have the same
allocation size and as a result are usually allocated from different
metaslabs. This means that if a spindle has to write both log blocks and
DMU blocks (which is likely to happen under heavy load), it will have to
seek between the two. Allocating the log blocks from the slog pool
instead of the main pool avoids these unnecessary seeks.

This commit makes ZFS use the slog on datasets with logbias=throughput.
Real-life performance testing shows a 50% synchronous write performance
increase with some large commit sizes, and no negative effect in other
cases.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #1013
2012-10-17 08:56:46 -07:00
..
arc.c Remove vmem_size() consumers 2012-10-12 10:03:03 -07:00
bplist.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
bpobj.c Illumos #1644, #1645, #1646, #1647, #1708 2012-07-31 09:25:30 -07:00
dbuf.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
ddt_zap.c Switch KM_SLEEP to KM_PUSHPAGE 2012-10-04 10:44:09 -07:00
ddt.c Switch KM_SLEEP to KM_PUSHPAGE 2012-09-19 11:52:36 -07:00
dmu_diff.c Update to onnv_147 2010-08-26 14:24:34 -07:00
dmu_object.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
dmu_objset.c Switch KM_SLEEP to KM_PUSHPAGE 2012-10-08 10:19:05 -07:00
dmu_send.c Illumos #2703: add mechanism to report ZFS send progress 2012-09-19 13:39:06 -07:00
dmu_traverse.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
dmu_tx.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
dmu_zfetch.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
dmu.c Add FASTWRITE algorithm for synchronous writes. 2012-10-17 08:56:41 -07:00
dnode_sync.c Fix dbuf eviction assertion 2010-08-31 08:38:45 -07:00
dnode.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
dsl_dataset.c Illumos #3100: zvol rename fails with EBUSY when dirty. 2012-10-03 13:59:02 -07:00
dsl_deadlist.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
dsl_deleg.c Illumos #1644, #1645, #1646, #1647, #1708 2012-07-31 09:25:30 -07:00
dsl_dir.c Illumos #3100: zvol rename fails with EBUSY when dirty. 2012-10-03 13:59:02 -07:00
dsl_pool.c txg is spelled as tgx in places 2012-10-11 09:19:08 -07:00
dsl_prop.c Switch KM_SLEEP to KM_PUSHPAGE 2012-09-17 11:22:23 -07:00
dsl_scan.c Fix zfs_txg_timeout module parameter 2012-10-11 15:07:09 -07:00
dsl_synctask.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
fm.c Condition variable usage, zevent_cv 2012-10-15 16:01:54 -07:00
gzip.c Fix zmod.h usage in userspace 2010-08-31 08:38:46 -07:00
lzjb.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
Makefile.in Add script for builtin module building. 2012-07-26 13:45:09 -07:00
metaslab.c Add FASTWRITE algorithm for synchronous writes. 2012-10-17 08:56:41 -07:00
refcount.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
rrwlock.c Enable rrwlock.c compilation 2010-12-07 16:05:25 -08:00
sa.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
sha256.c Add linux sha2 support 2010-08-31 13:41:59 -07:00
spa_boot.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
spa_config.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
spa_errlog.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
spa_history.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
spa_misc.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
spa.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
space_map.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
txg.c Fix zfs_txg_timeout module parameter 2012-10-11 15:07:09 -07:00
uberblock.c Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
unique.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
vdev_cache.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
vdev_disk.c Modify vdev_elevator_switch() to use elevator_change() 2012-10-03 13:31:44 -07:00
vdev_file.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
vdev_label.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
vdev_mirror.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
vdev_missing.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
vdev_queue.c Limit zfs_vdev_aggregation_limit to SPA_MAXBLOCKSIZE 2012-10-15 09:28:43 -07:00
vdev_raidz.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
vdev_root.c Illumos #1948: zpool list should show more detailed pool info 2012-09-19 13:39:05 -07:00
vdev.c Add FASTWRITE algorithm for synchronous writes. 2012-10-17 08:56:41 -07:00
zap_leaf.c Switch KM_SLEEP to KM_PUSHPAGE 2012-09-05 08:44:58 -07:00
zap_micro.c Switch KM_SLEEP to KM_PUSHPAGE 2012-09-05 08:44:58 -07:00
zap.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
zfs_acl.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
zfs_byteswap.c Add linux kernel module support 2010-08-31 13:41:58 -07:00
zfs_ctldir.c Return positive error number in zfsctl_shares_lookup. 2012-10-15 09:11:56 -07:00
zfs_debug.c Use spl_debug_* helpers 2012-02-09 16:37:48 -08:00
zfs_dir.c rmdir(2) should return ENOTEMPTY 2012-08-26 13:55:45 -07:00
zfs_fm.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
zfs_fuid.c Drop HAVE_XVATTR macros 2011-03-02 11:44:34 -08:00
zfs_ioctl.c Illumos #3129, #3130 2012-10-03 13:59:02 -07:00
zfs_log.c Make zfs_immediate_write_sz a module paramater 2012-10-11 11:09:21 -07:00
zfs_onexit.c Add linux kernel device support 2010-08-31 13:41:50 -07:00
zfs_replay.c ZFS replay transaction error 5 2012-09-17 11:06:58 -07:00
zfs_rlock.c Condition variable usage, zp->r_{rd,wr}_cv 2012-10-15 16:02:03 -07:00
zfs_sa.c Revert "Use SA_HDL_PRIVATE for SA xattrs" 2012-08-25 09:25:56 -07:00
zfs_vfsops.c Illumos #3100: zvol rename fails with EBUSY when dirty. 2012-10-03 13:59:02 -07:00
zfs_vnops.c Clear PG_writeback for sync I/O error case 2012-09-14 15:53:47 -07:00
zfs_znode.c Switch KM_SLEEP to KM_PUSHPAGE 2012-08-27 12:01:37 -07:00
zil.c Use the slog even with logbias=throughput. 2012-10-17 08:56:46 -07:00
zio_checksum.c Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
zio_compress.c Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
zio_inject.c Add missing ZFS tunables 2011-05-04 10:02:37 -07:00
zio.c Add FASTWRITE algorithm for synchronous writes. 2012-10-17 08:56:41 -07:00
zle.c Update core ZFS code from build 121 to build 141. 2010-05-28 13:45:14 -07:00
zpl_ctldir.c Linux 3.6 compat, iops->lookup() 2012-10-14 13:06:54 -07:00
zpl_export.c Implement .commit_metadata hook for NFS export 2012-10-03 10:49:45 -07:00
zpl_file.c Annotate KM_PUSHPAGE call paths with PF_NOFS 2012-08-27 12:01:37 -07:00
zpl_inode.c Linux 3.6 compat, iops->create() 2012-10-14 14:42:25 -07:00
zpl_super.c Linux 3.6 compat, sops->write_super() removed 2012-10-14 11:33:56 -07:00
zpl_xattr.c Add missing NULL in zpl_xattr_handlers 2012-03-15 15:18:29 -07:00
zrlock.c Export ZFS symbols needed by Lustre. 2010-09-17 16:24:15 -07:00
zvol.c Set default zvol elevator to noop 2012-10-05 12:39:59 -07:00