Apakah opsi kompresi -z dengan rsync mempercepat cadangan

37

Dalam rsync, -zakan memampatkan data file selama transfer.

Jika saya mengerti benar, -zkompres file sebelum transfer dan kemudian dekompres setelah transfer. Apakah waktu berkurang selama transfer karena kompresi melebihi waktu untuk kompresi dan dekompresi?

Apakah jawaban untuk pertanyaan tergantung pada apakah saya membuat cadangan ke hdd eksternal melalui usb (2.0 atau 3.0), atau ke server dengan ssh melalui internet?

Tim
sumber
Juga ingat jika file terkompresi tidak berbeda jauh dalam ukuran dari file asli, ini bisa menjadi biaya overhead yang sangat besar.
heemayl
1
Untuk menguraikan apa yang dikatakan heemayl, jika konten sebagian besar materi yang sudah dalam format terkompresi (jpeg, mpeg, paket distro, dll) kompresi jauh lebih efektif. Saya perhatikan man rsyncbahwa sebenarnya ada daftar sufiks file yang tidak akan dikompres bahkan dengan -z(lihat --skip-compress).
goldilocks

Jawaban:

46

Itu pertanyaan umum. Apakah kompresi dan dekompresi pada titik akhir meningkatkan bandwidth efektif suatu tautan?

Bandwith (yang dirasakan) yang efektif dari suatu tautan yang melakukan kompresi dan dekompresi pada titik akhir adalah fungsi dari:

  1. seberapa cepat Anda dapat memampatkan (kecepatan CPU Anda)
  2. bandwidth aktual jaringan Anda

Fungsi ini dijelaskan dengan grafik 3D ini, yang mungkin ingin Anda konsultasikan untuk situasi khusus Anda:

masukkan deskripsi gambar di sini

Grafik tersebut berasal dari artikel Compression Tools Compared 2005 oleh http://www.linuxjournal.com/ .

PSkocik
sumber
1
Jenis data Anda juga merupakan faktor utama (faktor # 3 tidak ada dalam daftar). Artikel yang ditautkan menggunakan campuran data yang khas. Milik Anda mungkin tidak khas. Jika Anda menyinkronkan file ZIP 100% (atau data pra-kompresi), Anda mungkin tidak ingin kompresi. Jika Anda menyinkronkan file teks 100% Anda mungkin lebih cepat untuk kompres bahkan jika jaringan Anda cepat dan CPU Anda lambat. Timbang ketiga faktor.
Richard Brightwell
13

Jika Anda memiliki koneksi yang sangat lambat (pikirkan GPRS), Anda pasti ingin mengompres data Anda sebanyak mungkin, jika tidak, koneksi Anda akan memperlambat segalanya.

Jika Anda memiliki CPU yang sangat lambat dan koneksi yang cepat (seperti perangkat jaringan tertanam) Anda biasanya tidak ingin mengompres data Anda, jika tidak, CPU Anda akan memperlambat segalanya.

michas
sumber
3

Bergantung pada seberapa kompresibel data Anda dan kekuatan pemrosesan sumber dan tujuan Anda. Cadangan disk lengkap dalam pengalaman saya akan memampatkan sekitar 30-50% dari ukuran aslinya, jadi mungkin layak untuk mencobanya. Kalau tidak, jangan repot-repot dengan kompresi. Mungkin layak untuk menguji tingkat kompresi Anda dengan pigz -c <your file> | wc -cdan membandingkan ukuran yang dikembalikan dengan ukuran asli Anda.

RAKK
sumber
2

Ya, kecepatan koneksi menentukan apakah kecepatan membaik. Ini akan menjadi overhead hanya untuk cadangan USB, karena bukan disk mengembang data tetapi proses yang menulis data. Jadi mesin yang sama yang membaca dan mengempisnya, harus mengembang dan menulisnya juga. Rsync masih dua proses saya pikir tetapi memori Anda untuk menyerahkan data dari satu proses ke proses lainnya cukup cepat dan cpu perlu lebih banyak waktu mengompresnya (saat membacanya ke dalam memori yang sama yang kemudian menyerahkannya :).

Kompresi hanya membantu ketika Anda memiliki pengirim dan penerima rsync dan beberapa jaringan yang lebih lambat di antaranya. 1Gbit mungkin sudah cukup cepat ketika Anda memiliki NAS lokal misalnya, 10Gbit sudah kecepatan SATA mentah. Jadi kompresi hanya diperlukan ketika Anda memiliki konektivitas 100Mbit atau kurang dan itu hanya masuk akal ketika data terkompresi dapat dikompres.

Saya pikir rsync mungkin memperhatikan bahwa itu tidak berjalan pada dua mesin tetapi satu dan melompati kompresi tetapi tidak yakin.

René Schwietzke
sumber
1

tl; dr Melalui tautan transfer yang lambat, kompres, jika tidak, jangan. Di bawah ini adalah tes kecepatan kompresi, tautan ke alat konversi bandwidth dan beberapa info.

Menggunakan kompresi dengan rsynchanya akan mempercepat jika tautan perantara "cukup lambat", yaitu jika mesin di satu ujung mampu menghasilkan aliran data terkompresi cukup cepat untuk menjenuhkan tautan komunikasi.

Jadi, apa tautan paling lambat di mana saya harus menggunakan kompresi untuk mendapatkan apa pun?

Berikut ini adalah tes yang sangat tidak ilmiah, yang akan menunjukkan seberapa cepat gzipdapat menghasilkan data, dan apa artinya apakah Anda harus memampatkan transfer massal jaringan Anda secara umum.

Input data akan mengubah hasil tes sangat . Saya menggunakan file biasa (!) Di komputer saya yang mungkin mewakili tipe data yang biasanya saya transfer melalui jaringan. Menggunakan /dev/zero(menghasilkan nol tanpa batas) akan menyesatkan karena aliran nol akan sangat mudah dikompres, dan menggunakan /dev/randomakan menyesatkan karena alasan yang berlawanan. Jadi alih-alih saya menggunakan file tar dari $HOME/localdirektori saya , yang berisi perangkat lunak yang saya instal di blog saya $HOME. File itu tidak terkompresi dengan sendirinya, tetapi berisi campuran file biner, file terkompresi kecil dan file sumber / teks, dan akan saya kompres dengan pengaturan default karena gzipakan menyusut 67% dari 64 MiB ke 22 MiB.

$ gzip -c local.tar | dd of=/dev/null
43092+4 records in
43093+1 records out
22063854 bytes transferred in 2.819 secs (7825741 bytes/sec)

Saya melakukan ini beberapa kali untuk mendapatkan perasaan tentang apa yang mungkin rata-rata, dan sampai sekitar 7800000 byte / s.

Lalu saya menggunakan kalkulator bandwidth jaringan untuk melihat bagaimana konversi ini. Dalam kasus khusus ini, ia berada tepat di bawah kapasitas tautan kabel "100Mb Ethernet", hanya lebih cepat daripada tautan internet "VDSL Download", sedikit lebih cepat daripada tautan nirkabel "802.11 [a / g]", dan di suatu tempat di antara "Bluetooth v3.0" (lebih lambat) dan "USB 2.0" (lebih cepat).

Ini berarti bahwa jika saya menggunakan kompresi lebih cepat dari itu, kompresi kemungkinan akan memperlambat transfer file.

rsyncmungkin tidak menggunakan pustaka yang sama persis seperti gzipuntuk melakukan kompresi, tetapi di atas akan memberi Anda sedikit petunjuk setidaknya.

rsyncmelakukan lebih dari kompresi, seperti yang Anda tahu, dan peningkatan kecepatan sebenarnya berasal dari hanya mentransfer [bit] file yang telah berubah.

Dalam pengalaman saya sendiri, menggunakan kompresi dengan rsynctelah menjadi kurang dan kurang bermanfaat selama 10 tahun terakhir, karena bandwidth jaringan telah meningkat (di mana saya).

Untuk melakukan backup inkremental, saya pasti akan merekomendasikan menyelidiki --link-destopsi (ini tidak ada hubungannya dengan apa yang ditransfer, hanya dengan bagaimana hal-hal disimpan pada target). Juga, jika Anda melakukannya melalui SSH, jangan gunakan kompresi jika koneksi SSH Anda sudah dikompresi, dan hanya kompres koneksi SSH (terowongan dll.) Yang melewati tautan lambat, untuk alasan yang sama seperti di atas.

Kusalananda
sumber