پرش به محتوای اصلی
پرش به محتوای مقاله

misa77 سرعت رمزگشایی داده‌ها را تا ۳ برابر LZ4 افزایش داد

·۲۴ تیر ۱۴۰۵۶ دقیقه مطالعه
مخزن misa77: الگوریتم فشرده‌سازی با سرعت استخراج ۱.۵ تا ۳ برابر LZ4 در پردازنده‌های x86 و ARM، با نسبت فشرده‌سازی بهتر.
مخزن misa77: الگوریتم فشرده‌سازی با سرعت استخراج ۱.۵ تا ۳ برابر LZ4 در پردازنده‌های x86 و ARM، با نسبت فشرده‌سازی بهتر.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

جایگزینی موازنه کلاسیک بین «نرخ فشرده‌سازی» و «سرعت رمزگشایی» با رویکرد «فشرده‌سازی کند برای رمزگشایی فوق‌سریع» که تا ۳ برابر سریع‌تر از استاندارد LZ4 است.

تصور کنید حجم عظیمی از داده‌ها را دارید که باید یک‌بار فشرده شوند اما میلیون‌ها بار توسط کاربران مختلف خوانده شوند؛ در این حالت، هر میلی‌ثانیه تأخیری در باز کردن فایل، اتلاف منابع است. misa77 دقیقا برای حل این مشکل آمده است تا سرعت استنتاج (Inference) — یا همان لحظه‌ای که مدل یا سیستم داده را بازمی‌خواند و شبیه آشپزی با مواد آماده است — را به سطح جدیدی ببرد.

طبق اعلام توسعه‌دهندگان، این کدک LZ-based در ۱۵ ژوئیه ۲۰۲۶ منتشر شد و توانست سرعت رمزگشایی (Decompression) را در پردازنده‌های x86 و ARM بین ۱.۵ تا ۳ برابر سریع‌تر از استاندارد LZ4 کند.

بسیاری از خطوط لوله داده (Data Pipelines) امروزی با یک موازنه دشوار روبه‌رو هستند: یا فایل را خیلی کوچک کنند یا سرعت باز کردن آن را بالا ببرند. سال‌ها بود که LZ4 به دلیل سرعت بالا، معیار صنعت بود، اما اغلب نرخ فشرده‌سازی را فدا می‌کرد. misa77 با یک چرخش راهبردی، تمام بار پردازشی را به مرحله فشرده‌سازی منتقل کرد تا سرعت خواندن داده‌ها را به حداکثر برساند.

همان‌طور که در پوشش پیشین ما درباره‌ی بهینه‌سازی‌های لایه‌ی سخت‌افزاری اشاره کردیم، دسترسی سریع به حافظه کلید افزایش کارایی است. این کدک با اثرگذاری مستقیم بر معماری‌های مدرن CPU، مسیر سریع‌تری برای بازیابی داده‌ها می‌سازد.

معماری فنی و موازنه‌ها

misa77 با ردپای حافظه (Memory Footprint) بسیار محدودی طراحی شده است. بر اساس مستندات این پروژه، در تمام حالت‌های فشرده‌سازی حداکثر ۵ مگابایت حافظه اشغال می‌کند و برای رمزگشایی به ۰ مگابایت حافظه نیاز دارد. این ویژگی آن را برای محیط‌های با محدودیت شدید منابع یا سیستم‌های با همزمانی (Concurrency) بالا ایده‌آل می‌کند.

برخلاف رقبایی مثل zstd، این کدک از یک سیستم پس‌زمینه آنتروپی (Entropy Backend) استفاده نمی‌کند. این بدان معناست که نمی‌توان آن را از نظر نرخ‌های فشرده‌سازی خام با zstd مقایسه کرد، اما LZ4 در سطوح تلاش بالا (High Effort Levels) به عنوان یک نقطه مرجع دقیق‌تر عمل می‌کند. هزینه اصلی این معماری، سرعت پایین در مرحله فشرده‌سازی است که آگاهانه برای رسیدن به حداکثر توان عملیاتی در رمزگشایی پذیرفته شده است.

یک یافته کلیدی در این ابزار این است که فایل‌های به‌شدت فشرده‌شده، در واقع سریع‌تر رمزگشایی می‌شوند. با صرف زمان و تلاش بیشتر در مرحله اول (فشرده‌سازی)، جریان داده حاصل برای ریزمعماری‌های CPUهای مدرن «دوستانه‌تر» می‌شود و یک حلقه بازخورد مثبت ایجاد می‌کند. در این حالت، صرف زمان بیشتر در هنگام فشرده‌سازی منجر به افزایش توان عملیاتی رمزگشایی می‌شود که فراتر از مزیت طبیعیِ داشتن یک نرخ فشرده‌سازی بهتر است.

مخزن misa77: الگوریتم فشرده‌سازی با سرعت استخراج ۱.۵ تا ۳ برابر LZ4 در پردازنده‌های x86 و ARM، همراه با نسبت فشرده‌سازی بهتر.

بنچمارک در برابر استانداردهای صنعت

در آزمایش‌های انجام‌شده روی پردازنده Intel Core i7-14650-HX (با فرکانس ۲.۲ گیگاهرتز و در حالی که حالت Turbo غیرفعال بود)، کدک misa77 در مجموعه‌های داده Silesia Corpus و enwik8 همواره در لبهٔ بهینگی («مرز پارتو» یا Pareto frontier) قرار داشت. این تست‌ها در یک محیط تک‌رشته‌ای (Single-threaded) اجرا شدند که در آن رشته به یک هسته عملکردی (Performance Core) متصل شده بود و از یک CPU governor با پروفایل performance استفاده می‌شد. برای اجرای این آزمایش‌ها از یک فورک عمومی از ابزار lzbench استفاده شده است.

به نقل از مستندات گیت‌هاب، نتایج به شرح زیر است:

  • Silesia Corpus: حالت Level 0 در نسخه v0.2.0 به سرعت رمزگشایی ۵۲۱۹ مگابایت بر ثانیه با نرخ ۴۲.۶۴ رسید. در مقایسه، lz4 (نسخه ۱.۱۰.۰) سرعت ۲۵۰۵ مگابایت بر ثانیه با نرخ ۴۷.۵۹ را ثبت کرد. حتی گونه‌های با تلاش بالا مانند lz4hc (نسخه ۱.۱۰.۰ با پارامتر ۱۲-) نیز با سرعت ۲۵۳۱ مگابایت بر ثانیه عقب ماندند.
  • enwik8: سرعت رمزگشایی در حالت Level 0 به ۴۸۰۲ مگابایت بر ثانیه رسید. رقبای نزدیک‌تر مانند zxc (نسخه ۰.۱۲.۰ با پارامتر ۳-) عملکرد ۲۶۷۴ مگابایت بر ثانیه داشتند، در حالی که snappy (نسخه ۱.۲.۲) با سرعت ۵۶۸ مگابایت بر ثانیه به شدت دست‌وپا زد.
  • نرخ فشرده‌سازی: در اکثر فایل‌های قابل‌فشرده، این کدک یا با نرخ‌های سایر کدک‌های سریع LZ برابر است یا آن‌ها را شکست می‌دهد، در حالی که هم‌زمان سرعت برتری را حفظ می‌کند.

تحلیل جزئیات عملکرد

بررسی‌های دقیق روی مجموعه Silesia نشان می‌دهد که عملکرد misa77 «نوسانی» (Spiky) است، به این معنی که بسته به شکل و ساختار داده‌ها تغییر می‌کند. با این حال، تجزیه و تحلیل در سطح فایل ثبات بالایی را نشان می‌دهد:

  • مقایسه با LZ4: در سطح Level 0، کدک misa77 در ۱۲ فایل از مجموع ۱۲ فایل سریع‌تر از LZ4 رمزگشایی کرد. در تمامی سطوح دیگر، این کدک در ۱۱ فایل از ۱۲ فایل سریع‌تر عمل کرد.
  • داده‌های غیرقابل‌فشرده: تنها استثنا فایل "x-ray" بود. از آنجایی که فایل x-ray به‌شدت غیرقابل‌فشرده است، نرخ LZ4 به نزدیک ۱.۰ می‌رسد که عملاً فرآیند را به یک عملیات کپی ساده در حافظه (memcpy) تبدیل می‌کند و در نتیجه عملکرد بهتری نسبت به این کدک دارد.
  • بهینگی پارتو: در فایل‌های قابل‌فشرده، misa77 سریع‌ترین رمزگشایی را دارد و همزمان با نرخ‌های سایر کدک‌های سریع LZ برابری یا از آن‌ها پیشی می‌گیرد، و تنها استثناهای اصلی فایل‌های "sao" و "x-ray" هستند.

مخزن misa77: الگوریتم فشرده‌سازی با سرعت استخراج ۱.۵ تا ۳ برابر LZ4 در پردازنده‌های x86 و ARM با نسبت فشرده‌سازی بهتر.

سطوح فشرده‌سازی و حالت‌های مختلف

نسخه جاری v0.2.0 دو سطح تلاش (Effort Level) اصلی ارائه می‌دهد:

  • Level 0: اولویت با سریع‌ترین توان عملیاتی رمزگشایی ممکن است، اما در مقابل نرخ فشرده‌سازی کمی ضعیف‌تر است. نکته این است که توان عملیاتی رمزگذاری (Encode) در این سطح مشابه Level 1 است.
  • Level 1 (پیش‌فرض): نرخ فشرده‌سازی بهتری را فراهم می‌کند اما سرعت رمزگشایی در آن کمی پایین‌تر می‌رود.

برای کاربران پیشرفته، رابط خط فرمان (CLI) شامل حالت‌های آزمایشی است که در مسیر src/experimental/ یافت می‌شوند:

  • --yolo: حالتی با تلاش بسیار بالا که برای بهینه‌سازی حداکثری رمزگشایی طراحی شده است.
  • --adaptive: این حالت فشرده‌ساز را بر اساس ورودی تنظیم (Autotune) می‌کند تا به حداکثر سرعت رمزگشایی برسد (برای داده‌های همگن توصیه می‌شود). کاربران می‌توانند تنظیمات را روی --tune loose (پیش‌فرض) یا --tune tight قرار دهند و مقدار نمونه را با --sample MB (پیش‌فرض ۲ مگابایت) مشخص کنند.
  • misa suggest: ابزاری کاربردی است که یک فایل پارامتر با پسوند .misap تولید می‌کند که دقیقاً برای یک نمونه داده خاص تنظیم شده است. این پارامترها سپس می‌توانند از طریق پرچم --params به کل فرآیند فشرده‌سازی اعمال شوند.

استقرار و پشتیبانی سخت‌افزاری

توسعه‌دهندگان برای ساخت این ابزار به یک کامپایلر C++20 (از GCC و Clang پشتیبانی می‌شود) و CMake (نسخه ۳.۲۰ یا بالاتر) نیاز دارند. اگرچه رابط خط فرمان (CLI) نیازمند محیط POSIX (لینوکس یا مک) و یک سیستم ۶۴-بیتی با ترتیب بایت کوچک (Little-endian) است، اما کتابخانه هسته (Core Library) به‌صورت متقاطع و سازگار با پلتفرم‌های مختلف (Cross-platform) باقی مانده است.

بهینه‌سازی سخت‌افزاری به این صورت مدیریت می‌شود:

  • x86-64: دستورات AVX2 و SSE2 به‌صورت خودکار در زمان اجرا (Runtime) انتخاب می‌شوند. کاربران می‌توانند هنگام بیلد، پرچم -DMISA77_MARCH=native را اضافه کنند تا باینری دقیقاً با ویژگی‌های سخت‌افزاری ماشین خودشان بهینه شود.
  • ARM64 و سایرین: کدک از یک مسیر قابل‌حمل (Portable Path) بدون استفاده از Intrinsics صریح استفاده می‌کند. این مسیر به‌گونه‌ای طراحی شده که به‌راحتی توسط کامپایلرها به‌صورت برداری (Auto-vectorized) درآید، که این موضوع روی پردازنده‌های Apple ARM تأیید شده است.

تحلیل تحریریه

برای توسعه‌دهندگان، misa77 این فرض قدیمی را که باید بین سرعت فوق‌العاده LZ4 و نرخ‌های فشرده‌سازی بهتر چیزی مانند zstd یکی را انتخاب کرد، به‌طور بنیادی تغییر می‌دهد. با پذیرفتن یک مرحله فشرده‌سازی «کند»، این ابزار به‌طور مؤثر گلوگاه عملکرد را از مصرف‌کننده (خواننده) به تولیدکننده (نویسنده) منتقل کرده است.

این یک پیروزی بزرگ برای توزیع دارایی‌های استاتیک (Static Asset Delivery)، بارگذاری داده‌ها در موتورهای بازی‌سازی و اسنپ‌شات‌های دیتابیس با حجم خواندن بالا است. در این سناریوها، یک فایل تنها یک‌بار فشرده می‌شود اما میلیون‌ها بار خوانده می‌شود. بنابراین، موازنه «فشرده‌سازی کند» هیچ اهمیتی ندارد، در حالی که افزایش ۳ برابری سرعت رمزگشایی می‌تواند زمان لود اپلیکیشن‌ها را به‌شدت کاهش دهد.

با این حال، باید توجه داشت که پروژه هنوز در مراحل آزمایشی است. نویسنده صراحتاً هشدار داده است که چون پروژه در نسخه‌های v0.x.y است، ممکن است فرمت داده‌ها تغییر کند و رمزگشای آن هنوز در برابر ورودی‌های نامعتبر «سخت» (Hardened) نشده است. از آنجایی که رمزگشا فرض می‌کند ورودی یک جریان معتبر misa77 است، هرگونه ورودی نامعتبر منجر به «رفتار تعریف‌نشده» (Undefined Behavior یا UB) می‌شود. این ابزار در حال حاضر یک دستاورد مهندسی در حوزه عملکرد است که از LZ4، zxc و lizard الهام گرفته، اما هنوز جایگزینی آماده برای محیط‌های عملیاتی و کتابخانه‌های حساس سیستمی (Mission-critical) نیست.

اگر مجموعه‌های داده Read-only در مقیاس بالا مدیریت می‌کنید، توصیه می‌شود misa77 را با شکل داده‌های خاص خود تست کنید تا ببینید آیا به همان سودهای پارتو (Pareto gains) دست می‌یابید که در بنچمارک‌های Silesia مشاهده شده است یا خیر.

گام بعدی شما

  • اگر مجموعه‌های داده Read-only در مقیاس بالا مدیریت می‌کنید، misa77 را با داده‌های واقعی خود تست کنید تا میزان بهبود در زمان لود را بسنجید.
  • در صورت استفاده از معماری x86، هنگام بیلد از پرچم -DMISA77_MARCH=native برای تطبیق دقیق با سخت‌افزار استفاده کنید.
  • برای داده‌های همگن، حالت --adaptive را امتحان کنید تا بهینه‌ترین پارامترهای رمزگشایی استخراج شوند.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این ابزار با تکیه بر تخصص در ریزمعماری CPU، گلوگاه‌های قدیمی خواندن داده در سیستم‌های توزیع‌شده را می‌شکند. برای صنعت بازی و دیتابیس‌های عظیم، این یعنی کاهش چشم‌گیر تأخیر (Latency) در بارگذاری دارایی‌ها.

تأثیر برای ایران

این ابزار به‌دلیل متن‌باز بودن و عدم نیاز به API، برای توسعه‌دهندگان ایرانی در پروژه‌های بهینه‌سازی زیرساختی و موتورهای بازی‌سازی داخلی کاملاً در دسترس و کاربردی است.

·نگاه ما
تحریریه دات‌هوش

تغییر پارادایم در misa77 از «بهینه‌سازی تعادلی» به «بهینه‌سازی تک‌سویه» است. این کدک با قربانی کردن زمان تولید، هزینه‌ی مصرف برای کاربر نهایی را به شدت کاهش می‌دهد که دقیقاً با روند فعلی توزیع مدل‌های هوش مصنوعی (یک‌بار آموزش سنگین، میلیون‌ها بار استنتاج سریع) هم‌سو است. در واقع ما شاهد انتقال استراتژی‌های توزیع مدل‌ها به لایه‌ی پایین‌ترِ مدیریت داده‌ها هستیم.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.