Feature #7432


Large dnode pool feature

Added by Prashanth Sreenivasa over 7 years ago. Updated over 5 years ago.

zfs - Zettabyte File System
Start date:
Due date:
% Done:


Estimated time:
Gerrit CR:
External Bug:


Port the Large dnode pool feature from ZoL Issue # 3542 [[]]

Here's a copy of the description:

This feature adds support for variable length dnodes. Our motivation is
to eliminate the overhead associated with using spill blocks. Spill
blocks are used to store system attribute data (i.e. file metadata) that
does not fit in the dnode's bonus buffer. By allowing a larger bonus
buffer area the use of a spill block can be avoided. Spill blocks
potentially incur an additional read I/O for every dnode in a dnode
block. As a worst case example, reading 32 dnodes from a 16k dnode block
and all of the spill blocks could issue 33 separate reads. Now suppose
those dnodes have size 1024 and therefore don't need spill blocks. Then
the worst case number of blocks read is reduced to from 33 to two--one
per dnode block. In practice spill blocks may tend to be co-located on
disk with the dnode blocks so the reduction in I/O would not be this
drastic. In a badly fragmented pool, however, the improvement could be

ZFS-on-Linux systems that make heavy use of extended attributes would
benefit from this feature. In particular, ZFS-on-Linux supports the
xattr=sa dataset property which allows file extended attribute data
to be stored in the dnode bonus buffer as an alternative to the
traditional directory-based format. Workloads such as SELinux and the
Lustre distributed filesystem often store enough xattr data to force
spill bocks when xattr=sa is in effect. Large dnodes may therefore
provide a performance benefit to such systems.

Other use cases that may benefit from this feature include files with
large ACLs and symbolic links with long target names. Furthermore,
this feature may be desirable on other platforms in case future
applications or features are developed that could make use of a
larger bonus buffer area.

Related issues

Related to illumos gate - Feature #8423: Implement large_dnode pool featureClosedToomas Soome2017-06-23

Actions #1

Updated by Ezomori Nozomu almost 7 years ago

  • Related to Feature #8423: Implement large_dnode pool feature added
Actions #2

Updated by Electric Monk over 5 years ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100

git commit 54811da5ac6b517992fdc173df5d605e4e61fdc0

commit  54811da5ac6b517992fdc173df5d605e4e61fdc0
Author: Toomas Soome <>
Date:   2019-02-13T16:42:18.000Z

    8423 Implement large_dnode pool feature
    8199 multi-threaded dmu_object_alloc()
    7432 Large dnode pool feature
    Reviewed by: Jerry Jelinek <>
    Reviewed by: Jason King <>
    Approved by: Dan McDonald <>


Also available in: Atom PDF