عبارت IOPS به معنی تعداد اعمال ورودی و خروجی داده در ثانیه است و در انتقال تصادفی داده، چه خواندن باشد و چه نوشتن روی حافظه، به کار می‌رود. هر چه IOPS بالاتر باشد، درایو سریع‌تر است. IOPS به اندازه‌ی بسته‌های داده بستگی دارد، هر چه بسته‌ها کوچک‌تر باشند، IOPS بالاتر و در عین حال سرعت درایو پایین‌تر خواهد بود. در ادامه به بررسی دقیق‌تر IOPS و طول صف می‌پردازیم.

تفاوت خواندن و نوشتن ترتیبی با خواندن و نوشتن تصادفی

تفاوت خواندن و نوشتن ترتیبی با خواندن و نوشتن تصادفی

در خواندن و نوشتن ترتیبی زمان دسترسی به خانه‌های بعدی حافظه به مراتب کمتر است و آنچه مهم است، سرعت خواندن و نوشتن است. به همین علت تنها سرعت درایو با واحدی مثل مگابایت بر ثانیه و شاید گیگابایت بر ثانیه، بیان می‌شود.

خواندن و نوشتن تصادفی داده و مقوله‌ی IOPS

در خواندن و نوشتن تصادفی داده، اندازه‌ی بسته‌های داده بسیار مهم است. به عنوان مثال بسته‌ها می‌توانند کوچک و در حد 4 کیلوبایت باشند و در عین حال بسته‌ها ممکن است 128 کیلوبایتی باشند. هر چه بسته‌ها کوچک‌تر باشد، سرعت درایو پایین‌تر خواهد بود اما تعداد اعمال ورودی و خروجی بیشتر است. مثل نمونه‌ی زیر که با افزایش ظرفیت بسته‌ها از 4 به 32 کیلوبایت، تعداد اعمال ورودی و خروجی 5 برابر کمتر شده است:

بسته‌های داده‌ی کوچک‌تر و تعداد اعمال ورودی و خروجی بیشتر

بسته‌های داده‌ی کوچک‌تر و تعداد اعمال ورودی و خروجی بیشتر

اما دقت کنید که افزایش اندازه‌ی بسته‌ها در نهایت به بالا رفتن سرعت منجر می‌شود چرا که سرعت از رابطه‌ی زیر محاسبه می‌شود و اثر افزایش ظرفیت بسته‌ها بیشتر از کاهش اعمال ورودی و خروجی در یک ثانیه است:

سرعت درایو در خواندن و نوشتن تصادفی= تعداد اعمال ورودی و خروجی در ثانیه ضربدر حجم بسته‌های داده

همان مثال قبلی را در نظر بگیرید، در حالت 4 کیلوبایتی، سرعت حدود 11 مگابایت بر ثانیه است، در حالت 16 و 32 کیلوبایتی سرعت به 16 مگابایت و 21 مگابایت بر ثانیه می‌رسد.

لذا روش بهتر برای بیان عملکرد حافظه‌ها در خواندن و نوشتن تصادفی آن است که تعداد اعمال ورودی و خروجی در هر ثانیه بیان شود. بنچ‌مارک IOmeter و IOzone به این منظور به کار می‌رود.

در اینتوتک برای رعایت اختصار از عبارت IOPS در خواندن 4 کیلوبایتی و IOPS در نوشتن 4 کیلوبایتی برای بیان عملکرد درایو در فرآیند خواندن و نوشتن تصادفی بسته‌های 4 کیلوبایتی استفاده می‌شود. عبارت‌های IOPS در خواندن 32 کیلوبایتی و IOPS در خواندن 128 کیلوبایتی نیز برای بسته‌های 32 و 128 کیلوبایتی به کار می‌رود.

اثر Queue Depth یا طول صف انتظار در عملکرد تصادفی

یکی از روش‌های مهم برای بهبود خواندن و نوشتن تصادفی، استفاده از کنترلری است که صف دستورات انتقال داده (خواندن یا نوشتن) را با هوشمندی بیشتر مدیریت کند و در حقیقت ترتیب دستورات را تغییر دهد. هدف این است که دسترسی به خانه‌های حافظه‌ای که در مجاورت هم قرار دارند، پشت سر هم انجام شود. بدیهی است که اگر در هر لحظه، فقط یک درخواست خواندن یا نوشتن به هارددیسک و SSD ارسال شود، سرعت بسیار کمتر است و با افزایش تعداد درخواست‌ها، سرعت بالاتر خواهد بود.

عبارت Queue Depth یا عمق صف که در اینتوتک به آن طول صف می‌گوییم، تعداد درخواست‌هایی است که در هر لحظه در انتظار انجام به سر می‌برند. هر چه طول صف بیشتر باشد، سرعت درایو بالاتر خواهد بود. طول صف 1 و 32 به اختصار QD1 و QD32 گفته می‌شود.

مثل نمونه‌ی زیر که عملکرد درایو Neutron XT کورسیر را با افزایش طول صف نشان می‌دهد. دقت کنید که QD1 و QD2 الی QD32 عبارت اختصاری برای طول صف 1 و 2 و 32 است.

عملکرد درایو Neutron XT کورسیر با طول صف‌های مختلف

عملکرد درایو Neutron XT کورسیر با طول صف‌های مختلف

البته اگر بسته‌های داده بزرگ‌تر باشند، مثلاً بسته‌های 128 کیلوبایتی، صف طولانی چندان مفید واقع نمی‌شود و ممکن است با طول صف 2 واحد، عملکرد به حالت حداکثری برسد:

عملکرد درایوهای مختلف در تبادل بسته‌های 128 کیلوبایتی داده و طول صف‌های مختلف

عملکرد درایوهای مختلف در تبادل بسته‌های 128 کیلوبایتی داده و طول صف‌های مختلف

در پروتکل ساتا از Native Command Queuing و یا Tagged Command Queuing برای تغییر ترتیب درخواست‌های صف استفاده می‌شود و معمولاً درایوهای ارزان، هیچ یک از روش‌های فوق را پشتیبانی نمی‌کنند. NVMe برای تبادل تصادفی داده بهینه‌تر است چرا که طول صف بیشتر است.