then cpu—grouping=8; else
cpu_group i ng=16; fi; else
cpu—grouping=0;
fi; echo -e ?,
echo 1c number = $ {1c}# 輸出 SAS 控制器
echo number of core processors = $ {cpu_count}# 輸出 CPU 核數(shù)
echo msix vector count = $ {msix—count}#輸出中斷矢量數(shù)量 if [
${cpu_grouping} _eq 0 ] ; then
echo number of cores per msix vector = I#如cpu—group=0,每個中斷對應(yīng)一個核else
echo number of cores per msix vector = ${cpu_grouping}
#輸出每個中斷矢量對應(yīng)的CPU組 fi;
echo -e ?,
while [ ${msix_count} -gt $ {index} ] && \
([${cpu—affinity—count} -1t ${cpu—count} ] || \
[${cpu_affinity_count} _eq ${cpu_count} ] ) ; do b=0
a='cat /proc/interrupts | grep -w mpt2sas${1c}-msix${index} | cut _d:-f I' #獲取msix (index)對應(yīng)的控制器中斷號irq—number= basename ${a}
cd /proc/irq/$ {irq—number}#進(jìn)入相應(yīng)中斷的配置目錄
if [ ${cpu_grouping} _ne 0 ]; then10p=I
calculate_affinity=${affinity} let cpu—affinity—count=${cpu—affinity—count}+1 while [ $ {loop} -1t ${cpu—grouping} ]; do let affinity=${affinity}
let calculate_affinity=${calculate_affinity}+${affinity} let loop=${loop}+1
let cpu—affinity—count=${cpu—affinity—count}+1done;
b='printf 〃%x〃 $ {calculate_affinity}'
#獲取 msix (index)綁定 CPU 的對應(yīng) Bitmask else
let cpu—affinity—count=${cpu—affinity—count}+1 b='printf 〃%x〃 $ {affinity}' fi;
echo cpu—affinity—count = ${cpu—affinity—count}
if [ ${cpu—affinity—count} -1t ${cpu—count} ] || \
[$ {cpu_affinity_count} _eq ${cpu_count} ]; thenlet length=${#b}let number—of—words=${length} /8let extra—word=${length}%8let i=0
if [ $ {extra—word} -gt 0 ]; then
echo -n 〃$ {b:0: ${extra—word}}〃 > /tmp/smp_affinity-${index} if [ ${number_of—words} -gt 0 ]; then
echo -n 〃,〃 >> /tmp/smp_affinity-${index}
fi
fi
while [ $1-1t ${number_of—words} ]; do
echo -n 〃$ {b: $ {i}*8+${extra—word}:8} " >> /tmp/smp—
affinity-${index}
let i=${i}+l
if [ $1-1t $ {number_of—words} ]; then
echo -n 〃,〃 >> /tmp/smp_affinity-${index}
fi
done
cat /tmp/smp_affinity-${index} > smp_affinity#將bitmask寫入相應(yīng)中斷CPU綁定配置文件smp—affinityrm -f /tmp/smp_affinity-${index}
#echo -e 〃\tmsix index = $ {index}, irq number = ${irq_number},cpu
affinity mask = $〃
echo -e 〃\tmsix index = ${index}, irq number = ${irq_number},cpuaffinity mask = cat smp_affinity "let index=${index}+1let affinity=${affinity}fi;done
echo -e 〃\nWe have set affinity for $ {index} msix vectors and $ {cpu_count} core processors\n〃done.該將SAS控制器中斷綁定到CPU的自動化實現(xiàn)方法,借用SHELL腳本實現(xiàn)SAS控制器中斷到CPU的自動綁定,大大簡化了操作流程,特別對于多盤位服務(wù)器,使用的SAS控制器中斷比較多,使用該方法可以輕松實現(xiàn)大量SAS控制器到CPU的綁定。該自動化方法可應(yīng)用于所有x86服務(wù)器產(chǎn)品,在服務(wù)器測試階段或者其他階段,在提高SAS卡性能測試準(zhǔn)確性和優(yōu)化性能的同時,為公司節(jié)省了人力、時間、成本等資源,也減少了不必要的人機(jī)交互過程。
[0013]上述【具體實施方式】僅是本發(fā)明的具體個案,本發(fā)明的專利保護(hù)范圍包括但不限于上述【具體實施方式】,任何符合本發(fā)明的權(quán)利要求書的且任何所屬技術(shù)領(lǐng)域的普通技術(shù)人員對其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。
【主權(quán)項】
1.一種將SAS控制器中斷綁定到CPU的自動化方法,其特征在于,利用shell腳本實現(xiàn)SAS控制器中斷到CPU的自動化綁定,利用shell腳本自動獲取SAS控制器中斷號,自動計算并分配中斷號到指定的CPU ;該動化方法的具體流程如下:首先強制關(guān)閉irqbalance服務(wù),然后自動獲取CPU內(nèi)核總數(shù),并自動獲取SAS控制器中斷號、SAS卡中斷數(shù)量以及綁定這些中斷所需的CPU組;最后,顯示最終綁定結(jié)果。
2.根據(jù)權(quán)利要求1所述一種將SAS控制器中斷綁定到CPU的自動化方法,其特征在于,按CPU內(nèi)核總數(shù)和SAS卡中斷號總數(shù),計算每個中斷綁定哪些CPU內(nèi)核,形成位掩碼。
3.根據(jù)權(quán)利要求2所述一種將SAS控制器中斷綁定到CPU的自動化方法,其特征在于,輸出SAS控制器的中斷號、cpu內(nèi)核總數(shù)、總中斷矢量數(shù)量,以及每個中斷向量分配的核數(shù)。
【專利摘要】本發(fā)明公開一種將SAS控制器中斷綁定到CPU的自動化方法,整個過程主要是利用shell腳本實現(xiàn)SAS控制器中斷到CPU的自動化綁定,自動實現(xiàn)SAS控制器中斷到CPU的綁定,免去人機(jī)交互過程;利用shell腳本自動獲取SAS控制器中斷號,自動計算并分配中斷號到指定的CPU,該過程完全自動完成。該自動化方法應(yīng)用在服務(wù)器性能測試階段和服務(wù)器投入使用時,用來提高SAS卡IOPS性能,可以節(jié)省人力和時間,提高工作效率。
【IPC分類】G06F9-48
【公開號】CN104572282
【申請?zhí)枴緾N201510002739
【發(fā)明人】伯紹文, 閆碩
【申請人】浪潮電子信息產(chǎn)業(yè)股份有限公司
【公開日】2015年4月29日
【申請日】2015年1月5日