mbuffer(1) console utility mbuffer(1)

mbuffer - ابزار بافر حافظه جهت افزایش سرعت انتقال داده‌ها بین ورودی و خروجی

mbuffer [گزینه‌ها]

دستور mbuffer عملیات ورودی/خروجی (I/O) را بافر کرده و نرخ توان عملیاتی (throughput) را نمایش می‌دهد. این برنامه چندریسمانی است، از اتصالات شبکه، چندین مقصد خروجی و گزینه‌های بسیار بیشتری نسبت به دستور استاندارد buffer پشتیبانی می‌کند.

استفاده از تعداد بلوک برای بافر (مقدار پیش‌فرض در زمان راه‌اندازی تعیین می‌شود).
استفاده از بلوک‌هایی با اندازه بایت برای بافر (مقدار پیش‌فرض در زمان راه‌اندازی تعیین می‌شود).
استفاده از مجموع اندازه بایت برای بافر (پیش‌فرض ۲٪ از حافظه در دسترس) - اندازه را می‌توان با پسوند مشخص کرد (b و B برای بایت، k برای کیلوبایت، M برای مگابایت، G برای گیگابایت و % برای درصدی از کل حافظه فیزیکی).
قفل کردن بافر در حافظه رم - این گزینه برای بافرهای مبتنی بر فایل در دسترس نیست و نیازمند تنظیم مجوز set-UID root برای mbuffer است (با احتیاط استفاده شود).
استفاده از اندازه بلوک دستگاه برای خروجی (برای برخی دستگاه‌ها لازم است، اما سرعت خروجی را کاهش می‌دهد).
فرض حجم خروجی برابر با اندازه بایت (پیش‌فرض بی‌نهایت) که پس از آن تعویض حجم (volume change) آغاز می‌شود. مقادیر کوچک برای آزمایش به‌موقع اجراهای چندجلدی و مقادیر دقیق برای زمانی مناسبند که دستگاه شما پایان رسانه را به درستی اعلام نمی‌کند. اندازه را می‌توان با پسوند تعیین کرد (b و B برای بایت، k برای کیلوبایت، M برای مگابایت یا G برای گیگابایت).
شروع نوشتن پس از پر شدن بافر تا درصد مشخص‌شده (پیش‌فرض ۰ - شروع فوری).
شروع خواندن پس از افت نسبت پر بودن بافر به زیر درصد مشخص‌شده (پیش‌فرض ۱۰۰ - شروع فوری).
استفاده از نام_فایل به عنوان ورودی به جای ورودی استاندارد (برای پشتیبانی از چند رسانه/جلد الزامی است). اگر نام_فایل برابر با - باشد، ورودی از ورودی استاندارد خوانده می‌شود.
استفاده از نام_فایل به عنوان خروجی به جای خروجی استاندارد (برای پشتیبانی از چند رسانه/جلد الزامی است؛ در صورت در دسترس بودن، استفاده از sendfile را فعال می‌کند). اگر نام_فایل برابر با - باشد، خروجی در خروجی استاندارد نوشته می‌شود. گزینه -o را می‌توان چندین بار برای مشخص کردن چندین خروجی تکرار کرد.
باز کردن فایل خروجی بعدی مشخص‌شده با گزینه -o در حالت الحاق (append).
کوتاه و خالی کردن (truncate) فایل خروجی بعدی مشخص‌شده با گزینه -o هنگام باز کردن آن.
استفاده از درگاه شبکه درگاه به عنوان ورودی به جای ورودی استاندارد. اگر نام میزبان و درگاه به صورت میزبان:درگاه داده شود، تنها میزبان تعیین‌شده مجاز به اتصال است. در صورت مشخص شدن رابط، اتصالات تنها روی همان رابط شبکه پذیرفته می‌شوند.
نوشتن خروجی روی میزبان:درگاه به جای خروجی استاندارد (در صورت در دسترس بودن، استفاده از sendfile را فعال می‌کند). این گزینه را می‌توان چندین بار برای ارسال داده به چندین ماشین به کار برد.
تعداد تعداد جلد در دستگاه ورودی (نیازمند استفاده از گزینه -i جهت مشخص کردن دستگاه ورودی است؛ در صورتی که mbuffer باید برای هر جلد جدید اعلان درخواست نمایش دهد، عدد ۰ را به عنوان آرگومان بدهید).
استفاده از یک فایل موقت نگاشت‌شده در حافظه (memory-mapped) به عنوان بافر (مناسب برای بافرهای بسیار بزرگ).
مشابه -t اما با استفاده از فایل مشخص‌شده به عنوان بافر.
ثبت پیام‌ها در فایل به جای خروجی خطای استاندارد.
توقف به مدت تعداد میکروثانیه پس از هر عمل نوشتن - ممکن است کارایی را در برخی درایوهای با سرعت بسیار پایین (کمتر از ۱ مگابایت بر ثانیه) افزایش دهد.
تنظیم حداکثر نرخ خواندن روی نرخ. مقدار نرخ را می‌توان بر حسب بایت، کیلوبایت، مگابایت یا گیگابایت بر ثانیه با پسوند مناسب (مانند k, M, G) مشخص کرد. این گزینه زمانی مفید است که یک درایو نوار داده‌ها را سریع‌تر از توان پردازش میزبان انتقال می‌دهد. در این حالت می‌توانید سرعت انتقال را محدود کرده و نوار را پیوسته در حال حرکت نگه دارید. این کار هم برای درایو نوار مفید است و هم با جلوگیری از توقف و حرکت متناوب نوار، کارایی کلی را بهبود می‌بخشد.
مشابه گزینه بالا، ولی برای تنظیم محدودیت نرخ انتقال بخش نویسنده (خروجی).
تنظیم حداقل نرخ برای محدودسازی پویا نرخ انتقال. نرخ انتقال داده به صورت پویا بین مقادیر حد بالا و حد پایین (گزینه‌های -p و -P) که باید آنها نیز ارائه شوند، تنظیم می‌شود.

در حالت ورودی، نرخ داده با مقدار گزینه -r آغاز شده و بر اساس میزان پر بودن بافر تا مقدار -M کاهش می‌یابد.

در حالت خروجی، نرخ داده به شکل مشابهی تنظیم می‌شود، اما از حداقل نرخ شروع شده و تا نرخ -R برای خروجی افزایش می‌یابد.

بازنویسی روی فایل خروجی در صورتی که از قبل وجود داشته باشد.
دستگاه مورد استفاده یک بارگذار خودکار (autoloader) است که بارگذاری نوار جدید در آن زمان ثانیه طول می‌کشد.
دستگاه مورد استفاده یک بارگذار خودکار است که از دستور برای بارگذاری جلد بعدی استفاده می‌کند. برای جلوگیری از نمایش پیام هشدار در زمان اجرای بدون ترمینال کنترلی (مانند اجرا از طریق cron)، مقدار /bin/false را به عنوان دستور بارگذاری خودکار ارسال کنید. در این حالت بارگذاری خودکار با خطا مواجه شده و mbuffer پس از رسیدن به انتهای نوار با پیام خطا متوقف می‌شود.
تنظیم سطح گزارش‌دهی جزئیات (verbose) روی سطح. مقادیر معتبر بین ۰ تا ۶ هستند (۰ = هیچ، ۱ = خطاها، ۲ = هشدارها، ۴ = پیام‌های اطلاعاتی، ۵ = پیام‌های اشکال‌زدایی، ۶ = اشکال‌زدایی ورودی/خروجی). سطوح بالاتر شامل پیام‌های سطوح پایین‌تر نیز می‌شوند.
حالت خاموش - وضعیت را در خروجی خطای استاندارد نمایش نده.
حالت کاملاً خاموش - وضعیت را در فایل لاگ ثبت نکن.
نوشتن همراه با پشتیبانی از یکپارچگی همگام داده‌ها - این گزینه باعث می‌شود قبل از ادامه کار، تمام عملیات نوشتن کامل شوند. این امر امکان گزارش سریع‌تر و دقیق‌تر خطاها را فراهم می‌کند، اما ممکن است کارایی را کاهش دهد؛ به ویژه سیستم‌هایی با سطح بالای یکپارچگی داده دچار افت شدید کارایی می‌شوند.
توقف پردازش در صورت بروز هرگونه خطا.
تولید هش MD5 از داده‌های انتقال‌یافته.
استفاده از الگوریتم الگوریتم؛ اگر مقدار list داده شود، لیست الگوریتم‌های پشتیبانی‌شده نمایش داده می‌شود.
چاپ شناسه فرآیند (PID) این نمونه. این گزینه در شناسایی و بستن نمونه‌ای از mbuffer که به دلیل مشکل شبکه متوقف شده است، کمک می‌کند. چاپ PID را می‌توان با افزودن عبارت "printpid = 1" در فایل .mbuffer.rc نیز فعال کرد.
فعال‌سازی ناظر (watchdog) که هر مهلت ثانیه بررسی می‌کند آیا فعالیت ورودی/خروجی متوقف شده است یا خیر. اگر هر کانال به اندازه یک دوره کامل متوقف بماند، ناظر پیامی نوشته و mbuffer را با سیگنال SIGINT متوقف می‌کند. توجه داشته باشید که ناظر از عملیات تعویض نوار آگاه نیست؛ بنابراین مهلت ناظر را بیشتر از بدترین زمان تعویض نوار تعیین کنید. ناظر پس از پردازش گزینه -W یا پس از پردازش تمام گزینه‌ها فعال می‌شود. برای جلوگیری از فعال شدن ناظر در حین راه‌اندازی شبکه، گزینه -W را پس از -I و -O قرار دهید.
-4
اجبار به استفاده از پروتکل IPv4 برای گزینه‌های ورودی/خروجی شبکه در خط فرمان.
-6
اجبار به استفاده از پروتکل IPv6 برای گزینه‌های ورودی/خروجی شبکه در خط فرمان.
-0
انتخاب خودکار بین IPv4/IPv6 بر حسب نیاز.
عدم استفاده از O_DIRECT - به عنوان مثال برای فعال‌سازی فشرده‌سازی در فایل‌سیستم btrfs.
اندازه بافر TCP بر حسب بایت. اندازه را می‌توان با پسوند مشخص کرد (b و B برای بایت، k برای کیلوبایت، M برای مگابایت یا G برای گیگابایت).
تنظیم آستانه مهلت زمانی TCP. مقدار پیش‌فرض 10s است. مقادیر بدون واحد به صورت میکروثانیه تفسیر می‌شوند. واحدهای معتبر عبارتند از: us, ms, s یا sec, m یا min, h.
ادامه نوشتن تا آخرین نقطه ممکن از نوار. درایوهای LTO با نزدیک شدن به انتهای نوار به سیستم‌عامل اطلاع می‌دهند و لینوکس با بازگرداندن خطای 'no space left' در هر دو عملیات نوشتن، این موضوع را به فضای کاربری منتقل می‌کند. به طور معمول اولین خطا به منزله پایان نوار در نظر گرفته شده و نوار بعدی درخواست می‌شود، اما با این گزینه، نوشتن تا زمانی که دو بار متوالی خطای 'no space left' رخ دهد ادامه می‌یابد که نشان‌دهنده پایان واقعی نوار است. این کار امکان قرارگیری مقدار کمی داده بیشتر روی هر نوار را فراهم می‌کند.
استفاده از ورودی/خروجی مستقیم (Direct I/O) برای بافر فایل موقت.
نمایش اطلاعات راهنما و خروج.
نمایش اطلاعات نسخه و خروج.

مقادیر پیش‌فرض اکثر گزینه‌ها را می‌توان به صورت جفت‌های کلید = مقدار در یک یا چند فایل پیکربندی تنظیم کرد. فایل‌های نمونه mbuffer.rc را برای مشاهده گزینه‌های موجود و مقادیر پیش‌فرض آنها بررسی کنید. فایل‌های پیکربندی به ترتیب زیر خوانده می‌شوند:

- /etc/mbuffer.rc
- $PREFIX/etc/mbuffer.rc
- $HOME/.mbuffer.rc
- $MBUFFERRC

مقادیر پیش‌فرض داده‌شده در فایل‌های بالا توسط گزینه‌های ارسال‌شده در خط فرمان بازنویسی می‌شوند.

اگر متغیر TMPDIR تنظیم شده باشد، mbuffer فضای ذخیره‌سازی بافرهای مبتنی بر فایل را در این دایرکتوری اختصاص می‌دهد. در صورت تنظیم نبودن TMPDIR، مسیر /var/tmp استفاده خواهد شد.
MBUFFERRC برای مشخص کردن فایل پیکربندی سفارشی mbuffer.rc استفاده می‌شود.
MBUFFER_VOL اطلاعات شناسه جلد (برای دستور بارگذاری خودکار تنظیم می‌شود).
MBUFFER_NUMIN تعداد بایت‌های خوانده‌شده (برای دستور بارگذاری خودکار تنظیم می‌شود).
MBUFFER_NUMOUT تعداد بایت‌های نوشته‌شده (برای دستور بارگذاری خودکار تنظیم می‌شود).

$PREFIX/bin/mbuffer
/var/tmp/mbuffer-*
~/.mbuffer.rc

برای اجرای این برنامه با گزینه‌های پیش‌فرض کافی است تایپ کنید:

mbuffer

استفاده از mbuffer برای پشتیبان‌گیری با tar روی دستگاه نوار پیش‌فرض. گزینه‌های این مثال: فایل موقت نگاشت‌شده در حافظه با اندازه ۱۰ مگابایت، شروع نوشتن پس از پر شدن ۸۰٪ بافر.

tar cf - mydirectory | gzip | mbuffer -t -m 10M -P 80 -f -o $TAPE

استفاده از mbuffer با ۳ نوار به عنوان ورودی و استخراج محتویات در دایرکتوری کاری جاری:

mbuffer -n 3 -i $TAPE | gzip -dc | tar xf -

استفاده از mbuffer برای نوشتن روی چندین جلد نوار:

tar cf - /usr | mbuffer -f -o $TAPE

نوشتن روی چندین نوار و پاک کردن هر نوار قبل از نوشتن:

tar cf - /usr | mbuffer -A "echo next tape; read a < /dev/tty; mt erase $TAPE" -f -o $TAPE

ایجاد پشتیبان از طریق شبکه:

سرور نوار: mbuffer -I 8000 -f -o $TAPE

کلاینت پشتیبان: tar zcf - /home | mbuffer -O tapeserver:8000

توزیع یک درخت دایرکتوری روی چندین ماشین:

سرور اصلی: tar cf - /tree_to_clone | mbuffer -O clone0:8000 -O clone1:8000

کلاینت‌ها: mbuffer -I master:8000 | tar xf -

کار با درایو نوار با مقیاس‌بندی پویای سرعت:

tar cf - / | mbuffer -o /dev/tape -p20% -p80% -M 50M -R 120M

mbuffer -i /dev/tape -p20% -p80% -M 50M -r 120M | tar xf -

برنامه mbuffer در صورت موفقیت مقدار ۰ را برمی‌گرداند. هرگونه خطا منجر به مقدار خروج غیرصفر خواهد شد.

Thomas Maier-Komor <thomas@maier-komor.de>

اگر این نرم‌افزار را می‌پسندید و در شرکت خود برای مقاصد تولیدی از آن استفاده می‌کنید، لطفاً برای حمایت از این پروژه کمک مالی در نظر بگیرید. می‌توانید مستقیماً از طریق PayPal به آدرس ایمیل نویسنده (thomas@maier-komor.de) کمک مالی واریز کنید.

http://www.maier-komor.de/mbuffer.html

این نرم‌افزار تحت مجوز عمومی گنو نسخه ۳ (GNU General Public License V3) منتشر شده است. برای جزئیات به فایل LICENSE مراجعه کنید.

buffer(1)

R20260511 Thomas Maier-Komor