IOPING(1) دستورات کاربر IOPING(1)

ioping - ابزار ساده پایش زمان تاخیر ورودی/خروجی دیسک

ioping [-ABCDJLNRWGYykq] [-a count] [-b count] [-c count] [-e seed] [-i interval] [-l speed] [-r rate] [-t time] [-T time] [-s size] [-S wsize] [-o offset] [-w deadline] [-p period] [-P period] [-I [format]] directory|file|device
ioping -h | -v

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

تعداد count درخواست اول را در آمار نادیده می‌گیرد؛ مقدار پیش‌فرض 1 است. نخستین درخواست معمولاً به دلیل ویژگی‌های مدیریت مصرف انرژی بسیار کندتر است.
ارسال مجموعه‌ای شامل count درخواست بدون تاخیر؛ مقدار پیش‌فرض 0 است. ویژگی‌های تهاجمی صرفه‌جویی در مصرف انرژی، درخواست‌ها را حتی پس از تاخیری کوتاه کند می‌کنند.
توقف پس از count درخواست؛ مقدار پیش‌فرض 0 (نامحدود) است.
تنظیم دانه (seed) برای مولد اعداد تصادفی؛ مقدار پیش‌فرض 0 (تصادفی) است.
تنظیم بازه زمانی (time) میان درخواست‌ها؛ مقدار پیش‌فرض 1s (یک ثانیه) است.
تعیین محدودیت سرعت بر حسب size در هر ثانیه. بازه زمانی را به اندازه درخواست تقسیم بر سرعت افزایش می‌دهد.
تعیین محدودیت نرخ بر حسب count در هر ثانیه. بازه زمانی را به ۱ تقسیم بر نرخ افزایش می‌دهد.
-t, -min-time time
حداقل زمان معتبر برای درخواست (0us). درخواست‌های بسیار سریع در آمار نادیده گرفته می‌شوند.
حداکثر زمان معتبر برای درخواست. درخواست‌های بسیار کند در آمار نادیده گرفته می‌شوند.
-s, -size size
اندازه درخواست؛ مقدار پیش‌فرض 4k است.
اندازه مجموعه کاری (1m برای دایرکتوری، کل اندازه برای فایل یا دستگاه).
آفست شروع در فایل یا دستگاه (پیش‌فرض 0).
توقف پس از گذشت زمان time؛ مقدار پیش‌فرض 0 (نامحدود) است.
چاپ آمار خام به ازای هر count درخواست (قالب آن در ادامه آمده است).
چاپ آمار خام در هر بازه زمانی time.
استفاده از ورودی/خروجی ناهمگام (فراخوان‌های سیستمی مانند io_setup(2)، io_submit(2) و غیره).
حالت دسته‌ای (Batch). جلوگیری از پیام‌های اضافی و چاپ آمار نهایی در قالب خام.
استفاده از ورودی/خروجی کش‌شده. از بی‌اعتبارسازی حافظه موقت (کش) از طریق posix_fadvise(2) پیش از خواندن و fdatasync(2) پس از هر نوشتن جلوگیری می‌کند.
استفاده از ورودی/خروجی مستقیم (به O_DIRECT در open(2) مراجعه کنید).
چاپ زمان جاری برای هر درخواست. آرگومان اختیاری قالب زمان را با نشانه‌گذاری strftime(3) مشخص می‌کند؛ مقدار پیش‌فرض "%b %d %T" (مانند Jan 01 00:00:00) است.
چاپ خروجی در قالب JSON.
استفاده از عملیات ترتیبی به‌جای تصادفی. این گزینه اندازه پیش‌فرض درخواست را نیز روی 256k تنظیم می‌کند (مشابه -size 256k).
تنظیم RWF_NOWAIT روی ورودی/خروجی، که به هسته اعلام می‌کند در صورت عدم امکان اجرای فوری درخواست، منتظر نماند (به RWF_NOWAIT در preadv2(2) مراجعه کنید).
آزمون نرخ جست‌وجوی دیسک، یا آزمون پهنای باند در صورت استفاده هم‌زمان با -linear.

این گزینه نمایش خروجی خوانا برای انسان را برای هر درخواست غیرفعال می‌کند (مشابه -quiet)، فاصله پیش‌فرض را روی صفر تنظیم می‌کند (-interval 0)، سنجش را پس از ۳ ثانیه متوقف می‌سازد (-work-time 3) و اندازه پیش‌فرض مجموعه کاری را به 64m افزایش می‌دهد (-work-size 64m). در صورتی که دیسک دارای حافظه کش سخت‌افزاری بسیار بزرگ باشد، اندازه مجموعه کاری (-work-size) باید به همان نسبت افزایش یابد.

استفاده از عملیات نوشتن به‌جای خواندن. برای فایل موقت در مقصد دایرکتوری ایمن است. ورودی/خروجی نوشتن در سیستم‌هایی که خواندن بدون کش پشتیبانی نمی‌شود یا در سطوحی کش می‌شود، نتایج مطمئن‌تری می‌دهد.
ممکن است برای فایل یا دستگاه *خطرناک* باشد: زیرا داده‌های شما را بازنویسی و نابود می‌کند. در این حالت باید سه بار تکرار شود (-WWW).
جابه‌جایی متناوب میان درخواست‌های خواندن و نوشتن.
استفاده از ورودی/خروجی همگام (به O_SYNC در open(2) مراجعه کنید).
استفاده از ورودی/خروجی همگام داده (به O_DSYNC در open(2) مراجعه کنید).
-k, -keep
نگه‌داری و استفاده مجدد از فایل کاری موقت "ioping.tmp" (تنها برای مقصد دایرکتوری).
عدم نمایش دوره‌ای خروجی خوانا برای انسان.
-h, -help
نمایش پیام راهنما و خروج.
نمایش نسخه و خروج.

برای گزینه‌هایی که آرگومان زمانی می‌پذیرند (-interval، -print-interval و -work-time)، مقدار پیش‌فرض بر حسب ثانیه است، مگر اینکه یکی از پسوندهای زیر مشخص شود (بدون حساسیت به بزرگی و کوچکی حروف):

نانوثانیه (یک میلیاردم ثانیه، 1 / 1 000 000 000)
میکروثانیه (یک میلیونم ثانیه، 1 / 1 000 000)
میلی‌ثانیه (یک هزارم ثانیه، 1 / 1 000)
ثانیه
دقیقه
ساعت

برای گزینه‌هایی که آرگومان اندازه می‌پذیرند (-size، -speed-limit، -work-size و -work-offset)، مقدار پیش‌فرض بر حسب بایت است، مگر اینکه یکی از پسوندهای زیر مشخص شود (بدون حساسیت به بزرگی و کوچکی حروف):

سکتورهای دیسک (اندازه هر سکتور همواره ۵۱۲ بایت است).
کیلوبایت (1 024 بایت)
صفحه‌های حافظه (اندازه هر صفحه همواره 4KiB است).
مگابایت (1 048 576 بایت)
گیگابایت (1 073 741 824 بایت)
ترابایت (1 099 511 627 776 بایت)

برای گزینه‌هایی که آرگومان عددی می‌پذیرند (-count و -print-count)، می‌توانید به‌صورت اختیاری یکی از پسوندهای زیر را مشخص کنید (بدون حساسیت به بزرگی و کوچکی حروف):

کیلو (هزار، 1 000)
مگا (میلیون، 1 000 000)
گیگا (میلیارد، 1 000 000 000)
ترا (تریلیون، 1 000 000 000 000)

در صورت موفقیت مقدار 0 را برمی‌گرداند. کدهای خطای زیر تعریف شده‌اند:

1
استفاده نادرست از دستور (خطا در آرگومان‌ها).
2
خطا در مرحله آماده‌سازی.
3
خطا در زمان اجرا.

ioping -print-count 100 -count 200 -interval 0 -quiet .

99 10970974 9024 36961531 90437 110818 358872 30756 100 12516420
100 9573265 10446 42785821 86849 95733 154609 10548 100 10649035
(1) (2)     (3)   (4)      (5)   (6)   (7)    (8)   (9) (10)

(1) تعداد درخواست‌ها در آمار
(2) زمان اجرا (نانوثانیه)
(3) درخواست در هر ثانیه (iops)
(4) سرعت انتقال (بایت در ثانیه)
(5) حداقل زمان درخواست (نانوثانیه)
(6) میانگین زمان درخواست (نانوثانیه)
(7) حداکثر زمان درخواست (نانوثانیه)
(8) انحراف معیار زمان درخواست (نانوثانیه)
(9) کل درخواست‌ها (شامل دوره گرم‌کردن اولیه، بسیار کند یا بسیار سریع)
(10) کل زمان اجرا (نانوثانیه)

با استفاده از گزینه -J|--json دستور ioping آرایه‌ای از اشیای JSON را چاپ می‌کند:

[
...
{
  // timestamps
  "timestamp": (unix time in seconds as float),
  "localtime": (local time ISO 8601),
  // io target
  "target": {
    "path": (target path),
    "fstype": (filesystem name),
    "device": (device name),
    "device_size": (device size in bytes)
  },
  // io request
  "io": {
    "request": (request index),
    "operation": (request type: "read" | "write"),
    "size": (request size in bytes),
    "time": (io time in ns),
    "ignored": (ignored in statistics: true | false)
  },
  // statistics
  "stat": {
    "count": (nr requests),
    "size": (total io size in bytes),
    "time": (total io time in ns),
    "iops": (avg iops),
    "bps": (avg rate),
    "min": (min io time in ns),
    "avg": (avg io time in ns),
    "max": (max io time in ns),
    "mdev": (standard deviation in ns)
  },
  // load statistics
  "load": {
    "count": (nr requests),
    "size": (total io size in bytes),
    "time": (total real time in ns),
    "iops": (avg iops),
    "bps": (avg rate)
  }
},
...
]

نمایش زمان تاخیر ورودی/خروجی دیسک با مقادیر پیش‌فرض و در دایرکتوری جاری تا زمان متوقف شدن توسط کاربر. این دستور یک فایل کاری موقت (لینک‌نشده/مخفی) آماده می‌کند و بخش‌های تصادفی از آن را با استفاده از درخواست‌های خواندن غیرکش‌شده می‌خواند.
سنجش زمان تاخیر در /tmp با استفاده از ۱۰ درخواست ۱ مگابایتی.
سنجش نرخ جست‌وجوی (seek rate) دیسک.
سنجش سرعت ترتیبی دیسک.
دریافت سرعت ترتیبی دیسک بر حسب بایت در ثانیه.
استخراج زمان محلی و زمان ورودی/خروجی بر حسب میلی‌ثانیه از خروجی JSON.

iostat(1), dd(1), fio(1), stress(1), stress-ng(1), dbench(1), sysbench(1), fsstress(1), xfstests(1), hdparm(8), badblocks(8)

https://github.com/koct9i/ioping

این برنامه توسط Konstantin Khlebnikov نوشته شده است koct9i@gmail.com.
صفحه راهنما توسط Kir Kolyshkin نوشته شده است kir@openvz.org.

Oct 2014