freebsd-skq/cmd
Andriy Gapon 3899d91a09 7578 Fix/improve some aspects of ZIL writing.
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>
2017-05-26 12:13:58 +00:00
..
dtrace 7297 clear() on llquantize aggregation causes dtrace to exit 2016-08-26 20:51:09 +00:00
lockstat Import the lockstat(1) sources from OpenSolaris as of 20080410. 2009-06-18 17:25:38 +00:00
mdb/tools/common Vendor import of the full userland contrib part of DTrace support from 2008-04-26 00:54:52 +00:00
plockstat Import plockstat from OpenSolaris r12768. 2010-07-19 14:57:01 +00:00
pyzfs Update vendor/opensolaris to last OpenSolaris state (13149:b23a4dab3d50) 2012-07-18 07:48:04 +00:00
sgs Update vendor/opensolaris to last OpenSolaris state (13149:b23a4dab3d50) 2012-07-18 07:48:04 +00:00
stat/common Update vendor/illumos/dist and vendor-sys/illumos/dist 2013-02-11 08:07:56 +00:00
zdb 8021 ARC buf data scatter-ization 2017-05-26 12:13:27 +00:00
zfs 7955 libshare needs to initialize only those datasets being modified by the consumer 2017-04-14 18:34:03 +00:00
zhack 6314 buffer overflow in dsl_dataset_name 2016-07-12 12:01:54 +00:00
zinject 6531 Provide mechanism to artificially limit disk performance 2016-03-08 16:11:59 +00:00
zlook Update vendor/opensolaris to last OpenSolaris state (13149:b23a4dab3d50) 2012-07-18 07:48:04 +00:00
zpool 7446 zpool create should support efi system partition 2017-05-26 12:02:14 +00:00
zstreamdump 7252 7628 compressed zfs send / receive 2017-04-14 18:07:43 +00:00
ztest 7578 Fix/improve some aspects of ZIL writing. 2017-05-26 12:13:58 +00:00