SG_RBUF(8) SG3_UTILS SG_RBUF(8)

sg_rbuf - داده‌ها را با استفاده از دستور READ BUFFER در SCSI می‌خواند

sg_rbuf [--buffer=EACH] [--dio] [--help] [--mmap] [--quick] [--size=OVERALL] [--verbose] [--version] DEVICE

sg_rbuf [-b=EACH_KIB] [-d] [-m] [-q] [-s=OVERALL_MIB] [-t] [-v] [-V] DEVICE

این دستور داده‌ها را با دستور SCSI READ BUFFER می‌خواند و سپس دور می‌ریزد. معمولاً داده‌های خوانده‌شده از حافظه کَش (cache) دیسک هستند. فرض بر این است که داده‌ها با سرعت بالا تأمین می‌شوند (اگرچه این مورد توسط استانداردهای SCSI تضمین نشده است) تا از خواندن داده‌ها از روی رسانه فیزیکی سریع‌تر باشد. این دستور برای زمان‌بندی و سنجش سرعت انتقال روی یک بستر ارتباطی SCSI طراحی شده است.

برای واکشی داده‌ها با یک دستور SCSI READ BUFFER و در صورت تمایل رمزگشایی آن، ابزار sg_read_buffer را ببینید. همچنین ابزار sg_write_buffer نیز وجود دارد که علاوه بر کارهای دیگر، برای بارگیری سفت‌افزار (firmware) مفید است.

این ابزار از دو نحو خط فرمان پشتیبانی می‌کند؛ شیوه ارجح‌تر ابتدا در خلاصه دستور نشان داده شده و در این بخش توضیح داده می‌شود. بخشی در ادامه درباره نحو خط فرمان قدیمی، گروه دوم گزینه‌ها را مشخص می‌کند.

این ابزار فقط مخصوص لینوکس است و تنها زمانی کار می‌کند که DEVICE یک دستگاه sg باشد (مانند «‎/dev/sg1»). ابزار sg_read_buffer کارکرد مشابهی دارد و برای سیستم‌عامل‌های دیگر نیز پورت شده است و در لینوکس می‌تواند از bsg و نام‌های معمولی دستگاه بلوکی (مانند «‎/dev/sdc») استفاده کند.

آرگومان‌های گزینه‌های طولانی برای گزینه‌های کوتاه نیز الزامی هستند.

که در آن EACH تعداد بایت‌هایی است که در هر دستور READ BUFFER منتقل می‌شود. مقدار پیش‌فرض، اندازه بافر در دسترس واقعی است که توسط دستور READ BUFFER (توصیف‌کننده) برگردانده می‌شود. بیشینه مقدار برابر با همان پیش‌فرض است، بنابراین از این آرگومان فقط می‌توان برای کاهش اندازه هر انتقال به مقداری کمتر از اندازه بافر در دسترس واقعی دستگاه استفاده کرد.
در صورت در دسترس بودن، از ورودی/خروجی مستقیم (direct IO) استفاده می‌کند. این گزینه تنها در صورتی موجود است که DEVICE یک گره دستگاه درایور sg باشد (مانند ‎/dev/sg1). در این حالت، درایور sg تلاش می‌کند DMA را از آداپتور SCSI به گونه‌ای پیکربندی کند که انتقال مستقیماً به حافظه کاربر انجام شود. این کار کپی شدن داده‌ها از طریق بافرهای هسته را حذف می‌کند. اگر در دسترس نباشد، این موضوع گزارش شده و در عوض ورودی/خروجی غیرمستقیم انجام می‌شود.
پیام راهنمای استفاده را چاپ کرده و خارج می‌شود.
در صورت در دسترس بودن، از ورودی/خروجی نگاشت‌شده در حافظه (memory mapped IO) استفاده می‌کند. این گزینه تنها در صورتی موجود است که DEVICE یک گره دستگاه درایور sg باشد (مانند ‎/dev/sg1). در این حالت، درایور sg تلاش می‌کند DMA را از آداپتور SCSI به گونه‌ای پیکربندی کند که انتقال مستقیماً به حافظه کاربر انجام شود. این کار کپی شدن داده‌ها از طریق بافرهای هسته را حذف می‌کند.
تغییر وضعیت به گزینه‌های سبک قدیمی‌تر. لطفاً به عنوان اولین گزینه استفاده شود.
داده‌ها را تنها به بافرهای هسته منتقل می‌کند (معمولاً توسط DMA از کارت آداپتور SCSI) و آن‌ها را به فضای کاربر منتقل نمی‌کند. این گزینه تنها در صورتی موجود است که DEVICE یک گره دستگاه درایور sg باشد (مانند ‎/dev/sg1).
که در آن OVERALL اندازه کل انتقال به بایت است. مقدار پیش‌فرض ۲۰۰ مبی‌بایت (‎200*1024*1024 بایت) است. تعداد واقعی بایت‌های منتقل‌شده ممکن است اندکی کمتر از مقدار درخواست‌شده باشد، زیرا تمام انتقال‌ها دارای اندازه یکسان هستند (و تقسیم عدد صحیح با گرد کردن به سمت صفر همراه است).
زمان بخش انتقال داده‌های حجیم این دستور را اندازه می‌گیرد. زمان سپری‌شده به همراه محاسبه مگابایت بر ثانیه چاپ می‌شود. در این حالت «MB» برابر با ۱٬۰۰۰٬۰۰۰ بایت است. برای محاسبه زمان، در داخل برنامه از فراخوانی سیستمی gettimeofday() استفاده می‌شود.
سطح پرگویی خروجی را افزایش می‌دهد. می‌تواند چندین بار استفاده شود.
رشته نسخه را چاپ کرده و خارج می‌شود.

این دستور معمولاً در دیسک‌های مدرن SCSI که دارای حافظه کَش RAM در مدارات الکترونیکی درایو خود هستند استفاده می‌شود. اگر هیچ ورودی/خروجی با رسانه مغناطیسی یا دستگاه‌های کندتر مانند Flash RAM درگیر نباشد، دیسک ممکن است بتواند داده‌ها را با سرعتی واکشی کند که پهنای باند بستر SCSI را اشباع کند. در این صورت گلوگاه ممکن است بخش DMA در HBA، درایورهای لینوکس یا سخت‌افزار ماشین میزبان (مانند سرعت RAM) باشد.

آرگومان‌های عددی گوناگون (مانند OVERALL) می‌توانند شامل پسوندهای ضریب‌دار باشند یا به صورت هگزادسیمال داده شوند. بخش «NUMERIC ARGUMENTS» را در صفحه راهنمای sg3_utils(8) ببینید.

در سیستم آزمایشی، ‎/dev/sg0 متناظر با یک دیسک سریع روی گذرگاه U2W SCSI است (حداکثر ۸۰ مگابایت بر ثانیه). مشخصات دیسک بیان می‌کند که کَش آن ۴ مگابایت است.

$ time ./sg_rbuf /dev/sg0
READ BUFFER reports: buffer capacity=3434944,
  offset boundary=6
Read 200 MiB (actual 199 MiB, 209531584 bytes),
  buffer size=3354 KiB
real 0m5.072s, user 0m0.000s, sys 0m2.280s

بنابراین این مقدار تقریباً ۴۰ مگابایت بر ثانیه در بهره‌وری ۴۰٪ است. حال با افزودن گزینه -q این توان عملیاتی بهبود می‌یابد و بهره‌وری به ۰٪ کاهش پیدا می‌کند.

$ time ./sg_rbuf -q /dev/sg0
READ BUFFER reports: buffer capacity=3434944,
  offset boundary=6
Read 200 MiB (actual 199 MiB, 209531584 bytes),
  buffer size=3354 KiB
real 0m2.784s, user 0m0.000s, sys 0m0.000s

وضعیت خروج sg_rbuf در صورت موفقیت ۰ است. در غیر این صورت به صفحه راهنمای sg3_utils(8) مراجعه کنید.

گزینه‌های موجود در این بخش تنها گزینه‌های موجود قبل از نسخه ۱.۲۳ از sg3_utils بودند. از آن زمان، این ابزار به‌طور پیش‌فرض از گزینه‌های جدیدتر خط فرمان استفاده می‌کند که می‌توان با استفاده از --old (یا -O) به عنوان اولین گزینه، این رفتار را لغو کرد. برای روشی دیگر جهت اجبار به استفاده از این گزینه‌های خط فرمان قدیمی، بخش «متغیرهای محیطی» را ببینید.

که در آن EACH_KIB تعداد کیلوبایت‌ها (یعنی واحدهای ۱۰۲۴ بایتی) است که باید توسط هر دستور READ BUFFER منتقل شود. شبیه به گزینه --buffer=EACH در توضیحات اصلی است اما واحدهای آن متفاوت است.
در صورت در دسترس بودن، از ورودی/خروجی مستقیم استفاده می‌کند. معادل گزینه --dio در توضیحات اصلی است.
در صورت در دسترس بودن، از ورودی/خروجی نگاشت‌شده در حافظه استفاده می‌کند. معادل گزینه --mmap در توضیحات اصلی است.
تغییر وضعیت به گزینه‌های سبک جدیدتر.
داده‌ها را تنها به بافرهای هسته منتقل می‌کند (معمولاً توسط DMA از کارت آداپتور SCSI) و آن‌ها را به فضای کاربر منتقل نمی‌کند. معادل گزینه --quick در توضیحات اصلی است.
که در آن OVERALL_MIB اندازه کل انتقال به مگابایت (۱۰۴۸۵۷۶ بایت) است. شبیه به گزینه --size=OVERALL در توضیحات اصلی است اما واحدهای آن متفاوت است.
زمان بخش انتقال داده‌های حجیم این دستور را اندازه می‌گیرد. معادل گزینه --time در توضیحات اصلی است.
سطح پرگویی خروجی را افزایش می‌دهد. می‌تواند چندین بار استفاده شود.
رشته نسخه را چاپ کرده و خارج می‌شود.

از نسخه ۱.۲۳ ابزار sg3_utils، متغیر محیطی SG3_UTILS_OLD_OPTS می‌تواند مقداردهی شود. هنگامی که این متغیر وجود داشته باشد، این ابزار انتظار گزینه‌های خط فرمان قدیمی‌تر را خواهد داشت. بنابراین وجود این متغیر محیطی معادل استفاده از --old (یا -O) به عنوان اولین گزینه خط فرمان است.

نوشته‌شده توسط Douglas Gilbert

گزارش باگ‌ها به <dgilbert at interlog dot com>.

حق نشر © 2000-2017 Douglas Gilbert
این نرم‌افزار تحت مجوز GPL نسخه ۲ توزیع شده است. هیچ تضمینی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب با یک هدف خاص.

sg_read_buffer(8), sg_write_buffer(8), sg_test_rwbuf(8) (همگی در sg3_utils)

October 2017 sg3_utils-1.43