通過(guò)編譯器和os支持分離出i/o執(zhí)行的系統(tǒng)和方法【專利摘要】本實(shí)施例提供了通過(guò)結(jié)合編譯器和操作系統(tǒng)(OperatingSystem,OS)技術(shù)進(jìn)行輸入/輸出(Input/Output,I/O)執(zhí)行的分離。所述實(shí)施例包括貢獻(xiàn)多核或眾核處理器中的已選核為I/O執(zhí)行核,將基于編譯器的分析應(yīng)用于程序源代碼的I/O區(qū)域的分類(lèi),使得所述OS能調(diào)度這些區(qū)域至所述指定的I/O核。在程序源代碼的編譯過(guò)程中,識(shí)別所述程序源代碼的每個(gè)I/O操作區(qū)域。在所述已編譯的程序源代碼的執(zhí)行過(guò)程中,調(diào)度每個(gè)I/O操作區(qū)域在預(yù)先選擇的I/O核上進(jìn)行執(zhí)行。調(diào)度所述已編譯的程序源代碼的其他區(qū)域在其他核上進(jìn)行執(zhí)行。【專利說(shuō)明】通過(guò)編譯器和OS支持分離出I/O執(zhí)行的系統(tǒng)和方法[0001]相關(guān)申請(qǐng)案交叉申請(qǐng)[0002]本發(fā)明要求由ChenTian等人于2014年2月19日遞交的發(fā)明名稱為“通過(guò)編譯器和OS支持分離出I/O執(zhí)行的系統(tǒng)和方法”的第14184297號(hào)美國(guó)非臨時(shí)申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),該在先申請(qǐng)的內(nèi)容以引入的方式并入本文。
技術(shù)領(lǐng)域:
[0003]本發(fā)明涉及計(jì)算領(lǐng)域,以及在特定實(shí)施例中,涉及一種通過(guò)編譯器和操作系統(tǒng)(OperatingSystem,0S)支持分離出輸入/輸出(Input/Output,I/O)執(zhí)行的系統(tǒng)和方法?!?br>背景技術(shù):
】[0004]在計(jì)算系統(tǒng)中,I/O是包括處理器和主存器的主控板與鍵盤(pán)、鼠標(biāo)、磁盤(pán)或監(jiān)視器等外圍設(shè)備(也稱為I/O設(shè)備)進(jìn)行通信的一種機(jī)制。由于設(shè)計(jì)、制作和連接方法上的差異性,在給處理器提供數(shù)據(jù)時(shí),I/O設(shè)備通常比主存器的性能差。I/O執(zhí)行和非I/O執(zhí)行相混合的典型方法導(dǎo)致系統(tǒng)吞吐量較低,也降低了計(jì)算密集型進(jìn)程的性能,例如在系統(tǒng)吞吐量的期望較高的云和數(shù)據(jù)中心等服務(wù)器集群中,或者在一些功耗和某些應(yīng)用的服務(wù)質(zhì)量(quality-of-service,QoS)較為重要的移動(dòng)設(shè)備中。因此,需要一種能夠更為高效地處理I/O執(zhí)行的系統(tǒng)和方法?!?br/>發(fā)明內(nèi)容】[0005]根據(jù)本發(fā)明的一個(gè)實(shí)施例,一種執(zhí)行輸入/輸出(Input/Output,I/O)和非I/O操作的多核計(jì)算系統(tǒng)的方法包括:指定多個(gè)處理核中的至少一部分為I/O核,編譯程序源代碼,所述編譯包括識(shí)別所述程序源代碼的每個(gè)I/O操作區(qū)域。然后利用所述處理核執(zhí)行所述程序源代碼,所述程序源代碼的執(zhí)行包括在所述I/O核上調(diào)度所述I/O操作區(qū)域。[0006]根據(jù)本發(fā)明的另一實(shí)施例,一種執(zhí)行I/O和非I/O操作的多核計(jì)算系統(tǒng)的方法包括:在程序源代碼的編譯過(guò)程中,確認(rèn)所述程序源代碼的每個(gè)I/O操作區(qū)域,將所述I/O操作區(qū)域從所述程序源代碼中的其他區(qū)域中劃分出來(lái)。該方法還包括:在所述已編譯的程序源代碼的執(zhí)行過(guò)程中,調(diào)度所述I/O操作區(qū)域在預(yù)先選擇的I/O核上進(jìn)行執(zhí)行,調(diào)度所述已編譯程序源代碼的所述其他區(qū)域在其他核上進(jìn)行執(zhí)行。[0007]根據(jù)本發(fā)明的再一實(shí)施例,一種執(zhí)行I/O和非I/O操作的多核計(jì)算機(jī)包括:多個(gè)處理核,以及用于存儲(chǔ)至少一個(gè)處理器執(zhí)行的編程的非瞬時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。所述編程包括的指令用于:指定多個(gè)處理核中的至少一部分為I/O核,以及編譯程序源代碼,用于編譯所述程序源代碼的指令包括用于識(shí)別所述程序源代碼的每個(gè)I/o操作區(qū)域的指令。所述編程還包括:利用所述處理核執(zhí)行所述程序源代碼的指令,用于執(zhí)行所述程序源代碼的指令包括用于在所述I/o核上調(diào)度所述I/O操作區(qū)域的指令。[0008]上文僅粗略描述了本發(fā)明實(shí)施例的特征,以便下文中關(guān)于本發(fā)明的詳細(xì)描述能夠得到更好理解。下文中將描述本發(fā)明實(shí)施例的其他特征和優(yōu)點(diǎn),構(gòu)成了本發(fā)明權(quán)利要求的內(nèi)容。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,基于此處公開(kāi)的理念和具體實(shí)施例,可便利地修改和設(shè)計(jì)與本發(fā)明具有相同目的的其他結(jié)構(gòu)和過(guò)程。本領(lǐng)域技術(shù)人員也應(yīng)意識(shí)到,這些同等建構(gòu)不應(yīng)背離附帶權(quán)利要求中規(guī)定的本發(fā)明的精神和范圍?!靖綀D說(shuō)明】[0009]為了更完整地理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)在參考下文結(jié)合附圖進(jìn)行的描述,其中:[00?0]圖1不出了一種多核處理系統(tǒng);[0011]圖2示出了一種改進(jìn)的處理系統(tǒng)的實(shí)施例;[0012]圖3示出了一種處理I/O執(zhí)行的編譯器方案的實(shí)施例;[0013]圖4示出了分離出I/O執(zhí)行的編譯程序指令的示例;[0014]圖5示出了一種處理I/O執(zhí)行的OS調(diào)度的實(shí)施例方案;[0015]圖6示出了一種通過(guò)編譯器和OS支持分離和處理I/O執(zhí)行的方法的實(shí)施例;[0016]圖7示出了可用于實(shí)施各種實(shí)施例的一種處理系統(tǒng)。[0017]除非另有指示,否則不同圖中的對(duì)應(yīng)標(biāo)號(hào)和符號(hào)通常指代對(duì)應(yīng)部分。繪制各圖是為了清楚地說(shuō)明實(shí)施例的相關(guān)方面,因此未必是按比例繪制的?!揪唧w實(shí)施方式】[0018]下文將詳細(xì)論述當(dāng)前優(yōu)選實(shí)施例的制作和使用。然而,應(yīng)了解,本發(fā)明提供可在各種具體上下文中體現(xiàn)的許多適用的發(fā)明性概念。所論述的具體實(shí)施例僅僅說(shuō)明用以實(shí)施和使用本發(fā)明的具體方式,而不限制本發(fā)明的范圍。[0019]從硬件角度來(lái)看,處理器和I/O設(shè)備各自獨(dú)立運(yùn)行,因此這種系統(tǒng)中不得不引入同步機(jī)制以處理其操作。一般來(lái)講,處理器和I/O設(shè)備操作之間的同步方法有兩種。第一種方法,處理器能夠執(zhí)行某一進(jìn)程中的指令序列,以周期性地讀或?qū)懺O(shè)備的狀態(tài)寄存器,直到滿足設(shè)定的條件。例如,所述條件可以為設(shè)備中發(fā)生某一期待事件,或者當(dāng)前進(jìn)程的時(shí)間片完全被消耗,這種情況下就切換至新的進(jìn)程。這種方法叫做輪詢。第二種方法,當(dāng)某一事件發(fā)生時(shí)允許設(shè)備發(fā)送信號(hào)至處理器。所述信號(hào)中斷所述處理器的當(dāng)前執(zhí)行,并能夠調(diào)用OS調(diào)度器依據(jù)上下文切換至與所述事件有關(guān)系的進(jìn)程。所述信號(hào)也被稱為中斷。這種基于中斷的方法允許處理器在I/o上不被阻斷地執(zhí)行某一進(jìn)程,而將已阻斷的進(jìn)程置于中斷等待隊(duì)列。[0020]盡管這兩種方法通過(guò)OS調(diào)度器提升了處理器的使用效率,但將計(jì)算密集型進(jìn)程和I/o密集型進(jìn)程置于同一處理器上降低了計(jì)算進(jìn)程的性能和系統(tǒng)吞吐量。例如,在基于輪詢的系統(tǒng)中,I/o進(jìn)程可能在觀察到期待的I/O事件之前就浪費(fèi)了大量時(shí)間在輪詢上。如果被浪費(fèi)的時(shí)間分配到非I/o進(jìn)程中,處理器的吞吐量就會(huì)得到大大提升。進(jìn)一步地,輪詢中執(zhí)行的指令還造成了不必要的功耗。[0021]另一方面,在基于中斷的系統(tǒng)中,每個(gè)I/O中斷導(dǎo)致接收到中斷的處理器暫停當(dāng)前執(zhí)行,跳至相應(yīng)的中斷處理程序,掃描中斷隊(duì)列,并在必要時(shí)調(diào)用所述調(diào)度器。如果處理器頻繁接收I/o中斷,運(yùn)行在同一處理器上的計(jì)算進(jìn)程的執(zhí)行則被不斷中斷,導(dǎo)致性能不理想。多核或眾核處理器的情況甚至可能更遭。例如,當(dāng)?shù)谝缓?核A)接收到中斷,花費(fèi)了一定量的時(shí)間進(jìn)行處理。但是,如果所述中斷是運(yùn)行在第二核(核B)上的另一進(jìn)程所期待的,核A要么通知核B所述中斷已到達(dá),要么通過(guò)確定核B是否已經(jīng)收到相同的中斷而忽略所述中斷。結(jié)果核A在軟件級(jí)別上引入了大量同步開(kāi)銷(xiāo),或者浪費(fèi)了時(shí)間。[0022]鑒于上文所述,I/O執(zhí)行和非I/O執(zhí)行的混合降低了計(jì)算密集型進(jìn)程的性能,也降低了系統(tǒng)吞吐量,例如,不論是在系統(tǒng)吞吐量的期待較高的云和數(shù)據(jù)中心等服務(wù)器集群中,還是在功耗和某些應(yīng)用的QoS較為重要的移動(dòng)設(shè)備中。為了克服上述方法的缺點(diǎn),在此提供的實(shí)施例結(jié)合編譯器和OS技術(shù)進(jìn)行I/O執(zhí)行的分離。所述實(shí)施例包括指定多核或眾核處理器中的已選核為I/O執(zhí)行核,將基于編譯器的分析應(yīng)用于進(jìn)程(程序代碼)的I/O區(qū)域的分類(lèi),使得所述OS能調(diào)度這些區(qū)域至所述指定的I/O核。該方案包括三個(gè)步驟:OS構(gòu)建I/O核,編譯器進(jìn)行I/O區(qū)域分類(lèi),OS進(jìn)行I/O區(qū)域調(diào)度。所述編譯器分析允許應(yīng)用中的所述I/O區(qū)域得以準(zhǔn)確定位,并將有用信息高效地提取和傳遞給所述OS調(diào)度器。這樣能夠得到更好的調(diào)度決策,從而提升吞吐量和性能。[0023]所述編譯器還能為OS提供I/O區(qū)域中操作的詳細(xì)信息。通過(guò)編程指示(編程語(yǔ)言指令)添加上述信息為指令中的參數(shù)。例如,所述編譯器能夠利用系統(tǒng)呼叫分析、設(shè)定的成本模型、底層系統(tǒng)資源(如,處理器/核的數(shù)量、可用內(nèi)存、功率、網(wǎng)絡(luò)帶寬或其他資源)為每個(gè)區(qū)域確定I/O操作的數(shù)量、資源的類(lèi)型和每種資源所需的數(shù)量、和/或優(yōu)選的專用I/O核。所述編譯器和調(diào)度器相結(jié)合的方案通過(guò)減少I(mǎi)/o相關(guān)的對(duì)于執(zhí)行的干擾提升了計(jì)算密集型應(yīng)用的性能,也能得到更高的系統(tǒng)吞吐量。另一優(yōu)點(diǎn)在于能在I/O區(qū)域?qū)崿F(xiàn)更智能的I/O調(diào)度,所述編譯器從不同的進(jìn)程或線程中提取所述I/o區(qū)域。這樣可能得到更高的I/O執(zhí)行的吞吐量。該方案也能利用編譯器傳來(lái)的特定應(yīng)用信息來(lái)降低I/o核上的功耗。[0024]圖1示出了一種普通的多核計(jì)算機(jī)系統(tǒng)100。該系統(tǒng)100包括多個(gè)處理器(如CPU)或處理器核110,每個(gè)都通過(guò)第一總線與主存器120(如隨機(jī)訪問(wèn)存儲(chǔ)器(randomaccessmemory,RAM))連接,通過(guò)第二總線與一個(gè)或多個(gè)I/O設(shè)備130連接。I/O設(shè)備130的示例包括顯示器、鍵盤(pán)、計(jì)算機(jī)鼠標(biāo)、打印機(jī)、硬盤(pán)驅(qū)動(dòng)器、固態(tài)磁盤(pán)(閃存盤(pán))或其他I/O設(shè)備。任一所述處理器或核110可以在某個(gè)時(shí)間示例中執(zhí)行I/O指令或非I/O指令。非I/O指令的執(zhí)行包括所述處理器/核110與所述存儲(chǔ)器120之間的交換。所述處理器/核的操作一般比所述存儲(chǔ)器的操作迅速。因此,為了更高效地(減少處理時(shí)間)處理所述非I/O指令,該系統(tǒng)100也能利用具有比所述存儲(chǔ)器120更少操作時(shí)間的超速緩存內(nèi)存。所述I/O指令的執(zhí)行包括所述處理器/核110和所述I/O設(shè)備130之間的交換,以及利用I/O內(nèi)存或直接內(nèi)存訪問(wèn)(directmemoryaccess,DMA)。如上所述,可以使用所述中斷或輪詢的方法同步1/0和非1/0指令在所述處理器/核110的執(zhí)行。[0025]在所述中斷方法中,該系統(tǒng)100還使用高級(jí)可編程中斷控制器(AdvancedProgrammableInterruptController,APIC)。每個(gè)1/0中斷使運(yùn)行中的應(yīng)用在任意點(diǎn)停止。所述中斷由1/0設(shè)備130發(fā)起并通過(guò)所述第二總線(如,夕卜圍部件互連標(biāo)準(zhǔn)(peripheralcomponentinterconnect,PCI)總線)傳遞到所述APIC。然后所述APIC使用中斷描述符表(interruptdescriptortable,IDT)觸發(fā)合適的中斷處理程序,所述中斷處理程序再與I/O設(shè)備驅(qū)動(dòng)器通信完成所述1/0指令執(zhí)行,如1/0讀或?qū)懨?。?dāng)所述1/0執(zhí)行結(jié)束時(shí),該系統(tǒng)返回被中斷的應(yīng)用執(zhí)行(非1/0執(zhí)行)。該方案導(dǎo)致頻繁中斷(暫停)處理器/核110上運(yùn)行的程序,影響CPU和內(nèi)存邊界應(yīng)用。[0026]圖2示出了一種改進(jìn)的多核系統(tǒng)200的實(shí)施例,解決了應(yīng)用/程序的執(zhí)行被頻繁中斷的問(wèn)題,從而提升了執(zhí)行性能。該系統(tǒng)200包括多個(gè)處理器(CPU)或核(在CPU中)210。所述處理器/核210通過(guò)第一總線與主存器220連接,通過(guò)第二總線與一個(gè)或多個(gè)I/O設(shè)備230連接。另外,所述處理器/核210中的一個(gè)或多個(gè)為專用I/O執(zhí)行核。所述專用處理器/核210能夠根據(jù)所述處理器/核210的工作負(fù)載或應(yīng)用需求等隨著時(shí)間的改變而改變。所述專用處理器/核210用于為一個(gè)或多個(gè)線程或進(jìn)程執(zhí)行I/O碼214(1/0碼I和I/O碼2),剩余的處理器/核210用于執(zhí)行非I/O碼。在專用I/O處理器/核210上的I/O碼214和在任意剩余(非I/O專用)處理器/核210上的非I/O碼212可屬于同一應(yīng)用或進(jìn)程線程。[0027]為了在進(jìn)程線程中分離I/O區(qū)域和非I/O區(qū)域的執(zhí)行,(來(lái)自所述I/O設(shè)備230或APIC)的I/O中斷被所述非I/O處理器/核210所屏蔽、或者阻斷或者變透明。這樣,所述專用I/O處理器/核210用于接收所有I/O中斷。OS調(diào)度器調(diào)度所述線程的非I/O區(qū)域至非I/O核,調(diào)度I/O區(qū)域至I/O核。[0028]如上所述,I/O核能夠接收I/O設(shè)備中斷。I/O中斷能夠通過(guò)中斷請(qǐng)求(interruptreqUeSt,IRQ)控制器從I/O設(shè)備發(fā)送至所述處理器或核。例如,IRQ控制器為基于x86架構(gòu)的Intel8259芯片,該芯片具有8個(gè)輸入引腳。兩個(gè)這樣的引腳可以鏈接在一起,提供總共16個(gè)IRQ信號(hào)。在所述OS定義的所述中斷描述符表中,這16個(gè)信號(hào)映射至16個(gè)中斷向量。也能為所述多核系統(tǒng)200使用更為高級(jí)的IRQ控制器,如用于x86架構(gòu)的IntelAPIC系統(tǒng)。例如,該系統(tǒng)200可包括本地APIC和I/OAPIC,使得所述OS配置每個(gè)I/O中斷通過(guò)哪個(gè)引腳路由至哪里。對(duì)于消息中斷(messagesignaledinterrupt,MSI)設(shè)備來(lái)說(shuō),信號(hào)不是通過(guò)引腳發(fā)送,而是通過(guò)內(nèi)存寫(xiě)攔截,某一中斷的目標(biāo)由所述寫(xiě)操作中的內(nèi)存地址確定。所述OS也能確定哪個(gè)核負(fù)責(zé)哪個(gè)中斷。[0029]可編程IRQ控制器的使用提供了一個(gè)把多核或眾核平臺(tái)中的核的一部分或一個(gè)子集用于I/O操作的機(jī)會(huì)。在一個(gè)實(shí)施例中,每個(gè)核的IRQ控制器被編程為只允許選定的核接收I/O中斷。第一步,在啟動(dòng)時(shí),所述OS選擇核的一部分或一個(gè)子集為I/O核。所述部分能夠定義為固定數(shù)量的核、核總?cè)萘康哪骋话俜直然蛘叨叩慕Y(jié)合。所述部分也能基于試探方法,如I/O工作負(fù)載、系統(tǒng)吞吐量或其他相關(guān)的系統(tǒng)/應(yīng)用參數(shù)或需求來(lái)動(dòng)態(tài)確定。在這一步中,所有核的中斷控制器設(shè)置為忽略所有I/O中斷。第二步,當(dāng)加載設(shè)備驅(qū)動(dòng)器時(shí),所述OS開(kāi)啟一個(gè)或多個(gè)I/O核上的中斷處理能力。此步驟涉及中斷處理程序的登記以及確保來(lái)自所述設(shè)備的中斷被路由至這些核。對(duì)于基于IRQ的設(shè)備,所述OS配置所述IRQ控制器在這些I/O核上暴露相關(guān)引腳,使得來(lái)自這些設(shè)備的中斷能夠被捕獲。對(duì)于基于MSI的設(shè)備,所述OS配置所述設(shè)備,使得任一中斷生成內(nèi)存操作都具有正確的目的地址。通過(guò)執(zhí)行這兩個(gè)步驟,確保所有I/O中斷到達(dá)I/O核。因此,所有非I/O核不響應(yīng)I/O中斷。這樣就能大大降低運(yùn)行在這些核上的用戶應(yīng)用的中斷次數(shù)。[0030]編碼或程序指令的I/O和非I/O區(qū)域由編譯器在執(zhí)行這些指令前劃分。圖3示出了一種處理I/O執(zhí)行的編譯器方案300的實(shí)施例。在程序的源代碼中,如果一個(gè)代碼包括多個(gè)I/O請(qǐng)求或中斷,可導(dǎo)致密集的I/O操作,在此稱為I/O區(qū)域。所述I/O區(qū)域?yàn)樗鯥/O核執(zhí)行的目標(biāo)代碼。在程序的編譯過(guò)程中,所述編譯器識(shí)別所述區(qū)域并注解或標(biāo)記所述區(qū)域的開(kāi)始為10_REG10N_START或者任意合適的指示文本。所述區(qū)域的結(jié)尾注解為10_REGI0N_END或者任意合適的指示文本。10_REG10N_START和10_REG10N_END都是編譯指示或指令,編譯器隨后將其翻譯為特定的OS系統(tǒng)呼叫。所述系統(tǒng)呼叫再指示所述調(diào)度器移動(dòng)該I/O區(qū)域至I/O核,如上所述。編譯器有兩個(gè)角色。首先,編譯器識(shí)別I/O操作。然后,編譯器將代碼分離成塊序列,每個(gè)塊再分為I/o密集或不密集。在I/O密集塊中,相應(yīng)地插入上述兩個(gè)編譯指示。[0031]燒錄器可能不會(huì)意識(shí)到某些代碼會(huì)引發(fā)I/O請(qǐng)求。因此,I/O操作一般會(huì)隨機(jī)分散在代碼中,使得結(jié)果可能并不理想。例如,可能存在過(guò)多較小的I/o區(qū)域,導(dǎo)致I/O調(diào)度器疲于發(fā)送任務(wù)至I/O核。為了緩解這一問(wèn)題,編譯器進(jìn)行試探優(yōu)化,綜合考慮I/O區(qū)域和非I/O區(qū)域的大小、I/o請(qǐng)求的數(shù)量以及相應(yīng)的I/O區(qū)域的預(yù)計(jì)執(zhí)行時(shí)間和非I/O區(qū)域的預(yù)計(jì)執(zhí)行時(shí)間?;谶@一分析,編譯器執(zhí)行必要的代碼調(diào)度,以創(chuàng)建I/O區(qū)域和非I/O區(qū)域之間更良好的平衡。[0032]所述編譯器方案300中,步驟302的I/O確認(rèn)之后,原始代碼在步驟304中劃分為I/O區(qū)域和非I/o區(qū)域。所述編譯器基于一個(gè)代碼中I/O操作的數(shù)量和語(yǔ)句的數(shù)量的比率進(jìn)行分區(qū)算法。如果所述比率超過(guò)設(shè)定閾值,所述代碼當(dāng)做I/o區(qū)域。當(dāng)所述代碼包括循環(huán)時(shí),循環(huán)計(jì)數(shù)考慮在內(nèi),這意味著I/o操作的數(shù)量和語(yǔ)句的數(shù)量實(shí)際上都是動(dòng)態(tài)數(shù)值。在步驟304的區(qū)域劃分之后,步驟306的跨區(qū)域調(diào)度根據(jù)成本模型實(shí)施。所述成本模型指示每個(gè)I/O操作以及每個(gè)普通(非I/O)語(yǔ)句的平均運(yùn)行時(shí)間成本。在跨區(qū)域調(diào)度的過(guò)程中,所述編譯器基于所述成本模型和當(dāng)前分區(qū)將代碼從I/O區(qū)域移動(dòng)至非I/O區(qū)域,或者從非I/O區(qū)域移動(dòng)至I/O區(qū)域。這樣調(diào)度的目的是創(chuàng)建I/O區(qū)域和非I/O區(qū)域之間的負(fù)載均衡。例如,對(duì)于一個(gè)在運(yùn)行時(shí)間上為一千周期的I/o區(qū)域,所述編譯器使得緊隨的非I/O區(qū)域?yàn)镹千周期長(zhǎng)。所述整數(shù)N由所述多核系統(tǒng)中的可用資源(如可用核、內(nèi)存、功率或其他資源)確定。然后,步驟308的區(qū)域再劃分中,所述編譯器將連續(xù)的I/O區(qū)域或連續(xù)的非I/O區(qū)域合并,或者將某一區(qū)域劃分為兩個(gè)單獨(dú)的區(qū)域。區(qū)域合并或分離由所述系統(tǒng)中的可用資源確定。接下來(lái)的步驟310的區(qū)域敲定中,所述編譯器在每個(gè)區(qū)域中插入所述編譯指示,可選地,還插入指示I/O操作數(shù)量和預(yù)計(jì)運(yùn)行時(shí)間周期的參數(shù)。圖4示出了使用所述編譯方案300之前和之后的程序指令的示例。[0033]圖5示出了在所述編譯器方案300執(zhí)行已編譯源代碼或程序時(shí)用于OS調(diào)度的實(shí)施例方案500。當(dāng)程序中的I/0_REGION_START和I/0_REGION_END呼叫在I/0核上執(zhí)行時(shí),調(diào)用OS調(diào)度器。所述調(diào)度器用于將所有I/O區(qū)域移動(dòng)至I/O核,并創(chuàng)建單獨(dú)的I/O區(qū)域調(diào)度器來(lái)調(diào)度這些區(qū)域。在I/0_REG10N_START呼叫時(shí),當(dāng)前進(jìn)程(或線程)從原始調(diào)度器的準(zhǔn)備隊(duì)列移動(dòng)至所述I/0調(diào)度器。在I/0_REG1N_END呼叫時(shí),激活進(jìn)程(或線程)從所述I/0調(diào)度器移動(dòng)至原始調(diào)度器,所述原始調(diào)度器再調(diào)度所述進(jìn)程至所述非I/O核中的其中一個(gè)上。[0034]圖6示出了一種在多核系統(tǒng)中使用編譯器和OS支持分離I/O執(zhí)行和非I/O執(zhí)行的實(shí)施例方法600。步驟610中,OS指定多核或眾核系統(tǒng)中的一個(gè)或多個(gè)核為I/O核,所述I/O核在應(yīng)用的進(jìn)程線程中處理所有I/O指令。這些I/O核能夠固定下來(lái)或者根據(jù)變化的試探方法(或系統(tǒng)統(tǒng)計(jì)數(shù)據(jù))動(dòng)態(tài)變化。步驟620中,所述編譯器解析程序代碼,標(biāo)記所述代碼中的I/O區(qū)域。I/O的確定可以包括I/O密集操作和成本(如運(yùn)行時(shí)間成本)的考慮。在步驟630中,OS調(diào)度器將I/O區(qū)域移動(dòng)至I/O核,將剩余的區(qū)域移動(dòng)至非I/O專用核。所述非I/O區(qū)域仍可包括一些I/O呼叫,相比I/O區(qū)域,這些呼叫不那么密集,因此,應(yīng)該不會(huì)引起對(duì)非I/O核的頻繁中斷。當(dāng)遭遇I/O區(qū)域時(shí),所述OS調(diào)度器也可開(kāi)啟I/O調(diào)度器,從而更高效地調(diào)度I/O核上的I/O區(qū)域。[0035]所述I/O調(diào)度器為單獨(dú)的調(diào)度器,為來(lái)自不同進(jìn)程的所有I/O區(qū)域進(jìn)行調(diào)度決策??梢詰?yīng)用不同的算法和試探方法進(jìn)一步提升系統(tǒng)吞吐量。默認(rèn)每個(gè)區(qū)域都能以循環(huán)方式處理。另外,所述I/0_REG1N_START呼叫也能傳遞合適的信息,以方便所述I/O調(diào)度器以及優(yōu)化實(shí)施。例如,如果兩個(gè)來(lái)自不同進(jìn)程的I/O區(qū)域正在期待同一設(shè)備上的不同事件,這兩個(gè)事件的發(fā)生具有相關(guān)性(如,不可能同時(shí)發(fā)生),所述I/O調(diào)度器可通過(guò)調(diào)度這兩個(gè)區(qū)域至一個(gè)I/O核以及遵循這種相關(guān)性來(lái)應(yīng)用更智能的調(diào)度。[0036]另外,所述I/O調(diào)度器能夠在適當(dāng)場(chǎng)景降低I/O核上的功耗。例如,如果相應(yīng)的設(shè)備反應(yīng)遲緩,所述I/O調(diào)度器能降低某些I/O區(qū)域執(zhí)行的使用頻率。如果必要,所述I/O調(diào)度器也能降低某些I/O核的使用頻率,以進(jìn)一步降低功耗。[0037]圖7為可用于實(shí)施各種實(shí)施例的處理系統(tǒng)700的方框圖。例如,所述處理系統(tǒng)可以為服務(wù)器、數(shù)據(jù)中心、移動(dòng)或用戶設(shè)備、網(wǎng)絡(luò)組件的一部分。處理系統(tǒng)700可包括處理單元701,該處理單元801配有一個(gè)或更多輸入/輸出設(shè)備,例如揚(yáng)聲器、麥克風(fēng)、鼠標(biāo)、觸摸屏、小鍵盤(pán)、鍵盤(pán)、打印機(jī)以及顯示器等等。處理單元701可包括中央處理器(CPU)710、存儲(chǔ)器720、大容量存儲(chǔ)設(shè)備730、視頻適配器740,以及連接到總線的輸入/輸出(I/O)接口790。所述總線可以為任何類(lèi)型的若干總線架構(gòu)中的一個(gè)或多個(gè),包括存儲(chǔ)總線或者存儲(chǔ)控制器、外設(shè)總線等等。[0038]所述CPU710可包括任何類(lèi)型的電子數(shù)據(jù)處理器。存儲(chǔ)器720可包括任意類(lèi)型的系統(tǒng)存儲(chǔ)器,例如靜態(tài)隨機(jī)存取存儲(chǔ)器(staticrandomaccessmemory,SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dynamicrandomaccessmemory,DRAM)、同步DRAM(synchronousDRAM,SDRAM)、只讀存儲(chǔ)器(read-onlymemory,ROM)或其組合等等。在實(shí)施例中,存儲(chǔ)器720可包括在開(kāi)機(jī)時(shí)使用的ROM以及在執(zhí)行程序時(shí)使用的存儲(chǔ)程序和數(shù)據(jù)的DRAM。大容量存儲(chǔ)器設(shè)備730可包括任意類(lèi)型的存儲(chǔ)設(shè)備,其用于存儲(chǔ)數(shù)據(jù)、程序和其它信息,并使這些數(shù)據(jù)、程序和其它信息通過(guò)總線訪問(wèn)。大容量存儲(chǔ)器設(shè)備730可包括如下項(xiàng)中的一種或多種:固態(tài)磁盤(pán)、硬盤(pán)驅(qū)動(dòng)器、磁盤(pán)驅(qū)動(dòng)器、光盤(pán)驅(qū)動(dòng)器等等。[0039]視頻適配器740以及1/0接口790提供接口以將外部輸入以及輸出裝置耦合到處理單元上。如圖所示,輸入輸出設(shè)備的示例包括耦合至視頻適配器740的顯示器760和耦合至1/0接口790的鼠標(biāo)/鍵盤(pán)/打印機(jī)770的任意組合。其它設(shè)備可以耦合至處理單元701,可以利用附加的或更少的接口卡。舉例來(lái)說(shuō),串行接口卡(未圖示)可以用于為打印機(jī)提供串行接口。[0040]處理單元701還包括一個(gè)或多個(gè)網(wǎng)絡(luò)接口750,網(wǎng)絡(luò)接口750可包括以太網(wǎng)電纜等有線鏈路,和/或到接入節(jié)點(diǎn)或者一個(gè)或多個(gè)網(wǎng)絡(luò)780的無(wú)線鏈路。網(wǎng)絡(luò)接口750允許處理單元701通過(guò)網(wǎng)絡(luò)780與遠(yuǎn)程單元通信。例如,網(wǎng)絡(luò)接口450可以通過(guò)一個(gè)或多個(gè)發(fā)射器/發(fā)射天線以及一個(gè)或多個(gè)接收器/接收天線提供無(wú)線通信。在一個(gè)實(shí)施例中,處理單元701耦合到局域網(wǎng)或廣域網(wǎng)上以用于數(shù)據(jù)處理以及與遠(yuǎn)程裝置通信,所述遠(yuǎn)程裝置例如其它處理單元、因特網(wǎng)、遠(yuǎn)程存儲(chǔ)設(shè)施或其類(lèi)似者。[0041]雖然本發(fā)明中已提供若干實(shí)施例,但應(yīng)理解,在不脫離本發(fā)明的精神或范圍的情況下,本發(fā)明所公開(kāi)的系統(tǒng)和方法可以以許多其他特定形式來(lái)體現(xiàn)。本發(fā)明的實(shí)例應(yīng)被視為說(shuō)明性而非限制性的,且本發(fā)明并不限于本文本所給出的細(xì)節(jié)。例如,各種元件或部件可以在另一系統(tǒng)中組合或合并,或者某些特征可以省略或不實(shí)施。[0042]此外,在不脫離本發(fā)明的范圍的情況下,各種實(shí)施例中描述和說(shuō)明為離散或單獨(dú)的技術(shù)、系統(tǒng)、子系統(tǒng)和方法可以與其它系統(tǒng)、模塊、技術(shù)或方法進(jìn)行組合或合并。展示或論述為彼此耦合或直接耦合或通信的其它項(xiàng)也可以采用電方式、機(jī)械方式或其它方式通過(guò)某一接口、設(shè)備或中間部件間接地耦合或通信。其他變化、替代和改變的示例可以由本領(lǐng)域的技術(shù)人員在不脫離本文精神和所公開(kāi)的范圍的情況下確定。【主權(quán)項(xiàng)】1.一種執(zhí)行輸入/輸出(Input/Output,I/O)和非I/O操作的多核計(jì)算系統(tǒng)的方法,其特征在于,該方法包括:指定多個(gè)處理核中的至少一部分為I/O核;編譯程序源代碼,所述編譯包括識(shí)別所述程序源代碼的每個(gè)I/O操作區(qū)域;利用所述處理核執(zhí)行所述程序源代碼,所述執(zhí)行包括在所述I/O核上調(diào)度所述I/O操作區(qū)域。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述指定包括:將所述多個(gè)處理核的中斷控制器設(shè)置為忽略I/O中斷;在啟動(dòng)操作系統(tǒng)(operatingsystem,0S)時(shí)選擇所述I/O核;在為I/O設(shè)備加載驅(qū)動(dòng)器時(shí)為所述I/O核開(kāi)啟中斷處理程序。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,為所述I/O核開(kāi)啟中斷處理程序包括配置中斷請(qǐng)求(interruptrequest,IRQ)控制器以暴露所述I/O核上的相關(guān)引腳,而暴露所述I/O核上的相關(guān)引腳則允許所述I/O核捕捉I/O中斷。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,為所述I/O核開(kāi)啟中斷處理程序包括在所述I/O設(shè)備上配置包括正確目的地址的中斷生成內(nèi)存操作。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在多個(gè)處理核中指定至少一部分包括選擇所述多個(gè)處理核中的固定數(shù)量或核總?cè)萘恐械哪骋话俜直葹樗鯥/O核。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括:從所述多個(gè)處理核中根據(jù)I/O工作負(fù)載、系統(tǒng)吞吐量或其他系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)動(dòng)態(tài)重選所述I/O核。7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述編譯還包括通過(guò)在所述I/O操作區(qū)域的開(kāi)始和結(jié)尾處插入注解所述I/O操作區(qū)域的開(kāi)始和結(jié)尾的編譯指示,在所述已編譯的程序源代碼中標(biāo)記每個(gè)已識(shí)別I/O操作區(qū)域,所述執(zhí)行包括將所述編譯指示翻譯為指示操作系統(tǒng)(operatingsystem,OS)調(diào)度器將所述I/O操作區(qū)域的執(zhí)行移動(dòng)到所述I/O核的系統(tǒng)呼叫。8.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述程序源代碼的所述I/O操作區(qū)域和其他區(qū)域的大小、所述I/O操作區(qū)域中的I/O請(qǐng)求的數(shù)量、以及所述程序源代碼的所述I/O操作區(qū)域和其他區(qū)域的預(yù)計(jì)執(zhí)行次數(shù)中的至少一個(gè)識(shí)別所述I/O操作區(qū)域。9.根據(jù)權(quán)利要求1所述的方法,所述I/O操作區(qū)域包括與所述程序源代碼中的其他區(qū)域相比更為密集的I/O操作。10.—種執(zhí)行輸入/輸出(Input/Output,I/O)和非I/O操作的多核計(jì)算系統(tǒng)的方法,其特征在于,該方法包括:在程序源代碼的編譯過(guò)程中,確認(rèn)所述程序源代碼的每個(gè)I/O操作區(qū)域;將所述I/O操作區(qū)域從所述程序源代碼中的其他區(qū)域中劃分出來(lái);在所述已編譯的程序源代碼的執(zhí)行過(guò)程中,調(diào)度所述I/O操作區(qū)域在預(yù)先選擇的I/O核上進(jìn)行執(zhí)行;調(diào)度所述已編譯程序源代碼的所述其他區(qū)域在其他核上進(jìn)行執(zhí)行。11.根據(jù)權(quán)利要求10所述的方法,其特征在于,確認(rèn)所述程序源代碼的每個(gè)I/O操作區(qū)域包括:計(jì)算I/o操作數(shù)量和在一個(gè)程序源代碼中的語(yǔ)句數(shù)量的比率;在確定所述比率超過(guò)設(shè)定閾值時(shí),指定所述一個(gè)程序源代碼為所述I/O操作區(qū)域。12.根據(jù)權(quán)利要求1O所述的方法,其特征在于,根據(jù)成本模型劃分出所述I/O操作區(qū)域,所述成本模型指示所述程序源代碼中的所述I/o操作和非I/O語(yǔ)句的平均運(yùn)行時(shí)間成本,根據(jù)所述成本模型將所述I/o操作區(qū)域從所述程序源代碼中的其他區(qū)域中劃分出來(lái)滿足核之間的負(fù)載均衡。13.根據(jù)權(quán)利要求10所述的方法,其特征在于,還包括:在所述編譯過(guò)程中,根據(jù)可用系統(tǒng)資源,將所述程序源代碼中連續(xù)的I/O操作區(qū)域或其他區(qū)域進(jìn)行合并。14.根據(jù)權(quán)利要求10所述的方法,其特征在于,還包括:在所述編譯過(guò)程中,根據(jù)可用系統(tǒng)資源,將所述程序源代碼中的所述I/O操作區(qū)域或其他區(qū)域進(jìn)行分離。15.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述劃分包括:在每個(gè)I/O操作區(qū)域中插入編譯指示進(jìn)行執(zhí)行,所述編譯指示標(biāo)記所述I/O操作區(qū)域;在每個(gè)I/O操作區(qū)域中插入指示I/O操作數(shù)量和預(yù)計(jì)運(yùn)行時(shí)間周期數(shù)量給調(diào)度器執(zhí)行的參數(shù)。16.根據(jù)權(quán)利要求10所述的方法,其特征在于,調(diào)度所述I/O操作區(qū)域在預(yù)先選擇的I/O核上進(jìn)行執(zhí)行包括創(chuàng)建I/o操作區(qū)域調(diào)度器以調(diào)度所述I/O操作區(qū)域。17.—種執(zhí)行輸入/輸出(Input/Output,I/O)和非I/O操作的多核計(jì)算機(jī),其特征在于,所述多核計(jì)算機(jī)包括:多個(gè)處理核;用于存儲(chǔ)至少一個(gè)處理器執(zhí)行的編程的非瞬時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述編程包括的指令用于:指定多個(gè)處理核中的至少一部分為I/O核;編譯程序源代碼,用于編譯所述程序源代碼的指令包括用于識(shí)別所述程序源代碼的每個(gè)I/O操作區(qū)域的指令;利用所述處理核執(zhí)行所述程序源代碼,用于執(zhí)行所述程序源代碼的指令包括用于在所述I/o核上調(diào)度所述I/O操作區(qū)域的指令。18.根據(jù)權(quán)利要求17所述的多核計(jì)算機(jī),其特征在于,用于指定多個(gè)處理核的至少一部分為I/O核包括的指令用于:將所述多個(gè)處理核的至少一部分的中斷控制器設(shè)置為忽略I/O中斷;在啟動(dòng)操作系統(tǒng)(operatingsystem,0S)時(shí)選擇所述I/O核;在為I/O設(shè)備加載驅(qū)動(dòng)器時(shí)為所述I/O核開(kāi)啟中斷處理程序。19.根據(jù)權(quán)利要求17所述的多核計(jì)算機(jī),用于識(shí)別所述程序源代碼的每個(gè)I/O操作區(qū)域的指令包括的指令用于:在所述I/O操作區(qū)域的開(kāi)始和結(jié)尾處插入注解所述I/O操作區(qū)域的開(kāi)始和結(jié)尾的編譯指示;在所述I/o操作區(qū)域中插入指示I/O操作數(shù)量和預(yù)計(jì)運(yùn)行時(shí)間周期數(shù)量給調(diào)度器的參數(shù)。20.根據(jù)權(quán)利要求17所述的多核計(jì)算機(jī),用于執(zhí)行所述程序源代碼的指令包括的指令用于:調(diào)用操作系統(tǒng)(operatingsystem,0S)調(diào)度器以執(zhí)行所述處理核上的所述已編譯源代碼的調(diào)度;創(chuàng)建I/O操作區(qū)域調(diào)度器以調(diào)度所述I/O核上的所述I/O操作區(qū)域?!疚臋n編號(hào)】G06F9/50GK106030538SQ201580009706【公開(kāi)日】2016年10月12日【申請(qǐng)日】2015年2月24日【發(fā)明人】田琛,葉寒棟,胡子昂【申請(qǐng)人】華為技術(shù)有限公司