আমি একটি স্ক্রিপ্ট তৈরি করেছি যা ফিরো দিয়ে স্ফটিক ডিস্কমার্কের আচরণের প্রতিরূপ তৈরি করার চেষ্টা করে। স্ক্রিপ্ট 512K এবং 4KQ8T8 পরীক্ষাসহ ক্রিস্টালডিস্কার্ক 6 পর্যন্ত স্ফটিক ডিজিসমার্কের বিভিন্ন সংস্করণে সমস্ত পরীক্ষা করে।
স্ক্রিপ্টটি ফাইও এবং ডিএফ-র উপর নির্ভর করে । যদি আপনি ডিএফ ইনস্টল করতে না চান, তবে 21 থেকে 21 লাইনটি মুছুন (স্ক্রিপ্টটি আর কোন ড্রাইভটি পরীক্ষা করা হচ্ছে তা প্রদর্শিত হবে না) বা কোনও মন্তব্যকারী থেকে পরিবর্তিত সংস্করণটি চেষ্টা করে দেখুন । (অন্যান্য সম্ভাব্য সমস্যাগুলিও সমাধান করতে পারে)
#!/bin/bash
LOOPS=5 #How many times to run each test
SIZE=1024 #Size of each test, multiples of 32 recommended for Q32 tests to give the most accurate results.
WRITEZERO=0 #Set whether to write zeroes or randoms to testfile (random is the default for both fio and crystaldiskmark); dd benchmarks typically only write zeroes which is why there can be a speed difference.
QSIZE=$(($SIZE / 32)) #Size of Q32Seq tests
SIZE+=m
QSIZE+=m
if [ -z $1 ]; then
TARGET=$HOME
echo "Defaulting to $TARGET for testing"
else
TARGET="$1"
echo "Testing in $TARGET"
fi
DRIVE=$(df $TARGET | grep /dev | cut -d/ -f3 | cut -d" " -f1 | rev | cut -c 2- | rev)
DRIVEMODEL=$(cat /sys/block/$DRIVE/device/model)
DRIVESIZE=$(($(cat /sys/block/$DRIVE/size)*512/1024/1024/1024))GB
echo "Configuration: Size:$SIZE Loops:$LOOPS Write Only Zeroes:$WRITEZERO
Running Benchmark on: /dev/$DRIVE, $DRIVEMODEL ($DRIVESIZE), please wait...
"
fio --loops=$LOOPS --size=$SIZE --filename=$TARGET/.fiomark.tmp --stonewall --ioengine=libaio --direct=1 --zero_buffers=$WRITEZERO --output-format=json \
--name=Bufread --loops=1 --bs=$SIZE --iodepth=1 --numjobs=1 --rw=readwrite \
--name=Seqread --bs=$SIZE --iodepth=1 --numjobs=1 --rw=read \
--name=Seqwrite --bs=$SIZE --iodepth=1 --numjobs=1 --rw=write \
--name=512kread --bs=512k --iodepth=1 --numjobs=1 --rw=read \
--name=512kwrite --bs=512k --iodepth=1 --numjobs=1 --rw=write \
--name=SeqQ32T1read --bs=$QSIZE --iodepth=32 --numjobs=1 --rw=read \
--name=SeqQ32T1write --bs=$QSIZE --iodepth=32 --numjobs=1 --rw=write \
--name=4kread --bs=4k --iodepth=1 --numjobs=1 --rw=randread \
--name=4kwrite --bs=4k --iodepth=1 --numjobs=1 --rw=randwrite \
--name=4kQ32T1read --bs=4k --iodepth=32 --numjobs=1 --rw=randread \
--name=4kQ32T1write --bs=4k --iodepth=32 --numjobs=1 --rw=randwrite \
--name=4kQ8T8read --bs=4k --iodepth=8 --numjobs=8 --rw=randread \
--name=4kQ8T8write --bs=4k --iodepth=8 --numjobs=8 --rw=randwrite > $TARGET/.fiomark.txt
SEQR="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "Seqread"' | grep bw_bytes | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "Seqread"' | grep -m1 iops | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
SEQW="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "Seqwrite"' | grep bw_bytes | sed '2!d' | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "Seqwrite"' | grep iops | sed '7!d' | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
F12KR="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "512kread"' | grep bw_bytes | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "512kread"' | grep -m1 iops | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
F12KW="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "512kwrite"' | grep bw_bytes | sed '2!d' | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "512kwrite"' | grep iops | sed '7!d' | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
SEQ32R="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "SeqQ32T1read"' | grep bw_bytes | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "SeqQ32T1read"' | grep -m1 iops | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
SEQ32W="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "SeqQ32T1write"' | grep bw_bytes | sed '2!d' | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "SeqQ32T1write"' | grep iops | sed '7!d' | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
FKR="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kread"' | grep bw_bytes | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kread"' | grep -m1 iops | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
FKW="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kwrite"' | grep bw_bytes | sed '2!d' | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kwrite"' | grep iops | sed '7!d' | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
FK32R="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kQ32T1read"' | grep bw_bytes | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kQ32T1read"' | grep -m1 iops | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
FK32W="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kQ32T1write"' | grep bw_bytes | sed '2!d' | cut -d: -f2 | sed s:,::g)/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kQ32T1write"' | grep iops | sed '7!d' | cut -d: -f2 | cut -d. -f1 | sed 's: ::g')"
FK8R="$(($(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kQ8T8read"' | grep bw_bytes | sed 's/ "bw_bytes" : //g' | sed 's:,::g' | awk '{ SUM += $1} END { print SUM }')/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A15 '"name" : "4kQ8T8read"' | grep iops | sed 's/ "iops" : //g' | sed 's:,::g' | awk '{ SUM += $1} END { print SUM }' | cut -d. -f1)"
FK8W="$(($(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kQ8T8write"' | grep bw_bytes | sed 's/ "bw_bytes" : //g' | sed 's:,::g' | awk '{ SUM += $1} END { print SUM }')/1024/1024))MB/s IOPS=$(cat $TARGET/.fiomark.txt | grep -A80 '"name" : "4kQ8T8write"' | grep '"iops" '| sed 's/ "iops" : //g' | sed 's:,::g' | awk '{ SUM += $1} END { print SUM }' | cut -d. -f1)"
echo -e "
Results from /dev/$DRIVE, $DRIVEMODEL ($DRIVESIZE):
\033[0;33m
Sequential Read: $SEQR
Sequential Write: $SEQW
\033[0;32m
512KB Read: $F12KR
512KB Write: $F12KW
\033[1;36m
Sequential Q32T1 Read: $SEQ32R
Sequential Q32T1 Write: $SEQ32W
\033[0;36m
4KB Read: $FKR
4KB Write: $FKW
\033[1;33m
4KB Q32T1 Read: $FK32R
4KB Q32T1 Write: $FK32W
\033[1;35m
4KB Q8T8 Read: $FK8R
4KB Q8T8 Write: $FK8W
"
rm $TARGET/.fiomark.txt $TARGET/.fiomark.tmp
যা ফলাফলগুলি এর মতো ফলাফল দেয়:
Results from /dev/sdb, Corsair Force GT (111GB):
Sequential Read: 533MB/s IOPS=0
Sequential Write: 125MB/s IOPS=0
512KB Read: 457MB/s IOPS=914
512KB Write: 133MB/s IOPS=267
Sequential Q32T1 Read: 534MB/s IOPS=16
Sequential Q32T1 Write: 134MB/s IOPS=4
4KB Read: 32MB/s IOPS=8224
4KB Write: 150MB/s IOPS=38460
4KB Q32T1 Read: 195MB/s IOPS=49951
4KB Q32T1 Write: 121MB/s IOPS=31148
4KB Q8T8 Read: 129MB/s IOPS=33149
4KB Q8T8 Write: 132MB/s IOPS=33796
(ফলাফলগুলি রঙিন কোডিং হয়, বর্ণ কোডিংয়ের অপসারণের \033[x;xxm
জন্য স্ক্রিপ্টের নীচে ইকো কমান্ড থেকে সমস্ত দৃষ্টান্ত (যেখানে x একটি সংখ্যা থাকে) সরিয়ে দেয়))
তর্ক ছাড়াই চালিত স্ক্রিপ্টটি আপনার হোম ড্রাইভ / পার্টিশনের গতি পরীক্ষা করবে will আপনি যদি এর পরিবর্তে এটি পরীক্ষা করতে চান তবে আপনি অন্য হার্ড ড্রাইভের ডিরেক্টরিতে একটি পাথ প্রবেশ করতে পারেন। স্ক্রিপ্টটি চালানোর সময় লক্ষ্য ডিরেক্টরিতে লুকানো অস্থায়ী ফাইল তৈরি হয় যা এটি চলমান শেষ হওয়ার পরে পরিষ্কার হয় (.fiomark.tmp এবং .fiomark.txt)
আপনি পরীক্ষার ফলাফলগুলি সম্পূর্ণ হওয়ার সাথে সাথে দেখতে পাচ্ছেন না, তবে আপনি যদি সমস্ত পরীক্ষা শেষ করার আগে কমান্ডটি চলমান অবস্থায় এটি বাতিল করে দেন তবে আপনি সম্পূর্ণ পরীক্ষার ফলাফলগুলি দেখতে পাবেন এবং অস্থায়ী ফাইলগুলি পরে মুছে ফেলা হবে।
কিছু গবেষণার পরে, আমি দেখতে পেলাম যে স্ফটিক ডিস্কমার্ক বেঞ্চমার্কের একই মডেলের ড্রাইভের ফলাফল হিসাবে আমি মনে করি যে আমি এই ফাইও বেঞ্চমার্কের ফলাফলগুলি তুলনামূলকভাবে কমপক্ষে এক নজরে মিলিয়েছি relatively আমার উইন্ডোজ ইনস্টলেশন না থাকাকালীন একই ড্রাইভের জন্য তারা কতটা নিখুঁত তা নিশ্চিত করতে পারছি না।
নোট করুন যে আপনি কখনও কখনও ফলাফলগুলি কিছুটা সরিয়ে ফেলতে পারেন, বিশেষত যদি আপনি পরীক্ষাগুলি চলাকালীন পটভূমিতে কিছু করছেন, সুতরাং ফলগুলি তুলনা করার জন্য পরপর দুবার পরীক্ষা চালানো বাঞ্ছনীয়।
এই পরীক্ষাগুলি চালাতে দীর্ঘ সময় নেয়। স্ক্রিপ্টের ডিফল্ট সেটিংস বর্তমানে নিয়মিত (এসএটিএ) এসএসডি-র জন্য উপযুক্ত।
বিভিন্ন ড্রাইভের জন্য প্রস্তাবিত SIZE সেটিং:
- (Sata) এসএসডি: 1024 (ডিফল্ট)
- (যে কোনও) এইচডিডি: 256
- (হাই এন্ড এনভিএমই) এসএসডি: 4096
- (লো-মিড এন্ড এনভিএমই) এসএসডি: 1024 (ডিফল্ট)
একটি হাই এন্ড এনভিএমই সাধারণত প্রায় 2 গিগাবাইট / সেকেন্ড পড়ার গতি থাকে (ইন্টেল অপ্টেন এবং স্যামসাং 960 ইভিও উদাহরণস্বরূপ; তবে পরবর্তী ক্ষেত্রে আমি ধীর 4kb গতির কারণে 2048 এর সুপারিশ করব)), নিম্ন-মধ্য প্রান্তের যে কোনও জায়গায় থাকতে পারে -18 500-1800MB / গুলি পড়ার গতি।
এই আকারগুলিকে সামঞ্জস্য করার বড় কারণ হ'ল পরীক্ষাগুলি অন্যথায় কতক্ষণ সময় নিতে পারে, উদাহরণস্বরূপ, বয়স্ক / দুর্বল এইচডিডিগুলির জন্য, আপনার কাছে 0.4MB / s 4kb পড়ার গতি থাকতে পারে। আপনি সেই গতিতে 1 গিগাবাইটের 5 টি লুপের জন্য অপেক্ষা করার চেষ্টা করেন, অন্যান্য 4 কেবি পরীক্ষায় সাধারণত 1MB / s গতি থাকে। আমরা তাদের মধ্যে 6 আছে। প্রতিটি চলমান 5 টি লুপ, আপনি কি 30 গিগাবাইট ডেটা সেই গতিতে স্থানান্তরিত হওয়ার জন্য অপেক্ষা করেন? অথবা আপনি কি এর পরিবর্তে ডেটা .5.৫ গিগাবাইটে কমিয়ে আনতে চান (২৫6 এমবি / সেটিতে এটি ২-৩ ঘন্টার পরীক্ষা)
অবশ্যই, পরিস্থিতি পরিচালনার জন্য আদর্শ পদ্ধতিটি 4k পরীক্ষার থেকে পৃথক অনুক্রমিক এবং 512 কে পরীক্ষা চালানো হবে (সুতরাং 512m বলার মতো কিছু দিয়ে সিক্যুয়াল এবং 512 কে পরীক্ষা চালান, এবং তারপর 32k তে 4k পরীক্ষা চালান)
আরও সাম্প্রতিক এইচডিডি মডেলগুলি উচ্চতর হলেও এটি এর চেয়ে আরও ভাল ফলাফল পেতে পারে।
এবং সেখানে আপনি এটা আছে। উপভোগ করুন!