rsync, dosyaları nfs-share'den yerel dizine kopyalarken cp ile karşılaştırıldığında çok yavaş (faktör 8 ila 10)


17

VM depolama alanımız için yeni yedekleme sunucusu olması gereken yeni kurulmuş bir Ubuntu sunucum var. Sunucu, SAN'a bağlanmak için kullanılan 2'si 10Gbit (aslında en yeni sürücüye sahip bir intel x540-T2) olmak üzere 4 nike sahiptir. Nfs-paylaşım yerel olarak monte edilmiş ve ~ 30 dosyaları, yaklaşık 15 vm-görüntüleri ve karşılık gelen günlük dosyaları ile bir dizini kopyalarken hız farkları karşılaştırıldı. Görüntüler 8 GB ile 600 GB arasındadır.

Kullanımı:

cp -rf /mnt/nfs-share /backup-storage/

bmon sonuç olarak yaklaşık 600 MiB / s gösterir.

kullanma

rsync -av /mnt/nfs-share /backup-storage/

bmon ilk saniyelerde bazı paketleri gösterir, yaklaşık 30 saniye durur ve yaklaşık 60-75 MiB / s'ye kadar birikir. CPU% 60 civarındadır.

rsyncAynı performansla kullanmak için neyi değiştirmeliyim / değiştirebilirim cp?

Yanıtlar:


20

Bence bu farklılıklar cpve arasında oldukça iyi bir şekilde kurulmuştur rsync. Bu makaleye referans olarak bakınız: rsync performansına bir bakış .

alıntı:
The four commands tested were:

    rsync $SRC $DEST
    echo $SRC | cpio -p $DEST
    cp  $SRC $DEST
    cat $SRC > $DEST/$SRC

The results for rsync, cpio, cp, and cat were:

user    sys     elapsed hog MiB/s   test
5.24    77.92   101.86  81% 100.53  cpio
0.85    53.77   101.12  54% 101.27  cp
1.73    59.47   100.84  60% 101.55  cat
139.69  93.50   280.40  83% 36.52   rsync

Kullandığım rsyncgünlük olarak. Durumu iyileştirmek için yapabileceğiniz şeyler var.

Örneğin, -Wanahtarı kullanmayı deneyebilirsiniz :

-W, --whole-file            copy files whole (w/o delta-xfer algorithm)

Ayrıca 3.x sürümlerine sahip olduğunuzdan emin olmanızı öneririm rsync. Daha yeni sürümlere geçtiğimizde gözle görülür gelişmeler oldu.


15

Rsync'i cp ile aynı performansa getirmenin yolu onu "cp" olarak hecelemektir.

İki efekt arasındaki fark, net etki aynı olsa bile önemlidir. Özellikle, rsync bir dosyanın veya dosyanın bir kısmının kopyalanıp kopyalanmayacağını görmek için bir sürü okuma yapar.

Rsync'i kullanmak istemenizin bir nedeni var mı? Cp "körü körüne" kopyaladığı için daha yüksek ham performans göreceksiniz. Bir dizi tetikleme koşulu için, rsync'in "delta-transfer" mekanizması kullanılırsa, aktarım hızlarının düştüğünü ve CPU kullanımının rapor ettiğiniz şekilde hemen hemen arttığını göreceksiniz.


Davranışın farkındayım, ama böyle bir etki beklemiyordum. CPU-Power ve IOPS rsync'in, kopyalanacak dosya mevcut değilse, özellikle en az 300 MiB / s'de yapılması gerektiğini düşündüm. Henüz testi bitirmedim. Rsync ile yedekleme daha rahat olurdu, ama ben de cp, dd veya akla gelen her şeyi kullanarak bir komut dosyası yazabilirsiniz. Şimdi neyin en uygun olduğunu değerlendirmek için farklı dosya sistemlerindeki çeşitli olasılıkları test etmek istiyorum.
soulpath

7
Bana ampirist diyebilirsiniz, ama beklentileriniz ve gerçekliğiniz aynı fikirde değilse, genellikle yanlış olan gerçeklik değildir. Bu cezayı alabilmenizin bir düzine nedeni var; bir SAN üzerine serpiştirme okuma ve yazma bile yazılımın ince ayrıntılarına bağlı olarak çarpıcı performans hitleri olabilir.
msw

3
Gerçeklik hakkında şüphe etmedim, sadece rsync- ama bu farklılıklar nedeniyle cp ve bazı sağlama toplamları kullanarak bir senaryo yazmaya devam edeceğim. Tavsiyeniz için teşekkürler!
soulpath

Hayır, sadece ağa bağlı dosya sistemlerinde rsync kullanmayın. Bilgisayarınızın tüm dosyayı indirmesi gerekir, böylece rsync'in tüm avantajlarını kaybedersiniz.
Giacomo Catenazzi

Ne yazık ki bu cevap ayrıntılı olarak yanlış. "Yerel" dosya sistemleri arasında kopyalama yaparken (ve evet, bu bağlamda bir NFS montajı yerel bir dosya sistemidir), bu ters üretim işlemini açıkça etkinleştirmediğiniz sürece kopyalama sırasında rsync hedef dosyayı okumaz--whole-file . Bu durumda çok yavaş gibi cp.
roaima
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.