2010-08-26 22:22:58 +04:00
|
|
|
include $(top_srcdir)/config/Rules.am
|
|
|
|
|
|
|
|
AM_CFLAGS += $(DEBUG_STACKFLAGS) $(FRAME_LARGER_THAN)
|
|
|
|
|
|
|
|
DEFAULT_INCLUDES += \
|
2010-09-05 00:26:23 +04:00
|
|
|
-I$(top_srcdir)/include \
|
|
|
|
-I$(top_srcdir)/lib/libspl/include
|
2010-08-26 22:22:58 +04:00
|
|
|
|
|
|
|
lib_LTLIBRARIES = libzpool.la
|
|
|
|
|
|
|
|
libzpool_la_SOURCES = \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/lib/libzpool/kernel.c \
|
|
|
|
$(top_srcdir)/lib/libzpool/taskq.c \
|
|
|
|
$(top_srcdir)/lib/libzpool/util.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zfs_comutil.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zfs_deleg.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zfs_fletcher.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zfs_namecheck.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zfs_prop.c \
|
2010-12-22 23:13:57 +03:00
|
|
|
$(top_srcdir)/module/zcommon/zfs_uio.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zcommon/zpool_prop.c \
|
|
|
|
$(top_srcdir)/module/zcommon/zprop_common.c \
|
|
|
|
$(top_srcdir)/module/zfs/arc.c \
|
2014-06-06 01:19:08 +04:00
|
|
|
$(top_srcdir)/module/zfs/blkptr.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/bplist.c \
|
|
|
|
$(top_srcdir)/module/zfs/bpobj.c \
|
2012-12-14 03:24:15 +04:00
|
|
|
$(top_srcdir)/module/zfs/bptree.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/dbuf.c \
|
2013-10-03 04:11:19 +04:00
|
|
|
$(top_srcdir)/module/zfs/dbuf_stats.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/ddt.c \
|
|
|
|
$(top_srcdir)/module/zfs/ddt_zap.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_diff.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_object.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_objset.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_send.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_traverse.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_tx.c \
|
|
|
|
$(top_srcdir)/module/zfs/dmu_zfetch.c \
|
|
|
|
$(top_srcdir)/module/zfs/dnode.c \
|
|
|
|
$(top_srcdir)/module/zfs/dnode_sync.c \
|
2013-12-12 02:33:41 +04:00
|
|
|
$(top_srcdir)/module/zfs/dsl_bookmark.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/dsl_dataset.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_deadlist.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_deleg.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_dir.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_pool.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_prop.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_scan.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_synctask.c \
|
2013-09-04 16:00:57 +04:00
|
|
|
$(top_srcdir)/module/zfs/dsl_destroy.c \
|
|
|
|
$(top_srcdir)/module/zfs/dsl_userhold.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/fm.c \
|
|
|
|
$(top_srcdir)/module/zfs/gzip.c \
|
|
|
|
$(top_srcdir)/module/zfs/lzjb.c \
|
2013-01-23 13:54:30 +04:00
|
|
|
$(top_srcdir)/module/zfs/lz4.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/metaslab.c \
|
Illumos #4101, #4102, #4103, #4105, #4106
4101 metaslab_debug should allow for fine-grained control
4102 space_maps should store more information about themselves
4103 space map object blocksize should be increased
4105 removing a mirrored log device results in a leaked object
4106 asynchronously load metaslab
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Sebastien Roy <seb@delphix.com>
Approved by: Garrett D'Amore <garrett@damore.org>
Prior to this patch, space_maps were preferred solely based on the
amount of free space left in each. Unfortunately, this heuristic didn't
contain any information about the make-up of that free space, which
meant we could keep preferring and loading a highly fragmented space map
that wouldn't actually have enough contiguous space to satisfy the
allocation; then unloading that space_map and repeating the process.
This change modifies the space_map's to store additional information
about the contiguous space in the space_map, so that we can use this
information to make a better decision about which space_map to load.
This requires reallocating all space_map objects to increase their
bonus buffer size sizes enough to fit the new metadata.
The above feature can be enabled via a new feature flag introduced by
this change: com.delphix:spacemap_histogram
In addition to the above, this patch allows the space_map block size to
be increase. Currently the block size is set to be 4K in size, which has
certain implications including the following:
* 4K sector devices will not see any compression benefit
* large space_maps require more metadata on-disk
* large space_maps require more time to load (typically random reads)
Now the space_map block size can adjust as needed up to the maximum size
set via the space_map_max_blksz variable.
A bug was fixed which resulted in potentially leaking an object when
removing a mirrored log device. The previous logic for vdev_remove() did
not deal with removing top-level vdevs that are interior vdevs (i.e.
mirror) correctly. The problem would occur when removing a mirrored log
device, and result in the DTL space map object being leaked; because
top-level vdevs don't have DTL space map objects associated with them.
References:
https://www.illumos.org/issues/4101
https://www.illumos.org/issues/4102
https://www.illumos.org/issues/4103
https://www.illumos.org/issues/4105
https://www.illumos.org/issues/4106
https://github.com/illumos/illumos-gate/commit/0713e23
Porting notes:
A handful of kmem_alloc() calls were converted to kmem_zalloc(). Also,
the KM_PUSHPAGE and TQ_PUSHPAGE flags were used as necessary.
Ported-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2488
2013-10-02 01:25:53 +04:00
|
|
|
$(top_srcdir)/module/zfs/range_tree.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/refcount.c \
|
|
|
|
$(top_srcdir)/module/zfs/rrwlock.c \
|
|
|
|
$(top_srcdir)/module/zfs/sa.c \
|
|
|
|
$(top_srcdir)/module/zfs/sha256.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa_boot.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa_config.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa_errlog.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa_history.c \
|
|
|
|
$(top_srcdir)/module/zfs/spa_misc.c \
|
Add visibility in to arc_read
This change is an attempt to add visibility into the arc_read calls
occurring on a system, in real time. To do this, a list was added to the
in memory SPA data structure for a pool, with each element on the list
corresponding to a call to arc_read. These entries are then exported
through the kstat interface, which can then be interpreted in userspace.
For each arc_read call, the following information is exported:
* A unique identifier (uint64_t)
* The time the entry was added to the list (hrtime_t)
(*not* wall clock time; relative to the other entries on the list)
* The objset ID (uint64_t)
* The object number (uint64_t)
* The indirection level (uint64_t)
* The block ID (uint64_t)
* The name of the function originating the arc_read call (char[24])
* The arc_flags from the arc_read call (uint32_t)
* The PID of the reading thread (pid_t)
* The command or name of thread originating read (char[16])
From this exported information one can see, in real time, exactly what
is being read, what function is generating the read, and whether or not
the read was found to be already cached.
There is still some work to be done, but this should serve as a good
starting point.
Specifically, dbuf_read's are not accounted for in the currently
exported information. Thus, a follow up patch should probably be added
to export these calls that never call into arc_read (they only hit the
dbuf hash table). In addition, it might be nice to create a utility
similar to "arcstat.py" to digest the exported information and display
it in a more readable format. Or perhaps, log the information and allow
for it to be "replayed" at a later time.
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2013-09-07 03:09:05 +04:00
|
|
|
$(top_srcdir)/module/zfs/spa_stats.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/space_map.c \
|
Illumos #4101, #4102, #4103, #4105, #4106
4101 metaslab_debug should allow for fine-grained control
4102 space_maps should store more information about themselves
4103 space map object blocksize should be increased
4105 removing a mirrored log device results in a leaked object
4106 asynchronously load metaslab
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Sebastien Roy <seb@delphix.com>
Approved by: Garrett D'Amore <garrett@damore.org>
Prior to this patch, space_maps were preferred solely based on the
amount of free space left in each. Unfortunately, this heuristic didn't
contain any information about the make-up of that free space, which
meant we could keep preferring and loading a highly fragmented space map
that wouldn't actually have enough contiguous space to satisfy the
allocation; then unloading that space_map and repeating the process.
This change modifies the space_map's to store additional information
about the contiguous space in the space_map, so that we can use this
information to make a better decision about which space_map to load.
This requires reallocating all space_map objects to increase their
bonus buffer size sizes enough to fit the new metadata.
The above feature can be enabled via a new feature flag introduced by
this change: com.delphix:spacemap_histogram
In addition to the above, this patch allows the space_map block size to
be increase. Currently the block size is set to be 4K in size, which has
certain implications including the following:
* 4K sector devices will not see any compression benefit
* large space_maps require more metadata on-disk
* large space_maps require more time to load (typically random reads)
Now the space_map block size can adjust as needed up to the maximum size
set via the space_map_max_blksz variable.
A bug was fixed which resulted in potentially leaking an object when
removing a mirrored log device. The previous logic for vdev_remove() did
not deal with removing top-level vdevs that are interior vdevs (i.e.
mirror) correctly. The problem would occur when removing a mirrored log
device, and result in the DTL space map object being leaked; because
top-level vdevs don't have DTL space map objects associated with them.
References:
https://www.illumos.org/issues/4101
https://www.illumos.org/issues/4102
https://www.illumos.org/issues/4103
https://www.illumos.org/issues/4105
https://www.illumos.org/issues/4106
https://github.com/illumos/illumos-gate/commit/0713e23
Porting notes:
A handful of kmem_alloc() calls were converted to kmem_zalloc(). Also,
the KM_PUSHPAGE and TQ_PUSHPAGE flags were used as necessary.
Ported-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2488
2013-10-02 01:25:53 +04:00
|
|
|
$(top_srcdir)/module/zfs/space_reftree.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/txg.c \
|
|
|
|
$(top_srcdir)/module/zfs/uberblock.c \
|
|
|
|
$(top_srcdir)/module/zfs/unique.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_cache.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_file.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_label.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_mirror.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_missing.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_queue.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_raidz.c \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_root.c \
|
|
|
|
$(top_srcdir)/module/zfs/zap.c \
|
|
|
|
$(top_srcdir)/module/zfs/zap_leaf.c \
|
|
|
|
$(top_srcdir)/module/zfs/zap_micro.c \
|
2012-12-14 03:24:15 +04:00
|
|
|
$(top_srcdir)/module/zfs/zfeature.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfeature_common.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/zfs_byteswap.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_debug.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_fm.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_fuid.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_sa.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_znode.c \
|
|
|
|
$(top_srcdir)/module/zfs/zil.c \
|
|
|
|
$(top_srcdir)/module/zfs/zio.c \
|
|
|
|
$(top_srcdir)/module/zfs/zio_checksum.c \
|
|
|
|
$(top_srcdir)/module/zfs/zio_compress.c \
|
|
|
|
$(top_srcdir)/module/zfs/zio_inject.c \
|
|
|
|
$(top_srcdir)/module/zfs/zle.c \
|
|
|
|
$(top_srcdir)/module/zfs/zrlock.c
|
2010-08-26 22:22:58 +04:00
|
|
|
|
2012-01-01 03:30:52 +04:00
|
|
|
libzpool_la_LIBADD = \
|
|
|
|
$(top_builddir)/lib/libunicode/libunicode.la \
|
2013-02-06 03:14:30 +04:00
|
|
|
$(top_builddir)/lib/libuutil/libuutil.la \
|
|
|
|
$(top_builddir)/lib/libnvpair/libnvpair.la
|
2012-01-01 03:30:52 +04:00
|
|
|
|
2013-09-26 21:42:41 +04:00
|
|
|
libzpool_la_LIBADD += $(ZLIB)
|
2013-09-26 21:44:10 +04:00
|
|
|
libzpool_la_LDFLAGS = -version-info 2:0:0
|
2010-09-05 00:26:23 +04:00
|
|
|
|
|
|
|
EXTRA_DIST = \
|
|
|
|
$(top_srcdir)/module/zfs/vdev_disk.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_acl.c \
|
2011-11-11 11:15:53 +04:00
|
|
|
$(top_srcdir)/module/zfs/zfs_ctldir.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/zfs_dir.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_ioctl.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_log.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_onexit.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_replay.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_rlock.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_vfsops.c \
|
|
|
|
$(top_srcdir)/module/zfs/zfs_vnops.c \
|
2011-11-11 11:15:53 +04:00
|
|
|
$(top_srcdir)/module/zfs/zpl_ctldir.c \
|
2011-04-30 06:13:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/zpl_export.c \
|
2011-01-26 23:03:58 +03:00
|
|
|
$(top_srcdir)/module/zfs/zpl_file.c \
|
|
|
|
$(top_srcdir)/module/zfs/zpl_inode.c \
|
|
|
|
$(top_srcdir)/module/zfs/zpl_super.c \
|
|
|
|
$(top_srcdir)/module/zfs/zpl_xattr.c \
|
2010-09-05 00:26:23 +04:00
|
|
|
$(top_srcdir)/module/zfs/zvol.c \
|
|
|
|
$(top_srcdir)/module/zpios/pios.c
|