mirror_zfs/tests/zfs-tests/cmd/Makefile.am
Shaan Nobee 411f4a018d
Speed up WB_SYNC_NONE when a WB_SYNC_ALL occurs simultaneously
Page writebacks with WB_SYNC_NONE can take several seconds to complete 
since they wait for the transaction group to close before being 
committed. This is usually not a problem since the caller does not 
need to wait. However, if we're simultaneously doing a writeback 
with WB_SYNC_ALL (e.g via msync), the latter can block for several 
seconds (up to zfs_txg_timeout) due to the active WB_SYNC_NONE 
writeback since it needs to wait for the transaction to complete 
and the PG_writeback bit to be cleared.

This commit deals with 2 cases:

- No page writeback is active. A WB_SYNC_ALL page writeback starts 
  and even completes. But when it's about to check if the PG_writeback 
  bit has been cleared, another writeback with WB_SYNC_NONE starts. 
  The sync page writeback ends up waiting for the non-sync page 
  writeback to complete.

- A page writeback with WB_SYNC_NONE is already active when a 
  WB_SYNC_ALL writeback starts. The WB_SYNC_ALL writeback ends up 
  waiting for the WB_SYNC_NONE writeback.

The fix works by carefully keeping track of active sync/non-sync 
writebacks and committing when beneficial.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Shaan Nobee <sniper111@gmail.com>
Closes #12662
Closes #12790
2022-05-03 13:23:26 -07:00

189 lines
5.1 KiB
Makefile

include $(top_srcdir)/config/Rules.am
pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/bin
pkgexec_PROGRAMS = badsend
badsend_SOURCES = badsend.c
badsend_LDADD = \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libzfs/libzfs.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la
pkgexec_PROGRAMS += btree_test
btree_test_SOURCES = btree_test.c
# Unconditionally enable ASSERTs
btree_test_CPPFLAGS = $(AM_CPPFLAGS) -DDEBUG -UNDEBUG -DZFS_DEBUG
btree_test_LDADD = \
$(abs_top_builddir)/lib/libzpool/libzpool.la \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la
pkgexec_PROGRAMS += chg_usr_exec
chg_usr_exec_SOURCES = chg_usr_exec.c
if WANT_DEVNAME2DEVID
pkgexec_PROGRAMS += devname2devid
devname2devid_SOURCES = devname2devid.c
devname2devid_CFLAGS = $(AM_CFLAGS) $(LIBUDEV_CFLAGS)
devname2devid_LDADD = $(LIBUDEV_LIBS)
endif
pkgexec_PROGRAMS += dir_rd_update
dir_rd_update_SOURCES = dir_rd_update.c
pkgexec_PROGRAMS += draid
draid_CFLAGS = $(AM_CFLAGS) $(ZLIB_CFLAGS)
draid_SOURCES = draid.c
draid_LDADD = \
$(abs_top_builddir)/lib/libzpool/libzpool.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la
draid_LDADD += $(ZLIB_LIBS)
EXTRA_DIST = file/file_common.h
pkgexec_PROGRAMS += file_check file_trunc file_write largest_file randwritecomp
file_check_SOURCES = file/file_check.c
file_trunc_SOURCES = file/file_trunc.c
file_write_SOURCES = file/file_write.c
largest_file_SOURCES = file/largest_file.c
randwritecomp_SOURCES = file/randwritecomp.c
pkgexec_PROGRAMS += get_diff
get_diff_SOURCES = get_diff.c
pkgexec_PROGRAMS += libzfs_input_check
libzfs_input_check_SOURCES = libzfs_input_check.c
if BUILD_FREEBSD
libzfs_input_check_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include/os/freebsd/zfs
endif
if BUILD_LINUX
libzfs_input_check_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include/os/linux/zfs
endif
libzfs_input_check_LDADD = \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la
pkgexec_PROGRAMS += mkbusy mkfile mkfiles mktree
mkbusy_SOURCES = mkbusy.c
mkfile_SOURCES = mkfile.c
mkfile_LDADD = $(LTLIBINTL)
mkfiles_SOURCES = mkfiles.c
mktree_SOURCES = mktree.c
pkgexec_PROGRAMS += mmap_exec mmap_seek mmap_sync mmapwrite readmmap
mmap_exec_SOURCES = mmap_exec.c
mmap_seek_SOURCES = mmap_seek.c
mmap_sync_SOURCES = mmap_sync.c
mmapwrite_SOURCES = mmapwrite.c
mmapwrite_LDADD = -lpthread
readmmap_SOURCES = readmmap.c
if WANT_MMAP_LIBAIO
pkgexec_PROGRAMS += mmap_libaio
mmap_libaio_SOURCES = mmap_libaio.c
mmap_libaio_CFLAGS = $(AM_CFLAGS) $(LIBAIO_CFLAGS)
mmap_libaio_LDADD = $(LIBAIO_LIBS)
endif
pkgexec_PROGRAMS += nvlist_to_lua
nvlist_to_lua_SOURCES = nvlist_to_lua.c
nvlist_to_lua_LDADD = \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la
pkgexec_PROGRAMS += rename_dir
rename_dir_SOURCES = rename_dir.c
pkgexec_PROGRAMS += rm_lnkcnt_zero_file
rm_lnkcnt_zero_file_SOURCES = rm_lnkcnt_zero_file.c
rm_lnkcnt_zero_file_LDADD = -lpthread
pkgexec_PROGRAMS += send_doall
send_doall_SOURCES = send_doall.c
send_doall_LDADD = \
$(abs_top_builddir)/lib/libzfs_core/libzfs_core.la \
$(abs_top_builddir)/lib/libzfs/libzfs.la \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la
pkgexec_PROGRAMS += stride_dd
stride_dd_SOURCES = stride_dd.c
stride_dd_LDADD = -lrt
pkgexec_PROGRAMS += threadsappend
threadsappend_SOURCES = threadsappend.c
threadsappend_LDADD = -lpthread
pkgexec_PROGRAMS += suid_write_to_file
suid_write_to_file_SOURCES = suid_write_to_file.c
pkgexec_PROGRAMS += cp_files
cp_files_SOURCES = cp_files.c
pkgexec_PROGRAMS += ctime
ctime_SOURCES = ctime.c
pkgexec_PROGRAMS += truncate_test
truncate_test_SOURCES = truncate_test.c
pkgexec_PROGRAMS += ereports
ereports_SOURCES = ereports.c
ereports_LDADD = \
$(abs_top_builddir)/lib/libnvpair/libnvpair.la \
$(abs_top_builddir)/lib/libzfs/libzfs.la
pkgexec_PROGRAMS += zfs_diff-socket
zfs_diff_socket_SOURCES = zfs_diff-socket.c
pkgexec_PROGRAMS += dosmode_readonly_write
dosmode_readonly_write_SOURCES = dosmode_readonly_write.c
pkgexec_PROGRAMS += edonr_test skein_test sha2_test
skein_test_SOURCES = checksum/skein_test.c
sha2_test_SOURCES = checksum/sha2_test.c
edonr_test_SOURCES = checksum/edonr_test.c
skein_test_LDADD = \
$(abs_top_builddir)/lib/libicp/libicp.la \
$(abs_top_builddir)/lib/libspl/libspl_assert.la
sha2_test_LDADD = \
$(abs_top_builddir)/lib/libicp/libicp.la \
$(abs_top_builddir)/lib/libspl/libspl_assert.la
edonr_test_LDADD = \
$(abs_top_builddir)/lib/libicp/libicp.la \
$(abs_top_builddir)/lib/libspl/libspl_assert.la
if BUILD_LINUX
pkgexec_PROGRAMS += getversion
getversion_SOURCES = getversion.c
EXTRA_DIST += linux_dos_attributes/dos_attributes.h
pkgexec_PROGRAMS += read_dos_attributes write_dos_attributes
read_dos_attributes_SOURCES = linux_dos_attributes/read_dos_attributes.c
write_dos_attributes_SOURCES = linux_dos_attributes/write_dos_attributes.c
pkgexec_PROGRAMS += randfree_file
randfree_file_SOURCES = file/randfree_file.c
pkgexec_PROGRAMS += user_ns_exec
user_ns_exec_SOURCES = user_ns_exec.c
pkgexec_PROGRAMS += xattrtest
xattrtest_SOURCES = xattrtest.c
pkgexec_PROGRAMS += zed_fd_spill-zedlet
zed_fd_spill_zedlet_SOURCES = zed_fd_spill-zedlet.c
endif