Cet article est le deuxiĂšme d'une sĂ©rie sur la compression rapide des donnĂ©es. Le premier article dĂ©crivait un compresseur qui fonctionne Ă une vitesse de 10 Go/s par cĆur de processeur (compression minimale, RTT-Min).
Ce compresseur est dĂ©jĂ intĂ©grĂ© dans les Ă©quipements des duplicateurs criminologiques pour la compression rapide des dumps des supports d'information et pour renforcer la rĂ©sistance Ă la cryptographie. Il peut Ă©galement ĂȘtre utilisĂ© pour compresser les images des machines virtuelles et les fichiers d'Ă©change de la mĂ©moire vive lors de leur sauvegarde sur des disques SSD rapides.
Le premier article annonçait Ă©galement le dĂ©veloppement d'un algorithme de compression pour la compression des sauvegardes des disques durs et des disques SSD (compression moyenne, RTT-Mid) avec des paramĂštres de compression des donnĂ©es nettement amĂ©liorĂ©s. Ă l'heure actuelle, ce compresseur est entiĂšrement prĂȘt et cet article lui est consacrĂ©.
Le compresseur réalisant l'algorithme RTT-Mid offre un taux de compression comparable à celui des archiveurs standards comme WinRar et 7-Zip, fonctionnant en mode rapide. Sa vitesse de fonctionnement est au moins d'un ordre de grandeur supérieure.
La vitesse d'emballage/dĂ©packaging des donnĂ©es est un paramĂštre critique qui dĂ©termine le domaine d'application des technologies de compression. Il est peu probable que quiconque pense Ă compresser un tĂ©raoctet de donnĂ©es Ă une vitesse de 10-15 MĂ©gaoctets par seconde (c'est prĂ©cisĂ©ment la vitesse des archiveurs en mode de compression standard), car cela prendrait presque vingt heures avec le processeur Ă charge maximaleâŠ
D'autre part, le mĂȘme tĂ©raoctet peut ĂȘtre copiĂ© Ă des vitesses d'environ 2-3 Go par seconde en dix minutes.
Par conséquent, la compression d'informations de grande taille est pertinente si elle est effectuée à une vitesse d'au moins celle des entrées/sorties réelles. Pour les systÚmes modernes, cela représente au moins 100 Mégaoctets par seconde.
De telles vitesses ne peuvent ĂȘtre atteintes par les compresseurs modernes qu'en mode « fast ». C'est dans ce mode pertinent que nous allons comparer l'algorithme RTT-Mid avec les compresseurs traditionnels.
Test comparatif du nouvel algorithme de compression
Le compresseur RTT-Mid a fonctionné dans le cadre d'un programme de test. Dans une application « réelle », il fonctionne significativement plus vite, avec une utilisation efficace du multithreading et avec un « compilateur normal », et non en C#.
Comme les compresseurs utilisĂ©s dans le test comparatif reposent sur des principes diffĂ©rents et compressent divers types de donnĂ©es de maniĂšres distinctes, une mĂ©thode d'Ă©valuation dite « tempĂ©rature moyenne de l'hĂŽpital » a Ă©tĂ© employĂ©e pour assurer l'objectivitĂ© du testâŠ
Un fichier de dump sectoriel du disque logique contenant le systÚme d'exploitation Windows 10 a été créé, représentant ainsi un mélange naturel de structures de données variées que l'on trouve sur chaque ordinateur. La compression de ce fichier permettra de comparer la vitesse et le taux de compression du nouvel algorithme avec les compresseurs les plus avancés utilisés dans les outils d'archivage modernes.
Voici ce fichier de dump :

Le fichier de dump a été compressé par les compresseurs RTT-Mid, 7-zip, WinRar. Les compresseurs WinRar et 7-zip ont été réglés pour fonctionner à la vitesse maximale.
Le compresseur fonctionne 7-zip:

Il charge le processeur à 100%, avec une vitesse moyenne de lecture du dump d'environ 60 MégaOctets/sec.
Le compresseur fonctionne WinRar:

La situation est similaire, charge du processeur presque à 100%, vitesse moyenne de lecture du dump d'environ 125 MégaOctets/sec.
Comme dans le cas précédent, la vitesse de l'archiveur est limitée par les capacités du processeur.
La programme de test du compresseur fonctionne maintenant RTT-Mid:

La capture d'Ă©cran montre que le processeur est chargĂ© Ă 50% et reste inoccupĂ© le reste du temps, car il n'y a nulle part oĂč dĂ©charger les donnĂ©es compressĂ©es. Le disque de dĂ©chargement (Disque 0) est presque totalement chargĂ©. La vitesse de lecture des donnĂ©es (Disque 1) fluctue considĂ©rablement, mais dĂ©passe en moyenne les 200 MĂ©gaOctets/sec.
La vitesse de fonctionnement du compresseur est ici limitée par la capacité d'écriture des données compressées sur le Disque 0.
Maintenant, le taux de compression des archives résultantes :



On constate que le compresseur RTT-Mid a réalisé la meilleure compression, l'archive qu'il a créée étant de 1,3 GigaOctet plus petite que l'archive WinRar et de 2,1 GigaOctets plus petite que l'archive 7z.
Temps consacré à la création de l'archive :
- 7-zip â 26 minutes 10 secondes ;
- WinRar â 17 minutes 40 secondes ;
- RTT-Mid â 7 minutes 30 secondes.
Ainsi, mĂȘme un programme de test non optimisĂ©, utilisant l'algorithme RTT-Mid, a pu crĂ©er une archive plus de deux fois et demie plus rapidement, tout en Ă©tant significativement plus petite que celles des concurrentsâŠ
Ceux qui ne croient pas aux captures d'Ă©cran peuvent vĂ©rifier leur vĂ©racitĂ© par eux-mĂȘmes. Le programme de test est disponible Ă , tĂ©lĂ©chargez et vĂ©rifiez.
Mais cela ne fonctionne que sur les processeurs prenant en charge AVX-2 ; sans cette prise en charge, le compresseur ne fonctionne pas, et ne testez pas l'algorithme sur les anciens processeurs AMD, car ils sont lents dans l'exĂ©cution des commandes AVXâŠ
Méthode de compression utilisée
L'algorithme utilise une mĂ©thode d'indexation des fragments de texte rĂ©pĂ©titifs Ă l'Ă©chelle des octets. Cette mĂ©thode de compression est connue depuis longtemps, mais n'a pas Ă©tĂ© utilisĂ©e car l'opĂ©ration de recherche de correspondances Ă©tait trĂšs coĂ»teuse en ressources nĂ©cessaires et nĂ©cessitait beaucoup plus de temps que la construction d'un dictionnaire. Ainsi, l'algorithme RTT-Mid est un exemple classique du mouvement "retour vers le futur"âŠ
Le compresseur RTT utilise un scanner de recherche de correspondances à haute vitesse unique, qui a précisément permis d'accélérer le processus de compression. Ce scanner est fait maison, c'est « mon précieux... », « son prix est considérable car il est entiÚrement fait main » (écrit en assembleur).
Le scanner de recherche de correspondances est basé sur un schéma probabiliste à deux niveaux : tout d'abord, la présence d'un « indice » de correspondance est scannée, et ce n'est qu'aprÚs avoir identifié cet « indice » à cet endroit que la procédure de détection de la correspondance réelle est lancée.
La fenĂȘtre de recherche de correspondances a une taille imprĂ©visible, dĂ©pendant du degrĂ© d'entropie dans le bloc de donnĂ©es traitĂ©. Pour les donnĂ©es complĂštement alĂ©atoires (non compressibles), elle a une taille de plusieurs mĂ©gaoctets, tandis que pour les donnĂ©es avec des rĂ©pĂ©titions, elle a toujours une taille supĂ©rieure Ă un mĂ©gaoctet.
Cependant, de nombreux formats de données modernes sont non compressibles et « faire fonctionner » un scanner gourmand en ressources sur eux est inutile et gaspilleux, c'est pourquoi le scanner utilise deux modes de fonctionnement. D'abord, des sections du texte source avec des répétitions potentielles sont recherchées, cette opération est également effectuée par méthode probabiliste et se fait trÚs rapidement (à une vitesse de 4-6 Go/s). Ensuite, les sections avec des correspondances potentielles sont traitées par le scanner principal.
La compression par index n'est pas trÚs efficace, car il faut remplacer les fragments répétitifs par des indices, et le tableau d'index réduit considérablement le taux de compression.
Pour augmenter le taux de compression, non seulement les correspondances complÚtes des chaßnes d'octets sont indexées, mais aussi les correspondances partielles, lorsque la chaßne contient des octets correspondants et non correspondants. à cette fin, un champ de masque de correspondance est inclus dans le format d'index indiquant les octets correspondants de deux blocs. Pour une compression encore plus élevée, l'indexation utilise le chevauchement de plusieurs blocs partiellement correspondants avec le bloc actuel.
Tout cela a permis d'obtenir dans le compresseur RTT-Mid un taux de compression comparable à celui des compresseurs fonctionnant par méthode lexicale, mais qui fonctionnent beaucoup plus rapidement.
La vitesse de fonctionnement du nouvel algorithme de compression
Si le compresseur fonctionne avec une utilisation monopolistique du cache mĂ©moire (4 mĂ©gabytes requis par flux), la vitesse de fonctionnement oscille entre 700 et 2000 mĂ©gabytes/sec par cĆur de processeur en fonction du type de donnĂ©es compressĂ©es et dĂ©pend peu de la frĂ©quence de travail du processeur.
Dans la mise en Ćuvre multithread du compresseur, l'Ă©volutivitĂ© effective est dĂ©terminĂ©e par le volume de la mĂ©moire cache de niveau trois. Par exemple, avoir 9 mĂ©gabytes de mĂ©moire cache rend inutile le lancement de plus de deux flux de compression, la vitesse ne augmentera pas Ă cause de cela. Mais avec 20 mĂ©gabytes de cache, il est possible de lancer cinq flux de compression.
Un paramÚtre significatif déterminant également la vitesse de fonctionnement du compresseur est la latence de la mémoire vive. L'algorithme utilise des accÚs aléatoires à la RAM, dont une partie n'entre pas dans le cache mémoire (environ 10 %) et il doit attendre les données de la RAM, ce qui réduit la vitesse de fonctionnement.
La vitesse du compresseur est Ă©galement considĂ©rablement influencĂ©e par le fonctionnement du systĂšme d'entrĂ©e/sortie de donnĂ©es. Les requĂȘtes Ă la RAM provenant de l'entrĂ©e/sortie bloquent les accĂšs aux donnĂ©es du cĂŽtĂ© du CPU, ce qui rĂ©duit Ă©galement la vitesse de compression. Ce problĂšme est significatif pour les ordinateurs portables et de bureau, serveurs il est moins significatif grĂące Ă un bloc de contrĂŽle d'accĂšs Ă la bus systĂšme plus avancĂ© et Ă une mĂ©moire vive multicanale.
Tout au long de l'article, il est question de compression, la dĂ©compression Ă©tant hors du sujet car « tout va bien ». La dĂ©compression se fait beaucoup plus rapidement et est limitĂ©e par la vitesse d'entrĂ©e/sortie. Un seul cĆur physique dans un flux peut facilement atteindre des vitesses de dĂ©compression de 3 Ă 4 Go/s.
Cela est dû à l'absence, lors de la décompression, de l'opération de recherche de correspondances, qui « consomme » les principales ressources du processeur et de la mémoire cache lors de la compression.
Fiabilité de la conservation des données compressées
Comme le suggĂšre le nom mĂȘme de toute la catĂ©gorie de logiciels utilisant la compression des donnĂ©es (les archiveurs), ceux-ci sont destinĂ©s Ă une conservation Ă long terme des informations, non pas pendant des annĂ©es, mais des siĂšcles et des millĂ©naires...
Au fil du temps, les supports d'information perdent une partie des données, en voici un exemple :

Ce support d'information « analogique » a mille ans, certains fragments sont perdus, mais globalement l'information est « lisible »...
Aucun des producteurs responsables de systÚmes de stockage de données numériques modernes et des supports numériques associés ne garantit la conservation complÚte des données au-delà de 75 ans.
Et c'est un problÚme, mais un problÚme différé, nos descendants s'en chargeront...
Les systĂšmes de stockage de donnĂ©es numĂ©riques peuvent perdre des donnĂ©es non seulement aprĂšs 75 ans, des erreurs dans les donnĂ©es peuvent survenir Ă tout moment, mĂȘme lors de leur enregistrement, ces distorsions tentent d'ĂȘtre minimisĂ©es en utilisant de la redondance et en corrigeant avec des systĂšmes de correction d'erreurs. La redondance et les systĂšmes de correction peuvent restaurer les informations perdues, mais ce n'est pas toujours le cas, et mĂȘme lorsqu'ils le font, il n'y a aucune garantie que l'opĂ©ration de restauration se soit bien dĂ©roulĂ©e.
Et c'est aussi un grand problÚme, mais pas différé, c'est un problÚme actuel.
Les compresseurs modernes utilisĂ©s pour l'archivage des donnĂ©es numĂ©riques sont basĂ©s sur diverses modifications de la mĂ©thode de dictionnaire, et pour de tels archives, la perte d'un fragment d'information serait un Ă©vĂ©nement fatal, il existe mĂȘme un terme bien Ă©tabli pour cette situation â « archive corrompue »...
La faible fiabilitĂ© du stockage d'informations dans des archives avec compression dictionnaire est liĂ©e Ă la structure des donnĂ©es compressĂ©es. Les informations dans une telle archive ne contiennent pas le texte d'origine, mais des numĂ©ros d'enregistrement dans le dictionnaire, ce dernier Ă©tant modifiĂ© dynamiquement par le texte compressible actuel. En cas de perte ou de dĂ©formation d'un fragment de l'archive, toutes les entrĂ©es suivantes ne peuvent ĂȘtre identifiĂ©es ni par leur contenu, ni par la longueur de l'enregistrement dans le dictionnaire, car il n'est pas clair Ă quoi correspond le numĂ©ro de l'enregistrement du dictionnaire.
Il est impossible de récupérer des informations à partir d'une telle archive "endommagée".
L'algorithme RTT est basé sur une méthode de stockage de données compressées plus fiable. Il utilise une méthode d'indexation pour suivre les fragments répétitifs. Cette approche de compression permet de minimiser les conséquences de la distorsion d'informations sur le support et, dans de nombreux cas, de corriger automatiquement les distorsions survenues lors du stockage des informations.
Cela est dĂ» au fait que le fichier d'archive, dans le cas de la compression par index, contient deux champs :
- le champ du texte d'origine avec les segments répétitifs supprimés ;
- le champ des indices.
Le champ des indices, critique pour la rĂ©cupĂ©ration des informations, n'est pas trĂšs volumineux et peut ĂȘtre dupliquĂ© pour une fiabilitĂ© accrue du stockage des donnĂ©es. Par consĂ©quent, mĂȘme si un fragment du texte d'origine ou de la matrice d'indices est perdu, toutes les autres informations peuvent ĂȘtre rĂ©cupĂ©rĂ©es sans problĂšme, tout comme sur une image d'un support d'informations "analogique".
Inconvénients de l'algorithme
Il n'y a pas d'avantages sans inconvénients. La méthode d'indexation de la compression ne compresse pas les séquences répétitives de courte longueur. Cela est dû aux limitations de la méthode d'indexation. Les indices ont une taille minimale de 3 octets et peuvent aller jusqu'à 12 octets. Si une répétition de taille inférieure à celle de l'indice qui la décrit apparaßt, elle n'est pas prise en compte, peu importe la fréquence des répétitions dans le fichier compressé.
La méthode de compression traditionnelle basée sur un dictionnaire compresse efficacement de multiples répétitions de faible longueur et atteint ainsi un meilleur taux de compression que la compression par index. Toutefois, cela nécessite une charge processeur élevée, ce qui oblige la méthode basée sur un dictionnaire à réduire sa vitesse de traitement à environ 10 à 20 mégaoctets par seconde sur des installations de calcul réelles avec le processeur complÚtement chargé pour compresser les données plus efficacement que la méthode par index.
Ces vitesses trĂšs faibles sont inacceptables pour les systĂšmes de stockage modernes et prĂ©sentent davantage un intĂ©rĂȘt « acadĂ©mique » qu'une utilitĂ© pratique.
Le taux de compression de l'information sera considérablement amélioré dans la prochaine version de l'algorithme RTT (RTT-Max), qui est déjà en cours de développement.
Donc, comme toujours, la suite suivraâŠ
Source : habr.com
