FreeBSD src
Go to file
Andriy Gapon e70097b50f MFV r318947: 7578 Fix/improve some aspects of ZIL writing.
FreeBSD note: this commit removes small differences between what mav
committed to FreeBSD in r308782 and what ended up committed to illumos
after addressing all review comments.

illumos/illumos-gate@c5ee46810f
c5ee46810f

https://www.illumos.org/issues/7578
  After some ZIL changes 6 years ago zil_slog_limit got partially broken
  due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
  Actually because of other changes about that time zl_itx_list_sz is not
  really required to implement the functionality, so this patch removes
  some unneeded broken code and variables.
  Original idea of zil_slog_limit was to reduce chance of SLOG abuse by
  single heavy logger, that increased latency for other (more latency critical)
  loggers, by pushing heavy log out into the main pool instead of SLOG. Beside
  huge latency increase for heavy writers, this implementation caused double
  write of all data, since the log records were explicitly prepared for SLOG.
  Since we now have I/O scheduler, I've found it can be much more efficient
  to reduce priority of heavy logger SLOG writes from ZIO_PRIORITY_SYNC_WRITE
  to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
  Existing ZIL implementation had problem with space efficiency when it
  has to write large chunks of data into log blocks of limited size. In some
  cases efficiency stopped to almost as low as 50%. In case of ZIL stored on
  spinning rust, that also reduced log write speed in half, since head had to
  uselessly fly over allocated but not written areas. This change improves
  the situation by offloading problematic operations from z*_log_write() to
  zil_lwb_commit(), which knows real situation of log blocks allocation and
  can split large requests into pieces much more efficiently. Also as side
  effect it removes one of two data copy operations done by ZIL code WR_COPIED
  case.
  While there, untangle and unify code of z*_log_write() functions.
  Also zfs_log_write() alike to zvol_log_write() can now handle writes crossing
  block boundary, that may also improve efficiency if ZPL is made to do that.

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Prakash Surya <prakash.surya@delphix.com>
Reviewed by: Andriy Gapon <avg@FreeBSD.org>
Reviewed by: Steven Hartland <steven.hartland@multiplay.co.uk>
Reviewed by: Brad Lewis <brad.lewis@delphix.com>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Author: Alexander Motin <mav@FreeBSD.org>

MFC after:	3 weeks
2017-06-22 16:52:22 +00:00
bin Don't expect :sF_flag to fail anymore 2017-06-20 20:50:54 +00:00
cddl zfsd(8): Remove pidfile on shutdown 2017-06-20 19:45:02 +00:00
contrib In poolnodcommand(): TTL (-T) is only valid when adding a node to a 2017-06-22 12:46:48 +00:00
crypto Merge OpenSSL 1.0.2l. 2017-05-25 20:52:16 +00:00
etc Replace md(4) usage in diskless(8) script rc.initdiskless with tmpfs(5). 2017-06-15 20:06:41 +00:00
gnu Utilize SYSROOT from r320119 in places where DESTDIR may be wanting WORLDTMP. 2017-06-19 20:47:24 +00:00
include Update the DTS file from Linux 4.11 2017-06-20 02:28:15 +00:00
kerberos5 Disconnect heimdal version of qsort.c from build because we are already 2017-05-26 06:09:11 +00:00
lib Fix use-after-free introduced in r300388. 2017-06-22 05:10:16 +00:00
libexec Add MLINKS for atf-sh(3) to each of the functions it implements 2017-06-07 21:18:28 +00:00
release Remove groff from base 2017-06-07 23:00:34 +00:00
rescue DIRDEPS_BUILD: Update dependencies. 2017-05-09 01:48:23 +00:00
sbin Allow '_' in labels when specifying -L to newfs. 2017-06-20 21:26:42 +00:00
secure Merge OpenSSL 1.0.2l. 2017-05-25 20:52:16 +00:00
share Rework logic for skipping .depend/.meta file read/stat/writes. 2017-06-22 05:34:41 +00:00
sys MFV r318947: 7578 Fix/improve some aspects of ZIL writing. 2017-06-22 16:52:22 +00:00
targets buildworld: Pass which world phase the build is in down to submakes. 2017-06-20 22:08:02 +00:00
tests Add abstime kqueue(2) timers and expand struct kevent members. 2017-06-17 00:57:26 +00:00
tools Update scescx test to print syscall number and arguments. 2017-06-12 21:16:37 +00:00
usr.bin join(1): Fix field ordering for -v output 2017-06-22 02:19:39 +00:00
usr.sbin makefs: add copies of NetBSD makefs msdos source files 2017-06-22 02:46:36 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint phabricator related changes: 2015-04-20 20:33:22 +00:00
COPYRIGHT Bump copyright year. 2016-12-31 12:41:42 +00:00
LOCKS
MAINTAINERS Due to time constraints remove myself as a vmm(4) maintainer. 2017-04-15 22:42:23 +00:00
Makefile By popular demand: change MAKE_GENERIC_KERNELS to MAKE_LINT_KERNELS. 2017-06-13 01:12:37 +00:00
Makefile.inc1 buildworld: Pass which world phase the build is in down to submakes. 2017-06-20 22:08:02 +00:00
Makefile.libcompat buildworld: Define SYSROOT to WORLDTMP. 2017-06-19 18:08:20 +00:00
ObsoleteFiles.inc Add more simple positive tests for chown(1) 2017-06-11 19:31:42 +00:00
README Correct the URL to instructions for updated system sources. 2017-05-15 15:18:36 +00:00
README.md Remove hard line breaks from README.md 2017-03-01 15:39:58 +00:00
UPDATING Fix punctionation in UPDATING and regen src.conf after r320127 2017-06-20 03:44:21 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

For copyright information, please see the file COPYRIGHT in this directory (additional copyright information also exists for some sources in this tree - please see the specific source directories for more information).

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7) and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html for more information, including setting make(1) variables.

The buildkernel and installkernel targets build and install the kernel and the modules (see below). Please see the top of the Makefile in this directory for more information on the standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process. See build(7), config(8), and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information.

Note: If you want to build and install the kernel with the buildkernel and installkernel targets, you might need to build world before. More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf sub-directory. GENERIC is the default configuration used in release builds. NOTES contains entries and documentation for all possible devices, not just those commonly used.

Source Roadmap:

bin				System/user commands.

cddl			Various commands and libraries under the Common Development  
				and Distribution License.

contrib			Packages contributed by 3rd parties.

crypto			Cryptography stuff (see crypto/README).

etc				Template files for /etc.

gnu				Various commands and libraries under the GNU Public License.  
				Please see gnu/COPYING* for more information.

include			System include files.

kerberos5		Kerberos5 (Heimdal) package.

lib				System libraries.

libexec			System daemons.

release			Release building Makefile & associated tools.

rescue			Build system for statically linked /rescue utilities.

sbin			System commands.

secure			Cryptographic libraries and commands.

share			Shared resources.

sys				Kernel sources.

tests			Regression tests which can be run by Kyua.  See tests/README
				for additional information.

tools			Utilities for regression testing and miscellaneous tasks.

usr.bin			User commands.

usr.sbin		System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html