Cuma, Nisan 23, 2010

Multi-threaded gzip

yedekleme sistemleri ne kadar gelişmiş olursa olsun, benim için hiç bir şey tar/gzip ikilisi ile harici bir diske alınan yedek kadar iç rahatlatıcı olamaz :)

fakat yedeklenmesi gereken yüz binlerce dosya ve yüzlerce GB veriniz varsa, sahip olduğunuz işlemcilerin veya coreların tümünden faydalanamıyor olmak gerçekten çok fazla zaman kaybı ve can sıkıntısına sebep olabilir. çünkü gzip Multi-threaded çoklu işlem/ci desteğine sahip değil (en azından solaris 5.9 durum böyle).

4 işlemciye sahip bir sun sunucu üzerinde yaklaşık 600GB boyutunda ve binlerce dosyadan oluşan bir alanın yedeğini almak neredeyse yarım gün sürüyordu. bu işlem boyunca sistem sahip olduğu 4 işlemciden sadece birisini kullanıyor, ben bitmesi için dört gözle beklerken diğer 3 işlemci tembel tembel yatıyordu.

sıkıştırma işlemlerinde, sistemin sahip olduğu bütün işlemcilerden en fazla faydayı nasıl sağlarım sorusunu araştırırken gördüğüm en kullanıbilir iki yöntemi sizlerle de paylaşmak istedim.

1) farklı terminaller üzerinden paralel işlemler başlatmak: eğer, gzip ile arşivliyeceğiniz dosyalar; herbir işlem için bölebileceğiniz klasörler üzerindeyse veya dosyalar find ile gruplanabilir şekildeyse bu yöntemden faydalanabilirsiniz.

bu yöntemde, sahip olduğunuz işlemci adedince farklı terminaller açıp her birinden farklı alanların arşivleme işlemini başlatıyorsunuz. fakat benim gibi dağınık şekilde onbinlerce dosyanız varsa bunları belli bir mantık çerçevesinde bölüp farklı terminaller üzerinden arşivlemek pekde mümkün olamıyor.

2) kaynak dosyalarını http://zlib.net/pigz/ adresinde bulabileceğiniz pigz programı.

sıkıştırma - açma ve hatta parametler bakımından tamamen gzip ile uyumlu olan bu program gzip in multi-processor / multi-core destekli versiyonu.

kullanmak için tek yapmanız gerek sisteminize uygun versiyonunu yuklemek veya sisteminizde kaynağından derlemek ve gzip yerine pigz i kullanmak.

ben sunfreeware.com adresinden sistemime uygun olan "pigz-2.1.5-sol9-sparc-local.gz" dosyasını indirdim ve gunzip ile dosyayı açtıktan sonra
pkgadd -d pigz-2.1.5-sol9-sparc-local komutu sistemime yükledim.

daha önce yaklaşık yarım gün sürdüğünden bahsettiğim işlemi aşağıdaki şekilde pigz ile başlattım ve oratlama 7 saatde yedekleme işlemi tamamlandı.

tar cvXf /yedek/exlude.list - /dfiles |/usr/local/bin/pigz -4 -c > /tmp/dfiles_`date '+%Y%m%d'`.tar.gz

işlem sonucunda oluşan dosya gunzip ile sorunsuz şeklilde açıldı. yanlız, gunzip da tıpkı gzip gibi çoklu işlemci desteğine sahip değil. birden fazla işlemci ile açma işlemi yapabilmek için paketle birlikte gelen unpigz komutunu kullanabilirsiniz.

Hiç yorum yok: