Apa cara tercepat untuk menyalin file jarang? Metode apa yang menghasilkan file terkecil?

11

LATAR BELAKANG : Saya menyalin gambar VM qcow2 yang jarang yang berukuran 200GB, tetapi memiliki alokasi blok 16GB. Saya sudah mencoba berbagai metode untuk menyalin file jarang ini dalam server yang sama dan memiliki beberapa hasil awal. Lingkungan adalah RHEL 6.6 atau CentOS 6.6 x64.

ls -lhs srcFile 
16G -rw-r--r-- 1 qemu qemu 201G Feb  4 11:50 srcFile

Via cp - kecepatan terbaik

cp --sparse=always srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 1:02 (mm:ss) 

Via dd - pemain terbaik secara keseluruhan

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/21GB actual, bloat: 5GB
    Copy time: 2:02 (mm:ss)

Melalui cpio

mkdir tmp$$
echo srcFile | cpio -p --sparse tmp$$; mv tmp$$/srcFile dstFile
rmdir tmp$$
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 9:26 (mm:ss)

Melalui rsync

rsync --ignore-existing -aS srcFile dstFile
Performance Notes:
    Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
    Copy time: 24:49 (mm:ss)

Melalui virt-sparsify - ukuran terbaik

virt-sparsify srcFile dstFile
    Copied 200GB max/16GB actual VM as 200GB max/16GB actual, bloat: 0
    Copy time: 17:37 (mm:ss)

Memvariasikan Ukuran Blok

Saya khawatir tentang 'mengasapi' selama menyalin dd (ukuran file meningkat dari aslinya), jadi saya memvariasikan ukuran blok. Saya menggunakan 'waktu' untuk mendapatkan total waktu dan CPU%. File asli dalam kasus ini adalah file 200GB jarang 7,3GB:

4K:   5:54.64, 56%, 7.3GB
8K:   3:43.25, 58%, 7.3GB
16K:  2:23.20, 59%, 7.3GB
32K:  1:49.25, 62%, 7.3GB
64K:  1:33.62, 64%, 7.3GB
128K: 1:40.83, 55%, 7.4GB
256K: 1:22.73, 64%, 7.5GB
512K: 1:44.84, 74%, 7.6GB
1M:   1:16.59, 70%, 7.9GB
2M:   1:21.58, 66%, 8.4GB
4M:   1:17.52, 69%, 9.5GB
8M:   1:10.92, 76%, 12GB
16M:  1:17.09, 78%, 16GB
32M:  2:54.10, 90%, 22GB

PERTANYAAN : Dapatkah Anda memverifikasi bahwa saya telah mengidentifikasi metode terbaik untuk menyalin file jarang untuk mendapatkan kinerja keseluruhan terbaik? Setiap saran tentang cara melakukan ini dengan lebih baik disambut seperti kekhawatiran Anda mungkin dengan metode yang saya gunakan.

Steve Amerige
sumber
Satu-satunya yang saya coba, mengingat upaya terpuji Anda, adalah rsync dengan opsi --sparse. Mungkin juga ukuran blok yang berbeda dalam dd akan meningkatkan kecepatan atau mengasapi.
mpez0
tar juga bagus untuk dicoba
Olivier Dulac
@OlivierDulac Saya mencoba tar, tapi ini adalah pemain yang sangat buruk sehingga saya bahkan tidak memasukkannya. Seharusnya begitu. Di atas adalah salinan lokal. Saya akan menambahkan data kinerja penyalinan jaringan untuk jaringan 10Gbps, menyalin di subnet yang sama. Setelah saya memilikinya, saya pikir saya akan memiliki cukup data untuk menarik kesimpulan yang bisa diterapkan untuk yang merupakan pemain terbaik secara keseluruhan.
Steve Amerige
rsync juga mendukung --sparse untuk melakukan gaya penyalinan ini. Anda mungkin ingin mencobanya. Juga memiliki manfaat tambahan karena dapat diukur pada penyalinan lokal dan jaringan.
Travis Campbell
@ TravisCampbell Saya menambahkan data untuk rsync. Itu adalah performa terburuk dari semua tes yang saya jalankan.
Steve Amerige

Jawaban:

5

Dari pembandingan di atas, sepertinya menggunakan dd pada perangkat keras target kami dengan ukuran 64K memberi kami hasil keseluruhan terbaik mengingat waktu salin dan mengasapi:

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse
Steve Amerige
sumber
2
Halo Steve, tolong bagi pertanyaan menjadi jawaban, bagaimana situs stackexchange ini bekerja?
bummi