Go to file
Brian Behlendorf 2fac4c2a74 Make tgx_sync_thread zio's async
The majority of the recursive operations performed by the dsl
are done either in the context of the tgx_sync_thread or during
pool import.  It is these recursive operations which contribute
greatly to the stack depth.  When this recursion is coupled with
a synchronous I/O in the same context overflow becomes possible.

Previously to handle this case I have focused on keeping the
individual stack frames as light as possible.  This is a good
idea as long as it can be done in a way which doesn't overly
complicate the code.  However, there is a better solution.

If we treat all zio's issued by the tgx_sync_thread as async then
we can use the tgx_sync_thread stack for the recursive parts, and
the zio_* threads for the I/O parts.  This effectively doubles our
available stack space with the only drawback being a small delay
to schedule the I/O.  However, in practice the scheduling time
is so much smaller than the actual I/O time this isn't an issue.
Another benefit of making the zio async is that the zio pipeline
is now parallel.  That should mean for CPU intensive pipelines
such as compression or dedup performance may be improved.

With this change in place the worst case stack usage observed so
far is 6902 bytes.  This is still higher than I'd like but
significantly improved.  Additional changes to specific functions
should improve this further.  This change allows us to revent
commit 6656bf5 which did some horrible things to the recursive
traverse_visitbp() callpath in the name of saving stack.
2011-05-31 12:17:27 -07:00
cmd Default to internal 'zfs userspace' implementation 2011-05-20 10:25:41 -07:00
config Fix distribution detection for gentoo 2011-05-14 08:54:48 -07:00
dracut Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
etc Remove root 'ls' after mount workaround 2011-05-12 15:01:35 -07:00
include Disable direct reclaim for z_wr_* threads 2011-05-06 15:26:26 -07:00
lib Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
man Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
module Make tgx_sync_thread zio's async 2011-05-31 12:17:27 -07:00
patches Add build system 2010-08-31 13:41:27 -07:00
scripts Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
.gitignore Ignore unsigned module build products 2010-03-09 14:14:09 -08:00
AUTHORS Add Gunnar Beutner to AUTHORS for his contributions 2011-04-19 14:14:51 -07:00
autogen.sh Minor packaging fixes 2010-09-01 15:42:32 -07:00
ChangeLog Add build system 2010-08-31 13:41:27 -07:00
configure Fix distribution detection for gentoo 2011-05-14 08:54:48 -07:00
configure.ac Set cmd paths in udev rules using --prefix 2011-03-25 10:05:09 -07:00
COPYING Relocate COPYING+COPYRIGHT, remove README cruft 2008-12-01 15:34:53 -08:00
COPYRIGHT Update COPYRIGHT to reference zpios CDDL exceptions. 2010-05-18 14:25:28 -07:00
DISCLAIMER Update COPYRIGHT and DISCLAIMER. 2010-05-18 10:32:23 -07:00
Makefile.am Add dracut support 2011-03-17 16:52:04 -07:00
Makefile.in Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
META Prep zfs-0.6.0-rc4 tag 2011-05-03 10:29:05 -07:00
OPENSOLARIS.LICENSE Add CDDL license file 2008-12-01 14:49:34 -08:00
README.markdown Fix markdown rendering 2010-09-15 09:09:37 -07:00
zfs_config.h.in Fix 'zfs set volsize=N pool/dataset' 2011-05-02 08:54:40 -07:00
zfs-modules.spec.in Fix rebuildable RPMs for el6/ch5 2011-04-08 10:22:42 -07:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
ZFS.RELEASE Update to onnv_147 2010-08-26 14:24:34 -07:00
zfs.spec.in Add parted and lsscsi dependencies to zfs-test 2011-04-19 15:22:46 -07:00

Native ZFS for Linux! ZFS is an advanced file system and volume manager which was originally developed for Solaris. It has been successfully ported to FreeBSD and now there is a functional Linux ZFS kernel port too. The port currently includes a fully functional and stable SPA, DMU, and ZVOL with a ZFS Posix Layer (ZPL) on the way!

$ ./configure
$ make pkg

Full documentation for building, configuring, and using ZFS can be found at: http://zfsonlinux.org