БистСма сТатия OpenZL, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π°Ρ Zstd ΠΈ XZ ΠΏΠΎ скорости ΠΈ ΡƒΡ€ΠΎΠ²Π½ΡŽ сТатия структурированных Π΄Π°Π½Π½Ρ‹Ρ…

Компания Meta* прСдставила инструмСнтарий для сТатия ΠΈ распаковки Π΄Π°Π½Π½Ρ‹Ρ… OpenZL, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ Zstd ΠΈ XZ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сТатия ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹. OpenZL Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для эффСктивного сТатия структурированных Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, примСняСмых ΠΏΡ€ΠΈ машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, содСрТащих поля с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Код OpenZL написан Π½Π° C/C++ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD.

ΠŸΡ€ΠΈ сТатии Π‘Π” с астрономичСским ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Π·Π²Ρ‘Π·Π΄ SAO, инструмСнтарий OpenZL ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Π² 2.06 Ρ€Π°Π·Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ zstd сТал ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² 1.31 Ρ€Π°Π·Π°, Π° XZ Π² 1.64 Ρ€Π°Π·Π°. ΠŸΡ€ΠΈ этом ΠΏΠΎ скорости сТатия OpenZL ΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΈΠ» zstd Π² Π΄Π²Π° Ρ€Π°Π·Π° (203 MB/s ΠΏΡ€ΠΎΡ‚ΠΈΠ² 115 MB/s), Π° XZ β€” Π² 65 Ρ€Π°Π· (203 MB/s ΠΏΡ€ΠΎΡ‚ΠΈΠ² 3.1 MB/s). Распаковка Π² OpenZL оказалась Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ zstd (822 MB/s ΠΏΡ€ΠΎΡ‚ΠΈΠ² 890 MB/s) ΠΈ Π² 27 быстрСС XZ.

 БистСма сТатия OpenZL, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π°Ρ Zstd ΠΈ XZ ΠΏΠΎ скорости ΠΈ ΡƒΡ€ΠΎΠ²Π½ΡŽ сТатия структурированных Π΄Π°Π½Π½Ρ‹Ρ…

OpenZL Π½Π΅ являСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π°Π½Π½Ρ‹Ρ… с Π·Π°Ρ€Π°Π½Π΅Π΅ извСстной структурой. Π Π°Π±ΠΎΡ‚Π° OpenZL сводится ΠΊ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ° Π½Π° основС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ описания Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ формируСтся ΠΊΠΎΠ΄ для сТатия, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…. Для распаковки примСняСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ распаковщик, совмСстимый со всСми Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠ°ΠΌΠΈ.

Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈ распаковка осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Β«zliΒ» ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libopenzl. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… описываСтся Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ. Π’ состав ΡƒΠΆΠ΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ хранСния. НапримСр, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° CSV ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ΅ массива 64-разрядных чисСл. БТатия сводится ΠΊ Π²Ρ‹Π±ΠΎΡ€Ρƒ профиля ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Β«zli list-profilesΒ» ΠΈ запуску процСсса ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Β«zli compress β€”profile имя_профиля». Для распаковки достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Β«zli decompressΒ».

Для спСцифичных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² трСбуСтся ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ собствСнный ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«zli trainΒ», которая выявляСт закономСрности Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ с ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ сТатия. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ Β«β€”pareto-frontierΒ» созданный ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² сторону ускорСния ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ распаковки, Ρ†Π΅Π½ΠΎΠΉ сниТСния уровня сТатия. Для описания слоТных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² со Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ структурами ΠΈ опрСдСлСния раскладки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² структурах ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ язык SDDL (Simple Data Description Language).

ΠœΠ΅Ρ‚ΠΎΠ΄ создания ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ² основан Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивСн для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Для сТатия формируСтся ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ацикличСский Π³Ρ€Π°Ρ„ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠ·Π»Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ΄Π΅ΠΊΠΈ, Π° Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ β€” Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π’ зависимости ΠΎΡ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… выбираСтся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ², ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΡΠΆΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠΉ элСмСнт Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° сТимаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ, ΠΏΠΎΠ»Π΅ с цСлочислСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, ΠΏΠΎΠ»Π΅ с ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ счётчиком β€” Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ, Π° ΠΏΠΎΠ»Π΅ со строковыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΌ.

 БистСма сТатия OpenZL, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π°Ρ Zstd ΠΈ XZ ΠΏΠΎ скорости ΠΈ ΡƒΡ€ΠΎΠ²Π½ΡŽ сТатия структурированных Π΄Π°Π½Π½Ρ‹Ρ…


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ