মৌজুজা বা ডিজাইন করা স্টোরেজ সিস্টেমের পারফরম্যান্স অনুমান করার головных মেট্রিক্সের একটি হলো IOPS (Input/Output Operations Per Second)। সহজ কথায়, IOPS হলো স্টোরেজ, ডিস্ক বা ফাইল সিস্টেমের সাথে প্রতি সময় এককতায় রিড/রাইট অপারেশনের সংখ্যা। এই সংখ্যা যত বড় হবে, আপনার স্টোরেজের পারফরম্যান্স তত বেশি (স্পষ্টভাবেই বলতে গেলে, IOPS মানকে অন্যান্য স্টোরেজ পারফরম্যান্স বৈশিষ্ট্যগুলোর সাথে বিবেচনা করতে হয়, যেমন ল্যাটেন্সি, থ্রুপুট, ইত্যাদি)।
এই আর্টিকেলে, আমরা উইন্ডোজে স্টোরেজ পারফরম্যান্স (IOPS, ল্যাটেন্সি, থ্রুপুট) পরিমাপের বিভিন্ন পদ্ধতি দেখব (আপনি এই ম্যানুয়ালটি লোকাল হার্ড ড্রাইভ, SSD, SMB নেটওয়ার্ক ফোল্ডার, CSV ভলিউম বা SAN/iSCSI স্টোরেজের LUN-এর জন্য ব্যবহার করতে পারেন)।
উইন্ডোজে ডিস্ক পারফরম্যান্স কাউন্টার ব্যবহার করে স্টোরেজ I/O ক্যাপচার করা
আপনি Performance Monitor-এ বিল্ট-ইন ডিস্ক পারফরম্যান্স কাউন্টার ব্যবহার করে উইন্ডোজে বর্তমান স্টোরেজ I/O ওয়ার্কলোডের আনুমানিক অনুমান করতে পারেন। এই কাউন্টার ডেটা সংগ্রহ করতে:
- Perfmon শুরু করুন;
- একটি নতুন Data Collector Set তৈরি করুন এবং Create manually সিলেক্ট করুন;

- Create data logs -> Performance counter চেকবক্স সিলেক্ট করুন;

- নতুন ডেটা কালেকশন সেটের প্রপার্টিতে, Physical Disk অবজেক্টের জন্য নিচের পারফরম্যান্স কাউন্টারগুলো যোগ করুন (আপনি নির্দিষ্ট ডিস্ক বা সব উপলব্ধ লোকাল ডিস্কের জন্য কাউন্টার সিলেক্ট করতে পারেন):
- Avg. Disk Sec./Transfer
- Avg. Disk Queue Length
- Avg Disk Bytes/Transfer
- Disk Bytes/sec
- Disk Transfers/sec
- Split IO/sec
- আপনি অন্যান্য ডেটা কালেকশন প্রপার্টি পরিবর্তন করতে পারেন। ডিফল্টভাবে, কাউন্টার মান প্রতি ১৫ সেকেন্ডে সংগ্রহ করা হয়। রিয়েল-টাইম ডিস্ক পারফরম্যান্স দেখতে, আপনাকে নির্দিষ্ট Perfmon কাউন্টারগুলো Monitoring Tools -> Performance Monitor বিভাগে যোগ করতে হবে।

- পারফরম্যান্স কাউন্টার ডেটা সংগ্রহ শুরু করুন (Start সিলেক্ট করুন) এবং বিশ্লেষণের জন্য পর্যাপ্ত তথ্য সংগ্রহের জন্য অপেক্ষা করুন। তারপর, আপনার ডেটা কালেক্টর সেটে রাইট-ক্লিক করুন এবং Stop সিলেক্ট করুন;

- সংগৃহীত পারফরম্যান্স ডেটা দেখতে যান Perfmon -> Reports -> User Defined -> Data_Disk_IO —> check_the_last_set। ডিফল্টভাবে, ডিস্ক ডেটা গ্রাফ হিসেবে দেখানো হয়;
- Ctrl + G চাপে Report মোড-এ সুইচ করুন।

Perfmon-এ সংগ্রহ করা স্টোরেজ পারফরম্যান্স কাউন্টার কীভাবে বুঝবেন? ডিস্ক/স্টোরেজ পারফরম্যান্সের দ্রুত বিশ্লেষণের জন্য, আপনাকে কমপক্ষে নিচের ৫টি কাউন্টারের মান দেখতে হবে।
কাউন্টার ডেটা বিশ্লেষণ করার সময়, বর্তমান ফিজিক্যাল ডিস্ক (স্টোরেজ) কনফিগারেশন বুঝতে পারলে ভাল (RAID বা Stripe ব্যবহার করা হয় কিনা, ডিস্কের সংখ্যা এবং টাইপ, ক্যাশ আকার, ইত্যাদি)।
- Disk sec/Transfer – স্টোরেজ ডিভাইস বা ডিস্কের সাথে একটি রিড/রাইট অপারেশন সম্পন্ন করতে প্রয়োজনীয় সময় (ডিস্ক ল্যাটেন্সি). যদি ডিলে ২৫ ms (0.25) এর বেশি হয়, তবে ডিস্ক অ্যারে I/O অপারেশনसमয়মতো হ্যান্ডল করতে পারছে না। হাই লোড সার্ভারের জন্য, ডিস্ক ল্যাটেন্সি মান ১০ ms (0.1) অতিক্রম করা উচিত নয়;
- Disk Transfers/sec – (IOPS). প্রতি সেকেন্ডে রিড/রাইট অপারেশনের সংখ্যা। এটি ডিস্ক অ্যাক্সেস ইনটেনসিটির প্রধান সূচক (বিভিন্ন ডিস্ক টাইপের আনুমানিক IOPS মান আর্টিকেলের শেষে দেওয়া আছে);
- Disk Bytes/Sec – মোট ডিস্ক থ্রুপুট (রিড+রাইট) প্রতি সেকেন্ড। সর্বোচ্চ মান ডিস্ক টাইপের ওপর নির্ভর করে (১৫০-২৫০ Mb/s – সাধারণ HDD ডিস্কের জন্য এবং ৫০০-১০০০০ SSD-এর জন্য);
- Split IO/sec – ডিস্ক ফ্র্যাগমেন্টেশন সূচক যখন অপারেটিং সিস্টেমকে একটি I/O অপারেশন একাধিক ডিস্ক রিকোয়েস্টে বিভক্ত করতে হয়। এটি ওই বোঝাতে পারে যে অ্যাপ্লিকেশন খুব বড় ব্লকে ডেটা অনুরোধ করছে যা একটি অপারেশনে ট্রান্সফার করা সম্ভব নয়;
- Avg. Disk Queue Length – প্রতিক্ষা কর্তৃক রিড/রাইট রিকোয়েস্টের গড় সংখ্যা। একটি সিঙ্গেল ডিস্কের জন্য, কিউ দৈর্ঘ্য ২-এর বেশি হওয়া উচিত নয়। ৪টি ডিস্কের RAID অ্যারের জন্য, ডিস্ক কিউ দৈর্ঘ্যের থ্রেশহোল্ড মান ৮।
DiskSpd: উইন্ডোজে ডিস্ক পারফরম্যান্স এবং IOPS টেস্ট করা
মাইক্রোসফট ডিস্ক (স্টোরেজ) সিস্টেমে লোড জেনারেট করে এর পারফরম্যান্স পরিমাপের জন্য DiskSpd (https://aka.ms/diskspd) ইউটিলিটি ব্যবহার করার পরামর্শ দেয়। এটি একটি কমান্ড লাইন ইন্টারফেস টুল যা নির্দিষ্ট ড্রাইভ টার্গেটের সাথে több থ্রেডে I/O অপারেশন করতে পারে। আমি স্টোরেজ পারফরম্যান্স পরিমাপ করতে এবং নির্দিষ্ট সার্ভার থেকে (অবশ্যই আপনি স্টোরেজের পারফরম্যান্সও পরিমাপ করতে পারেন, এই ক্ষেত্রে diskspd স্টোরেজে লোড জেনারেট করতে ব্যবহৃত হবে) সর্বোচ্চ উপলব্ধ রিড/রাইট স্পিড এবং IOPS পেতে DiskSpd ব্যবহার করি।
DiskSpd ইনস্টলেশন প্রয়োজন নেই, শুধু আর্কাইভ ডাউনলোড করে লোকাল ডিস্কে এক্সট্র্যাক্ট করুন। x64 বিট সিস্টেমের জন্য, amd64fre ডিরেক্টরির diskspd.exe ভার্সন ব্যবহার করুন।
ডিস্ক পারফরম্যান্স টেস্ট করতে আমি নিচের কমান্ডটি ব্যবহার করি:
diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt
গুরুত্বপূর্ণ. diskspd.exe ব্যবহার করার সময়, টেস্ট করা সিস্টেমের ডিস্ক এবং CPU-তে למדি লোড জেনারেট হয়। ইউজারদের জন্য পারফরম্যান্স ডিগ্রেডেশন প্রতিরোধ করতে, পিক আওয়ার্সে প্রোডাক্টিভ সিস্টেমে এটি চালু না করার পরামর্শ দেওয়া হয়।

-c50G– ফাইল আকার ৫০ GB (বেশি ফাইল আকার ব্যবহার করা ভাল যাতে এটি স্টোরেজ কন্ট্রোলারের ক্যাশে ফিট না করে);-d300– টেস্ট ডিউরেশন সেকেন্ডে;-r– র্যান্ডম রিড/রাইট অপারেশন (সিকোয়েনশিয়াল অ্যাক্সেস টেস্ট করতে –s ব্যবহার করুন);-t8– থ্রেড সংখ্যা;-w40– রাইট টু রিড অপারেশন অনুপাত ৪০%/৬০%;-o32— কিউ দৈর্ঘ্য;-b64K— ব্লক আকার;-Sh— ক্যাশ ব্যবহার না করা;-L— ল্যাটেন্সি পরিমাপ;E:\diskpsdtmp.dat– টেস্ট ফাইল পাথ।
স্ট্রেস টেস্ট पूरा হওয়ার পর, আউটপুট টেবিল থেকে গড় স্টোরেজ পারফরম্যান্স মান পাওয়া যায়।
আমার টেস্টে, নিচের পারফরম্যান্স ডেটা পাওয়া গেল (Total IO টেবিল চেক করুন):
- MiB/s — ২৪১ (প্রায় ২৫২ Mb/s, খারাপ নয়);
- IOPS — ৩৮৬৬ (অত্যন্ত ভাল!);
- গড় ল্যাটেন্সি — ৬৬.২০৬ ms (খুব বড় ল্যাটেন্সি!)।

রিড (Read IO সেকশন) বা রাইট (Write IO সেকশন) অপারেশনের জন্য আলাদা মান পাওয়া যায়।
DiskSpd ব্যবহার করে বেশ কিছু ডিস্ক বা স্টোরেজ LUN টেস্ট করলে, আপনি তাদের তুলনা করতে পারেন বা আপনার কাজের জন্য পছন্দসই পারফরম্যান্সওয়ালা অ্যারে বেছে নিতে পারেন।
PowerShell ব্যবহার করে স্টোরেজ IOPS, থ্রুপুট এবং ল্যাটেন্সি কীভাবে পরিমাপ করবেন?
আমি একটি PowerShell স্ক্রিপ্ট পেয়েছি (Mikael Nystrom, Microsoft MVP দ্বারা), যা মূলত SQLIO.exe ইউটিলিটির একটি অ্যাড-অন (ফাইল স্টোরেজ পারফরম্যান্স টেস্টের সেট)।
নোট. ডিসেম্বর ২০১৫-এ, মাইক্রোসফট এই টুলের সাপোর্ট শেষ ঘোষণা করে এবং SQLIO-এর месте আরও ইউনিভার্সাল টুল Diskspd-কে আনে, এবং তার ওয়েবসাইট থেকে SQLIO ডিস্ট্রিবিউশন ফাইলগুলো সরিয়ে ফেলে। তাই আপনাকে sqlio.exe নিজে খুঁজে বের করতে হবে, অথবা আমাদের ওয়েবসাইট থেকে ডাউনলোড করতে হবে (এটি PowerShell স্ক্রিপ্টসহ আর্কাইভে অবস্থিত)।
তাহলে, ২টি ফাইল ধারণকারী আর্কাইভটি ডাউনলোড করুন: SQLIO.exe এবং DiskPerformance.ps1 (disk_perf_iops.ZIP — 74 KB) এবং যেকোনো ফোল্ডারে এক্সট্র্যাক্ট করুন।

ডিস্ক পারফরম্যান্স এবং IOPS অনুমান করার PowerShell স্ক্রিপ্ট চালানোর উদাহরণ:
.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

স্ক্রিপ্ট আর্গুমেন্টগুলো বিবেচনা করি:
–TestFileName test.dat– FSUTIL টুল দ্বারা তৈরি ফাইলের নাম;–TestFileSizeInGB 1– টেস্ট ফাইলের আকার। সম্ভাব্য মান: 1.5, 10, 50, 100, 500, 1,000 GB। ফাইল আকারটি স্টোরেজ সিস্টেম ক্যাশের আকারের চেয়ে বড় হতে হবে। অন্যথায়, ডিস্কের বদলে ক্যাশ ডেটার IOPS পরিমাপ হবে;-TestFilepath C:\Temp– এখানে আপনি পারফরম্যান্স পরিমাপ করার ডিস্ক এবং ডিস্ক上的 ফোল্ডার নির্দিষ্ট করুন যেখানে টেস্ট ফাইল তৈরি হবে। আপনি নেটওয়ার্ক শেয়ার্ড ফোল্ডারের UNC পাথও নির্দিষ্ট করতে পারেন (SMB);-TestMode Get-LargeIO– ইনপুট-আউটপুট মাপনের দুটি অপশন। Get-SmallIO IOPS পরিমাপ করতে দেয়, এবং Get-LargeIO ডেটা ট্রান্সফার রেট পরিমাপ করে। SmallIO এবং LargeIO আর্গুমেন্টের পার্থক্য রেট পরিমাপ করার সময় ৮ KB এবং ৫১২ KB ব্লক আকারে, এবং এক্সেস টাইপে, Random বা Sequential-এ; соответствующо।-FastMode True– Fastmode-এ, প্রতিটি টেস্ট ১০ সেকেন্ড চলে, অন্যথায় ৬০ সেকেন্ড লাগে;-RemoveTestFile True– টেস্ট শেষ হলে টেস্ট ফাইল মুছে ফেলা;-OutputFormat Out-GridView– টেস্ট ফলাফল পাওয়ারশেল কনসোলে (Format-Table) অথবা আলাদা গ্রাফিক্যাল চার্ট উইন্ডোতে (Out-Gridview) দেখানো যাবে।

আমাদের কেসে (VMFS ডেটাস্টোরে HP MSA 2040-এ SAN-এর মাধ্যমে কানেক্টেড একটি vmdk ভার্চুয়াল ডিস্ক ব্যবহার করা হয়েছে) ডিস্ক অ্যারে গড় IOPS মান প্রায় ১৫,০০০ এবং ডেটা ট্রান্সমিশন রেট (থ্রুপুট) প্রায় ৫ Gbit/s দেখিয়েছে।
নিচের টেবিলে বিভিন্ন ডিস্ক টাইপের আনুমানিক IOPS মান দেখানো হলো:
| Type | IOPS |
| SSD(SLC) | 6000 |
| SSD(MLC) | 1000 |
| 15K RPM | 175-200 |
| 10K RPM | 125-150 |
| 7.2K RPM | 50-75 |
| Raid5 of 6 drives with 10K RPM | 1000 |
কিছু জনপ্রিয় মাইক্রোসফট সার্ভিসের জন্য IOPS-এ ডিস্ক পারফরম্যান্সের কিছু সুপারিশ আমি পেয়েছি:
- Microsoft Exchange 2010 ৫,০০০ ব্যবহারকারীর সাথে, যারা প্রতিদিন ৭৫ টি পায় এবং ৩০ টি পাঠায়, কমপক্ষে ৩,৭৫০ IOPS প্রয়োজন হবে;
- Microsoft SQL 2008 Server ৩,৫০০ SQL ট্রানজ্যাকশন প্রতি সেকেন্ড (TPS) এর সাথে ২৮,০০০ IOPS প্রয়োজন;
- একটি সাধারণ উইন্ডোজ অ্যাপ্লিকেশন সার্ভার ১০-১০০ ব্যবহারকারীর জন্য ১০-৪০ IOPS প্রয়োজন।