public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Jochen Plumeyer" <jochen.plumeyer@uhlmann-ludewig.de>
To: <pve-devel@lists.proxmox.com>
Subject: [pve-devel] PATCH pve-zsync compress option for gz-compressed sync transfers
Date: Thu, 28 Jan 2021 11:51:22 +0100	[thread overview]
Message-ID: <00da01d6f563$8448f6b0$8cdae410$@uhlmann-ludewig.de> (raw)

Hi everybody,

according to my measurements, gz-compressing zfs syncs can reduce about 70%
of data traffic during pve-zsync operation.

Hence, the option "--compress" has been added in this patch.
If enabled, the existing traffic is directed through " | gzip -c " --SYNC
STREAM--> "gzip -d |" pipe commands.

Testing has been done, today we will deploy it in production.

Merging would be appreciated.

Cheers,

Jochen Plumeyer

diff --git a/pve-zsync b/pve-zsync
index 5c95955..57f722e 100755
--- a/pve-zsync
+++ b/pve-zsync
@@ -64,6 +64,7 @@ if (defined($command) && $command ne 'help' && $command ne
'printpod') {
     check_bin ('zfs');
     check_bin ('ssh');
     check_bin ('scp');
+    check_bin ('gzip');
 }
 
 $SIG{TERM} = $SIG{QUIT} = $SIG{PIPE} = $SIG{HUP} = $SIG{KILL} = $SIG{INT} =
sub {
@@ -229,6 +230,7 @@ sub parse_argv {
 	dest => undef,
 	source => undef,
 	verbose => undef,
+	compress => undef,
 	limit => undef,
 	maxsnap => undef,
 	name => undef,
@@ -245,6 +247,7 @@ sub parse_argv {
 	'dest=s' => \$param->{dest},
 	'source=s' => \$param->{source},
 	'verbose' => \$param->{verbose},
+	'compress' => \$param->{compress},
 	'limit=i' => \$param->{limit},
 	'maxsnap=i' => \$param->{maxsnap},
 	'name=s' => \$param->{name},
@@ -446,6 +449,7 @@ sub format_job {
     $text .= " --limit $job->{limit}" if $job->{limit};
     $text .= " --method $job->{method}";
     $text .= " --verbose" if $job->{verbose};
+    $text .= " --compress" if $job->{compress};
     $text .= " --source-user $job->{source_user}";
     $text .= " --dest-user $job->{dest_user}";
     $text .= " --properties" if $job->{properties};
@@ -967,6 +971,8 @@ sub send_image {
     }
     push @$cmd, '--', "$source->{all}\@$source->{new_snap}";
 
+    push @$cmd, \'|', 'gzip', '-c' if $param->{compress};
+
     if ($param->{limit}){
 	my $bwl = $param->{limit}*1024;
 	push @$cmd, \'|', 'cstream', '-t', $bwl;
@@ -977,8 +983,10 @@ sub send_image {
 
     push @$cmd, \'|';
     push @$cmd, 'ssh', '-o', 'BatchMode=yes',
"$param->{dest_user}\@$dest->{ip}", '--' if $dest->{ip};
+    push @$cmd, \'"', 'gzip', '-d', \'|' if $param->{compress};
     push @$cmd, 'zfs', 'recv', '-F', '--';
     push @$cmd, "$target";
+    push @$cmd, \'"' if $param->{compress};
 
     eval {
 	run_cmd($cmd)
@@ -1172,6 +1180,10 @@ $PROGNAME sync -dest <string> -source <string>
[OPTIONS]\n
 
 		print out the sync progress.
 
+	-compress   boolean
+
+		use gzip compression for sync transfer
+
 	-properties	boolean
 
 		Include the dataset's properties in the stream.




             reply	other threads:[~2021-01-28 10:52 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-28 10:51 Jochen Plumeyer [this message]
2021-02-10 12:06 ` Fabian Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='00da01d6f563$8448f6b0$8cdae410$@uhlmann-ludewig.de' \
    --to=jochen.plumeyer@uhlmann-ludewig.de \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal