一種自動檢測硬碟性能波動的方法
2023-09-16 15:48:55
一種自動檢測硬碟性能波動的方法
【專利摘要】本發明公開了一種自動檢測硬碟性能波動的方法,屬於硬碟性能波動檢測【技術領域】,一種自動檢測硬碟性能波動的方法,包括如下步驟:(1)搭建測試機,準備測試環境;(2)安裝linux作業系統或者CentOS作業系統,並將硬碟性能測試工具拷貝到測試機;(3)安裝測試需要的rpm軟體包;(4)配置測試參數,根據實際配置中硬碟的數量,修改硬碟性能測試工具對應的硬碟數量;(5)對硬碟性能波動開始測試;(6)用iostat命令查看並監控測試過程;(7)查看測試結果;(8)收集測試結果;(9)結束測試。本發明使系統能夠自動對硬碟進行性能的測試和對比,並能夠輸出測試結果。
【專利說明】一種自動檢測硬碟性能波動的方法
【技術領域】
[0001]本發明涉及一種硬碟性能波動檢測【技術領域】,具體地說是一種自動檢測硬碟性能波動的方法。
【背景技術】
[0002]隨著伺服器快速的推廣應用,客戶的對1的性能要求也越來越高。曾經出現一個案例:某款伺服器在某一網際網路重要客戶應用中,經常出現某型號硬碟中的很多硬碟出現性能不穩定和性能偏低的問題,嚴重影響客戶的數據存儲應用,和實際應用。如何能滿足用戶多樣化的需求,確保各種應用環境的穩定、可靠是必須面臨和考慮的問題。
[0003]現有技術中,硬碟的性能測試工具,測試結果是所有硬碟在不同數據塊下的1PS和帶寬的平均值,無法將每一塊硬碟的性能做對比。
【發明內容】
[0004]本發明的技術任務是提供一種使系統能夠自動對硬碟進行性能的測試和對比,並能夠輸出測試結果的一種自動檢測硬碟性能波動的方法。
[0005]本發明的技術任務是按以下方式實現的:
一種自動檢測硬碟性能波動的方法,包括如下步驟:
(1)、搭建測試機,準備測試環境;
(2)、安裝Iinux作業系統或者CentOS作業系統,並將硬碟性能測試工具拷貝到測試機;
(3)、安裝測試需要的rpm軟體包;
(4)、配置測試參數,根據實際配置中硬碟的數量,修改硬碟性能測試工具對應的硬碟數量;
(5)、對硬碟性能波動開始測試;
(6)、用1stat命令查看並監控測試過程;
(7)、查看測試結果;
(8)、收集測試結果;
(9)、結束測試。
[0006]rpm軟體包包括f1軟體包、parted軟體包、Isscsi軟體包。
[0007]步驟(7),查看測試結果,若各硬碟性能數據差異不大,則通過,收集測試結果;若存在有硬碟性能低,則更換硬碟進行步驟(5)重新測試;若存在有硬碟性能低,不更換硬碟,則收集測試結果並記錄硬碟。
[0008]測試機安裝Iinux作業系統,將F1硬碟性能測試工具拷貝到測試機。
[0009]F1是一款Linux操作平臺上頗為專業的硬碟性能測試工具,可測試硬碟10PS、帶寬,支持13種不同的I/O引擎,包括:sync,mmap, liba1, posixa1等等。這個工具最大的特點是使用簡單,支持的文件操作非常多,對結果的解讀也做的很明白。該測試工具是選用block為4K大小;10深度為1、8、16 ;讀寫模式為0%、50%、100%的讀寫模式;將生成的結果用硬碟SN和各讀寫性能值對應的方式保持記錄,我們通過查看記錄數據,很容易找出性能之間的差異,並對結果進行收集和分析。
[0010]本發明的一種自動檢測硬碟性能波動的方法具有以下優點:根據硬碟的讀寫比例、block大小和1深度的不同而編寫出新的F1硬碟性能測試腳本,測試完成後會對測試結果進行匯總,生成鮮明的對比結果,通過對結果進行比對,在出貨給客戶前找出有問題硬碟,避免問題流向客戶,以達到提高整機硬碟性能和確保產品質量的目的;該測試方法操作簡單,自動化程度高,實用性較強,能夠節省人力,有效確保了伺服器的穩定性和可靠性,是驗證產品質量的非常有效的方法。
【專利附圖】
【附圖說明】
[0011]下面結合附圖對本發明進一步說明。
[0012]附圖1為一種自動檢測硬碟性能波動的方法的流程圖。
【具體實施方式】
[0013]參照說明書附圖和具體實施例對本發明的一種自動檢測硬碟性能波動的方法作以下詳細地說明。
[0014]實施例1:
本發明的一種自動檢測硬碟性能波動的方法,包括如下步驟:
(1)、搭建測試機,準備測試環境;
(2)、安裝Iinux作業系統,並將硬碟性能測試工具拷貝到測試機;
(3)、安裝測試需要的rpm軟體包;
(4)、配置測試參數,根據實際配置中硬碟的數量,修改硬碟性能測試工具對應的硬碟數量;
(5)、對硬碟性能波動開始測試;
(6)、用1stat命令查看並監控測試過程;
(7)、查看測試結果;
(8)、收集測試結果;
(9)、結束測試。
[0015]rpm軟體包包括f1軟體包、parted軟體包、Isscsi軟體包。
[0016]步驟(7),查看測試結果,若各硬碟性能數據差異不大,則通過,收集測試結果;若存在有硬碟性能低,則更換硬碟進行步驟(5)重新測試;若存在有硬碟性能低,不更換硬碟,則收集測試結果並記錄硬碟。
[0017]測試機安裝Iinux作業系統,將F1硬碟性能測試工具拷貝到測試機。
[0018]F1是一款Linux操作平臺上頗為專業的硬碟性能測試工具,可測試硬碟10PS、帶寬,支持13種不同的1/0引擎,包括:sync,mmap, liba1, posixa1等等。這個工具最大的特點是使用簡單,支持的文件操作非常多,對結果的解讀也做的很明白。該測試工具是選用block為4K大小;10深度為1、8、16 ;讀寫模式為0%、50%、100%的讀寫模式;將生成的結果用硬碟SN和各讀寫性能值對應的方式保持記錄,我們通過查看記錄數據,很容易找出性能之間的差異,並對結果進行收集和分析。
[0019]實施例2:
本發明的一種自動檢測硬碟性能波動的方法,包括如下步驟:
(1)、搭建測試機,準備測試環境;
(2)、安裝Iinux作業系統,並將硬碟性能測試工具拷貝到測試機;
(3)、安裝測試需要的rpm軟體包;
(4)、配置測試參數,根據實際配置中硬碟的數量,修改硬碟性能測試工具對應的硬碟數量;
(5)、對硬碟性能波動開始測試;
(6)、用1stat命令查看並監控測試過程;
(7)、查看測試結果;
(8)、收集測試結果;
(9)、結束測試。
[0020]測試程序如下:
I)、f1_ran_falloc.sh 腳本代碼:
#!/bin/bash
workdir=' /root/tmp/f1'
fallocbin=〃./falloc〃
if [ ! -d $workdir ]; then
mkdir -p $workdir
else
rm -rf $ {workdir}/*
fi
IS_PARTED=false
IS_MKFS_EXT4=false
usage {
echo "$0 [_h] [_d device] [_p] [-m]"
exit
}
while getopts 〃d:hpm〃 arg
do
case $arg in
h)
usage;;
d)
target=${0PTARG};;
m)
IS_MKFS_EXT4=true;;
P)
IS_PARTED=true;;
esac
done
device=/dev/$target # 目標盤 which lsscsi &>/dev/null if [ $? -eq 0 ]; then LSSCSI='which lsscsi' else
LSSCSI='./lsscsi'
fi
model=' $LSSCSI | grep $ {target0/。[0-9]} | awk,{printf "%s—%s",$4,$5},'
block=4
hn= hostname # localhost.1ocaldomain
myOSMajor=$(cat /etc/redhat-release | awk 』 {print $3}』 | cut _d.-f I)
for device—umount in mount | grep {device}^ | awk 』 {print $1}』 ';do
umount $ {device—umount} >/dev/null 2>&1 # 如果設備已掛載則先卸載
done
testdir=〃/part—test/${target}〃
if [ ! -d $testdir ]; then
mkdir -p $testdir
fi
if grep -1q {device}^ /etc/fstab | | mount | grep _iq {device}^ ; then
echo 〃This disk is not allowed to test〃 >>/root/tmp/f1/main.err
exit I
fi
start=』 0%'
end=,100%,
if [ ${myOSMajor} -eq 4 ]; then
start=』 OkBi
end= parted $device print|grep geometry|awk,{print $5},| awk -F-』 {print $2}』'"MB"
if [ $ (echo $end|cut _d.-fI) -1t 100 ] ; then
echo ^MyOSMajor vers1n equal 4〃 >>/root/tmp/f1/main.err
exit I
fi
else
start=』 0%'
end='parted $device print|grep "Disk|awk , {print $3}
if echo $end |grep -q MB; then
echo "The disk’s captivity is too small, there maybe some problemshere〃 >>/root/tmp/f1/main.errexit I
fi
end=,100%,
fi
if ${IS—PARTED} ;then
#2012-07-13發現很多機器磁碟的label沒有了,需要mklabel修復
label—type=』 msdos'
total_size='fdisk -1 $device 2>/dev/null | grep "Disk |grep -v identifierI awk , {print $3}, | awk , {printf("%d",$0)}』'
[$total—size -gt 2000 ] && label—type=』 gpt』
parted -s $device mklabel $label_type
parted $device rm I >/dev/null 2>&1 # fix bug: re-clone server shouldremove current partiton first
parted $device mkpart primary $start $end >/dev/null 2>&1
fi
if ${IS—MKFS—EXT4} ;then
echo "Starting auto-format, it takes about 10 minutes per IT disc...〃
echo "wait for mkfs.ext4 done...〃
mkfs.ext4 $ {device}I
echo "please wait 5s...〃
sleep 5
fi
mount $ {device} I $ {testdir} / >/dev/null 2>&1 # 掛載設備
totalsize='cat /proc/partit1ns | grep $ {target}I | awk 』 {print $3}
size='echo 〃$totalsize 氺 4 / 5 〃| bc'
if [ -z $size ]; then
echo 〃Get $target size invailed〃 >>/root/tmp/f1/main.err
exit I
fi
if [ ! -d $testdir ]; then
echo 〃$target related testdir is null^ >>/root/tmp/f1/main.errexit Ielse
$fallocbin -p $ {testdir}/test _o 0 -1 $ {size}k
if [ $? -ne 0 ]; then
echo ^allocate file failed 〃 >>/root/tmp/f1/main.err
exit I
fi
fi
echo 〃start time: date 〃 > ${workdir}/$ {hn}_$model.$target.random, log
echo 』』 > ${workdir}/$ {hn}_$model.$target.random, csv
for read in 0 50 100
do
for queue in I 8 16
do
name=R_${read}R—${block}K—${queue}Q
f1 ——name = $name --rw=randrw ——direct = I ——norandommap—1engine=liba1 —runtime=60s —fal1c=I —1scheduler=cfq —size=${size}k—fi lename=${testdir}/test —rwmixread=$read —bs=${block}k —1depth=$queue—minimal >> ${workdir}/$ {hn}_$model.$target.random, log
tail -2 $ {workdir}/$ {hn}_$mode1.$ target.random, log |awk -F 〃;" -v BL0CK=$block,/K/{printf "%s,%.2f,%.2f,%.2f,%.2f,%.2f\n",$2,($5 + $25) /BL0CK/60, $5/BL0CK/60, $6,$25/BL0CK/60, $26}』 >>$ {workdir} /$ {hn}_$model.$target.random, csvdone #顯示最後2行done
echo 〃end time: date 〃 >> ${workdir}/${hn}_$model.$target.random, log
rm -f $ {testdir}/test
#sed -1 』/"$/d,$ {workdir}/${hn}_$model.$target.random, csv &&c p $ {workdir}/$ {hn}_$mode1.$ target.random, csv $ {workdir}/$ {hn}@_sd_@$model@$target, random, csvservice ipmi restart
sn='ipmitool fru|grep "Product Serial" |awk 』 {print $4}
smartctl -a $device >$ {workdir}/${target}.txt
hdd_sn='cat $ {workdir}/$ {target}.txt|grep _i serial|awk 』 {print $3}peri=' cat $ {workdir} /$ {hn}_$model.$target.random, csv | awk -Fj {print$2","},'
a= echo $perl
echo ${hdd—sn}』,』$a >>$ {workdir}/result, txt
sed -1 』/"$/d』 $ {workdir}/$ {hn}_$model.$target, random, csv && mv$ {workdir} /$ {hn}_$model.$target.random, csv $ {workdir} /$ {sn}_$ {target} _$ {model}_$ {hdd—sn}.csv
mv $ {workdir}/${hn}_$model.$target.random, log ${workdir}/${sn}_${target}_${model}_${hdd—sn}.logcd $ {workdir}
tar -zcvf $ {sn}—hdd.tar.gz txt
tar -zcvf $ {sn}_csv.tar.gz csv
tar -zcvf $ {sn}_log.tar.gz 木.log
title=' cat 木sdc木.csv | awk -Fj ,{print $1^, J '
b='echo "Serial Number"』』 $title'
sed 〃li\ $b 〃 result.txt >result.csv
2)、hdd—test, sh 腳本代碼:
#!/bin/bash
for i in {b..f}
do
#dd if=/dev/zero of=/dev/sd$i bs=4k count=10
nohup &> /dev/null sh f1_ran_falloc, sh -d sd$1-p -m &
if [ $? -eq 0 ]
then
echo 〃/dev/sd$i is ok〃>>success.txt
else
echo 〃sd$i is fail〃>>fail.txt
fi
done o
[0021]通過上面【具體實施方式】,所述【技術領域】的技術人員可容易的實現本發明。但是應當理解,本發明並不限於上述的2種【具體實施方式】。在公開的實施方式的基礎上,所述【技術領域】的技術人員可任意組合不同的技術特徵,從而實現不同的技術方案。
【權利要求】
1.一種自動檢測硬碟性能波動的方法,其特徵在於包括如下步驟: (1)、搭建測試機,準備測試環境; (2)、安裝Iinux作業系統或者CentOS作業系統,並將硬碟性能測試工具拷貝到測試機; (3)、安裝測試需要的rpm軟體包; (4)、配置測試參數,根據實際配置中硬碟的數量,修改硬碟性能測試工具對應的硬碟數量; (5)、對硬碟性能波動開始測試; (6)、用1stat命令查看並監控測試過程; (7)、查看測試結果; (8)、收集測試結果; (9)、結束測試。
2.根據權利要求1所述的一種自動檢測硬碟性能波動的方法,其特徵在於rpm軟體包包括f1軟體包、parted軟體包、Isscsi軟體包。
3.根據權利要求1所述的一種自動檢測硬碟性能波動的方法,其特徵在於步驟(7),查看測試結果,若各硬碟性能數據差異不大,則通過,收集測試結果;若存在有硬碟性能低,則更換硬碟進行步驟(5)重新測試;若存在有硬碟性能低,不更換硬碟,則收集測試結果並記錄硬碟。
4.根據權利要求1所述的一種自動檢測硬碟性能波動的方法,其特徵在於測試機安裝Iinux作業系統,將F1硬碟性能測試工具拷貝到測試機。
【文檔編號】G06F11/26GK104317693SQ201410596362
【公開日】2015年1月28日 申請日期:2014年10月30日 優先權日:2014年10月30日
【發明者】劉鳳剛 申請人:浪潮電子信息產業股份有限公司