本發(fā)明屬于存儲系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種多線程系統(tǒng)的性能提升方法和裝置。
背景技術(shù):
隨著數(shù)據(jù)量逐漸增大,人們對存儲系統(tǒng)性能的要求越來越高。現(xiàn)階段的處理器單個核性能越來越難以提升,因此,多核成了處理器發(fā)展的一個方向。一個cpu中存在多個核,所以一個系統(tǒng)中同時運行多個線程能夠提高系統(tǒng)的并發(fā)性,從而顯著提升存儲系統(tǒng)的性能。
然而。限制多線程系統(tǒng)的性能的一個重要因素是鎖,對于一些共享資源的使用,導(dǎo)致線程直接相互牽制,需要用到鎖。當(dāng)多個線程在等待同一個鎖時,相當(dāng)于是單個線程的效率,極大的限制了多線程系統(tǒng)能夠得到的性能提升,所以如何解決鎖的問題是多線程系統(tǒng)中的一個重要問題。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種多線程系統(tǒng)的性能提升方法和裝置,能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。
本發(fā)明提供的一種多線程系統(tǒng)的性能提升方法,包括:
將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;
創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;
將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;
當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];
當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,還包括:
將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列為:
創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述固定個數(shù)的范圍為40個至60個。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升方法中,所述預(yù)設(shè)閾值的范圍為600毫秒至1000毫秒。
本發(fā)明提供的一種多線程系統(tǒng)的性能提升裝置,包括:
綁定單元,用于將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;
創(chuàng)建單元,用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;
關(guān)聯(lián)單元,用于將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;
添加單元,用于當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];
執(zhí)行單元,用于當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升裝置中,還包括:
任務(wù)拆分單元,用于將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。
優(yōu)選的,在上述多線程系統(tǒng)的性能提升裝置中,所述創(chuàng)建單元具體用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。
通過上述描述可知,本發(fā)明提供的上述多線程系統(tǒng)的性能提升方法和裝置,由于該方法包括將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,因此能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法的示意圖;
圖2為任務(wù)隊列的結(jié)構(gòu)示意圖;
圖3為本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置的示意圖。
具體實施方式
本發(fā)明的核心思想在于提供一種多線程系統(tǒng)的性能提升方法和裝置,能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法如圖1所示,圖1為本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法的示意圖,該方法包括如下步驟:
s1:將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;
具體的,在系統(tǒng)啟動的時候,首先計算當(dāng)前系統(tǒng)處理器有多少個核,然后我們啟動跟核數(shù)相同個數(shù)的線程,并且將每個線程綁定到固定的處理器核上,以減少線程在不同核上切換導(dǎo)致的性能開銷。
s2:創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;
任意一個線程運行過程中都應(yīng)該允許往任意隊列中添加新任務(wù),按常規(guī)做法,線程操作同一個隊列過程中需要加鎖,而本實施例中,為了避免鎖的使用,將每一個線程關(guān)聯(lián)到一組任務(wù)隊列。
s3:將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;
需要說明的是,這個綁定關(guān)系可以改變,但一個時間點,每個線程關(guān)聯(lián)到一組確定的隊列,不同線程關(guān)聯(lián)的隊列不同,這樣同一個時間多個線程不會從同一個隊列取任務(wù),可以避免取任務(wù)加鎖的問題。
s4:當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];
具體的,當(dāng)某個線程需要往任務(wù)隊列添加任務(wù)t時,先確定需要添加任務(wù)到隊列m,即給隊列queues[m][*]對應(yīng)的線程安排任務(wù),然后取到當(dāng)前線程自己對應(yīng)的隊列號n,則該線程將任務(wù)t添加到queues[m][n]。這樣任一線程往任一隊列添加任務(wù)時,不會發(fā)生沖突,添加任務(wù)時不需要加鎖。
s5:當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行。
具體的,每個線程啟動后會執(zhí)行一個無限循環(huán),一直嘗試從它對應(yīng)的任務(wù)隊列中取任務(wù)。每個任務(wù)是一個回調(diào)函數(shù),取到任務(wù)后,該線程將會調(diào)用這個函數(shù)。系統(tǒng)中可以分配max_q*max_q個這樣的隊列,taskqqueues[max_q][max_q],每個線程對應(yīng)max_q個隊列,線程i固定從queues[i][*]中取任務(wù),*表示[0,max_q),這樣每個線程在取任務(wù)的時候不會相互干擾,可以避免加鎖。
通過上述描述可知,本申請實施例提供的第一種多線程系統(tǒng)的性能提升方法,由于包括將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上;創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列;將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列;當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n];當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,因此能夠減少因為鎖等待導(dǎo)致的性能下降問題,提高存儲系統(tǒng)中多線程并發(fā)性,提升系統(tǒng)性能。
本申請實施例提供的第二種多線程系統(tǒng)的性能提升方法,是在上述第一種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:
還包括:
將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。
需要說明的是,為了避免某個線程長時間被某個任務(wù)占用,導(dǎo)致其他任務(wù)得不到處理,導(dǎo)致io超時,這里可以將每個io處理拆分成小塊的任務(wù),每個任務(wù)時間盡量短,每個線程每次取固定個數(shù)的任務(wù)處理,處理完算完成一個周期,一個周期的時間不能超過某個固定的閾值,這樣能保證每個線程都忙碌,且每個任務(wù)都能快速得到執(zhí)行,避免有的io長時間得不到處理,導(dǎo)致超時問題。一個例子如下:一個io處理需要2s,但這2s可能不是連續(xù)干完的,中間可能會等待一些其他條件,處理器是空閑的,這樣可以把這個io拆成若干個小的任務(wù),比如這個任務(wù)原來是:干活0.1s,等待0.7s,干活0.2s,等待0.7s干活0.3s,我們可以把它拆成3段,干活0.1s,處理別的io,再干活0.2s,再去處理別的io,再干活0.3s,完成。
本申請實施例提供的第三種多線程系統(tǒng)的性能提升方法,是在上述第一種或第二種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列為:
創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。
具體的,參考圖2,圖2為任務(wù)隊列的結(jié)構(gòu)示意圖,環(huán)形隊列采用固定長度,填滿后會將多出的任務(wù)鏈接到溢出隊列,線程工作過程中會不斷的從對應(yīng)的隊列中取任務(wù),處理后會將溢出隊列中的任務(wù)補(bǔ)充到環(huán)形隊列中去,這樣既可以得到線性表遍歷快速的好處,又彌補(bǔ)了其容量固定的缺陷。
本申請實施例提供的第四種多線程系統(tǒng)的性能提升方法,是在上述第二種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述固定個數(shù)的范圍為40個至60個。
本申請實施例提供的第五種多線程系統(tǒng)的性能提升方法,是在上述第四種多線程系統(tǒng)的性能提升方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述預(yù)設(shè)閾值的范圍為600毫秒至1000毫秒。
更進(jìn)一步的,目前的優(yōu)選設(shè)置方案是50個任務(wù)執(zhí)行總時間不超過800毫秒。采用拆分任務(wù)的方法,將任務(wù)盡可能拆分成小塊,能夠避免長時間占用某個線程導(dǎo)致其他任務(wù)得不到調(diào)度而導(dǎo)致io超時的問題,從而提高io的響應(yīng)速度,而且可以相互檢查超時,及時發(fā)現(xiàn)某個線程被長時間占用的情況,并及時做出反應(yīng),方便查找定位問題。
本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置如圖3所示,圖3為本申請實施例提供的第一種多線程系統(tǒng)的性能提升裝置的示意圖,該裝置包括:
綁定單元301,用于將與當(dāng)前系統(tǒng)的處理器核數(shù)量相等的線程一一對應(yīng)的綁定至處理器核上,具體的,在系統(tǒng)啟動的時候,用于計算當(dāng)前系統(tǒng)處理器有多少個核,然后啟動跟核數(shù)相同個數(shù)的線程,并且將每個線程綁定到固定的處理器核上,以減少線程在不同核上切換導(dǎo)致的性能開銷;
創(chuàng)建單元302,用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,任意一個線程運行過程中都應(yīng)該允許往任意隊列中添加新任務(wù),按常規(guī)做法,線程操作同一個隊列過程中需要加鎖,而本實施例中,為了避免鎖的使用,將每一個線程關(guān)聯(lián)到一組任務(wù)隊列;
關(guān)聯(lián)單元303,用于將每個所述線程關(guān)聯(lián)至一組所述任務(wù)隊列,需要說明的是,這個綁定關(guān)系可以改變,但一個時間點,每個線程關(guān)聯(lián)到一組確定的隊列,不同線程關(guān)聯(lián)的隊列不同,這樣同一個時間多個線程不會從同一個隊列取任務(wù),可以避免取任務(wù)加鎖的問題;
添加單元304,用于當(dāng)所述線程向所述任務(wù)隊列添加任務(wù)時,確定需要添加到的任務(wù)隊列號m和所述線程本身對應(yīng)的隊列號n,將所述任務(wù)添加至任務(wù)隊列[m][n],具體的,當(dāng)某個線程需要往任務(wù)隊列添加任務(wù)t時,先確定需要添加任務(wù)到隊列m,即給隊列queues[m][*]對應(yīng)的線程安排任務(wù),然后取到當(dāng)前線程自己對應(yīng)的隊列號n,則該線程將任務(wù)t添加到queues[m][n]。這樣任一線程往任一隊列添加任務(wù)時,不會發(fā)生沖突,添加任務(wù)時不需要加鎖;
執(zhí)行單元305,用于當(dāng)所述線程執(zhí)行任務(wù)時,只從與所述線程綁定的任務(wù)隊列中取出任務(wù)并執(zhí)行,具體的,每個線程啟動后會執(zhí)行一個無限循環(huán),一直嘗試從它對應(yīng)的任務(wù)隊列中取任務(wù)。每個任務(wù)是一個回調(diào)函數(shù),取到任務(wù)后,該線程將會調(diào)用這個函數(shù)。系統(tǒng)中可以分配max_q*max_q個這樣的隊列,taskqqueues[max_q][max_q],每個線程對應(yīng)max_q個隊列,線程i固定從queues[i][*]中取任務(wù),*表示[0,max_q),這樣每個線程在取任務(wù)的時候不會相互干擾,可以避免加鎖。
本申請實施例提供的第二種多線程系統(tǒng)的性能提升裝置,時在上述第一種多線程系統(tǒng)的性能提升裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
還包括:
任務(wù)拆分單元,用于將所述任務(wù)拆分成多個小塊任務(wù),并利用所述線程每次取出固定個數(shù)的小塊任務(wù)進(jìn)行處理,且處理周期不超過預(yù)設(shè)閾值。
需要說明的是,為了避免某個線程長時間被某個任務(wù)占用,導(dǎo)致其他任務(wù)得不到處理,導(dǎo)致io超時,這里可以將每個io處理拆分成小塊的任務(wù),每個任務(wù)時間盡量短,每個線程每次取固定個數(shù)的任務(wù)處理,處理完算完成一個周期,一個周期的時間不能超過某個固定的閾值,這樣能保證每個線程都忙碌,且每個任務(wù)都能快速得到執(zhí)行,避免有的io長時間得不到處理,導(dǎo)致超時問題。一個例子如下:一個io處理需要2s,但這2s可能不是連續(xù)干完的,中間可能會等待一些其他條件,處理器是空閑的,這樣可以把這個io拆成若干個小的任務(wù),比如這個任務(wù)原來是:干活0.1s,等待0.7s,干活0.2s,等待0.7s干活0.3s,我們可以把它拆成3段,干活0.1s,處理別的io,再干活0.2s,再去處理別的io,再干活0.3s,完成。
本申請實施例提供的第三種多線程系統(tǒng)的性能提升裝置,時在上述第一種或第二種多線程系統(tǒng)的性能提升裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
所述創(chuàng)建單元具體用于創(chuàng)建與所述線程的數(shù)量相等的任務(wù)隊列,所述任務(wù)隊列包括固定長度的環(huán)形隊列和非固定長度的溢出隊列。
環(huán)形隊列采用固定長度,填滿后會將多出的任務(wù)鏈接到溢出隊列,線程工作過程中會不斷的從對應(yīng)的隊列中取任務(wù),處理后會將溢出隊列中的任務(wù)補(bǔ)充到環(huán)形隊列中去,這樣既可以得到線性表遍歷快速的好處,又彌補(bǔ)了其容量固定的缺陷。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。