Seyrek bir dosyayı kopyalamanın en hızlı yolu nedir? En küçük dosya hangi yöntemle sonuçlanır?


11

ARKA PLAN : 200GB boyutunda ancak 16GB ayrılmış blokları olan seyrek bir qcow2 VM görüntüsünü kopyalıyorum. Aynı sunucu içinde bu seyrek dosyayı kopyalamak ve bazı ön sonuç almak için çeşitli yöntemler denedim. Ortam RHEL 6.6 veya CentOS 6.6 x64'tür.

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

Cp ile - en iyi hız

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 - En iyi genel performans

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)

Cpio ile

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)

Rsync ile

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)

Virt-sparsify ile - en iyi boyut

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

Değişken Blokboyutu

Ben dd kopyalama (orijinalinden dosya boyutu artışı) sırasında 'şişkinlik' hakkında endişelendim, bu yüzden blocksize değişti. Toplam zamanı ve CPU% 'sını almak için' zaman 'kullandım. Bu durumda orijinal dosya 7.3 GB seyrek 200 GB'lık bir dosyadır:

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

SORU : En iyi genel performansı elde etmek için seyrek bir dosyayı kopyalamak için en iyi yöntemleri belirlediğimi doğrulayabilir misiniz? Bunu daha iyi nasıl yapacağınıza dair herhangi bir öneri, kullandığım yöntemlerle ilgili herhangi bir endişeniz olduğu gibi memnuniyetle karşılanmaktadır.


Övgüye değer çabalarınız göz önüne alındığında deneyebileceğim tek kişi --sparse seçeneğiyle rsync. DD'deki farklı blok boyutunun hızını veya şişkinliğini arttırması da mümkündür.
mpez0

tar da denemek için iyi bir
Olivier Dulac

@OlivierDulac Katran denedim, ama bu o kadar zayıf bir performanstı ki ben bile dahil etmedim. Almalıyım. Yukarıdakiler yerel kopyalardır. Aynı alt ağa kopyalayarak 10Gbps ağ için ağ kopyalama performans verilerini ekleyeceğim. Bunu elde ettikten sonra, genel olarak en iyi performans gösteren, uygulanabilir bir sonuç çıkarmak için yeterli veriye sahip olacağımı düşünüyorum.
Steve Amerige

rsync ayrıca --sparse komutunu bu tarz bir kopya yapmak için destekler. Bunu denemek isteyebilirsiniz. Ayrıca hem yerel hem de ağ üzerinden kopyalamada ölçülebilir olma avantajı da vardır.
Travis Campbell

@TravisCampbell rsync için veri ekledim. Yaptığım tüm testlerin en kötü performansıydı.
Steve Amerige

Yanıtlar:


5

Yukarıdaki kıyaslamadan, 64K'lık bir blok boyutu ile hedef donanımımızda dd kullanmak, kopya süresi ve şişkinlik göz önüne alındığında bize en iyi sonucu verir:

dd if=srcFile of=dstFile iflag=direct oflag=direct bs=64K conv=sparse

2
Merhaba Steve, lütfen soruya bir cevap bölün, stackexchange siteleri nasıl çalışır.
bummi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.