bonnie++(8) System Manager's Manual bonnie++(8)

bonnie++ - برنامه‌ای برای سنجش و آزمایش عملکرد دیسک سخت

bonnie++ [-d dir] [-c concurrency] [-s size(MiB)[:chunk-size(b)[:seeks[:seekers]]]] [-n number-to-stat(*1024)[:max-size[:min-size][:num-directories[:chunk-size]]]] [-m machine-name] [-r ram-size-in-MiB] [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use] [-q] [-f size-for-char-io] [-b] [-D] [-p processes | -y p|s ] [-z seed-num|-Z random-file]

این صفحه راهنما به‌طور خلاصه برنامه bonnie++ را معرفی و مستند می‌کند.

برنامه Bonnie++ ابزاری برای آزمایش و سنجش عملکرد (یا عدم عملکرد مناسب) دیسک‌های سخت و سیستم‌های فایل است. عملیات سیستم فایل انواع بسیار متفاوتی دارد که برنامه‌های مختلف به میزان‌های گوناگون از آن‌ها استفاده می‌کنند. Bonnie++ برخی از این عملیات را آزمایش می‌کند و برای هر آزمون، نتیجه‌ای از میزان کار انجام‌شده در هر ثانیه و درصد زمان پردازنده (CPU) مصرف‌شده را ارائه می‌دهد. برای نتایج عملکرد، اعداد بالاتر بهتر هستند؛ برای مصرف پردازنده و تاخیر، اعداد کمتر بهتر هستند (توجه: پیکربندی‌ای که امتیاز عملکرد ۲۰۰۰ و مصرف پردازنده ۹۰٪ را کسب می‌کند، از نظر بازدهی مصرف پردازنده بهتر از پیکربندی‌ای است که عملکرد ۱۰۰۰ و مصرف پردازنده ۶۰٪ را ارائه می‌دهد).

عملیات برنامه به دو بخش تقسیم می‌شود. بخش نخست، آزمایش توان عملیاتی ورودی/خروجی (I/O throughput) به شیوه‌ای است که برای شبیه‌سازی برخی انواع برنامه‌های پایگاه داده طراحی شده است. بخش دوم، آزمایش ایجاد، خواندن و حذف تعداد زیادی فایل کوچک به شیوه‌ای شبیه به الگوهای استفاده برنامه‌هایی مانند Squid یا INN است.

تمام جزئیات آزمون‌های انجام‌شده توسط Bonnie++ در فایل زیر موجود است: /usr/share/doc/bonnie++/readme.html

در Bonnie++ هر گزینه به شکل یک خط تیره و به دنبال آن یک حرف است و سپس پارامتر بعدی حاوی مقدار آن خواهد بود.

دایرکتوری مورد استفاده برای آزمایش‌ها.
سطح همزمانی (پیش‌فرض ۱). تعداد نسخه‌های آزمون که به صورت همزمان اجرا می‌شوند.
اندازه فایل(ها) برای سنجش عملکرد ورودی/خروجی (I/O) بر حسب مگابایت. اگر اندازه بیشتر از 1G باشد، برای ذخیره داده‌ها از چند فایل استفاده خواهد شد و اندازه هر فایل تا 1G خواهد بود. این پارامتر می‌تواند اندازه تکه (chunk size) را نیز که با علامت دو نقطه (:) از اندازه جدا می‌شود، در بر گیرد. اندازه تکه بر حسب بایت سنجیده می‌شود و باید توانی از دو از ۲۵۶ تا ۱۰۴۸۵۷۶ باشد؛ مقدار پیش‌فرض ۸۱۹۲ است. توجه: اگر به انتهای عدد به ترتیب g یا k اضافه کنید، می‌توانید اندازه را بر حسب گیگابایت یا اندازه تکه را بر حسب کیلوبایت مشخص کنید. این پارامتر همچنین می‌تواند شامل تعداد جستجوها (seeks، پیش‌فرض ۸۱۹۲) و تعداد فرآیندهای جستجوگر (seeker processes، پیش‌فرض ۵) باشد.

اگر اندازه مشخص‌شده ۰ باشد، از این آزمون صرف‌نظر خواهد شد.

تعداد فایل‌ها برای آزمون ایجاد فایل. این مقدار بر حسب مضاربی از ۱۰۲۴ فایل محاسبه می‌شود. دلیل این امر آن است که هیچ‌کس تمایلی به آزمایش کمتر از ۱۰۲۴ فایل ندارد و همچنین به فضای اضافی در نمایشگرهای بریل نیاز است.

اگر تعداد مشخص‌شده ۰ باشد، از این آزمون صرف‌نظر خواهد شد.

حالت پیش‌فرض برای این آزمون، آزمایش با فایل‌های ۰ بایتی است. برای استفاده از فایل‌هایی با اندازه‌های دیگر می‌توانید ساختار زیر را مشخص کنید: number:max:min:num-directories:chunk-size که در آن max حداکثر اندازه و min حداقل اندازه است (در صورت عدم تعیین، هر دو به طور پیش‌فرض ۰ هستند). اگر حداقل و حداکثر اندازه مشخص شوند، هر فایل اندازه‌ای تصادفی در محدوده min..max (شامل خود آن‌ها) خواهد داشت. اگر تعداد دایرکتوری‌ها را مشخص کنید، فایل‌ها به طور مساوی میان آن تعداد زیردایرکتوری توزیع خواهند شد.

اگر max برابر با -1 باشد، به جای فایل‌ها پیوندهای سخت (hard links) ایجاد خواهد شد. اگر max برابر با -2 باشد، به جای فایل‌ها پیوندهای نمادین (soft links) ایجاد خواهد شد.

نام ماشین - صرفاً برای اهداف نمایشی در خروجی.
اندازه حافظه RAM بر حسب مگابایت. اگر این مقدار را مشخص کنید، سایر پارامترها بررسی می‌شوند تا اطمینان حاصل شود که برای ماشینی با این مقدار RAM منطقی هستند. در کاربردهای معمول نیازی به تنظیم این گزینه ندارید چرا که برنامه باید بتواند اندازه RAM را به طور خودکار شناسایی کند. توجه: اگر اندازه را ۰ تعیین کنید، تمام بررسی‌ها غیرفعال خواهند شد...
تعداد دفعات اجرای آزمون. این گزینه زمانی مفید است که می‌خواهید بیش از یک آزمون را اجرا کنید. خروجی را به طور پیوسته در قالب CSV ارسال می‌کند تا زمانی که یا تعداد آزمون‌ها تکمیل شود یا فرآیند متوقف گردد.
شناسه کاربری (UID) مورد استفاده. هنگام اجرا با دسترسی ریشه (root)، شناسه کاربری مورد استفاده برای آزمایش‌ها را مشخص کنید. استفاده از کاربر ریشه توصیه نمی‌شود (به دلیل پیشامد رخدادی در گذشته که در آن باگ Bonnie++ سیستم فردی را پاک کرد)؛ بنابراین اگر واقعاً می‌خواهید با ریشه اجرا کنید از -u root استفاده فرمایید. همچنین اگر می‌خواهید گروه اجرایی را مشخص کنید، از قالب user:group استفاده کنید. اگر کاربری را با نام مشخص کنید اما گروهی تعیین نشود، گروه اصلی آن کاربر انتخاب خواهد شد. اگر کاربری را با شماره مشخص کنید و گروهی تعیین نشود، گروه nogroup خواهد بود.
شناسه گروه (GID) مورد استفاده. همانند استفاده از :group برای پارامتر -u است و صرفاً روشی دیگر برای مشخص کردن آن جهت سازگاری با سایر برنامه‌ها می‌باشد.
حالت بی‌صدا (quiet). در صورت تعیین، برخی از پیام‌های اطلاعاتی اضافی حذف خواهند شد. همچنین داده‌های CSV تنها خروجی در خروجی استاندارد خواهند بود و داده‌های متنی ساده به خروجی خطای استاندارد ارسال می‌شوند. این بدان معناست که می‌توانید دستور bonnie++ -q >> file.csv را برای ثبت داده‌های CSV خود اجرا کنید.
کنترل حالت سریع؛ در صورت عدم ارائه پارامتر از آزمون‌های ورودی/خروجی کاراکتربه‌کاراکتر (per-char IO) صرف‌نظر می‌کند، در غیر این صورت اندازه داده‌ها را برای آزمون‌های ورودی/خروجی کاراکتری مشخص می‌نماید (پیش‌فرض 20M).
عدم بافر کردن نوشتن. اجرای ()fsync پس از هر بار نوشتن.
تعداد فرآیندهایی که سمافورها (semaphores) برای آن‌ها سرویس‌دهی می‌کنند. این گزینه برای ایجاد سمافورها جهت همگام‌سازی چندین فرآیند Bonnie++ استفاده می‌شود. تمام فرآیندهایی که با گزینه -ys هدایت به استفاده از سمافور شده‌اند، هر آزمون را با هماهنگی و همگام‌سازی آغاز خواهند کرد. از "-p -1" برای حذف سمافور استفاده کنید.
انجام همگام‌سازی پیش از هر آزمون. گزینه s برای سمافورها و گزینه p برای اعلان و تایید ورودی (prompting).
استفاده از ورودی/خروجی مستقیم (O_DIRECT) برای آزمون‌های ورودی/خروجی حجیم.
دانه عدد تصادفی (seed) برای تکرار دقیق همان آزمون.
فایل حاوی داده‌های تصادفی در ترتیب بایتی شبکه (network byte order).

دستورات زیر را برای اجرای همزمان سه نسخه از Bonnie++ اجرا کنید:

bonnie++ -p3

bonnie++ -y > out1 &

bonnie++ -y > out2 &

bonnie++ -y > out3 &

خروجی اولیه به صورت متن ساده در ۸۰ ستون است که به شکلی طراحی شده تا هنگام چسباندن در ایمیل به خوبی جا شود و با نمایشگرهای بریل نیز به خوبی کار کند.

نوع دوم خروجی به قالب CSV (مقادیر جداشده با کاما) است. این خروجی می‌تواند به راحتی در هر برنامه صفحه‌گسترده یا پایگاه داده وارد شود. همچنین برنامه‌های bon_csv2html و bon_csv2txt را برای تبدیل داده‌های CSV به ترتیب به قالب‌های HTML و اسکی ساده قرار داده‌ام.

فیلد "Name:Size etc" شامل نام، اندازه فایل، اندازه تکه I/O، میزان همزمانی، تعداد جستجوها و تعداد فرآیندهای جستجوگر است که با نویسه‌های : از یکدیگر جدا شده‌اند.

برای هر آزمون دو عدد گزارش می‌شود: مقدار کار انجام‌شده (اعداد بالاتر بهتر هستند) و درصد زمان پردازنده (CPU) صرف‌شده برای انجام کار (اعداد کمتر بهتر هستند). اگر یک آزمون در کمتر از ۵۰۰ میلی‌ثانیه به پایان برسد، خروجی به صورت "++++" نمایش داده خواهد شد. این بدان دلیل است که چنین نتیجه‌ای به دلیل خطاهای گرد کردن نمی‌تواند به طور دقیق محاسبه شود و ترجیح داده شده به جای نتیجه نادرست، هیچ نتیجه‌ای نمایش داده نشود.

حجم داده‌ها در نمایش متنی ۸۰ ستونی از "K" برای KiB (۱۰۲۴ بایت)، "M" برای MiB (۱۰۴۸۵۷۶ بایت) و "G" برای GiB (۱۰۷۳۷۴۱۸۲۴ بایت) استفاده می‌کند. بنابراین K/sec به معنای مضربی از ۱۰۲۴ بایت در هر ثانیه است.

این برنامه، صفحه راهنمای آن و بسته دبیان توسط Russell Coker <russell@coker.com.au> نوشته شده‌اند و بخش‌هایی از برنامه بر پایه کار Tim Bray <tbray@textuality.com> است.

مستندات، اسکریپت‌های Perl و تمام کدهای مربوط به آزمون ایجاد هزاران فایل توسط Russell Coker نگاشته شده‌اند، اما کل بسته تحت حق‌نشر مشترک با Tim Bray قرار دارد.

سیگنال SIGINT را پردازش کرده و پاک‌سازی انجام می‌دهد (که ممکن است کمی زمان ببرد)؛ دریافت دومین SIGINT یا یک SIGQUIT باعث توقف فوری برنامه خواهد شد.

سیگنال‌های SIGXCPU و SIGXFSZ رفتاری مشابه SIGINT دارند.

سیگنال SIGHUP نادیده گرفته می‌شود.

مجموع اندازه‌های تصادفی فایل‌ها در اجراهای مختلف آزمون، مقادیر متفاوتی خواهد بود. در نظر دارم کدی اضافه کنم که مجموع را بررسی کرده و تضمین کند که مجموع مقادیر در اجراهای مجزا یکسان خواهد بود.

کد منبع در http://www.coker.com.au/bonnie++ در دسترس است.

برای اطلاعات بیشتر http://etbe.coker.com.au/category/benchmark را ببینید.

zcav(8), getc_putc(8), bon_csv2html(1), bon_csv2txt(1)