Modern bir sistemde, disk sıkıştırmayı kullanmak bana daha iyi bir genel performans sağlayacak mı?


10

CPU artışlarının bir süredir disk hızını aştığı görülüyor. Modern çift çekirdekli Intel / AMD CPU ve tek bir ortalama SATA diske sahip bir masaüstü veya dizüstü bilgisayar varsayarsak, diskin çoğunda sıkıştırma yapmak daha iyi bir genel performans sağlar mı? Temelde, azaltılmış disk bant genişliği, artan CPU yükünü telafi etmekten daha mı fazla? Eminim asıl cevap “ne yaptığınıza bağlıdır”. Bu soruyu sorarak, bu boruyu yapan birisinin olmasını ve bazı örnekler veya tuzaklar vermeyi umuyorum.


performans tanımlansın mı? Hız artışı veya boşluk artışı gibi? Muhtemelen herhangi bir hız artışı fark etmeyeceksiniz, ancak yedek baytları kesinlikle yararlı bulacaksınız! :-p
Christopher Lightfoot

Yanıtlar:


9

Evet, disk sıkıştırma belirli koşullar altında daha iyi performans sağlayabilir:

  • Uygulamanız disk çıkışına bağlıdır: modern CPU'lar ve (de) sıkıştırma algoritmaları, uzun aktarımlarda modern disklerden çok daha yüksek bant genişliğinde çalışabilir. Bu durumda disk plakalarına gidip gelen veri miktarındaki herhangi bir azalma, bu durumda bir kazançtır
  • Disk plakalarına aktarılan verilerin aktarım sürelerindeki farktan (sıkıştırılması) daha az zaman alır ve yedeklemek için CPU döngüleriniz vardır

Her iki yeşil alan tasarımının da hem ZFS hem de Btrfs'nin sıkıştırma hükümlerini içermesinin bir nedeni var.

HPC alanında, bir uygulama bellekten diske denetim noktasını işaretlediğinde, CPU'lar çoğu zaman hiçbir işe yaramaz. Bu kez aslında saf bir ek yük. Bu zamanı azaltmak için CPU'ların herhangi bir şekilde kullanılması bir kazançtır.


Medya akış diskleri, yığın boyutu yeterince büyük olduğundan, faydaların gerçekleştiği tek yerdir. Standart işletim sistemi diskleri * her zaman bir darbe alır.
Ryaner

5
Medya akışı, depolama sistemi düzeyinde sıkıştırma için zorlayıcı bir uygulama değildir . Veriler, uygulamaya çok daha iyi bir formatta zaten sıkıştırılmış olmalıdır.
Phil Miller

5

Disk sıkıştırma size asla daha iyi performans vermez.

Hızlı modern CPU'lar nedeniyle size neredeyse hiç ceza vermeyebilir , ancak bu tamamen farklı bir şeydir.

Diske / diske daha az veri aktarmak zorunda kaldığınızda performansı artırabilirsiniz; ancak büyük veri aktarımları neredeyse hiç bir G / Ç darboğazı değildir: gerçek darboğazlar arama süresi ve gecikme süresidir. Modern sabit diskler, büyük dosyalarla sürekli veri aktarımı konusunda gerçekten hızlıdır, onları yavaşlatan şey, diskin her yerinden küçük aktarmalardır.

Bazı senaryolar:

  • Medya dosyaları. Bunlar genellikle kendi başlarına sıkıştırılmış durumdadır (JPEG, MPEG, MP3), bu yüzden onları dosya sistemi düzeyinde sıkıştırmak hiç yardımcı olmaz; bunun yerine işleri daha da kötüleştirecektir, çünkü CPU kaynaklarının bunları kodlamak / kodunu çözmek için zaten gereklidir.
  • Veritabanları. Bunlar genellikle küçük rastgele patlamalarla okunur / yazılır, bu nedenle bunları sıkıştırmanın hiçbir faydası olmaz, aynı zamanda DBMS'nin erişmek için gereken fiziksel verilerin diskte nerede olduğunu düzgün bir şekilde belirleyememesi nedeniyle performansı düşürür. saklanmış.
  • Sayfa dosyası. Bu genellikle oldukça büyüktür, ancak işletim sisteminin üzerinde çok küçük veri yığınlarını ele alması ve bunu çok hassas bir şekilde yapması gerekir ("X'i fiziksel adres X'de okuyun"); sıkıştırmak genellikle mümkün değildir, ancak olsa bile, tam bir zaman ve kaynak kaybı olur: bu dosyanın "tam rastgele veri" doğası nedeniyle neredeyse sıfır sıkıştırma sağlar.

1
Yani diskten daha az veri aktarmanın faydası yok mu?
kbyrd

Bunu cevaplamak için düzenlendi :-)
Massimo

3
asla çok dar görüşlü bir kelime değildir. Diskten ve pci veri yolu üzerinden ham bant genişliği yaptığım işlerin birçoğu ile genellikle darboğaz. Sıkıştırma performansa çok yardımcı olabilir, özellikle de bahsettiğiniz diğer darboğazları kaldırmak için önlemler aldıysanız
JamesRyan

1
Ayrıca "asla" demekten çekinirim. Disk bant genişliğinin darboğaz olduğu senaryolar olabilir. Ama muhtemelen bunun tipik bir durum olmadığı konusunda haklısınız.
sleske

2
disk i / o veri tabanlarında neredeyse her zaman bir darboğaz
Nick Kavadias

3

Uygulama başına düzeyde bunu yapan, video sıkıştırma gibi belirli durumlar vardır - ham HD kalitesinde videoyu bir dsk'den yeterince hızlı okuyamayan bir sistem, sıkıştırılmış bilgileri okuyabilir ve bellek ve CPU gücünü kullanarak genişletebilir . Bunun diğer özel durumlar için de geçerli olmamasının bir nedeni yoktur, ancak bu en iyi uygulama düzeyinde ele alınabilir, böylece kullanılan sıkıştırma yöntemleri amaçlarına göre optimize edilir.

Tüm verim artarsa, dekompresyon performans ek yükünün faydalı olduğunu unutmayın, bu nedenle fikir elden çıkarılmayacaktır - Henüz sıkıştırmayı artıran genel amaçlı performans için hazır olduğumuzu sanmıyorum, ancak teorik olarak mümkün başka bir yerde artırmak için fazla (CPU ve bellek) kaynak ticareti yapmak (sabit sürücüden okunan toplam veri)


3

Kendi sorunuzu cevapladınız! bu gerçekten de cevaba bağlıdır.

Yapabileceğim en iyi genelleme:

Disk okuma kısıtlı bir veritabanı uygulamanız varsa , evet! performans daha iyidir.

Bir masaüstü / dizüstü bilgisayarda yapacağınız çoğu etkinlik için durumun bu olduğunu düşünmüyorum.

Etki alanımda (SQL Server), yoğun okuma yükleri altında veritabanlarının bildirilmesinin sıkıştırma kullanıldığında daha iyi performans alabileceğini biliyorum. Aynı şeyin mysql için de geçerli olduğunu biliyorum.

Microsoft'un SQL Server 2008'deki sıkıştırma özellikleri hakkında bir tanıtım belgesi bulunmaktadır . DBA'nız yoksa tam olarak hafif okuma yapmazsınız, ancak genellememi destekleyen bir grafik:

alternatif metin


0

CPU hızları her zaman disk hızlarından daha yüksek olmuştur. IMHO, sıkıştırma yükünü artıracak ve böylece performansı azaltacaktır.


ama ne yaptığınıza bağlıdır :-)
Josh

Nasıl yani? Artan bir ek yük, artan bir ek yüktür. Para harcayarak para satın alamazsınız (sahte para olmadığı sürece, ancak bu başka bir hikaye).
Mark Henderson

Sıkıştırma nedeniyle daha küçük olup olmadıklarına bakılmaksızın dosyaları sıkıştırma ve açma işlevi, performans ek yükü getirecektir. Dosya diskten belleğe okunduğunda sıkıştırılmış olması gerekir. Bellekten diske yazıldığında sıkıştırılması gerekir.
joeqwerty

3
ancak cpu'nuz hiçbir şey yapmıyorsa ve disk bant genişliği darboğaz ise, cpu'nuz daha fazla iş yapar ancak genel performans artar. Bu gerçekten ne tür verileri geri aldığınıza ve bu veriyle ne yaptığınıza bağlıdır.
JamesRyan

0

OSX ile ilgili dün buna benzer bir şey okuyordum ve dosya sisteminin sıkıştırılması - Temel olarak cevap sıkıştırmak istediğiniz şey etrafında dönüyor - bu örnekte "FAT" verileri hakkında konuşuyor; dosya yapıları, özellikleri, meta verileri vb. birlikte depolandığında yerden tasarruf etmek için sıkıştırılabilir ve her dosya için veri bulmak için her yerde baş aramaktan daha hızlı bir şekilde cpu'ya okunabilir ...

Her neyse, böyle şeyler düşünüyorsan :-p

Ancak sıkıştırma yalnızca disk alanından tasarruf etmekle ilgili değildir. Ayrıca azaltılmış G / Ç gecikmesi ve bant genişliği için CPU döngülerinin alım satımına klasik bir örnektir. Geçtiğimiz birkaç on yılda, CPU performansı, disk performansının artmasından çok daha hızlı bir şekilde daha iyi hale geldi (ve kaynakları daha bol ve daha sonra daha fazla hesapladı). Modern sabit disk arama süreleri ve dönme gecikmeleri yine milisaniye cinsinden ölçülür. Bir milisaniyede, 2 GHz CPU iki milyon döngüden geçer. Ve sonra, elbette, dikkate alınması gereken gerçek veri aktarım süresi var.

İşletim sistemi ve donanım genelinde çeşitli önbellekleme seviyeleri, bu gecikmeleri gizlemek için güçlü bir şekilde çalışır. Ancak bu bitlerin bu önbellekleri doldurmak için bir noktada diskten çıkmaları gerekir. Sıkıştırma, daha az bitin aktarılması gerektiği anlamına gelir. Normal kullanımda modern çok çekirdekli bir Mac'te neredeyse komik CPU kaynakları göz önüne alındığında, sıkıştırılmış bir yükü diskten aktarmak ve içeriğini belleğe açmak için CPU'yu kullanmak için gereken toplam süre genellikle zamandan çok daha az olacaktır. verilerin sıkıştırılmamış biçimde aktarılması gerekir.

Bu, daha az veri aktarmanın potansiyel performans avantajlarını açıklar, ancak dosya içeriğini depolamak için genişletilmiş özniteliklerin kullanılması da işleri daha hızlı hale getirebilir. Her şeyin veri lokalitesi ile ilgisi vardır.

Bir sabit diski büyük miktarda veri aktarmaktan daha yavaşlatan bir şey varsa, kafalarını diskin bir bölümünden diğerine taşır. Her hareket, kafanın hareket etmeye başlaması, sonra durması, daha sonra istenen konuma doğru şekilde yerleştirildiğinden emin olunması, ardından dönen diskin istenen bitleri altına koymasını bekleyin. Bunların hepsi gerçek, fiziksel, hareketli parçalardır ve danslarını olduğu kadar hızlı ve verimli bir şekilde yapmaları şaşırtıcıdır, ancak fiziğin sınırları vardır. Bu hareketler, sabit diskler gibi dönel depolama için gerçek performans katilleridir.

HFS + birim biçimi, dosyalar hakkındaki tüm bilgilerini (meta veriler) diskteki iki birincil konumda depolar: dosya tarihlerini, izinleri, sahipliği ve diğer pek çok şeyi depolayan Katalog Dosyası ve "adlandırılmış çatalları depolayan Özellikler Dosyası" ."

HFS + 'daki genişletilmiş öznitelikler, Öznitelikler Dosyasında adlandırılmış çatallar olarak uygulanır. Ancak çok büyük olabilen kaynak çatallarının aksine (dosya sistemi tarafından desteklenen maksimum dosya boyutuna kadar), HFS + 'daki genişletilmiş öznitelikler, Öznitelikler Dosyasında "satır içi" olarak depolanır. Uygulamada, bu, öznitelik başına yaklaşık 128 baytlık bir sınır anlamına gelir. Ancak aynı zamanda, disk verisinin gerçek verileri almak için diskin başka bir bölümüne gitmesi gerekmediği anlamına gelir.

Tahmin edebileceğiniz gibi, Katalog ve Öznitelik dosyalarını oluşturan disk bloklarına sık sık erişilir ve bu nedenle çoğu yerde bir önbellekte olma olasılığı daha yüksektir. Tüm bunlar, B-ağacı yapılı Katalog ve Nitelikler dosyalarında hem meta verileri de dahil olmak üzere bir dosyanın eksiksiz bir şekilde depolanmasını genel bir performans kazanması için yapar. 25 bayta kadar balon yapan sekiz baytlık bir yük bile, normal veri depolama için ayırma bloğu boyutundan daha az olduğu ve tümü Nitelikler Dosyasındaki bir B-ağacı düğümü içine sığdığı sürece endişe verici değildir. İşletim sistemi yine de bütünüyle okumak zorundadır.

Snow Leopard'ın azaltılmış disk ayak izine (örneğin, gereksiz yerelleştirmelerin ve "designable.nib" dosyalarının kaldırılmasına) başka önemli katkılar da vardır, ancak HFS + sıkıştırması teknik olarak en ilginç olanıdır.

Gönderen: http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/3


Bunu daha önce düşündüm, ancak tam olarak bu makale bu soruyu göndermemi istedi.
kbyrd

lol. İlginç :-p
Christopher Lightfoot

0

Microsoft Disk sıkıştırma çirkin OLD. 80'li yıllardan itibaren ARJ yöntemi ile orantılı değildir. Ancak, Microsoft'un sıkıştırması bile çok yavaş (dizüstü bilgisayar) sabit disklerde daha iyi performans sağlayabilir. Özellikle Write-caching ve aşırı yazmaların önlenmesi için yeterli RAM varsa.

Yazma işlemi rasgele erişimli herhangi bir sıkıştırma yönteminin zayıf noktasıdır.

Sıkıştırılmış sürücü istiyorsanız, bir tür Linux'a geçmeniz daha iyi olur.

Disk sıkıştırma, RAM sürücüleri için de çok uygundur, nedenini söylemenize gerek yoktur.


1
Windows ve Linux tabanlı çözümler arasında bazı destekleyici veriler, belki de performans karşılaştırması ekleyebilir misiniz?
psarossy

Evet, 3.5 yaşında bir iş parçacığını çarptıracaksanız, bazı yeni, zor gerçekler getirmeniz daha iyi olur.
MDMarra

-1

Şüphesiz ki. Sıkıştırma ve açma, disk ve CPU'dan daha fazlasını içerir; özellikle, sayfa hataları açısından gerçekten zarar verecek olan, belleğe ve bellekten (sıkıştırma olmadan standart aktarım ek yüküne ek olarak) çok fazla veri aktarımı olacaktır.


-1

Kısacası, hayır, muhtemelen performansta kazanamazsınız.

Sıkıştırma, depolama alanınızın performansını artıracak, ancak işlemci hızınızı önemli ölçüde düşürecektir. Muhtemelen ne tür dosyaları açacağınıza gelir. Sadece word, excel ve diğer temel dosya türleriyle uğraşıyorsanız, devam edin ve sıkıştırın. Tek tek dosyalar daha hantalsa, daha fazla zamanınızı feda edeceksiniz.

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.