freebsd-dev/sys/cddl/contrib/opensolaris/uts
Andriy Gapon 5386d7295a MFV r316917: 7968 multi-threaded spa_sync()
illumos/illumos-gate@94c2d0eb22
94c2d0eb22

https://www.illumos.org/issues/7968
  spa_sync() iterates over all the dirty dnodes and processes each of them by
  calling dnode_sync(). If there are many dirty dnodes (e.g. because we created
  or removed a lot of files), the single thread of spa_sync() calling
  dnode_sync() can become a bottleneck. Additionally, if many dnodes are dirtied
  concurrently in open context (e.g. due to concurrent file creation), the
  os_lock will experience lock contention via dnode_setdirty().
  The solution is to track dirty dnodes on a multilist_t, and for spa_sync() to
  use separate threads to process each of the sublists in the multilist.
  On the concurrent file creation microbenchmark, the performance improvement
  from dnode_setdirty() is up to 7%. Additionally, the wall clock time spent in
  spa_sync() is reduced to 15%-40% of the single-threaded case. In terms of cost/
  reward, once the other bottlenecks are addressed, fixing this bug will provide
  a medium-large performance gain and require a medium amount of effort to
  implement.

Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed by: Brad Lewis <brad.lewis@delphix.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Approved by: Dan McDonald <danmcd@omniti.com>
Author: Matthew Ahrens <mahrens@delphix.com>
MFC after:	3 weeks
2017-05-24 22:21:24 +00:00
..
aarch64 First cut of DTrace for AArch64. 2015-07-01 15:51:11 +00:00
arm Initial version of DTrace on ARM32. 2015-02-10 19:41:30 +00:00
common MFV r316917: 7968 multi-threaded spa_sync() 2017-05-24 22:21:24 +00:00
intel Fix an off-by-one in an assertion on fasttrap tracepoint sizes. 2017-01-27 17:58:41 +00:00
mips
powerpc Move implementations of uread() and uwrite() to the illumos compat layer. 2016-09-24 21:40:14 +00:00
riscv Add initial DTrace support for RISC-V. 2016-05-24 16:41:37 +00:00