এই লেখায় আমরা আলোচনা করব লিনাক্সে ডিস্ক বা স্টোরেজ অ্যারেশ পারফরম্যান্স কীভাবে চেক করতে হয়। IOPS (ইনপুট/আউটপুট অপারেশন্স পার সেকেন্ড) হল প্রতি সেকেন্ডে একটি ডেটা স্টোরেজ সিস্টেম যে ইনপুট-আউটপুট অপারেশনগুলো সম্পাদন করে তার সংখ্যা (এটি একটি একক ডিস্ক, RAID অ্যারে বা এক্সটার্নাল স্টোরেজ ডিভাইসের একটি LUN হতে পারে)। সাধারণভাবে, IOPS ব্লক সংখ্যাকে বোঝায় যা মিডিয়ায় পড়া বা লেখা যায়।
বেশিরভাগ ডিস্ক ম্যানুফ্যাকচারার নоминаল IOPS মান নির্দিষ্ট করে, কিন্তু বাস্তবে এগুলো গ্যারান্টিড নয়। কোনো প্রজেক্ট শুরু করার আগে আপনার স্টোরেজ সাবসিস্টেমের পারফরম্যান্স বুঝতে, আপনার স্টোরেজ যে সর্বোচ্চ IOPS মান হ্যান্ডেল করতে পারে তা জানা জরুরি।
FIO (Flexible I/O) টুল ব্যবহার করে স্টোরেজ বেঞ্চমার্কিং
লিনাক্সে ডিস্ক IOPS পারফরম্যান্স মাপতে আপনি fio ব্যবহার করতে পারেন (টুলটি CentOS/RHEL-এর জন্য EPEL রিপোজিটরিতে উপলব্ধ)। সুতরাং, RHEL বা CentOS-এ fio ইনস্টল করতে yum (dnf) প্যাকেজ ম্যানেজার ব্যবহার করুন:
# yum install epel-release -y
# yum install fio -y
অথবা Debian বা Ubuntu-এ apt-get:
# apt-get install fio

তারপর আপনাকে টেস্ট করার ডিস্কগুলো চিহ্নিত করতে হবে। টেস্টটি আপনার ডিস্ক বা LUN যে ডিরেক্টরিতে মাউন্ট করা আছে সেখানে রিড/রাইট অপারেশন করে সম্পাদন করা হয়।
বিভিন্ন ডিস্ক লোড সিনেরিওতে (এক হোস্ট করা অ্যাপের লজিক এবং প্রজেক্টের সাধারণ ইনফ্রাস্ট্রাকচারের উপর নির্ভর করে আপনি যে টেস্ট মোড সিলেক্ট করবেন) ডিস্ক IOPS পারফরম্যান্সের বিভিন্ন টাইপের টেস্ট করি।
র্যান্ডম রিড/রাইট অপারেশন টেস্ট
টেস্ট চালানোর সময় একটি ৮ GB ফাইল তৈরি হবে। তারপর fio একটি 4KB ব্লক (স্ট্যান্ডার্ড ব্লক সাইজ) ৭৫/২৫% রিড এবং রাইট অপারেশনের অনুপাতে পড়বে/লিখবে এবং পারফরম্যান্স মাপবে। কমান্ডটি নিচের মতো:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75
আমি দুটি SSD নিয়ে তৈরি একটি অ্যারেতে প্রথম টেস্টটি চালিয়েছিলাম এবং ভালো ফলাফল পেয়েছিলাম:
- Read: 3280MiB/s, IOPS avg 83000
- Write: 110MiB/s, IOPS avg 28000
যেহেতু আমরা একটি কম্বাইন্ড রিড/রাইট টেস্ট চালিয়েছি, পৃথক টেস্টের মানগুলো বেশি হবে।
তুলনায়, আমি একটি SATA ড্রাইভের পারফরম্যান্স মাপেছিলাম:

- Read: IOPS=430, BW=1.7 MiB/s
- Write: IOPS=143, BW= 0.6 MiB/s
অবশ্যই, HDD-এর ফলাফল SSD-এর চেয়ে খারাপ।
র্যান্ডম রিড অপারেশন টেস্ট
শুধু র্যান্ডম রিড অপারেশনের জন্য ডিস্ক পারফরম্যান্স মাপতে নিচের কমান্ড চালান:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread
কমান্ডের শেষ অংশটি —readwrite=randread-এ পরিবর্তন করা হয়েছে।

আমি আগে বলেছিলাম, পৃথকভাবে মাপলে রিড/রাইট পারফরম্যান্স বেশি হবে:
READ: IOPS=150k, BW=584MiB/s (612MB/s)
র্যান্ডম রাইট অপারেশন টেস্ট
র্যান্ডম রাইট অপারেশনের জন্য ডিস্ক পারফরম্যান্স মাপতে এই কমান্ড চালান:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=8G --readwrite=randwrite
WRITE: IOPS=84.7k, BW=331MiB/s (347MB/s)
ভালো SSD-তে রাইট অপারেশন পারফরম্যান্সও খুব বেশি। রিড অপারেশন টেস্টের মতো, মিক্সড টেস্টের তুলনায় পার্থক্য ২০০-২৫০ MiB/s এবং ৫০০০০ IOPS পর্যন্ত পৌঁছায়।
আপনি যদি অফিসিয়াল ম্যানুফ্যাকচারার ডকুমেন্টেশন দেখেন (এগুলো Intel SSD), তবে মানগুলো সঠিক বলে বলা যায়।
Fio কনফিগারেশন ফাইল উদাহরণ
Fio ইন্টারেক্টিভ কমান্ড এবং পূর্বে প্রস্তুত কনফিগারেশন ফাইল দুভাবেই ডিস্ক পারফরম্যান্স চেক করার সুবিধা দেয়। এই অপশন ব্যবহার করতে একটি ফাইল তৈরি করুন:
# nano read.fio
এবং এতে নিচের কন্টেন্ট যোগ করুন:
[global] rw=randread size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgread] rw=randread iodepth=64
তারপর টেস্ট শুরু করুন:
# fio read.fio
টেস্টটি ডিস্কের রিড পারফরম্যান্স মাপবে। রাইট পারফরম্যান্স টেস্ট করতে নিচের কনফিগারেশন ফাইল ব্যবহার করুন:
[global] rw=randwrite size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgwrite] rw=randwrite iodepth=64
Ioping ব্যবহার করে ডিস্ক লেটেন্সি মাপা
IOPS ছাড়া আপনার স্টোরেজের গুণমান নির্দেশকারী আর একটি গুরুত্বপূর্ণ প্যারামিটার আছে: সেটি হল লেটেন্সি। লেটেন্সি হল একটি ইনপুট/আউটপুট রিকোয়েস্টের বিলম্ব যা স্টোরেজে অ্যাক্সেসের সময় নির্ধারণ করে (মিলিসেকেন্ডে পরিমাপ করা হয়)। লেটেন্সি যত বেশি হবে, আপনার অ্যাপ্লিকেশনকে ডিস্ক থেকে ডেটা পাওয়ার জন্য তত বেশি অপেক্ষা করতে হবে। সাধারণ ডেটা স্টোরেজ সিস্টেমের জন্য ২০ ms-এর বেশি লেটেন্সি মান খারাপ মনে করা হয়।
লিনাক্সে ডিস্ক লেটেন্সি চেক করতে ioping টুল ব্যবহার করা হয়:
# yum install ioping -y
# apt-get install ioping
আপনার ডিস্কের জন্য লেটেন্সি টেস্ট চালান (২০টি রিকোয়েস্ট চালানো হবে):
# ioping -c 20 /tmp/
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=1 time=1.55 ms (warmup) ...................... 4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast) 4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us --- /tmp/ (ext4 /dev/md126p5) ioping statistics --- 19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us
গড় মান 298.7 us (মাইক্রোসেকেন্ড), সুতরাং আমাদের ক্ষেত্রে গড় লেটেন্সি 0.3 ms, যা অত্যন্ত দারুণ।
লেটেন্সি মান us (মাইক্রোসেকেন্ড) বা ms (মিলিসেকেন্ড) এ নির্দিষ্ট করা যেতে পারে। us থেকে ms মান পেতে, ১,০০০ দিয়ে ভাগ করুন।
সুতরাং, প্রজেক্ট চালু করার আগে আপনার সার্ভারে স্টোরেজ লোড টেস্ট করে সর্বোচ্চ পারফরম্যান্স মান চেক করতে পারেন। তবে, টেস্টটি গ্যারান্টি দেয় না যে আপনার ডিস্ক অ্যারে বা ডিস্ক luôn একই পারফরম্যান্স দেখাবে, কিন্তু প্রজেক্টের প্রাথমিক পর্যায়ে টেস্ট করা মানদণ্ড। উইন্ডোজে IOPS টেস্ট কীভাবে করতে হয় তা এই লেখায় জানুন।