Su un sistema moderno, l'uso della compressione del disco mi darà migliori prestazioni complessive?


10

Sembra che gli aumenti della CPU abbiano superato la velocità del disco per un po '. Supponendo che un desktop o un laptop con una moderna CPU Intel / AMD dual core e un singolo disco SATA medio, la compressione su gran parte del disco darebbe prestazioni complessive migliori? Fondamentalmente la ridotta larghezza di banda del disco compensa l'aumento del carico della CPU? Sono sicuro che la vera risposta è "dipende da cosa stai facendo". Facendo questa domanda, spero di avere qualcuno che abbia sistemato questa pipa e abbia fornito alcuni esempi o insidie.


definire le prestazioni? Come nell'aumento della velocità o nello spazio? Probabilmente non noteresti alcun aumento di velocità ma sicuramente troverai utili i byte di riserva! :-p
Christopher Lightfoot,

Risposte:


9

Sì, la compressione del disco può fornire prestazioni migliori in circostanze particolari:

  • La tua applicazione è legata al throughput del disco: le moderne CPU e gli algoritmi di (de) compressione possono funzionare con una larghezza di banda molto più elevata rispetto ai dischi moderni nei trasferimenti lunghi. Qualsiasi riduzione della quantità di dati che si spostano da o verso i dischi del disco è una vittoria in questa circostanza
  • Ci vuole meno tempo per (de) comprimere i dati che stanno andando sui dischi del disco rispetto alla differenza nei tempi di trasferimento, e hai cicli CPU da risparmiare

C'è una ragione per cui sia ZFS che Btrfs, entrambi recenti progetti in campo verde, includono disposizioni per la compressione.

Nello spazio HPC, quando un'applicazione esegue il checkpoint dalla memoria al disco, le CPU spesso non fanno nulla di utile. Questa volta è essenzialmente puro sovraccarico. Qualsiasi utilizzo delle CPU per ridurre questo tempo è una vittoria.


I dischi di streaming multimediale sono probabilmente l'unico posto in cui si verificano vantaggi poiché la dimensione del blocco è abbastanza grande. I dischi del sistema operativo standard * subiranno sempre un hit.
Ryaner,

5
Lo streaming multimediale non è un'applicazione convincente per la compressione a livello di sistema di archiviazione. I dati dovrebbero già essere compressi in un formato specifico dell'applicazione molto migliore.
Phil Miller,

5

La compressione del disco non ti darà mai prestazioni migliori.

Può darti quasi nessuna penalità a causa di CPU moderne e veloci, ma questa è una cosa completamente diversa.

Si presume che dover trasferire meno dati da / su disco possa migliorare le prestazioni; ma i trasferimenti di big data non sono quasi mai un collo di bottiglia di I / O: i veri colli di bottiglia sono il tempo e la latenza della ricerca. I moderni dischi rigidi sono molto veloci sui trasferimenti di dati sostenuti con file di grandi dimensioni, ciò che li rallenta sono piccoli trasferimenti da tutto il disco.

Alcuni scenari:

  • File multimediali. Questi di solito sono già compressi da soli (JPEG, MPEG, MP3), quindi comprimerli a livello di filesystem non sarà affatto d'aiuto; peggiorerà invece le cose, perché le risorse della CPU sono già necessarie per codificarle / decodificarle.
  • Banche dati. Di solito vengono letti / scritti in piccoli scoppi casuali, quindi comprimerli non solo non avrà alcun vantaggio, ma ridurrà anche le prestazioni, poiché il DBMS non è in grado di identificare correttamente dove si trovano i dati fisici su disco a cui devono accedere immagazzinato.
  • File di testo. Questo di solito è abbastanza grande, ma il sistema operativo deve indirizzare blocchi di dati molto piccoli su di esso, e deve farlo in modo molto preciso ("Leggi 4K all'indirizzo fisico X"); comprimerlo di solito non è possibile, ma anche se lo fosse, sarebbe una completa perdita di tempo e risorse: fornirebbe una compressione quasi nulla, a causa della natura dei "dati casuali completi" di questo file.

1
Quindi trasferire meno dati dal disco non offre alcun vantaggio?
kbyrd,

A cura di rispondere a questo :-)
Massimo

3
non è mai una parola dalla mentalità molto ristretta. La larghezza di banda grezza dal disco e attraverso il bus PCI è spesso il collo di bottiglia con parte del lavoro che faccio. La compressione può aiutare molto le prestazioni, soprattutto se hai già adottato misure per rimuovere alcuni degli altri colli di bottiglia che menzioni
JamesRyan,

1
Sarei anche titubante nel dire "mai". Potrebbero esserci scenari in cui la larghezza di banda del disco è il collo di bottiglia. Ma probabilmente hai ragione sul fatto che questo non è il caso tipico.
sleske,

2
l'I / O del disco è quasi sempre un collo di bottiglia nei database
Nick Kavadias,

3

Esistono situazioni specifiche che lo fanno già a livello di applicazione, come la compressione video: un sistema che non è in grado di leggere video raw di qualità HD abbastanza velocemente da un dsk può invece leggere informazioni compresse ed espanderle utilizzando memoria e potenza della CPU . Non vi è alcun motivo per cui ciò non potrebbe valere anche per altre situazioni specifiche, ma ciò può essere gestito al meglio a livello di applicazione, in modo che i metodi di compressione utilizzati siano ottimizzati per il loro scopo.

Tieni presente che il sovraccarico prestazionale della decompressione è utile se aumenta la produttività, quindi l'idea non dovrebbe essere respinta fuori mano - Non penso che siamo pronti per prestazioni generiche che aumentano ancora la compressione, ma è teoricamente possibile per scambiare una risorsa in eccesso (CPU e memoria) per una spinta altrove (dati totali letti dal disco rigido)


3

Hai risposto alla tua domanda! dipende è davvero la risposta.

La migliore generalizzazione che posso fare è:

Se si dispone di un'applicazione di database vincolata alla lettura del disco , sì! le prestazioni sono migliori.

Non penso che questo sia il caso della maggior parte delle attività che svolgerai su un desktop / laptop.

Nel mio dominio (SQL Server) so che i database di report con carichi di lettura elevati possono ottenere prestazioni migliori se si utilizza la compressione. So che lo stesso vale per mysql.

Microsoft ha un white paper sulle sue funzionalità di compressione in SQL Server 2008. Non esattamente leggere leggere a meno che tu non sia un DBA, ma ecco un grafico che supporta la mia generalizzazione:

testo alternativo


0

Le velocità della CPU sono sempre state più elevate delle velocità del disco. IMHO, la compressione aumenterà le spese generali e quindi le prestazioni.


ma dipende da cosa stai facendo :-)
Josh

Come mai? Un overhead aumentato è un overhead aumentato. Non puoi comprare denaro spendendo denaro (a meno che non sia denaro contraffatto, ma questa è un'altra storia).
Mark Henderson,

La funzione di compressione e decompressione dei file, indipendentemente dal fatto che siano più piccoli a causa della compressione, introdurrà un overhead delle prestazioni. Quando il file viene letto dal disco in memoria, deve essere decompresso. Quando è scritto dalla memoria su disco, deve essere compresso.
joeqwerty,

3
ma se la tua cpu è seduta senza fare nulla e la larghezza di banda del disco è il collo di bottiglia, la tua cpu finirà per fare più lavoro ma le prestazioni complessive aumenteranno. Dipende davvero dal tipo di dati che stai recuperando e da cosa ci stai facendo.
JamesRyan,

0

Stavo leggendo qualcosa di simile a questo ieri riguardo a OSX e alla sua compressione del filesystem - Fondamentalmente la risposta ruota attorno a ciò che vuoi comprimere - in questo esempio sta parlando dei dati "FAT"; strutture di file, proprietà, metadati ecc. che, se archiviati insieme, possono essere compressi per risparmiare spazio ed essere letti nella cpu più velocemente che cercare la testa dappertutto per trovare i dati per ogni file ...

Comunque, vale la pena leggere se stai pensando a queste cose :-p

Ma la compressione non riguarda solo il risparmio di spazio su disco. È anche un classico esempio di scambio di cicli della CPU per una minore latenza I / O e larghezza di banda. Negli ultimi decenni, le prestazioni della CPU sono migliorate (e le risorse di elaborazione sono più abbondanti, ne parleremo più avanti) a un ritmo molto più veloce rispetto alle prestazioni del disco. I tempi di ricerca moderni del disco rigido e i ritardi di rotazione sono ancora misurati in millisecondi. In un millisecondo, una CPU da 2 GHz passa attraverso due milioni di cicli. E poi, ovviamente, c'è ancora da considerare il tempo effettivo di trasferimento dei dati.

Certo, diversi livelli di memorizzazione nella cache in tutto il sistema operativo e l'hardware lavorano potentemente per nascondere questi ritardi. Ma quei bit devono uscire dal disco a un certo punto per riempire quelle cache. La compressione significa che devono essere trasferiti meno bit. Data la sovrabbondanza quasi comica delle risorse della CPU su un moderno Mac multi-core in normali condizioni di utilizzo, il tempo totale necessario per trasferire un carico utile compresso dal disco e utilizzare la CPU per decomprimerne il contenuto in memoria sarà di solito molto inferiore al tempo ci vorrebbe per trasferire i dati in forma non compressa.

Ciò spiega i potenziali vantaggi in termini di prestazioni del trasferimento di meno dati, ma l'uso di attributi estesi per archiviare il contenuto dei file può effettivamente rendere le cose più veloci. Tutto ha a che fare con la localizzazione dei dati.

Se c'è una cosa che rallenta un disco rigido più che trasferire una grande quantità di dati, sta spostando le sue teste da una parte del disco a un'altra. Ogni mossa significa che la testa inizia a muoversi, quindi si ferma, quindi si assicura che sia posizionata correttamente sulla posizione desiderata, quindi aspetta che il disco rotante inserisca i bit desiderati al di sotto di essa. Queste sono tutte parti reali, fisiche, in movimento, ed è sorprendente che facciano la danza nel modo più rapido ed efficiente possibile, ma la fisica ha i suoi limiti. Questi movimenti sono i veri assassini delle prestazioni per l'archiviazione rotazionale come i dischi rigidi.

Il formato volume HFS + memorizza tutte le sue informazioni sui file — metadati — in due posizioni principali sul disco: il File catalogo, che memorizza le date dei file, le autorizzazioni, la proprietà e una serie di altre cose, e il File degli attributi, che memorizza "forchette denominate ".

Gli attributi estesi in HFS + sono implementati come fork denominati nel file degli attributi. A differenza delle fork di risorse, che possono essere molto grandi (fino alla dimensione massima del file supportata dal file system), gli attributi estesi in HFS + sono memorizzati "inline" nel file degli attributi. In pratica, ciò significa un limite di circa 128 byte per attributo. Ma significa anche che la testa del disco non ha bisogno di fare un viaggio in un'altra parte del disco per ottenere i dati effettivi.

Come puoi immaginare, i blocchi su disco che compongono i file Catalog e Attributes sono frequentemente accessibili, e quindi è più probabile che la maggior parte si trovi in ​​una cache da qualche parte. Tutto ciò cospira per rendere l'archiviazione completa di un file, inclusi i suoi metadati nei suoi dati, all'interno del catalogo strutturato in B-tree e dei file di attributi una vittoria complessiva delle prestazioni. Anche un payload di otto byte che si sovrappone a 25 byte non è un problema, purché sia ​​ancora inferiore alla dimensione del blocco di allocazione per la normale memorizzazione dei dati e purché si adatti a un nodo B-tree nel File degli attributi che il sistema operativo deve comunque leggere nella sua interezza.

Ci sono altri contributi significativi all'ingombro ridotto del disco di Snow Leopard (ad esempio, la rimozione di localizzazioni non necessarie e file "designable.nib") ma la compressione HFS + è di gran lunga la più interessante dal punto di vista tecnico.

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


Ci ho pensato prima, ma quell'articolo esatto mi ha spinto a pubblicare questa domanda.
kbyrd,

lol. Interessante :-p
Christopher Lightfoot,

0

La compressione di Microsoft Disk è brutta VECCHIA. È difficilmente comparabile nei rapporti con il metodo ARJ degli anni '80. Ma anche la compressione di Microsoft PU provide fornire prestazioni migliori su dischi rigidi (laptop) molto lenti. Soprattutto se c'è abbastanza RAM per la cache di scrittura e prevenire scritture eccessive.

Il processo di scrittura è un punto debole di qualsiasi metodo di compressione abilitato per l'accesso casuale.

Quindi, se si desidera un'unità compressa, è meglio passare a un qualche tipo di Linux.

La compressione del disco è anche molto adatta per le unità RAM, non c'è bisogno di dirti perché.


1
Potresti aggiungere alcuni dati di supporto, magari il confronto delle prestazioni tra le soluzioni basate su Windows e Linux?
Psarossy,

Sì, se hai intenzione di imbatterti in un thread di 3,5 anni, è meglio che porti nuovi fatti concreti.
MDMarra,

-1

Pieno di dubbi. La compressione e la decompressione coinvolgono più del semplice disco e della CPU; in particolare, ci saranno molti trasferimenti di dati da e verso la memoria (oltre al sovraccarico di trasferimento standard senza compressione) che danneggeranno davvero in termini di errori di pagina.


-1

In breve, no, probabilmente non otterrai prestazioni.

Mentre la compressione migliorerà le prestazioni della memoria, diminuirà in modo significativo la velocità del processore. Probabilmente si riduce a quale tipo di file si sta per decomprimere. Se hai a che fare solo con word, Excel e altri tipi di file di base, vai avanti e comprimili. Se i singoli file sono più voluminosi, sacrificherai più tempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.