| ZSTD(1) | دستورات کاربر | ZSTD(1) |
نام (NAME)
zstd - zstd، zstdmt، unzstd، zstdcat - فشردهسازی یا بازگشایی فایلهای .zst
خلاصه دستور (SYNOPSIS)
zstdmt معادل zstd -T0 است
unzstd معادل zstd -d است
zstdcat معادل zstd -dcf است
توضیحات (DESCRIPTION)
zstd یک الگوریتم فشردهسازی بدوناتلاف سریع و ابزار فشردهسازی داده است که نحو خط فرمانی مشابه با gzip(1) و xz(1) دارد. این ابزار بر پایه خانواده LZ77 ساخته شده و از مراحل آنتروپی FSE و huff0 بهره میبرد. zstd سرعت فشردهسازی بسیار انعطافپذیر و قابل تنظیمی را ارائه میدهد؛ از حالتهای سریع با سرعت بیش از ۲۰۰ مگابایت بر ثانیه بهازای هر هسته پردازشی، تا حالتهای فشردهسازی قوی با نسبت فشردهسازی فوقالعاده عالی. همچنین دارای یک رمزگشا (دیکودر) بسیار سریع با سرعت بیش از ۵۰۰ مگابایت بر ثانیه بهازای هر هسته است.
نحو خط فرمان zstd عموماً مشابه با gzip است، اما تفاوتهای زیر را دارد:
- ○
- فایلهای منبع بهطور پیشفرض حفظ میشوند. حذف خودکار آنها با استفاده از دستور --rm امکانپذیر است.
- ○
- هنگام فشردهسازی یک تکفایل، zstd اعلانات پیشرفت کار و خلاصه نتیجه را بهطور پیشفرض نمایش میدهد. برای غیرفعال کردن آنها از -q استفاده کنید.
- ○
- هنگامی که خط فرمان دارای خطا باشد، zstd یک صفحه راهنمای کوتاه نمایش میدهد. برای خاموش کردن آن از -q استفاده کنید.
- ○
- zstd ورودی را از کنسول نمیپذیرد، گرچه stdin را در صورتی که کنسول نباشد میپذیرد.
- ○
- zstd نام فایل ورودی یا ویژگیهای آن را ذخیره نمیکند، بلکه تنها محتوای آن را ذخیره میکند.
zstd هر file را مطابق با حالت عملیات انتخابشده پردازش میکند. اگر هیچ file مشخص نشود یا file برابر با - باشد، zstd از ورودی استاندارد میخواند و دادههای پردازششده را در خروجی استاندارد مینویسد. در صورتی که خروجی استاندارد یک ترمینال باشد، zstd از نوشتن دادههای فشردهشده در آن خودداری خواهد کرد: پیام خطایی نمایش میدهد و فایل را نادیده میگیرد. بهطور مشابه، اگر ورودی استاندارد یک ترمینال باشد، zstd از خواندن دادههای فشردهشده از آن خودداری خواهد کرد.
مگر اینکه --stdout یا -o مشخص شده باشد، fileها در فایل جدیدی نوشته میشوند که نام آن از نام file منبع گرفته میشود:
- ○
- هنگام فشردهسازی، پسوند .zst به انتهای نام فایل منبع افزوده میشود تا نام فایل مقصد به دست آید.
- ○
- هنگام بازگشایی، پسوند .zst از نام فایل منبع حذف میشود تا نام فایل مقصد به دست آید.
الحاق فایلهای .zst (Concatenation with .zst Files)
امکان الحاق چند فایل .zst به یکدیگر وجود دارد. zstd چنین فایل تجمیعشدهای را طوری از حالت فشرده خارج میکند که گویی یک تکفایل .zst بوده است.
گزینهها (OPTIONS)
پسوندهای عدد صحیح و مقادیر ویژه (Integer Suffixes and Special Values)
در بیشتر جاهایی که یک آرگومان از نوع عدد صحیح مورد انتظار است، یک پسوند اختیاری برای نمایش آسان اعداد صحیح بزرگ پشتیبانی میشود. نباید هیچ فاصلهای بین عدد صحیح و پسوند وجود داشته باشد.
حالت عملیات (Operation Mode)
اگر چندین گزینه حالت عملیات داده شود، آخرین مورد اعمال میشود.
- -z, --compress
- فشردهسازی. این حالت پیشفرض عملیات است وقتی هیچ گزینه حالتی مشخص نشده باشد و هیچ حالت عملیاتی دیگری از نام دستور استنباط نشود (برای مثال، unzstd به معنای --decompress است).
- -d, --decompress, --uncompress
- بازگشایی (خروج از حالت فشرده).
- -t, --test
- آزمایش یکپارچگی fileهای فشردهشده. این گزینه معادل --decompress --stdout > /dev/null است، دادههای بازگشاییشده دور ریخته میشوند و برای بررسی خطاها چکسام (checksum) میشوند. هیچ فایلی ایجاد یا حذف نمیشود.
- -b#
- ارزیابی کارایی (بنچمارک) فایل(ها) با استفاده از سطح فشردهسازی #. برای شرح این عملیات، بخش BENCHMARK را در زیر ببینید.
- --train FILES
- استفاده از FILES به عنوان مجموعه آموزشی برای ساخت یک لغتنامه. مجموعه آموزشی باید حاوی فایلهای کوچک زیادی باشد (> ۱۰۰). برای شرح این عملیات، بخش DICTIONARY BUILDER را در زیر ببینید.
- -l, --list
- نمایش اطلاعات مربوط به یک فایل فشردهشده با zstd، مانند اندازه، نسبت فشردهسازی و چکسام. ممکن است برخی از این فیلدها در دسترس نباشند. خروجی این دستور میتواند با اصلاحکننده -v گسترش یابد.
اصلاحکنندههای عملیات (Operation Modifiers)
- ○
- -#: انتخاب سطح فشردهسازی # [1-19] (پیشفرض: 3)
- ○
- --ultra: باز کردن قفل سطوح فشردهسازی بالای ۲۰ به بالا (حداکثر ۲۲)، با مصرف حافظه بسیار بیشتر. توجه داشته باشید که هنگام استفاده از این سطوح، بازگشایی نیز به حافظه بیشتری نیاز خواهد داشت.
- ○
- --fast[=#]: تغییر به سطوح فشردهسازی فوقالعاده سریع. اگر =# مشخص نشده باشد، مقدار پیشفرض 1 خواهد بود. هرچه مقدار بالاتر باشد، سرعت فشردهسازی بیشتر میشود، البته با فدا کردن مقداری از نسبت فشردهسازی. این تنظیم سطح فشردهسازی قبلی را (در صورت تعیین) بازنویسی میکند. بهطور مشابه، اگر پس از --fast سطح فشردهسازی تعیین شود، جایگزین آن خواهد شد.
- ○
- -T#, --threads=#: فشردهسازی با استفاده از # ریسه کاری (پیشفرض: 1). اگر # برابر با 0 باشد، تلاش میکند تعداد هستههای فیزیکی CPU را شناسایی کرده و به کار گیرد. در تمام موارد، تعداد ریسهها محدود به ZSTDMT_NBWORKERS_MAX است که در حالت ۳۲-بیتی برابر با ۶۴ و برای محیطهای ۶۴-بیتی برابر با ۲۵۶ است. اگر zstd بدون پشتیبانی از چندریسهای کامپایل شده باشد، این اصلاحکننده هیچ اثری نخواهد داشت.
- ○
- --single-thread: استفاده از یک تکریسه برای هر دو عملیات ورودی/خروجی و فشردهسازی. از آنجا که فشردهسازی با ورودی/خروجی سریالی میشود، این حالت ممکن است کمی کندتر باشد. حالت تکریسه با مصرف حافظه بهطور قابلتوجهی کمتر مشخص میشود که میتواند برای سیستمهایی با مقدار حافظه محدود، مانند سیستمهای ۳۲-بیتی، مفید باشد.
- نکته ۱: این حالت تنها حالت موجود در صورت غیرفعال بودن پشتیبانی از چندریسهای است.
- نکته ۲: این حالت با -T1 تفاوت دارد، که یک ریسه فشردهسازی را به صورت موازی با ورودی/خروجی اجرا میکند. نتیجه نهایی فشردهشده نیز کمی با -T1 متفاوت است.
- ○
- --auto-threads={physical,logical} (پیشفرض: physical): هنگام استفاده از تعداد ریسههای پیشفرض از طریق -T0، پیشفرض را بر اساس تعداد هستههای شناساییشده فیزیکی یا منطقی انتخاب میکند.
- ○
- --adapt[=min=#,max=#]: ابزار zstd سطح فشردهسازی را بهطور پویا با شرایط احساسشده ورودی/خروجی تطبیق میدهد. تطبیق سطح فشردهسازی را میتوان با استفاده از دستور -v بهصورت زنده مشاهده کرد. تطبیق میتواند بین سطوح مشخصشده min و max محدود شود. این ویژگی در صورت ترکیب با چندریسهای و حالت --long کار میکند. با --single-thread کار نمیکند. اندازه پنجره را بهطور پیشفرض روی 8 MiB تنظیم میکند (میتوان آن را بهصورت دستی تغییر داد، wlog را ببینید). به دلیل ماهیت پرنوسان تطبیق پویا، نتیجه فشردهشده قابل بازتولید یکسان نیست.
- نکته: در زمان نگارش این مستند، --adapt هنگام ترکیب با چندین ریسه کاری (>=2) ممکن است در سرعت پایین متوقف بماند.
- ○
- --long[=#]: فعالسازی تطابق فاصلهدور با windowLog به اندازه #؛ اگر # مشخص نباشد مقدار پیشفرض 27 خواهد بود. این گزینه اندازه پنجره (windowLog) و مصرف حافظه را برای هر دو ابزار فشردهساز و بازگشا افزایش میدهد. این تنظیم برای بهبود نسبت فشردهسازی در فایلهایی با تطابقهای طولانی در فواصل زیاد طراحی شده است.
- نکته: اگر windowLog بزرگتر از ۲۷ تنظیم شود، باید --long=windowLog یا --memory=windowSize به بازگشا ارسال شود.
- ○
- -D DICT: استفاده از DICT به عنوان لغتنامه برای فشردهسازی یا بازگشایی FILE(ها)
- ○
- --patch-from FILE: تعیین فایلی که به عنوان نقطه مرجع برای موتور تفاضلی (diff) در zstd استفاده میشود. این در عمل همان فشردهسازی مبتنی بر لغتنامه با گزینش مناسب پارامترهاست، به این صورت که windowSize > srcSize باشد.
- نکته: نمیتوان از این گزینه و -D بهطور همزمان استفاده کرد.
- نکته: اگر chainLog < fileLog باشد، حالت --long بهطور خودکار فعال خواهد شد (fileLog همان windowLog مورد نیاز برای پوشش کل فایل است). شما میتوانید آن را بهصورت دستی نیز اجبار کنید.
- نکته: برای تمامی سطوح، میتوانید از --patch-from در حالت --single-thread استفاده کنید تا نسبت فشردهسازی را به بهای کاهش سرعت بهبود بخشید.
- نکته: برای سطح ۱۹، میتوانید با مشخص کردن مقداری بزرگ (مثلاً 4096) برای --zstd=targetLength= و تنظیم یک --zstd=chainLog= بزرگ، نسبت فشردهسازی بیشتری را به بهای کاهش سرعت به دست آورید.
- ○
- --rsyncable: ابزار zstd وضعیت فشردهسازی را بهصورت دورهای همگامسازی میکند تا فایل فشردهشده برای rsync مناسبتر باشد. تأثیر این گزینه بر نسبت فشردهسازی ناچیز است، و سطوح فشردهسازی سریعتر افت اندکی در سرعت فشردهسازی خواهند داشت. این ویژگی با --single-thread کار نمیکند. احتمالاً تمایلی به استفاده از آن با حالت دامنه طولانی نخواهید داشت، زیرا کارایی نقاط همگامسازی را کاهش میدهد، اما بسته به شرایط شما ممکن است نتایج متفاوت باشد.
- ○
- -C, --[no-]check: افزودن بررسی یکپارچگی محاسبهشده از دادههای فشردهنشده (پیشفرض: فعال)
- ○
- --[no-]content-size: فعال/غیرفعال کردن قرار گرفتن اندازه اصلی فایل در سربرگ فایل فشردهشده. گزینه پیشفرض --content-size است (به این معنی که اندازه اصلی در سربرگ قرار خواهد گرفت).
- ○
- --no-dictID: شناسه لغتنامه را در سربرگ فریم ذخیره نمیکند (فشردهسازی با لغتنامه). رمزگشا باید به دانش ضمنی درباره لغتنامه مورد استفاده تکیه کند و قادر به بررسی درستی آن نخواهد بود.
- ○
- -M#, --memory=#: تنظیم محدودیت مصرف حافظه. بهطور پیشفرض، zstd مقدار 128 MiB را برای بازگشایی به عنوان حداکثر میزان حافظهای که بازگشا مجاز به استفاده از آن است در نظر میگیرد، اما در صورت نیاز میتوانید آن را بهطور دستی در هر جهت تغییر دهید (یعنی افزایش یا کاهش دهید).
- این گزینه همچنین هنگام فشردهسازی در صورت استفاده با --patch-from= به کار میرود. در این حالت، این پارامتر حداکثر اندازه مجاز برای یک لغتنامه را بازنویسی میکند (128 MiB).
- علاوه بر این، میتواند برای محدود کردن حافظه در آموزش لغتنامه استفاده شود. این پارامتر حد مجاز پیشفرض ۲ گیگابایت را بازنویسی میکند. zstd نمونههای آموزشی را تا سقف حد حافظه بارگذاری کرده و باقیمانده را نادیده میگیرد.
- ○
- --stream-size=#: تعیین اندازه تعهدشده منبع برای ورودی حاصل از یک جریان. این مقدار باید دقیق باشد، چرا که در سربرگ فریم تولیدشده گنجانده خواهد شد. اندازه نادرست جریان موجب بروز خطا میشود. این اطلاعات برای بهینهسازی بهتر پارامترهای فشردهسازی استفاده خواهد شد و به فشردهسازی بهتر و بالقوه سریعتر، بهویژه برای اندازههای منبع کوچکتر، میانجامد.
- ○
- --size-hint=#: هنگام کار با ورودی حاصل از یک جریان، zstd باید برای بهینهسازی پارامترهای فشردهسازی تخمین بزند که اندازه منبع چقدر خواهد بود. اگر اندازه جریان نسبتاً کوچک باشد، این تخمین ممکن است ضعیف باشد و به نسبت فشردهسازی بالاتر از حد انتظار بیانجامد. این قابلیت امکان کنترل تخمین را در صورت نیاز فراهم میکند. تخمین دقیق منجر به نسبتهای فشردهسازی بهتری میشود. بیشبرآوردها منجر به افت جزئی در نسبت فشردهسازی میشوند، در حالی که کمبرآوردها ممکن است افت چشمگیری ایجاد کنند.
- ○
- -o FILE: ذخیره نتیجه در FILE.
- ○
- -f, --force: غیرفعال کردن بررسیهای ورودی و خروجی. اجازه بازنویسی روی فایلهای موجود، ورودی از کنسول، خروجی به stdout، کار روی پیوندها، دستگاههای بلوکی و غیره را میدهد. در طول بازگشایی و زمانی که مقصد خروجی stdout باشد، قالبهای ناشناخته را دستنخورده عبور میدهد.
- ○
- -c, --stdout: نوشتن در خروجی استاندارد (حتی اگر کنسول باشد)؛ نگهداشتن فایلهای اصلی بدون تغییر.
- ○
- --[no-]sparse: فعال/غیرفعال کردن پشتیبانی از فایلهای پراکنده (sparse) در سیستمفایل، برای کاهش حجم اشغالی فایلهای حاوی صفرهای زیاد روی دیسک. ایجاد فایلهای پراکنده میتواند با کاهش میزان ورودی/خروجی دیسک، در فضای دیسک صرفهجویی کرده و بازگشایی را سرعت بخشد. پیشفرض: هنگامی که خروجی در یک فایل است فعال، و زمانی که خروجی stdout است غیرفعال است. این تنظیم پیشفرض را بازنویسی کرده و میتواند حالت پراکنده را روی stdout اجبار کند.
- ○
- --[no-]pass-through: فعال/غیرفعال کردن عبور دادن فایلهای فشردهنشده بهصورت دستنخورده. در حین بازگشایی زمانی که عبور مستقیم فعال باشد، قالبهای ناشناخته بههمان صورت از ورودی به خروجی کپی میشوند. بهطور پیشفرض، عبور مستقیم زمانی رخ میدهد که مقصد خروجی stdout بوده و گزینه اجبار (-f) تنظیم شده باشد.
- ○
- --rm: حذف فایل(های) منبع پس از فشردهسازی یا بازگشایی موفق. اگر خروجی stdout باشد، این گزینه بدون هشدار نادیده گرفته میشود. اگر در ترکیب با -o استفاده شود، از آنجا که عملیاتی مخرب است اعلان تاییدی را نمایش میدهد (که با -f میتوان آن را بیصدا کرد).
- ○
- -k, --keep: نگهداشتن فایل(های) منبع پس از فشردهسازی یا بازگشایی موفق. این رفتار پیشفرض است.
- ○
- -r: عمل بازگشتی روی دایرکتوریها. تمامی فایلهای موجود در دایرکتوری نامبرده و کلیه زیردایرکتوریهای آن را انتخاب میکند. این گزینه هم برای کاهش تایپ در خط فرمان و هم برای دور زدن محدودیتهای گسترش پوسته هنگامی که تعداد فایلها بسیار زیاد است و نامگذاری آنها از حداکثر اندازه یک خط فرمان فراتر میرود، مفید است.
- ○
- --filelist FILE: خواندن فهرست فایلهای قابل پردازش به عنوان محتوا از FILE. قالب آن با خروجی ls سازگار است، همراه با یک فایل در هر خط.
- ○
- --output-dir-flat DIR: فایلهای حاصل به جای همان دایرکتوری فایل مبدأ، در دایرکتوری مقصد DIR ذخیره میشوند. توجه داشته باشید اگر چند فایل از دایرکتوریهای مختلف دارای نام یکسانی شوند، این گزینه میتواند مشکلات تداخل نام ایجاد کند. حل تداخل تضمین میکند که اولین فایل با یک نام مشخص در DIR باقی بماند، در حالی که در ترکیب با -f، آخرین فایل به جای آن قرار خواهد گرفت.
- ○
- --output-dir-mirror DIR: مشابه با --output-dir-flat، فایلهای خروجی در زیر دایرکتوری مقصد DIR ذخیره میشوند، اما این گزینه سلسلهمراتب دایرکتوری ورودی را در DIR خروجی بازتولید میکند.
- اگر دایرکتوری ورودی شامل «..» باشد، فایلهای موجود در این دایرکتوری نادیده گرفته خواهند شد. اگر دایرکتوری ورودی یک دایرکتوری مطلق باشد (مانند «/var/tmp/abc»)، در مسیر «output-dir/var/tmp/abc» ذخیره خواهد شد. اگر چندین فایل یا دایرکتوری ورودی وجود داشته باشد، حل تداخل نام از همان قوانین --output-dir-flat پیروی خواهد کرد.
- ○
- --format=FORMAT: فشردهسازی و بازگشایی در سایر فرمتها. در صورت کامپایل با پشتیبانی مربوطه، zstd میتواند به یا از فرمتهای الگوریتمهای دیگر فشردهسازی عمل فشردهسازی یا بازگشایی را انجام دهد. گزینههای احتمالاً موجود عبارتند از zstd، gzip، xz، lzma و lz4. اگر هیچ فرمتی مشخص نشود، zstd پیشفرض خواهد بود.
- ○
- -h/-H, --help: نمایش راهنما/راهنمای مفصل و خروج
- ○
- -V, --version: نمایش شماره نسخه و خروج. پیشرفته: -vV فرمتهای پشتیبانیشده را نیز نمایش میدهد. -vvV پشتیبانی POSIX را نیز نمایش میدهد. -q فقط شماره نسخه را نمایش میدهد که برای خواندن ماشینی مناسب است.
- ○
- -v, --verbose: حالت پرگو، نمایش اطلاعات بیشتر
- ○
- -q, --quiet: فرونشاندن هشدارها، تعاملپذیری و اعلانات. برای فرونشاندن خطاها نیز آن را دو بار مشخص کنید.
- ○
- --no-progress: عدم نمایش نوار پیشرفت، اما حفظ سایر پیامها.
- ○
- --show-default-cparams: نمایش پارامترهای پیشفرض فشردهسازی که بر اساس سطح فشردهسازی ارائهشده و اندازه ورودی، برای یک فایل ورودی مشخص استفاده خواهند شد. اگر فایل ارائهشده یک فایل معمولی نباشد (مانند یک لوله یا pipe)، این پرچم پارامترهای استفادهشده برای ورودیهای با اندازه ناشناخته را خروجی میدهد.
- ○
- --: تمامی آرگومانهای پس از -- به عنوان فایل در نظر گرفته میشوند
اصلاحکنندههای عملیات gzip (gzip Operation Modifiers)
هنگام فراخوانی از طریق پیوند نمادین gzip، ابزار zstd از گزینههای بیشتری پشتیبانی میکند که هدف آنها تقلید رفتار gzip است:
- -n, --no-name
- عدم ذخیره نام اصلی فایل و برچسبهای زمانی هنگام فشردهسازی یک فایل. این رفتار پیشفرض است و بنابراین یک عملیات بیاثر (no-op) محسوب میشود.
- --best
- نام مستعار برای گزینه -9.
متغیرهای محیطی (Environment Variables)
بهکارگیری متغیرهای محیطی برای تنظیم پارامترها دارای پیامدهای امنیتی است. بنابراین، این مسیر بهطور عمدی محدود شده است. در حال حاضر فقط از ZSTD_CLEVEL و ZSTD_NBTHREADS پشتیبانی میشود. آنها بهترتیب سطح فشردهسازی و تعداد ریسههای مورد استفاده در حین فشردهسازی را تنظیم میکنند.
متغیر ZSTD_CLEVEL میتواند برای تنظیم سطح بین ۱ و ۱۹ (محدوده «عادی») استفاده شود. اگر مقدار ZSTD_CLEVEL یک عدد صحیح معتبر نباشد، همراه با یک پیام هشدار نادیده گرفته خواهد شد. ZSTD_CLEVEL صرفاً جایگزین سطح فشردهسازی پیشفرض (3) میشود.
متغیر ZSTD_NBTHREADS میتواند برای تعیین تعداد ریسههایی که zstd در طول فشردهسازی تلاش خواهد کرد استفاده کند، به کار رود. اگر مقدار ZSTD_NBTHREADS یک عدد صحیح بدون علامت معتبر نباشد، همراه با یک پیام هشدار نادیده گرفته خواهد شد. ZSTD_NBTHREADS دارای مقدار پیشفرض (1) است و حداکثر به ZSTDMT_NBWORKERS_MAX==200 محدود میشود. برای اینکه این متغیر اثرگذار باشد، zstd باید با پشتیبانی از چندریسهای کامپایل شده باشد.
هر دوی آنها میتوانند توسط آرگومانهای متناظر در خط فرمان بازنویسی شوند: -# برای سطح فشردهسازی و -T# برای تعداد ریسههای فشردهسازی.
سازنده لغتنامه (DICTIONARY BUILDER)
ابزار zstd قابلیت فشردهسازی مبتنی بر لغتنامه را ارائه میدهد که کارایی را روی فایلها و پیامهای کوچک بهطور چشمگیری بهبود میبخشد. امکان آموزش zstd با مجموعهای از نمونهها وجود دارد که نتیجه آن در فایلی موسوم به لغتنامه ذخیره میشود. سپس، در حین فشردهسازی و بازگشایی، با استفاده از دستور -D dictionaryFileName به همان لغتنامه ارجاع داده میشود. فشردهسازی فایلهای کوچکی که مشابه مجموعه نمونهها هستند، بهشدت بهبود خواهد یافت.
- --train FILEs
- استفاده از FILEها به عنوان مجموعه آموزشی برای ایجاد یک لغتنامه. مجموعه آموزشی در حالت ایدهآل باید شامل نمونههای فراوانی (> ۱۰۰) باشد، و وزن آن معمولاً ۱۰۰ برابر اندازه لغتنامه هدف باشد (به عنوان مثال، حدود 10 MB برای یک لغتنامه 100 KB). گزینه --train میتواند با -r ترکیب شود تا به جای فهرست کردن تکتک فایلها، یک دایرکتوری را مشخص کند که این امر میتواند برای دور زدن محدودیتهای گسترش پوسته مفید باشد.
- از آنجا که فشردهسازی با لغتنامه عمدتاً برای فایلهای کوچک مؤثر است، انتظار میرود که مجموعه آموزشی تنها شامل فایلهای کوچک باشد. در صورتی که برخی نمونهها تصادفاً بزرگ باشند، تنها نخستین 128 KiB از این نمونهها برای آموزش استفاده خواهد شد.
- در صورتی که zstd با پشتیبانی از ریسهها کامپایل شده باشد (پیشفرض)، گزینه --train از چندریسهای پشتیبانی میکند. پارامترهای پیشرفته اضافی را میتوان با --train-fastcover مشخص کرد. سازنده سنتی لغتنامه از طریق --train-legacy قابل دسترسی است. سازنده کندتر cover لغتنامه نیز از طریق --train-cover در دسترس است. گزینه پیشفرض --train معادل --train-fastcover=d=8,steps=4 است.
- -o FILE
- ذخیره لغتنامه در FILE (نام پیشفرض: dictionary).
- --maxdict=#
- محدود کردن لغتنامه به اندازه مشخصشده (پیشفرض: 112640 بایت). طبق معمول، مقادیر بهطور پیشفرض بر حسب بایت بیان میشوند و استفاده از پسوندها (مانند KB یا MB) برای تعیین مقادیر بزرگتر امکانپذیر است.
- -#
- استفاده از سطح فشردهسازی # در حین آموزش (اختیاری). آماری تولید خواهد کرد که برای سطح فشردهسازی انتخابی تنظیمتر شده است و منجر به بهبود جزئی نسبت فشردهسازی برای این سطح میشود.
- -B#
- تقسیم فایلهای ورودی به بلوکهایی با اندازه # (پیشفرض: بدون تقسیم)
- -M#, --memory=#
- محدود کردن میزان دادههای نمونه بارگذاریشده برای آموزش (پیشفرض: 2 GB). توجه داشته باشید که مقدار پیشفرض (2 GB) حداکثر مقدار نیز هست. این پارامتر میتواند در شرایطی مفید باشد که اندازه مجموعه آموزشی به خوبی کنترل نشده و ممکن است بالقوه بسیار بزرگ باشد. از آنجا که سرعت فرآیند آموزش مستقیماً با اندازه مجموعه نمونههای آموزشی همبستگی دارد، یک مجموعه نمونه کوچکتر منجر به آموزش سریعتر میشود.
- در شرایطی که مجموعه آموزشی بزرگتر از حداکثر حافظه باشد، رابط خط فرمان بهطور تصادفی نمونههایی را از میان نمونههای موجود تا سقف بودجه حافظه مجاز انتخاب میکند. این کار برای بهبود ارتباط لغتنامه از طریق کاهش اثر بالقوه خوشهبندی طراحی شده است؛ مانند انتخاب فایلها صرفاً از ابتدای فهرستی که بر اساس تاریخ تغییر یا بر اساس حروف الفبا مرتب شده است. فرآیند تصادفیسازی قطعی (deterministic) است، بنابراین آموزش همان فهرست فایلها با همان پارامترها منجر به ایجاد لغتنامهای یکسان خواهد شد.
- --dictID=#
- یک شناسه لغتنامه (dictionary ID) شناسهای منحصربهفرد بهصورت محلی است. رمزگشا از این مقدار برای راستیآزمایی استفاده از لغتنامه صحیح بهره میبرد. بهطور پیشفرض، zstd یک شناسه عددی تصادفی ۴ بایتی ایجاد میکند. امکان ارائه یک شناسه عددی صریح به جای آن وجود دارد. عدم تخصیص شناسه یکسان به ۲ لغتنامه مختلف بر عهده مدیر لغتنامه است. توجه داشته باشید که اعداد کوتاه دارای یک مزیت هستند: یک شناسه کمتر از ۲۵۶ تنها به ۱ بایت در سربرگ فریم فشردهشده نیاز خواهد داشت، و یک شناسه کمتر از ۶۵۵۳۶ تنها به ۲ بایت نیاز دارد. این در مقایسه با حالت پیشفرض ۴ بایتی بسیار مطلوبتر است.
- توجه داشته باشید که RFC8878 شناسههای کمتر از 32768 و بزرگتر یا مساوی با 2\^31 را رزرو کرده است، بنابراین نباید بهصورت عمومی استفاده شوند.
- --train-cover[=k#,d=#,steps=#,split=#,shrink[=#]]
- انتخاب پارامترها برای الگوریتم پیشفرض سازنده لغتنامه موسوم به cover. اگر d مشخص نشده باشد، مقادیر d = 6 و d = 8 را آزمایش میکند. اگر k مشخص نشده باشد، به تعداد steps مقدار در محدوده [50, 2000] را آزمایش میکند. اگر steps مشخص نشده باشد، مقدار پیشفرض 40 استفاده میشود. اگر split مشخص نشده باشد یا split <= 0 باشد، مقدار پیشفرض 100 استفاده میشود. نیازمند آن است که d <= k باشد. اگر پرچم shrink استفاده نشود، مقدار پیشفرض برای shrinkDict برابر با 0 استفاده خواهد شد. اگر shrink مشخص نشود، مقدار پیشفرض 1 برای shrinkDictMaxRegression استفاده میشود.
- بخشهایی با اندازه k را که بالاترین امتیاز را دارند برای قرار دادن در لغتنامه انتخاب میکند. امتیاز یک بخش با مجموع بسامدهای تمامی زیربخشهای با اندازه d محاسبه میشود. عموماً d باید در محدوده [6, 8] و گهگاه تا 16 باشد، اما الگوریتم با d <= 8 سریعتر اجرا خواهد شد. مقادیر مناسب برای k بر اساس دادههای ورودی بسیار متغیر است، اما محدوده امن [2 * d, 2000] است. اگر split برابر با 100 باشد، تمامی نمونههای ورودی هم برای آموزش و هم برای آزمون جهت یافتن d و k بهینه برای ساخت لغتنامه استفاده میشوند. اگر zstd با پشتیبانی از ریسهها کامپایل شده باشد، از چندریسهای پشتیبانی میکند. فعال بودن shrink یک لغتنامه بریدهشده با حداقل اندازه را میگیرد و اندازه آن را دو برابر میکند تا جایی که نسبت فشردهسازی لغتنامه بریدهشده حداکثر shrinkDictMaxRegression% بدتر از نسبت فشردهسازی بزرگترین لغتنامه باشد.
- مثالها:
- zstd --train-cover FILEs
- zstd --train-cover=k=50,d=8 FILEs
- zstd --train-cover=d=8,steps=500 FILEs
- zstd --train-cover=k=50 FILEs
- zstd --train-cover=k=50,split=60 FILEs
- zstd --train-cover=shrink FILEs
- zstd --train-cover=shrink=2 FILEs
- --train-fastcover[=k#,d=#,f=#,steps=#,split=#,accel=#]
- مشابه cover اما با پارامترهای اضافی f و accel و مقدار پیشفرض متفاوت برای split. اگر split مشخص نشده باشد، مقدار split = 75 را آزمایش میکند. اگر f مشخص نشده باشد، مقدار f = 20 را آزمایش میکند. نیازمند آن است که 0 < f < 32 باشد. اگر accel مشخص نشده باشد، مقدار accel = 1 را آزمایش میکند. نیازمند آن است که 0 < accel <= 10 باشد. نیازمند آن است که d = 6 یا d = 8 باشد.
- پارامتر f برابر با لگاریتم اندازه آرایهای است که بسامد زیربخشهای با اندازه d را نگهداری میکند. زیربخش به یک نمایه در محدوده [0,2^f - 1] هش میشود. ممکن است ۲ زیربخش متفاوت به یک نمایه یکسان هش شوند و در محاسبه بسامد به عنوان یک زیربخش یکسان در نظر گرفته شوند. استفاده از یک f بزرگتر باعث کاهش برخورد میشود اما زمان بیشتری میبرد.
- مثالها:
- zstd --train-fastcover FILEs
- zstd --train-fastcover=d=8,f=15,accel=2 FILEs
- --train-legacy[=selectivity=#]
- استفاده از الگوریتم سنتی سازنده لغتنامه با selectivity مشخصشده برای لغتنامه (پیشفرض: 9). هرچه مقدار selectivity کوچکتر باشد، لغتنامه متراکمتر شده و کارایی آن بهبود مییابد اما حداکثر اندازه قابل دستیابی آن کاهش پیدا میکند. فرم --train-legacy=s=# نیز پذیرفته میشود.
- مثالها:
- zstd --train-legacy FILEs
- zstd --train-legacy=selectivity=8 FILEs
بنچمارک و ارزیابی کارایی (BENCHMARK)
- -b#
- ارزیابی کارایی فایل(ها) با استفاده از سطح فشردهسازی #
- -e#
- ارزیابی کارایی فایل(ها) با استفاده از چندین سطح فشردهسازی، از -b# تا -e# (شامل هر دو)
- -i#
- حداقل زمان ارزیابی، بر حسب ثانیه (پیشفرض: 3s)، فقط در حالت بنچمارک
- -B#, --block-size=#
- برش دادن فایل(ها) به تکههای مستقل با اندازه # (پیشفرض: بدون تکهتکه کردن)
- --priority=rt
- تنظیم اولویت فرآیند روی بیدرنگ (real-time)
قالب خروجی: CompressionLevel#Filename: InputSize -> OutputSize (CompressionRatio), CompressionSpeed, DecompressionSpeed
روششناسی: برای سنجش سرعت هم در فشردهسازی و هم در بازگشایی، تمام ورودی در حافظه (in-memory) فشرده یا بازگشایی میشود تا سرعت اندازهگیری گردد. یک اجرا حداقل ۱ ثانیه طول میکشد، بنابراین وقتی فایلها کوچک هستند، چندین بار در هر دور اجرا فشرده یا بازگشایی میشوند تا دقت اندازهگیری بهبود یابد.
گزینههای پیشرفته فشردهسازی (ADVANCED COMPRESSION OPTIONS)
### -B#: تعیین اندازه هر کار فشردهسازی. این پارامتر تنها زمانی در دسترس است که چندریسهای فعال باشد. هر کار فشردهسازی بهصورت موازی اجرا میشود، بنابراین این مقدار بهطور غیرمستقیم بر تعداد ریسههای فعال اثر میگذارد. اندازه پیشفرض کار بسته به سطح فشردهسازی متفاوت است (عموماً 4 * windowSize). گزینه -B# امکان انتخاب دستی یک اندازه سفارشی را فراهم میکند. توجه داشته باشید که اندازه کار باید مقدار حداقلی را که بهطور شفاف اعمال میشود رعایت کند. این حداقل مقدار برابر با 512 KB یا overlapSize (هرکدام بزرگتر باشد) است. اندازههای مختلف کار منجر به فریمهای فشردهشده غیریکسان خواهند شد.
--zstd[=options]:
ابزار zstd تعداد ۲۲ سطح فشردهسازی منظم از پیش تعریفشده بهعلاوه سطوح سریع را فراهم میکند. این سطح فشردهسازی در داخل برنامه به تعدادی از پارامترهای خاص ترجمه میشود که در واقع رفتار فشردهساز را کنترل میکنند. (میتوانید نتیجه این تبدیل را با --show-default-cparams مشاهده کنید.) این پارامترهای خاص را میتوان با گزینههای پیشرفته فشردهسازی بازنویسی کرد. گزینهها (options) به صورت فهرستی جداشده با ویرگول ارائه میشوند. شما میتوانید تنها گزینههایی را که میخواهید تغییر دهید مشخص نمایید و باقی مقادیر از سطح فشردهسازی انتخابشده یا پیشفرض گرفته خواهند شد. فهرست گزینههای (options) موجود:
- strategy=strat, strat=strat
- تعیین راهبرد (استراتژی) مورد استفاده توسط موتور یابنده تطابق (match finder).
- تعداد ۹ راهبرد وجود دارد که از ۱ تا ۹ شمارهگذاری شدهاند، از سریعترین به قویترین: 1=ZSTD_fast، 2=ZSTD_dfast، 3=ZSTD_greedy، 4=ZSTD_lazy، 5=ZSTD_lazy2، 6=ZSTD_btlazy2، 7=ZSTD_btopt، 8=ZSTD_btultra، 9=ZSTD_btultra2.
- windowLog=wlog, wlog=wlog
- تعیین حداکثر تعداد بیتها برای فاصله تطابق.
- تعداد بیتهای بالاتر شانس یافتن یک تطابق را افزایش میدهد که معمولاً نسبت فشردهسازی را بهبود میبخشد. همچنین نیازهای حافظه را برای فشردهساز و بازگشا افزایش میدهد. حداقل wlog برابر با 10 (1 KiB) و حداکثر آن 30 (1 GiB) در پلتفرمهای ۳۲-بیتی و 31 (2 GiB) در پلتفرمهای ۶۴-بیتی است.
- نکته: اگر windowLog بزرگتر از ۲۷ تنظیم شود، باید --long=windowLog یا --memory=windowSize به بازگشا ارسال شود.
- hashLog=hlog, hlog=hlog
- تعیین حداکثر تعداد بیتها برای جدول هش.
- جدولهای هش بزرگتر برخورد کمتری ایجاد میکنند که معمولاً فشردهسازی را سریعتر میسازد، اما در طول فشردهسازی به حافظه بیشتری نیاز دارد.
- حداقل hlog برابر با 6 (64 مدخل / 256 B) و حداکثر آن 30 (1B مدخل / 4 GiB) است.
- chainLog=clog, clog=clog
- تعیین حداکثر تعداد بیتها برای ساختار جستجوی ثانویه، که شکل آن به strategy انتخابی بستگی دارد.
- تعداد بیتهای بالاتر شانس یافتن یک تطابق را افزایش میدهد که معمولاً نسبت فشردهسازی را بهبود میبخشد. همچنین سرعت فشردهسازی را کاهش داده و نیازهای حافظه برای فشردهسازی را افزایش میدهد. این گزینه برای راهبرد ZSTD_fast strategy که تنها دارای جدول هش اولیه است، نادیده گرفته میشود.
- حداقل clog برابر با 6 (64 مدخل / 256 B) و حداکثر آن 29 (512M مدخل / 2 GiB) در پلتفرمهای ۳۲-بیتی و 30 (1B مدخل / 4 GiB) در پلتفرمهای ۶۴-بیتی است.
- searchLog=slog, slog=slog
- تعیین حداکثر تعداد جستجوها در یک زنجیره هش یا درخت دودویی در مقیاس لگاریتمی.
- جستجوهای بیشتر شانس یافتن تطابق را افزایش میدهد که معمولاً نسبت فشردهسازی را بالا میبرد اما سرعت فشردهسازی را کاهش میدهد.
- حداقل slog برابر با 1 و حداکثر آن برابر با ´windowLog´ - 1 است.
- minMatch=mml, mml=mml
- تعیین حداقل طول جستجوشده برای یک تطابق در جدول هش.
- طولهای جستجوی بزرگتر معمولاً نسبت فشردهسازی را کاهش میدهند اما سرعت بازگشایی را بهبود میبخشند.
- حداقل mml برابر با 3 و حداکثر آن 7 است.
- targetLength=tlen, tlen=tlen
- تأثیر این فیلد بسته به راهبرد انتخابشده متفاوت است.
- برای ZSTD_btopt، ZSTD_btultra و ZSTD_btultra2، این فیلد حداقل طول تطابقی را مشخص میکند که باعث میشود یابنده تطابق از جستجوی بیشتر دست بکشد. یک targetLength بزرگتر معمولاً نسبت فشردهسازی را بهبود میبخشد اما سرعت فشردهسازی را کاهش میدهد.
- برای ZSTD_fast، اگر بزرگتر از ۰ باشد، حالت فوقالعاده سریع را فعال میکند. این مقدار نشاندهنده مقدار داده نادیدهگرفتهشده میان نمونهبرداری تطابق است. تأثیر آن معکوس است: یک targetLength بزرگتر سرعت فشردهسازی را افزایش میدهد اما نسبت فشردهسازی را کم میکند.
- برای تمام راهبردهای دیگر، این فیلد هیچ تأثیری ندارد.
- حداقل tlen برابر با 0 و حداکثر آن 128 KiB است.
- overlapLog=ovlog, ovlog=ovlog
- تعیین overlapSize، میزان دادهای که مجدداً از کار قبلی بارگذاری میشود. این پارامتر تنها زمانی در دسترس است که چندریسهای فعال باشد. بارگذاری مجدد داده بیشتر نسبت فشردهسازی را بهبود میبخشد، اما سرعت را کاهش میدهد.
- حداقل ovlog برابر با 0 و حداکثر آن 9 است. مقدار 1 به معنای «عدم همپوشانی» و در نتیجه کارهای کاملاً مستقل است. مقدار 9 به معنای «همپوشانی کامل» است، یعنی حداکثر تا اندازه windowSize از کار قبلی مجدداً بارگذاری میشود. کاهش ۱ واحد از ovlog مقدار بازبارگذاریشده را با ضریب ۲ کاهش میدهد. برای مثال، 8 به معنای «windowSize/2» و 6 به معنای «windowSize/8» است. مقدار 0 خاص است و به معنای «پیشفرض» میباشد: ovlog بهطور خودکار توسط zstd تعیین میشود؛ در این حالت بسته به strat انتخابشده، ovlog از 6 تا 9 متغیر خواهد بود.
- ldmHashLog=lhlog, lhlog=lhlog
- تعیین حداکثر اندازه برای جدول هش مورد استفاده جهت تطابق فاصلهدور.
- این گزینه نادیده گرفته میشود مگر اینکه تطابق فاصلهدور فعال باشد.
- جدولهای هش بزرگتر معمولاً نسبت فشردهسازی را به قیمت مصرف حافظه بیشتر هنگام فشردهسازی و کاهش سرعت فشردهسازی بهبود میبخشند.
- حداقل lhlog برابر با 6 و حداکثر آن 30 است (پیشفرض: 20).
- ldmMinMatch=lmml, lmml=lmml
- تعیین حداقل طول جستجوشده یک تطابق برای تطابق فاصلهدور.
- این گزینه نادیده گرفته میشود مگر اینکه تطابق فاصلهدور فعال باشد.
- مقادیر بزرگتر یا بسیار کوچک معمولاً نسبت فشردهسازی را کاهش میدهند.
- حداقل lmml برابر با 4 و حداکثر آن 4096 است (پیشفرض: 64).
- ldmBucketSizeLog=lblog, lblog=lblog
- تعیین اندازه هر باکت برای جدول هش مورد استفاده در تطابق فاصلهدور.
- این گزینه نادیده گرفته میشود مگر اینکه تطابق فاصلهدور فعال باشد.
- اندازههای بزرگتر باکت تفکیک برخورد را بهبود میبخشند، اما سرعت فشردهسازی را کاهش میدهند.
- حداقل lblog برابر با 1 و حداکثر آن 8 است (پیشفرض: 3).
- ldmHashRateLog=lhrlog, lhrlog=lhrlog
- تعیین بسامد درج مدخلها در جدول هش تطابق فاصلهدور.
- این گزینه نادیده گرفته میشود مگر اینکه تطابق فاصلهدور فعال باشد.
- مقادیر بزرگتر سرعت فشردهسازی را بهبود میبخشند. انحراف زیاد از مقدار پیشفرض احتمالاً به کاهش نسبت فشردهسازی منجر خواهد شد.
- مقدار پیشفرض wlog - lhlog است.
مثال (Example)
پارامترهای زیر گزینههای پیشرفته فشردهسازی را برای فایلهای بزرگتر از 256 KB روی مقداری مشابه با سطح از پیش تعریفشده ۱۹ تنظیم میکند:
--zstd=wlog=23,clog=23,hlog=22,slog=6,mml=3,tlen=48,strat=6
نویسنده (AUTHOR)
Yann Collet
گزارش باگها (REPORTING BUGS)
گزارش باگها در: https://github.com/facebook/zstd/issues
حق نشر (COPYRIGHT)
حق نشر ©
2016-تاکنون Meta Platforms, Inc.
و وابستگان.
Yann Collet.
مجوز: BSD
سهبندی (BSD 3-Clause)
یا GPLv2. این
نرمافزار
آزاد است:
شما
میتوانید
آن را تحت
شرایط هر یک
از این دو
مجوز تغییر
داده و
دوباره
توزیع
کنید.
همچنین ببینید (SEE ALSO)
zstdgrep(1), zstdless(1), gzip(1), xz(1)
قالب zstandard در
مرجع زیر
مشخص شده
است:
Y. Collet, "Zstandard Compression and the
´application/zstd´ Media Type",
https://www.ietf.org/rfc/rfc8878.txt, Internet RFC 8878 (February 2021).
| February 2023 | zstd 1.5.4 |