mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
OpenZFS 7252 - compressed zfs send / receive
OpenZFS 7252 - compressed zfs send / receive OpenZFS 7628 - create long versions of ZFS send / receive options Authored by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: John Kennedy <john.kennedy@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Paul Dagnelie <pcd@delphix.com> Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com> Reviewed by: Sebastien Roy <sebastien.roy@delphix.com> Reviewed by: David Quigley <dpquigl@davequigley.com> Reviewed by: Thomas Caputi <tcaputi@datto.com> Approved by: Dan McDonald <danmcd@omniti.com> Reviewed by: David Quigley <dpquigl@davequigley.com> Reviewed-by: loli10K <ezomori.nozomu@gmail.com> Ported-by: bunder2015 <omfgbunder@gmail.com> Ported-by: Don Brady <don.brady@intel.com> Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> Porting Notes: - Most of 7252 was already picked up during ABD work. This commit represents the gap from the final commit to openzfs. - Fixed split_large_blocks check in do_dump() - An alternate version of the write_compressible() function was implemented for Linux which does not depend on fio. The behavior of fio differs significantly based on the exact version. - mkholes was replaced with truncate for Linux. OpenZFS-issue: https://www.illumos.org/issues/7252 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/5602294 Closes #6067
This commit is contained in:
committed by
Brian Behlendorf
parent
7a25f0891e
commit
a7004725d0
@@ -29,6 +29,7 @@
|
||||
#
|
||||
|
||||
. ${STF_TOOLS}/include/logapi.shlib
|
||||
. ${STF_SUITE}/include/math.shlib
|
||||
|
||||
#
|
||||
# Apply constrained path when available. This is required since the
|
||||
@@ -3111,6 +3112,73 @@ function get_min
|
||||
echo $min
|
||||
}
|
||||
|
||||
#
|
||||
# Generate a random number between 1 and the argument.
|
||||
#
|
||||
function random
|
||||
{
|
||||
typeset max=$1
|
||||
echo $(( ($RANDOM % $max) + 1 ))
|
||||
}
|
||||
|
||||
# Write data that can be compressed into a directory
|
||||
function write_compressible
|
||||
{
|
||||
typeset dir=$1
|
||||
typeset megs=$2
|
||||
typeset nfiles=${3:-1}
|
||||
typeset bs=${4:-1024k}
|
||||
typeset fname=${5:-file}
|
||||
|
||||
[[ -d $dir ]] || log_fail "No directory: $dir"
|
||||
|
||||
# Under Linux fio is not currently used since its behavior can
|
||||
# differ significantly across versions. This includes missing
|
||||
# command line options and cases where the --buffer_compress_*
|
||||
# options fail to behave as expected.
|
||||
if is_linux; then
|
||||
typeset file_bytes=$(to_bytes $megs)
|
||||
typeset bs_bytes=4096
|
||||
typeset blocks=$(($file_bytes / $bs_bytes))
|
||||
|
||||
for (( i = 0; i < $nfiles; i++ )); do
|
||||
truncate -s $file_bytes $dir/$fname.$i
|
||||
|
||||
# Write every third block to get 66% compression.
|
||||
for (( j = 0; j < $blocks; j += 3 )); do
|
||||
dd if=/dev/urandom of=$dir/$fname.$i \
|
||||
seek=$j bs=$bs_bytes count=1 \
|
||||
conv=notrunc >/dev/null 2>&1
|
||||
done
|
||||
done
|
||||
else
|
||||
log_must eval "fio \
|
||||
--name=job \
|
||||
--fallocate=0 \
|
||||
--minimal \
|
||||
--randrepeat=0 \
|
||||
--buffer_compress_percentage=66 \
|
||||
--buffer_compress_chunk=4096 \
|
||||
--directory=$dir \
|
||||
--numjobs=$nfiles \
|
||||
--nrfiles=$nfiles \
|
||||
--rw=write \
|
||||
--bs=$bs \
|
||||
--filesize=$megs \
|
||||
--filename_format='$fname.\$jobnum' >/dev/null"
|
||||
fi
|
||||
}
|
||||
|
||||
function get_objnum
|
||||
{
|
||||
typeset pathname=$1
|
||||
typeset objnum
|
||||
|
||||
[[ -e $pathname ]] || log_fail "No such file or directory: $pathname"
|
||||
objnum=$(stat -c %i $pathname)
|
||||
echo $objnum
|
||||
}
|
||||
|
||||
#
|
||||
# Synchronize all the data in pool
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user