| MEMASLAP(1) | libmemcached-awesome | MEMASLAP(1) |
نام (NAME)
memaslap - ابزار تست بار و بنچمارک کارایی سرورهای Memcached
خلاصه دستور (SYNOPSIS)
memaslap [گزینهها]
توضیحات (DESCRIPTION)
دستور memaslap یک ابزار تولید بار کاری و سنجش کارایی (بنچمارک) برای سرورهای memcached است. این ابزار بارهای کاری قابلپیکربندی مانند تعداد نخها، همزمانی، تعداد اتصالات، مدت زمان اجرا، بازنویسی (overwrite)، نرخ خطا در کش (miss rate)، اندازه کلیدها، اندازه مقادیر، نسبت دستورات get/set، توان عملیاتی مورد انتظار (throughput) و موارد دیگر را تولید میکند. علاوه بر این، اعتبارسنجی دادهها، اعتبارسنجی زمان انقضا، پروتکلهای UDP و باینری، آزمون فیسبوک (facebook test)، آزمون رونوشتبرداری (replication)، درخواستهای چندگانه (multi-get) و اتصال مجدد را نیز ارزیابی و تست میکند.
ابزار Memaslap اتصالات شبکه را همانند memcached با استفاده از libevent مدیریت میکند. هر نخ از memaslap به یک هسته پردازنده (CPU) مقید میشود، نخها هیچ ارتباطی با یکدیگر ندارند و درون هر نخ چندین اتصال سوکت وجود دارد. هر اتصال توزیع اندازه کلید، توزیع اندازه مقدار و توزیع دستورات را به صورت مستقل درون خود حفظ و مدیریت میکند.
میتوانید سرورها را با گزینه memaslap --servers یا از طریق متغیر محیطی MEMCACHED_SERVERS <#envvar-MEMCACHED_SERVERS> مشخص کنید.
ویژگیها (FEATURES)
ابزار Memslap برای اهداف و با قابلیتهای زیر توسعه یافته است:
مدیریت ناهمگام اتصالات شبکه به کمک libevent.
تنظیم هر دو پروتکل TCP و UDP برای استفاده از ورودی/خروجی غیرمسدودکننده (Non-blocking I/O).
بهبود موازیسازی: کارایی بالاتر در محیطهای چندنخی.
بهبود بهرهوری زمانی: سرعت پردازش بالاتر.
تولید بهینهتر کلیدها و مقادیر؛ توزیع اندازه کلید و اندازه مقدار قابلپیکربندی است.
پشتیبانی از دستورات get، multi-get و set؛ توزیع فراوانی دستورات قابلپیکربندی است.
پشتیبانی از نرخ خطای کش (miss rate) و نرخ بازنویسی (overwrite rate) قابلکنترل.
پشتیبانی از اعتبارسنجی دادهها و زمان انقضا.
پشتیبانی از تخلیه و ثبت دورهای اطلاعات آماری.
پشتیبانی از هزاران اتصال همزمان TCP.
پشتیبانی از پروتکل باینری (دودویی).
پشتیبانی از آزمون فیسبوک (دستور set با TCP و multi-get با UDP) و آزمون رونوشتبرداری (Replication).
جزئیات (DETAILS)
پیادهسازی بهینه شبکه
در memaslap، هر دو پروتکل TCP و UDP از ورودی/خروجی شبکه غیرمسدودکننده استفاده میکنند. تمام رخدادهای شبکه مانند memcached توسط libevent مدیریت میشوند. ماژول شبکه memaslap مشابه memcached است. استفاده از libevent تضمین میکند که memaslap بتواند ترافیک شبکه را با بازدهی بسیار بالایی مدیریت کند.
پیادهسازی بهینه چندنخی و همزمانی
ابزار Memslap پیادهسازی چندنخی مشابهی با memcached دارد. این ابزار یک یا چند نخ مستقل ایجاد میکند؛ اگر سیستم از تنظیم وابستگی هسته پردازنده (CPU core affinity) پشتیبانی کند، هر نخ به یک هسته اختصاصی متصل میشود.
علاوه بر این، هر نخ نمونهای از libevent برای مدیریت رویدادهای شبکه دارد؛ هر نخ دارای یک یا چند تسک همزمانی خودگردان است و هر همزمانی دارای یک یا چند اتصال سوکت است. تمام تسکهای همزمان، حتی اگر در یک نخ یکسان باشند، با یکدیگر ارتباط برقرار نمیکنند.
ابزار Memslap میتواند هزاران اتصال سوکت ایجاد کند و هر تسک همزمانی دارای دهها اتصال سوکت است. هر همزمانی به صورت تصادفی یا ترتیبی یک اتصال سوکت را از استخر اتصالات خود انتخاب کرده و اجرا میکند؛ بنابراین memaslap تضمین میکند که هر همزمانی در هر لحظه مشخص فقط با یک اتصال سوکت کار کند. کاربران میتوانند تعداد همزمانیها و تعداد اتصالات سوکت هر همزمانی را متناسب با بار کاری مورد نظر خود تعیین کنند.
پیادهسازی بهینه تولید کلید و مقدار
به منظور افزایش بهرهوری زمانی و صرفهجویی در حافظه، memaslap یک جدول کاراکتر تصادفی با ۱۰ میلیون کاراکتر ایجاد میکند. تمام پسوندهای کلیدها و مقادیر از این جدول کاراکتر تصادفی تولید میشوند.
ابزار Memslap از آفست درون جدول کاراکتر و طول رشته برای شناسایی رشتهها استفاده میکند که این کار موجب صرفهجویی چشمگیر در مصرف حافظه میشود. هر کلید شامل دو بخش است: پیشوند و پسوند. پیشوند یک عدد uint64_t به اندازه ۸ بایت است. برای امکان اعتبارسنجی دادههای قبلی، memaslap باید اطمینان حاصل کند که هر کلید یکتا است، بنابراین از این پیشوند برای شناسایی کلید استفاده میکند. پیشوند نباید شامل کاراکترهای غیرمجاز مانند 'r'، 'n'، '0' یا فاصله (' ') باشد؛ memaslap از الگوریتمی اختصاصی برای تضمین این امر بهره میبرد.
ابزار Memslap در ابتدای کار تمام اشیا (جفتهای کلید-مقدار) را یکجا تولید نمیکند، بلکه تنها به اندازهای شیء ایجاد میکند که پنجره تسک (task window به طور پیشفرض ۱۰ هزار شیء) برای هر همزمانی پر شود. هر شیء دارای اطلاعات پایهای شامل پیشوند کلید، آفست پسوند کلید در جدول کاراکتر، طول کلید، آفست مقدار در جدول کاراکتر و طول مقدار است.
در حین فرایند کار، هر تسک همزمانی به صورت ترتیبی یا تصادفی شیئی را از پنجره کاری انتخاب کرده و عملیات set یا get را روی آن انجام میدهد. همزمان، هر همزمانی اشیای قدیمی را از پنجره کاری خود خارج کرده و اشیای جدیدی جایگزین آنها میکند.
زمانبندی ساده اما کارآمد تسکها
ابزار Memslap از libevent برای زمانبندی تمام تسکهای همزمان نخها استفاده میکند و هر همزمانی تسکها را بر اساس پنجره محلی خود زمانبندی مینماید. فرضیه Memslap این است که اگر هر همزمانی توزیع کلید، توزیع مقدار و توزیع دستورات یکسانی را حفظ کند، از دید بیرونی، memaslap تمام توزیعها را در مقیاس کلی حفظ خواهد کرد. هر پنجره کاری شامل اشیای متعددی است که هر شیء مشخصات پایهای خود مانند کلید، مقدار، زمان انقضا و غیره را نگهداری میکند. در هر لحظه، تمام اشیای درون پنجره، توزیع ثابت و یکسانی از کلید و مقدار را حفظ میکنند. در صورت بازنویسی (overwrite) یک شیء، مقدار آن بهروزرسانی میشود. Memslap صحت دادهها یا زمان انقضا را بر اساس اطلاعات ذخیرهشده شیء در پنجره کاری اعتبارسنجی میکند.
کتابخانه libevent بر اساس رویداد شبکه مشخص، تعیین میکند کدام همزمانی پاسخگو باشد. سپس آن همزمانی بر اساس توزیع دستورات، دستور مورد نظر (get یا set) را برای اجرا برمیگزیند. اگر نیاز باشد شیء قدیمی حذف و شیء جدیدی اضافه گردد، به منظور حفظ ثبات توزیع کلید و مقدار، شیء جدید باید دقیقاً همان طول کلید و طول مقدار شیء قبلی را داشته باشد.
اگر سرور memcached دارای دو لایه کش (حافظه رم و SSD) باشد، اجرای memaslap با اندازههای مختلف پنجره کاری میتواند نرخهای مختلف خطای کش (miss rate) را شبیهسازی کند. اگر memaslap در ابتدا اشیای کافی به پنجرهها اضافه کند و حافظه کش اولیه memcached نتواند تمام اشیای مقداردهیشده را ذخیره کند، memaslap برخی اشیا را از لایه دوم کش فراخوانی خواهد کرد که این موضوع باعث miss در لایه اول میشود. بنابراین کاربر میتواند اندازه پنجره را طوری تنظیم کند که نرخ خطای مورد انتظار لایه اول کش شبیهسازی شود.
پیادهسازی کاربردی چندسروری، UDP، TCP، چند-دریافتی و پروتکل دودویی
از آنجا که هر نخ به صورت خودگردان عمل میکند، memaslap میتواند نخهای مختلف را به سرورهای مختلف memcached اختصاص دهد. این تنها یکی از روشهای آزمایش چند سرور همزمان در memaslap است. تنها محدودیت این است که تعداد سرورها نباید بیشتر از تعداد نخها باشد. روش دیگر برای آزمایش چند سرور، آزمون رونوشتبرداری (Replication) است. هر همزمانی یک اتصال سوکت به هر سرور memcached دارد. در این پیادهسازی، memaslap میتواند برخی اشیا را روی یک سرور memcached ذخیره کرده (set) و همان اشیا را از سرورهای دیگر دریافت کند (get).
به طور پیشفرض، Memslap عملیات get تکموردی را اجرا میکند. اگر کاربر گزینه multi-get را فعال کند، memaslap تعداد کافی دستور get را جمعآوری کرده و آنها را در قالب یک بسته مشترک ارسال میکند.
ابزار Memslap هم از پروتکل ASCII و هم پروتکل باینری (دودویی) پشتیبانی میکند، اما به طور پیشفرض روی پروتکل ASCII اجرا میشود. همچنین به طور پیشفرض از پروتکل TCP استفاده میکند ولی آزمون روی UDP را نیز پوشش میدهد. از آنجا که UDP غیرقابلاعتماد است، ممکن است ریزش بستهها (packet loss) و بستههای خارج از ترتیب رخ دهد. Memslap یک بافر حافظه اختصاصی برای مدیریت این شرایط ایجاد میکند. این ابزار تلاش میکند تمام دادههای پاسخ یک دستور را از سرور خوانده و آنها را مرتبسازی مجدد کند. در صورت مفقود شدن بستهها، سازوکار انقضای زمان انتظار (timeout) تضمین میکند بستههای ناقص دور ریخته شده و دستور بعدی ارسال گردد.
نحوه استفاده (USAGE)
نمونههای استفاده از دستور:
memaslap -s 127.0.0.1:11211 -S 5s
memaslap -s 127.0.0.1:11211 -t 2m -v 0.2 -e 0.05 -b
memaslap -s 127.0.0.1:11211 -F config -t 2m -w 40k -S 20s -o 0.2
memaslap -s 127.0.0.1:11211 -F config -t 2m -T 4 -c 128 -d 20 -P 40k
memaslap -s 127.0.0.1:11211 -F config -t 2m -d 50 -a -n 40
memaslap -s 127.0.0.1:11211,127.0.0.1:11212 -F config -t 2m
memaslap -s 127.0.0.1:11211,127.0.0.1:11212 -F config -t 2m -p 2
برای اجرای memaslap کاربر باید حداقل یک سرور را مشخص کند. سایر پارامترها دارای مقادیر پیشفرض هستند که در جدول زیر آمده است:
تعداد نخها = 1 همزمانی = 16
مدت زمان اجرا = 600 ثانیه فایل پیکربندی = NULL
اندازه کلید = 64 اندازه مقدار = 1024
نسبت Get/set = 9:1 اندازه پنجره = 10k
تعداد اجرا = 0 دریافت تکی (Single get) = true
دریافت چندگانه (Multi-get) = false تعداد سوکتهای هر همزمانی = 1
اتصال مجدد = false اعتبارسنجی دادهها = false
اعتبارسنجی زمان انقضا = false پروتکل ASCII = true
پروتکل باینری = false ثبت دورهای اطلاعات آماری = false
نسبت بازنویسی = 0% پروتکل UDP = false
پروتکل TCP = true محدودیت توان عملیاتی = false
آزمون فیسبوک = false آزمون رونوشتبرداری = false
اندازه کلید، اندازه مقدار و توزیع دستورات
تمامی توزیعها از فایل پیکربندی مشخصشده توسط کاربر با گزینه "--cfg_cmd" خوانده میشوند. در صورتی که فایلی تعیین نشود، memaslap با مقادیر پیشفرض (اندازه کلید = ۶۴، اندازه مقدار = ۱۰۲۴ و نسبت get/set = 9:1) اجرا خواهد شد. برای مشاهده چگونگی ویرایش فایل، به بخش "فایل پیکربندی" مراجعه نمایید.
حداقل اندازه کلید ۱۶ بایت و حداکثر آن ۲۵۰ بایت است. دقت نسبتها ۰.۰۰۱ است و درصد توزیع تا ۳ رقم اعشار گرد میشود.
حداقل اندازه مقدار ۱ بایت و حداکثر آن ۱ مگابایت است. دقت نسبتها ۰.۰۰۱ است و درصد توزیع تا ۳ رقم اعشار گرد میشود. در حال حاضر memaslap تنها دستورات set و get را ارزیابی میکند و توانایی تست ۱۰۰٪ دستورات set و ۱۰۰٪ دستورات get را دارد. در حالت ۱۰۰٪ get، ابتدا تعدادی شیء از پیش روی سرور مقداردهی میشوند.
چندنخی و همزمانی
کارایی بالای memaslap مدیون زمانبندی ویژه نخها و همزمانیها است. تعیین تعداد مناسب آنها اهمیت بسزایی دارد. تعداد پیشفرض نخها ۱ و تعداد پیشفرض همزمانیها ۱۶ است. کاربر میتواند با گزینههای "--threads" و "--concurrency" این مقادیر را تنظیم کند.
اگر سیستم از تنظیم وابستگی پردازنده پشتیبانی کند و تعداد نخهای تعیینشده بیشتر از ۱ باشد، memaslap تلاش میکند هر نخ را به یک هسته پردازنده مجزا متصل نماید. بنابراین برای دستیابی به بالاترین کارایی، توصیه میشود تعداد نخها برابر با تعداد هستههای پردازنده تنظیم شود. تعداد نخها میتواند کمتر یا بیشتر از تعداد هستهها نیز باشد. با توجه به محدودیتهای پیادهسازی، تعداد همزمانیها باید مضربی از تعداد نخها باشد.
- 1.
- برای سیستمی با ۸ هسته پردازنده:
برای مثال:
--threads=2 --concurrency=128
--threads=8 --concurrency=128
--threads=8 --concurrency=256
--threads=12 --concurrency=144
- 2.
- برای سیستمی با ۱۶ هسته پردازنده:
برای مثال:
--threads=8 --concurrency=128
--threads=16 --concurrency=256
--threads=16 --concurrency=512
--threads=24 --concurrency=288
ابزار memaslap هنگام سنجش کارایی سرورهای memcached عملکرد بسیار بالایی از خود نشان میدهد. در اکثر مواقع گلوگاه اصلی پهنای باند شبکه یا خود سرور است. اگر به هر دلیلی نیاز به محدود کردن کارایی memaslap داشته باشید، دو راهکار وجود دارد:
کاهش تعداد نخها و همزمانیها. استفاده از گزینه "--tps" که memaslap برای محدودسازی توان عملیاتی ارائه میدهد. این گزینه به کاربر امکان میدهد توان عملیاتی را روی میزانی معین ثابت نگه دارد. به عنوان مثال، اگر حداکثر توان ۵۰ هزار عملیات در ثانیه (kops/s) باشد، میتوانید با این گزینه مقداری برابر یا کمتر از سقف توان را اعمال کنید.
اندازه پنجره کاری
در اغلب شرایط نیازی به تعیین دستی اندازه پنجره نیست. اندازه پیشفرض پنجره 10k است. برای Schooner Memcached کاربر میتواند اندازههای پنجره متفاوتی را متناسب با سناریوی آزمون جهت سنجش نرخ خطای کش بین ۰٪ تا ۱۰۰٪ تعیین کند. فرمول محاسبه اندازه پنجره به صورت زیر است:
فرض کنید اندازه کلید ۱۲۸ بایت، اندازه مقدار ۲۰۴۸ بایت و همزمانی ۱۲۸ باشد:
۱. برای کش کوچک (cache_size=1M) با نرخ خطای ۱۰۰٪ (فراخوانی دادهها از SSD): win_size=10k
- 2.
- برای کش با ظرفیت 4G:
(۱) نرخ خطای کش ۰٪:
win_size=8k
(۲) نرخ خطای کش ۵٪:
win_size=11k
- 3.
- برای کش با ظرفیت 16G:
(۱) نرخ خطای کش ۰٪:
win_size=32k
(۲) نرخ خطای کش ۵٪:
win_size=46k
فرمول محاسبه اندازه پنجره برای نرخ خطای ۰٪:
cache_size / concurrency / (key_size + value_size) * 0.5
فرمول محاسبه اندازه پنجره برای نرخ خطای ۵٪:
cache_size / concurrency / (key_size + value_size) * 0.7
اعتبارسنجی
ابزار Memslap از اعتبارسنجی صحت دادهها و زمان انقضا پشتیبانی میکند. کاربر میتواند از "--verify=" یا "-v" برای تعیین نسبت اعتبارسنجی دادهها استفاده کند (از نظر تئوری تا ۱۰۰٪ اعتبارسنجی دادهها). همچنین با "--exp_verify=" یا "-e" میتوان نسبت اعتبارسنجی زمان انقضا را مشخص کرد. با فعال کردن گزینه "--verbose" جزئیات خطاهای اعتبارسنجی نمایش داده میشود.
برای مثال: --exp_verify=0.01 --verify=0.1 به این معنی است که ۱٪ اشیا با زمان انقضا ثبت میشوند و ۱۰٪ اشیای خواندهشده اعتبارسنجی خواهند شد. در صورت دریافت شیء، memaslap مقدار و زمان انقضای آن را بررسی و تایید میکند.
چندسروری و چندپیکربندی
ابزار Memslap بر مبنای نخهای مستقل از چند سرور پشتیبانی میکند. محدودیت ساختاری این است که تعداد سرورها نمیتواند بیشتر از تعداد نخها باشد. Memslap حداقل یک نخ را به ازای هر سرور اختصاص میدهد. برای معرفی چندین سرور از گزینه "--servers=" یا "-s" استفاده کنید.
برای مثال:
--servers=10.1.1.1:11211,10.1.1.2:11212,10.1.1.3:11213 --threads=6 --concurrency=36
دستور فوق بدین معناست که ۶ نخ اجرا میشوند، هر نخ دارای ۶ تسک همزمانی است، نخهای ۰ و ۳ با سرور ۰ (10.1.1.1)، نخهای ۱ و ۴ با سرور ۱ (10.1.1.2) و نخهای ۲ و ۵ با سرور ۲ (10.1.1.3) ارتباط برقرار میکنند.
تمام نخها و همزمانیها در memaslap مستقل و خودگردان هستند.
همچنین کاربر میتواند چندین نمونه مستقل از memaslap را اجرا کند. اجرای همزمان memaslap روی کلاینتهای مختلف برای اتصال به یک سرور یکسان memcached امکانپذیر است؛ توصیه میشود نمونههای memaslap روی ماشینهای مجزا با پیکربندی مشابه اجرا شوند.
اجرا در حالت تعداد دستورات یا حالت زمانی
به طور پیشفرض memaslap در حالت زمانی اجرا میشود و مدت زمان پیشفرض ۱۰ دقیقه است که با اتمام زمان، برنامه خاتمه مییابد. نباید هر دو حالت تعداد دستور و زمان را همزمان تعیین کنید، بلکه تنها یکی را انتخاب نمایید.
برای مثال:
--time=30s (اجرای تست به مدت ۳۰ ثانیه)
--execute_number=100000 (خروج از برنامه پس از اجرای ۱۰۰٬۰۰۰ دستور)
تخلیه دورهای اطلاعات آماری
کاربر میتواند از "--stat_freq=" یا "-S" برای تنظیم تناوب ثبت آمار استفاده کند.
برای مثال:
--stat_freq=20s
ابزار Memslap هر ۲۰ ثانیه یکبار آمار دستورات get و set را چاپ میکند.
برای مشاهده جزئیات ساختار خروجی، بخش "فرمت خروجی" را ملاحظه کنید.
دریافت چندگانه (Multi-get)
کاربر میتواند با "--division=" یا "-d" تعداد کلیدهای دریافت چندگانه (multi-get) در هر نوبت را مشخص کند. به طور پیشفرض، get تکموردی روی TCP انجام میشود. اعتبارسنجی دادهها و زمان انقضا برای multi-get نیز پشتیبانی میشود.
ابزار Memslap آزمون multi-get را روی هر دو پروتکل TCP و UDP پوشش میدهد. با توجه به تفاوت پیادهسازی پروتکلهای ASCII و باینری: در پروتکل ASCII یک دستور "multi-get" ارسال میشود، در حالی که در پروتکل باینری چندین دستور تکموردی get به صورت تجمیعی تحت عنوان "multi-get" فرستاده میشوند.
پروتکلهای UDP و TCP
ابزار Memslap از هر دو پروتکل UDP و TCP پشتیبانی میکند. در حالت TCP، در صورت قطع سوکت، memaslap به طور خودکار متصل نمیشود و در صورت قطعی تمام اتصالات یا کرش سرور، خارج خواهد شد؛ مگر اینکه گزینه "--reconnect" برای اتصال مجدد تنظیم شده باشد.
با گزینه "--udp" میتوان حالت UDP را فعال کرد؛ با این حال UDP محدودیتهای زیر را دارد:
حجم داده ارسالی با UDP نمیتواند بیشتر از ۱۴۰۰ بایت باشد.
پروتکل باینری از UDP پشتیبانی نمیکند زیرا پیادهسازی باینری memcached فاقد این قابلیت است.
پروتکل UDP از اتصال مجدد پشتیبانی نمیکند.
آزمون فیسبوک (Facebook test)
ثبت دادهها با TCP و دریافت چندگانه با UDP. برای فعالسازی از گزینههای زیر استفاده کنید:
"--facebook --division=50"
برای ایجاد هزاران اتصال TCP، گزینه زیر را تعیین کنید:
"--conn_sock="
برای مثال: --facebook --division=50 --conn_sock=200
دستور فوق بدین معناست که memaslap آزمون فیسبوک را اجرا میکند و هر همزمانی دارای ۲۰۰ اتصال سوکت TCP و یک سوکت UDP خواهد بود.
ابزار Memslap اشیا را با سوکت TCP ذخیره کرده و در هر نوبت ۵۰ شیء را با سوکت UDP به صورت چندگانه دریافت میکند.
در صورت تعیین "--division=50"، اندازه کلید باید کمتر از ۲۵ بایت باشد زیرا حداکثر اندازه بسته UDP برابر با ۱۴۰۰ بایت است.
آزمون رونوشتبرداری (Replication test)
برای این آزمون، کاربر باید حداقل دو سرور memcached را معرفی کند و با گزینه "--rep_write=" قابلیت را فعال نماید.
برای مثال:
--servers=10.1.1.1:11211,10.1.1.2:11212 --rep_write=2
دستور فوق بدین معناست که با ۲ سرور رونوشت، memaslap دادهها را روی هر دو سرور ذخیره کرده و دادههای ثبتشده روی سرور ۰ را از سرور ۱، و دادههای سرور ۱ را از سرور ۰ میخواند. در صورت خرابی سرور ۰، دادهها تنها از سرور ۱ خوانده میشوند و با بازگشت سرور ۰، اتصال به آن مجدداً برقرار میگردد. در صورت خرابی هر دو سرور، memaslap متوقف خواهد شد.
پشتیبانی از هزاران اتصال TCP
اجرای memaslap با گزینه "--conn_sock=" یا "-n" این قابلیت را فعال میکند. اطمینان حاصل کنید که سیستم عامل شما توانایی باز کردن هزاران فایل و ایجاد هزاران سوکت را دارد. این حالت در صورت قطعی سوکتها از اتصال مجدد پشتیبانی نمیکند.
برای مثال:
--threads=8 --concurrency=128 --conn_sock=128
دستور فوق بدین معناست که memaslap با ۸ نخ اجرا میشود، هر نخ دارای ۱۶ همزمانی و هر همزمانی دارای ۱۲۸ اتصال سوکت TCP است که مجموع کل اتصالات به ۱۲۸ * ۱۲۸ = ۱۶۳۸۴ میرسد.
پشتیبانی از پروتکل دودویی (Binary Protocol)
با گزینه "--binary" یا "-B" این ویژگی فعال میشود. تمامی قابلیتهای فوق به جز UDP پشتیبانی میشوند (زیرا memcached از نسخه 1.3.3 پروتکل باینری UDP را پیادهسازی نکرده است).
برای مثال:
--binary
از آنجا که memcached پروتکل باینری UDP را پیادهسازی نکرده، memaslap از UDP در این حالت پشتیبانی نمیکند. علاوه بر این، در نسخه 1.3.3 دریافت چندگانه واقعی باینری وجود ندارد و در صورت استفاده از "--division=50"، ۵۰ دستور get تکی به صورت همزمان ارسال میشوند.
فایل پیکربندی (CONFIGURATION FILE)
این بخش فرمت فایل پیکربندی را شرح میدهد. در صورتی که فایلی تعیین نشود، memaslap به طور پیشفرض فایل پیکربندی موجود در مسیر ~/.memaslap.cnf را میخواند.
نمونهای از ساختار فایل پیکربندی در زیر آمده است:
--------------------------------------------------------------------------- #comments should start with '#' #key #start_len end_len proportion # #key length range from start_len to end_len #start_len must be equal to or greater than 16 #end_len must be equal to or less than 250 #start_len must be equal to or greater than end_len #memaslap will generate keys according to the key range #proportion: indicates keys generated from one range accounts for the total generated keys # #example1: key range 16~100 accounts for 80% # key range 101~200 accounts for 10% # key range 201~250 accounts for 10% # total should be 1 (0.8+0.1+0.1 = 1) # # 16 100 0.8 # 101 200 0.1 # 201 249 0.1 # #example2: all keys length are 128 bytes # # 128 128 1 key 128 128 1 #value #start_len end_len proportion # #value length range from start_len to end_len #start_len must be equal to or greater than 1 #end_len must be equal to or less than 1M #start_len must be equal to or greater than end_len #memaslap will generate values according to the value range #proportion: indicates values generated from one range accounts for the total generated values # #example1: value range 1~1000 accounts for 80% # value range 1001~10000 accounts for 10% # value range 10001~100000 accounts for 10% # total should be 1 (0.8+0.1+0.1 = 1) # # 1 1000 0.8 # 1001 10000 0.1 # 10001 100000 0.1 # #example2: all value length are 128 bytes # # 128 128 1 value 2048 2048 1 #cmd #cmd_type cmd_proportion # #currently memaslap only testss get and set command. # #cmd_type #set 0 #get 1 # #example: set command accounts for 50% # get command accounts for 50% # total should be 1 (0.5+0.5 = 1) # # cmd # 0 0.5 # 1 0.5 cmd 0 0.1 1.0 0.9
فرمت خروجی (FORMAT OF OUTPUT)
در آغاز، memaslap برخی اطلاعات پیکربندی را به صورت زیر نمایش میدهد:
servers : 127.0.0.1:11211
threads count: 1
concurrency: 16
run time: 20s
windows size: 10k
set proportion: set_prop=0.10
get proportion: get_prop=0.90
توضیح متغیرها
servers
threads count
concurrency
run time
windows size
set proportion
get proportion
خروجی آماری پویا به صورت زیر نمایش داده میشود:
--------------------------------------------------------------------------------------------------------------------------------- Get Statistics Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us) Avg(us) Std_dev Geo_dist Period 5 345826 69165 65.3 0 27 2198 203 95.43 177.29 Global 20 1257935 62896 71.8 0 26 3791 224 117.79 192.60 Set Statistics Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us) Avg(us) Std_dev Geo_dist Period 5 38425 7685 7.3 0 42 628 240 88.05 220.21 Global 20 139780 6989 8.0 0 37 3790 253 117.93 224.83 Total Statistics Type Time(s) Ops TPS(ops/s) Net(M/s) Get_miss Min(us) Max(us) Avg(us) Std_dev Geo_dist Period 5 384252 76850 72.5 0 27 2198 207 94.72 181.18 Global 20 1397720 69886 79.7 0 26 3791 227 117.93 195.60 ---------------------------------------------------------------------------------------------------------------------------------
توضیح متغیرهای آماری
Get Statistics
Set Statistics
Total Statistics
Period
Global
Ops
TPS
Net
Get_miss
Min
Max
Avg
Std_dev
Geo_dist
در پایان آزمون، memaslap خروجی جامعی مشابه زیر تولید میکند:
---------------------------------------------------------------------------------------------------------------------------------
Get Statistics (1257956 events)
Min: 26
Max: 3791
Avg: 224
Geo: 192.60
Std: 116.23
Log2 Dist:
4: 0 10 84490 215345
8: 484890 459823 12543 824
12: 31
Set Statistics (139782 events)
Min: 37
Max: 3790
Avg: 253
Geo: 224.84
Std: 116.83
Log2 Dist:
4: 0 0 4200 16988
8: 50784 65574 2064 167
12: 5
Total Statistics (1397738 events)
Min: 26
Max: 3791
Avg: 227
Geo: 195.60
Std: 116.60
Log2 Dist:
4: 0 10 88690 232333
8: 535674 525397 14607 991
12: 36
cmd_get: 1257969
cmd_set: 139785
get_misses: 0
verify_misses: 0
verify_failed: 0
expired_get: 0
unexpired_unget: 0
written_bytes: 242516030
read_bytes: 1003702556
object_bytes: 152086080
packet_disorder: 0
packet_drop: 0
udp_timeout: 0
Run time: 20.0s Ops: 1397754 TPS: 69817 Net_rate: 59.4M/s
---------------------------------------------------------------------------------------------------------------------------------
توضیح پارامترهای خروجی نهایی
Get Statistics
Set Statistics
Total Statistics
Min
Max
Avg
Std
Log2 Dist
cmd_get
cmd_set
get_misses
verify_misses
verify_failed
expired_get
unexpired_unget
written_bytes
read_bytes
object_bytes
packet_disorder
packet_drop
udp_timeout
Run time
Ops
TPS
Net_rate
گزینهها (OPTIONS)
- -s, --servers=
- فهرستی از یک یا چند سرور برای اتصال. تعداد سرورها باید کمتر یا مساوی تعداد نخها باشد. مثال: --servers=localhost:1234,localhost:11211
- -T, --threads=
- تعداد نخهای اجرایی؛ ترجیحاً برابر با تعداد هستههای پردازنده تنظیم شود. پیشفرض 8.
- -c, --concurrency=
- تعداد تسکهای همزمانی برای شبیهسازی بار کاری. پیشفرض 128.
- -n, --conn_sock=
- تعداد سوکتهای TCP به ازای هر همزمانی. پیشفرض 1.
- -x, --execute_number=
- تعداد کل عملیاتها (get و set) برای اجرای آزمون. پیشفرض 1000000.
- -t, --time=
- مدت زمان اجرای آزمون با پسوندهای: s (ثانیه)، m (دقیقه)، h (ساعت)، d (روز). مثال: --time=2h
- -F, --cfg_cmd=
- بارگذاری فایل پیکربندی جهت دریافت توزیع دستورات، کلیدها و مقادیر.
- -w, --win_size=
- اندازه پنجره تسک برای هر همزمانی با پسوندهای K یا M. مثال: --win_size=10k. پیشفرض 10k.
- -X, --fixed_size=
- اندازه ثابت و یکنواخت برای مقدارها (Value).
- -v, --verify=
- نسبت اعتبارسنجی دادهها. مثال: --verify=0.01
- -d, --division=
- تعداد کلیدها در هر بار دریافت چندگانه (multi-get). پیشفرض 1 به معنی دریافت تکی است.
- -S, --stat_freq=
- تناوب زمانی تخلیه و ثبت اطلاعات آماری با پسوندهای: s (ثانیه)، m (دقیقه). مثال: --stat_freq=10s
- -e, --exp_verify=
- نسبت اشیای دارای زمان انقضا. مثال: --exp_verify=0.01. پیشفرض بدون زمان انقضا.
- -o, --overwrite=
- نسبت اشیایی که نیاز به بازنویسی دارند. مثال: --overwrite=0.01. پیشفرض ۰٪ (عدم بازنویسی).
- -R, --reconnect
- آزمون اتصال مجدد؛ در صورت بسته شدن اتصال سوکت، مجدداً متصل میشود.
- -U, --udp
- آزمون روی UDP؛ به طور پیشفرض از TCP استفاده میشود. پورت TCP و UDP سرور باید یکسان باشند.
- -a, --facebook
- فعالسازی آزمون فیسبوک (ذخیره با TCP و دریافت چندگانه با UDP).
- -B, --binary
- فعالسازی پروتکل باینری (دودویی). به طور پیشفرض پروتکل ASCII استفاده میشود.
- -P, --tps=
- توان عملیاتی مورد انتظار با پسوند K. مثال: --tps=10k
- -p, --rep_write=
- تعداد n سرور نخست که قابلیت نوشتن دادهها را دارند. مثال: --rep_write=2
- -b, --verbose
- نمایش اطلاعات و جزئیات بیشتر در صورت شکست اعتبارسنجی.
- -h, --help
- نمایش پیام راهنما و خروج.
- -V, --version
- نمایش نسخه برنامه و خروج.
مثالها (EXAMPLES)
memaslap -s 127.0.0.1:11211 -S 5s
memaslap -s 127.0.0.1:11211 -t 2m -v 0.2 -e 0.05 -b
memaslap -s 127.0.0.1:11211 -F config -t 2m -w 40k -S 20s -o 0.2
memaslap -s 127.0.0.1:11211 -F config -t 2m -T 4 -c 128 -d 20 -P 40k
memaslap -s 127.0.0.1:11211 -F config -t 2m -d 50 -a -n 40
memaslap -s 127.0.0.1:11211,127.0.0.1:11212 -F config -t 2m
memaslap -s 127.0.0.1:11211,127.0.0.1:11212 -F config -t 2m -p 2
نکات (NOTES)
پیشوند این برنامه متغیر است؛ یعنی میتواند در زمان کامپایل و ساخت برنامه پیکربندی شود.
به طور معمول برنامههای کلاینت libmemcached-awesome دارای پیشوند mem هستند، مانند memcat یا memcp.
با این حال میتوان آن را پیکربندی کرد تا پیشوند با چیز دیگری مانند mc جایگزین شود؛ در این صورت برنامههای کلاینت libmemcached-awesome به ترتیب mccat، mccp و غیره نامیده خواهند شد.
این یک برنامه مشارکتی (contributed) است.
این برنامه از ساختار و الگوی استاندارد فلگها/گزینهها پیروی نمیکند.
همچنین ببینید (SEE ALSO)
memcached(1) https://linux.die.net/man/1/memcached، libmemcached(3) https://linux.die.net/man/3/libmemcached
| March 7, 2026 | 1.1 |