br>[0027]圖5是本發(fā)明實(shí)施例眾核處理器的結(jié)構(gòu)示意圖。
[0028]圖6是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0029]圖7是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0030]圖8是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0031]圖9是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0032]圖10是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0033]圖11是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
[0034]圖12是本發(fā)明實(shí)施例眾核處理器的叢集的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0035]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0036]為了方便理解本發(fā)明實(shí)施例,首先在此介紹本發(fā)明實(shí)施例描述中會(huì)引入的幾個(gè)要素。
[0037]叢集(Cluster):眾核處理器包括多個(gè)Cluster,每個(gè)Cluster由多個(gè)處理器核互連構(gòu)成,并且每個(gè)Cluster維護(hù)著Cluster內(nèi)的處理器核與處理器核之間的緩存一致性。
[0038]線程,可包括硬件線程和軟件線程。操作系統(tǒng)中每個(gè)運(yùn)行的程序都是一個(gè)進(jìn)程,每個(gè)進(jìn)程會(huì)創(chuàng)建一個(gè)或多個(gè)線程,該線程稱為軟件線程。每個(gè)處理器內(nèi)核可以提供一個(gè)或多個(gè)的硬件線程,每個(gè)硬件線程都是一個(gè)可調(diào)度的邏輯處理器,每一個(gè)邏輯處理器可以理解為多條指令,運(yùn)行軟件線程的代碼。本發(fā)明的實(shí)施例中所提到的遷入線程、本地線程和中斷線程,均指硬件線程,該硬件線程包括軟件線程的一段執(zhí)行代碼段,該執(zhí)行代碼段可包括多條指令。
[0039]遷入線程:指Cluster以外的處理器核遷移到當(dāng)前Cluster中的線程。遷入線程的指令中,包含Cluster以外的一個(gè)處理器核對(duì)Cluster的共享緩存的訪存指令。
[0040]本地線程:Cluster內(nèi)的處理器核的線程。本地線程的指令中,包含Cluster內(nèi)的一個(gè)處理器核對(duì)Cluster的共享緩存的訪存指令。
[0041]中斷線程:中斷線程是不同于遷入線程和本地線程以外的線程,操作系統(tǒng)在處理器核中的系統(tǒng)線程,等等。
[0042]圖1是本發(fā)明實(shí)施例的眾核結(jié)構(gòu)示意圖。如圖1所示,在面向大數(shù)據(jù)應(yīng)用的眾核架構(gòu)中,以叢集(Cluster)為架構(gòu)單位,Cluster內(nèi)的共享LLC(Last Level Cache)為Cluster內(nèi)所有處理器核所共享。如果通過(guò)線程遷移的方式減少Cluster之間數(shù)據(jù)交互的Traffic,將能夠降低眾核處理器系統(tǒng)的功耗和提高眾核處理器系統(tǒng)的性能。
[0043]圖2是本發(fā)明實(shí)施例叢集內(nèi)硬件線程負(fù)載均衡方法流程圖,圖2的方法可應(yīng)用于眾核處理器內(nèi)的叢集Cluster,由叢集內(nèi)硬件線程的負(fù)載均衡裝置執(zhí)行。
[0044]201,獲取該Cluster的多個(gè)處理器核中每一個(gè)處理器核的負(fù)載量。
[0045]其中,該處理器核的負(fù)載量由該處理器核的至少一種待執(zhí)行線程確定。
[0046]—種具體的實(shí)現(xiàn)方式,可以根據(jù)處理器核的待執(zhí)行線程的個(gè)數(shù)計(jì)算處理器核的負(fù)載量。
[0047]應(yīng)理解,線程的執(zhí)行指令中,涉及運(yùn)算的指令的時(shí)間開(kāi)銷都較小,一般為一個(gè)時(shí)鐘周期;訪存指令時(shí)間開(kāi)銷較大,需要占據(jù)線程中大部分的時(shí)間開(kāi)銷。因此,處理器的待執(zhí)行線程之間的資源競(jìng)爭(zhēng),實(shí)際上是對(duì)訪存資源的競(jìng)爭(zhēng)。另一種具體的實(shí)現(xiàn)方式,還可通過(guò)處理器核中訪存指令的個(gè)數(shù)來(lái)計(jì)算處理器核的負(fù)載量。
[0048]另外,在對(duì)Cluster的處理器核進(jìn)行負(fù)載均衡時(shí),可以考慮對(duì)處理器核內(nèi)的所有線程進(jìn)行負(fù)載均衡,或者對(duì)處理器核內(nèi)的部分類型的線程進(jìn)行負(fù)載均衡。本發(fā)明實(shí)施例中,處理器核的待執(zhí)行線程可包括多種不同的類型。例如,可以將處理器核的待執(zhí)行線程分為本地線程,遷入線程,或中斷線程,等等。
[0049]在獲取處理器核的負(fù)載量時(shí),可根據(jù)處理器核中待執(zhí)行線程的類型分別獲取各種待執(zhí)行線程的負(fù)載量。例如,在獲取處理器核中本地線程的負(fù)載量時(shí),可根據(jù)處理器核中本地Load/Store隊(duì)列中等待的訪存指令的數(shù)量,獲取本地線程的負(fù)載量;在獲取處理器核中遷入線程的負(fù)載量時(shí),可根據(jù)處理器核中線程棧信息的數(shù)量,獲取遷入線程的負(fù)載量;在獲取處理器核中中斷線程的負(fù)載量時(shí),可根據(jù)處理器核的中斷等待隊(duì)列的中斷個(gè)數(shù),獲取中斷線程的負(fù)載量,等等。
[0050]202,根據(jù)該Cluster的多個(gè)處理器核中每一個(gè)處理器核的負(fù)載量確定第一處理器核和第二處理器核。
[0051]其中,該第一處理器核為待遷出線程的處理器核,該第二處理器核為待遷入線程的處理器核。
[0052]203,將該第一處理器核中的一個(gè)或多個(gè)待執(zhí)行線程遷入到該第二處理器核中。
[0053]本發(fā)明實(shí)施例中,通過(guò)細(xì)粒度的硬件線程遷移來(lái)簡(jiǎn)單快速地實(shí)現(xiàn)Cluster內(nèi)的負(fù)載均衡,提高了 Cluster內(nèi)線程的并行度,降低了線程執(zhí)行的平均等待時(shí)間,提高了眾核處理器系統(tǒng)的系統(tǒng)性能。。
[0054]可選地,作為一個(gè)實(shí)施例,步驟202具體實(shí)現(xiàn)為:根據(jù)該Cluster的多個(gè)處理器核中每一個(gè)處理器核的負(fù)載量,確定該多個(gè)處理器核之間的負(fù)載差值,并且當(dāng)該多個(gè)處理器核中兩個(gè)處理器核的負(fù)載差值大于第一預(yù)定閾值時(shí),確定該兩個(gè)處理器核中負(fù)載量高的處理器核為該第一處理器核,該兩個(gè)處理器核中負(fù)載量低的處理器核為該第二處理器核。
[0055]可選地,作為另一個(gè)實(shí)施例,步驟202具體實(shí)現(xiàn)為:根據(jù)該Cluster的多個(gè)處理器核中每一個(gè)處理器核的負(fù)載量確定第一處理器核,該第一處理器核的負(fù)載量大于第二預(yù)定閾值;向該多個(gè)處理器核中第一處理器核以外的其它處理器核發(fā)送線程遷出請(qǐng)求,該線程遷出請(qǐng)求攜帶該第一處理器核的負(fù)載量;接收該多個(gè)處理器核中第一處理器核以外的其它處理器核根據(jù)自身的負(fù)載量與該第一處理器核的負(fù)載量反饋的應(yīng)答信號(hào),該應(yīng)答信號(hào)用于指示接收到該線程遷出請(qǐng)求的處理器核是否具備遷入線程的能力;根據(jù)該多個(gè)處理器核中第一處理器核以外的其它處理器核反饋的應(yīng)答信號(hào)確定第二處理器核,其中,該第二處理器核反饋的應(yīng)答信號(hào)指示該第二處理器核具備遷入線程的能力。
[0056]可選地,作為另一個(gè)實(shí)施例,步驟202具體實(shí)現(xiàn)為:根據(jù)該Cluster的多個(gè)處理器核中每一個(gè)處理器核的負(fù)載量確定第二處理器核,該第二處理器核的負(fù)載量小于第三預(yù)定閾值;向該多個(gè)處理器核中第二處理器核以外的其它處理器核發(fā)送線程遷入請(qǐng)求,該線程遷入請(qǐng)求攜帶該第二處理器核的負(fù)載量;接收該多個(gè)處理器核中第二處理器核以外的其它處理器核根據(jù)自身的負(fù)載量與該第二處理器核的負(fù)載量反饋的應(yīng)答信號(hào),該應(yīng)答信號(hào)用于指示收到該線程遷入請(qǐng)求的處理器核是否需要遷出線程;根據(jù)該多個(gè)處理器核中第二核以外的其它處理器核反饋的應(yīng)答信號(hào)確定第一處理器核,其中,該第一處理器核反饋的應(yīng)答信號(hào)指示該第一處理器核需要遷出線程。
[0057]可選地,作為一個(gè)實(shí)施例,不同類型的待執(zhí)行線程,在處理器核的負(fù)載量中具有相同的加權(quán)系數(shù)。例如,處理器核的負(fù)載量由處理器核的本地線程和遷入線程決定,本地線程為3,遷入線程為5,則其負(fù)載量為8。
[0058]可選地,作為另一個(gè)實(shí)施例,不同類型的待執(zhí)行線程,在處理器核的負(fù)載量中具有不同的加權(quán)系數(shù)。例如,處理器核的負(fù)載量由處理器核的本地線程和遷入線程決定,本地線程的加權(quán)系數(shù)為1,個(gè)數(shù)為3,遷入線程的加權(quán)系數(shù)為0.8,個(gè)數(shù)為5,則其負(fù)載量為7。
[0059]下面,將結(jié)合具體的實(shí)施例,對(duì)本發(fā)明實(shí)施例的方法作進(jìn)一步的描述。
[0060]圖3是本發(fā)明實(shí)施例叢集內(nèi)線程遷移場(chǎng)景示意圖。如圖3所示,Cluster內(nèi)可包括多個(gè)處理器核(處理器核1,處理器核2,……處理器核η)和路由器,該處理器核中可包括線程棧信息收集器和線程遷移單元。其中,線程棧信息收集器用于獲取處理器核內(nèi)待執(zhí)行線程的個(gè)數(shù),并匯集到Cluster內(nèi)的路由器中;線程遷移單元用于向其它處理器核發(fā)起線程遷入(或遷出請(qǐng)求),并接收其它處理器核的應(yīng)答信號(hào);線程遷移單元還用于遷入線程(或遷出線程)。圖3中,在遷移之前,處理器核I包括5個(gè)遷入線程,5個(gè)本地線程和3個(gè)中斷線程,處理器核2包括I個(gè)遷入線程,3個(gè)本地線程和3個(gè)中斷線程,處理器核η包括2個(gè)遷入線程,3個(gè)本地線程和3個(gè)中斷線程。應(yīng)理解,此處提到處理器核所擁有的遷入線程、本地線程和中斷線程,都是處理器核的待執(zhí)行線程。中斷線程是遷入線程和本地線程以外的線程,例如,操作系統(tǒng)在處理器核中的系統(tǒng)線程,等等。
[0061]以圖3所示的應(yīng)用場(chǎng)景為例,本發(fā)明的具體實(shí)施例1如下:
[0062]本發(fā)明實(shí)施例中,在計(jì)算處理器核的負(fù)載量時(shí),需要考慮處理器核的遷入線程、本地線程和中斷線程。
[0063]第一步,獲取每個(gè)處理器核的負(fù)載量。
[0064]路由器可通過(guò)線程棧信息收集器獲取每個(gè)處理器核的棧信息,獲取每個(gè)處理器核中待執(zhí)行的遷入線程個(gè)數(shù),從而獲取每個(gè)處理器核中待執(zhí)行的遷入線程的負(fù)載量。
[0065]例如,在圖3所示的場(chǎng)景中,路由器可以獲知,處理器核I包括5個(gè)遷入線程,處理器核2包括I個(gè)遷入線程,處理器核η包括2個(gè)遷入線程,等等。
[0066]路由器可根據(jù)處理器核的Load/Store隊(duì)列,獲取處理器核中待執(zhí)行的本地線程的個(gè)數(shù)。
[0067]例如,在圖3所示的場(chǎng)景中,路由器可以獲知,處理器核I包括5個(gè)本地線程,處理器核2包括3個(gè)本地線程,處理器核η包括3個(gè)本地線程,等等。
[0068]應(yīng)理解,在評(píng)價(jià)處理器核的負(fù)載量時(shí),對(duì)處理器核中待執(zhí)行的本地線程的負(fù)載量的評(píng)估,等價(jià)于對(duì)處理器核的Load/Store隊(duì)列中待執(zhí)行的本地訪存指令的負(fù)載量的評(píng)估。因此,在獲取處理器核的負(fù)載量時(shí),可根據(jù)處理器核的Load/Store隊(duì)列中待執(zhí)行的本地訪存指令的個(gè)數(shù),來(lái)獲取處理器核中待執(zhí)行的本地線程的負(fù)載量。
[0069]另外,路由器還可得到處理器核的中斷線程的負(fù)載量。例如,路由器可通過(guò)獲取處理器核的中斷隊(duì)列的中斷個(gè)數(shù),來(lái)獲取處理器核的中斷線程的個(gè)數(shù),進(jìn)而獲取處理器核的中斷線程的負(fù)載量。
[0070]例如,在圖3所示的場(chǎng)景中,路由器可以獲知,處理器核I包括5個(gè)中斷線程,處理器核2包括3個(gè)中斷線程,處理器核η包括3個(gè)中斷線程,等等。
[0071]不妨假設(shè)遷入線程、本地線程和中斷線程在處理器核的負(fù)載量中的加權(quán)系數(shù)都為1,則此時(shí)可以得到,處理器核I的負(fù)載量為12,處理器核2的負(fù)載量為7,處理器核η的負(fù)載量為8,等等。
[0072]應(yīng)理解,在評(píng)價(jià)處理器核的負(fù)載量時(shí),對(duì)處理器核中待執(zhí)行的中斷線程的負(fù)載量的評(píng)估,等