本發(fā)明一般地涉及多線程(MT),并且更具體地說,涉及用于退出計算機中的多個線程的虛擬執(zhí)行的機器實現。
多線程(MT)提供用于在不需要添加額外核心的情況下增加可在單個物理處理器核心內并行操作的處理器線程的數目的手段。理想地,MT通過使一個或多個線程使用核心硬件的當前未由在同一核心上運行的其他線程使用的部分來提供此增加能力。舉例而言,在由高速緩存未命中所引起的延時或一個線程中的其他延遲期間,一個或多個其他線程可利用核心資源,因此增加資源的利用率。實際上,即使此共享導致線程之間的一些干擾且需要某一額外硬件,但MT仍提供使用較少硬件執(zhí)行每一線程工作的能力,如果每一線程在其自身隔離核心硬件上執(zhí)行,則將需要較多硬件。常常,當線程之間的硬件資源的共享亦減少計算機系統上的將信息(諸如,來自存儲器的數據)提供至兩個獨特核心的整體壓力時,可從MT獲得額外益處。
通常,盡管MT提供硬件節(jié)省,但另一工作線程的添加消耗系統管理程序級別處的使用額外單獨核心提供增加能力將需要的相同協調成本。在許多情況下,一旦達成某一按比例調整比率,在工作線程(無論執(zhí)行于單個核心抑或共享核心上)之間協調資源的開銷是顯著的且會減小或甚至勝過由運行獨立工作線程的能力所得到的益處。亦即,當待管理事物的數目增加時通常存在更多管理開銷。
技術實現要素:
本發(fā)明提供一種如權利要求1中所述的方法,以及對應的系統和計算機程序。
附圖說明
當本說明書完結時在權利要求中特定地指出且清楚地要求保護被視為實施例的主題。實施例的前述及其他特征及優(yōu)點自結合附圖而進行的以下詳細描述顯而易見,在附圖中:
圖1描繪可根據一個實施例實施的計算環(huán)境;
圖2描繪可根據一個實施例實施的物理處理器;
圖3描繪可根據一個實施例實施的計算環(huán)境;
圖4描繪根據一個實施例的多線程化(MT)邏輯線程的狀態(tài)描述;
圖5描繪根據一個實施例的線程有效性屏蔽(TVM)的方塊圖;
圖6描繪根據一個實施例的固定偏移狀態(tài)描述組;
圖7描繪根據一個實施例的被指定為地址列表的狀態(tài)描述組;
圖8描繪根據一個實施例的被指定為鏈接列表的狀態(tài)描述組;
圖9描繪根據一個實施例的被指定為循環(huán)列表或環(huán)的狀態(tài)描述組;
圖10描繪根據一個實施例的核心分派過程;
圖11描繪根據一個實施例的從虛擬執(zhí)行的協調退出;
圖12描繪根據一個實施例的系統控制區(qū)的方塊圖;
圖13描繪根據一個實施例的用于在多線程化核心之間協調的過程流;
圖14A和14B描繪根據一個實施例的核心分派的機器實現;
圖15A和14B描繪根據一個實施例的自虛擬執(zhí)行的協調退出的機器實現;及
圖16描繪根據一個實施例的計算機可讀介質。
具體實施方式
本文中所描述的實施例可用于減少多線程(MT)環(huán)境中的系統管理程序管理開銷。如本文所描述,多個線程的管理可在將多個線程作為單個邏輯核心(core)管理的系統管理程序與在多個線程存取物理核心的資源時管理多個線程之間的交互的機器之間分割。此可通過允許系統管理程序基于邏輯核心管理許多的系統管理程序基礎設施資源及允許機器基于較細粒度線程管理其他資源而導致顯著減少多線程(MT)開銷成本。一個實施例包括可由在單個線程(ST)上運行的系統管理程序執(zhí)行的核心分派指令。核心分派指令的執(zhí)行(在本文中稱為“指定MT的開始VE指令”)可引起構成客體虛擬機(VM)的全部或一部分的多個客體邏輯線程待在單個物理核心上分派。在一實施例中,由系統管理程序用于分派客體的指令指定待分派的客體是單線程化還是多線程化的。
本文中所描述的實施例可包括用于管理多線程化邏輯核心的分派的結構,諸如用于指示客體邏輯核心內的哪些邏輯線程當前有效的線程有效性屏蔽及包括狀態(tài)描述環(huán)的狀態(tài)描述組。另外,主要及次要狀態(tài)描述及字段類型(例如,主要、核心共享、線程特定)可被實施為在具有多個線程的邏輯核心被分派時允許計算機資源的有效管理。另外,可提供邏輯核心內的所有線程同時退出虛擬執(zhí)行的協調退出以簡化系統管理程序及邏輯核心管理功能兩者。
各實施例可包括由系統管理程序維護的在本文中稱為核心導向式系統控制區(qū)(COSCA)的控制結構。COSCA由系統管理程序及機器兩者使用以管理可影響客體配置中的多個邏輯處理器的某些功能。COSCA的一個實施例被實現為樹狀結構,其中葉表示邏輯核心且每一葉含有對應于該核心的線程的列表。COSCA結構可含有允許系統管理程序容易地存取用于特定核心中的所有線程的狀態(tài)描述的字段(例如,狀態(tài)描述地址)。
各實施例亦可包括核心分派的機器實現(例如,指定MT的開始VE指令),其中位于機器上的毫碼可用于管理核心分派過程。
如本文中所使用,術語毫碼用于指處理器硬件的操作不可或缺的許可內部代碼。當機器在執(zhí)行模式(本文中稱為毫模式)下執(zhí)行時,由所述機器執(zhí)行毫碼。
當客體邏輯核心包括多個線程時,所述邏輯線程中的一者被指定為主要線程且剩余者被指定為次要線程。術語“主要”適用于邏輯線程。自硬件觀點來看,物理線程既非主要線程亦非次要線程;一旦在其上發(fā)出指定MT的開始VE指令,其便變?yōu)橹饕€程。物理級別處的此臨時區(qū)別的原因是因為當控制被傳遞回至主機時,其通常在主要線程上進行,亦即,控制被傳遞回至與發(fā)出開始VE所在的物理線程相同的物理線程上的系統管理程序。
在一實施例中,毫碼可用于自任何其他線程(主要或次要)加載任何線程(主要或次要)的幾乎整個狀態(tài)。在諸實施例中,毫碼使用此狀態(tài)加載靈活性以加載另一線程的極小部分,以便充分利用可由每一線程對其自身狀態(tài)的并行加載而獲得的潛在效率。一些命令(諸如,清除轉換后備緩沖器或“PTLB”)及公用資源可適用于所有線程,且此情形允許其自單個線程執(zhí)行或加載。這不僅節(jié)省命令或負荷自身的時間,而且在一些狀況下,節(jié)省判定實際上是否需要該動作所需的測試。包括于設計中的此靈活性可允許毫碼隨設計、開發(fā)及測試循環(huán)進展而持續(xù)地調整用于支持核心分派的算法。可提供用于有效地開始及停止線程執(zhí)行的機制。此外,毫碼亦可用于考慮內部固件正運行在在軟件級別處被視為無效的線程上的情景。
額外實施例涉及自被分派MT客體邏輯核心協調退出而返回至ST主機(例如,系統管理程序)的機器實現。在一實施例中,毫碼用于使系統同步,且此同步包括通過考慮所有不同線程的當前狀態(tài)中的每一者來協調所述線程。一個實施例亦可包括在保持較低優(yōu)先級中斷的同時處置高優(yōu)先級中斷,其可延遲退出。可按允許在退出完成之后最有效使用核心資源的方式進行次要線程的關閉。舉例而言,毫碼可停用某些中斷以防止將核心資源用于在毫碼中斷處理機并非必要時分派所述毫碼中斷處理機。毫碼亦可用于指示某些物理寄存器不再被使用以使得其為空閑的以供正執(zhí)行的ST使用。
如本文所用,術語“線程”指單個指令流及其相關聯狀態(tài)。亦即,在架構級別處,每一邏輯線程表示獨立CPU或處理器。在硬件級別處,物理線程是當邏輯線程被分派時結合維持該客體狀態(tài)而執(zhí)行與該邏輯線程相關聯的指令流。正是機器對該線程狀態(tài)的維護減少了在系統管理程序級別處所需的管理??捎糜谟蛇壿嫼诵氖褂玫倪壿嬀€程的總數受可用于物理核心的物理線程的總數限制。
如本文中所使用,術語“物理核心”指執(zhí)行一個或多個獨立指令流或線程但共享許多基本資源(諸如,執(zhí)行單元及低級別高速緩存)的硬件處理單元??梢远喾N方式進行此共享,所述方式包括使每一線程在獨立時間使用相同硬件資源,或使資源被邏輯上共享,同時每一物理項被標記線程識別符。線程(例如,常常需要資源A但僅很少需要資源B的一個線程及通常使用資源B而不使用資源A的另一線程)之間的適當整合效果能夠改進此共享的效率。如本文中所使用,術語“機器”指包括于物理核心中的硬件以及用于支持物理核心的毫碼及其他硬件。
如本文中所使用,術語“客體VM”及“客體”可互換地用以指可包括單個CPU或多個CPU的單個客體配置。如本文中所使用,術語“邏輯核心”指被定義以作為指定MT的開始VE指令的一部分而一起分派的邏輯客體線程或CPU的組??腕wVM可由單個邏輯核心(ST或MT)或多個邏輯核心(其中的每一者亦可為ST或MT)組成。
如本文中所使用,術語“軟件”指系統管理程序(例如,PR/SM或zVM)或客體操作系統或由于開始VE指令而分派的應用程序。
如本文中所使用,術語“系統管理程序”及“主機”指管理系統資源且分派客體邏輯處理器以在物理硬件上執(zhí)行的程序。
用于分派客體點至狀態(tài)描述或狀態(tài)描述組的開始VE指令的操作數定義該客體處理器或核心的狀態(tài)。狀態(tài)描述自身具有指向可視為狀態(tài)描述的擴展的“衛(wèi)星(satellite)塊”的指針且包括進一步定義該客體核心或處理器的狀態(tài)的額外信息。如本文中所使用,術語“狀態(tài)描述”不僅指狀態(tài)描述自身而且指這些衛(wèi)星塊。圖12中描繪了核心導向式系統控制區(qū)(COSCA)(這些衛(wèi)星塊中的一者)。
現轉向圖1,大體展示可由例示性實施例實施的計算環(huán)境100。計算環(huán)境100可(例如)基于由國際商業(yè)機器公司(Armonk,New York)提供的z/Architecture。z/Architecture描述于2012年8月的題為“z/Architecture Principles of Operation”的公開(IBM公開第SA22-7832-09號)中。在一個實例中,基于z/Architecture的計算環(huán)境包括由國際商業(yè)機器公司(Armonk,New York)提供的eServer zSeries。
作為一個實例,計算環(huán)境100可包括耦合至系統控制器120的處理器復合體102。處理器復合體102可包括(例如)一個或多個分區(qū)104(例如,邏輯分區(qū)LP1至LPn)、一個或多個物理核心106(例如,核心1至核心m)及級別0系統管理程序108(例如,邏輯分區(qū)管理器),下文描述其中的每一者。
每一邏輯分區(qū)104能夠充當單獨系統。亦即,每一邏輯分區(qū)104可被獨立地重設,視需要最初加載有操作系統110且以不同程序操作。在邏輯分區(qū)104中運行的操作系統110或應用程序可看起來存取完全及完整系統,但實際上存取僅其可獲得的一部分。硬件與許可內部代碼(通常稱為微碼或毫碼或固件)的組合將程序保持在一個邏輯分區(qū)104中以免干擾不同邏輯分區(qū)104中的程序。這允許若干不同邏輯分區(qū)104以時間分片方式在單個或多個物理核心106上操作。在一實施例中,每一物理核心包括一個或多個中央處理器(在本文中亦稱為“物理線程”)。在圖1中所展示的實例中,每一邏輯分區(qū)104具有駐留操作系統110,其針對一個或多個邏輯分區(qū)104而可不同。在每一邏輯分區(qū)104中運行的操作系統110為虛擬機或客體配置的一個實例。在一個實施例中,操作系統110為由國際商業(yè)機器公司(Armonk,New York)提供的操作系統。
物理核心106包括被分配至邏輯分區(qū)104的物理處理器資源。邏輯分區(qū)104可包括一個或多個邏輯處理器,其中的每一者表示分配至分區(qū)104的所有或一部分物理處理器資源。物理核心106可專用于特定分區(qū)104的邏輯核心,使得基礎核心106的物理處理器資源被保留用于該分區(qū)104;或與另一分區(qū)104的邏輯核心共享,使得基礎核心資源的物理處理器資源潛在地可用于另一分區(qū)104。
在圖1中所展示的實施例中,邏輯分區(qū)104由級別0系統管理程序108管理,所述級別0系統管理程序由在物理核心106上運行的固件實施。邏輯分區(qū)104及系統管理程序108各自包括駐留在與物理核心106相關聯的中央存儲裝置(存儲器)的相應部分中的一個或多個程序。系統管理程序108的一個實例為由國際商業(yè)機器公司(Armonk,New York)提供的Processor Resource/System Manager(PR/SMTM)。
在圖1中耦合至中央處理器復合體102的系統控制器120可包括負責在發(fā)出請求的不同處理器之間仲裁的集中式邏輯。舉例而言,當系統控制器120接收存儲器存取請求時,其判定是否允許存取該存儲位置,且如果允許,則將存儲位置的內容提供至中央處理器復合體102,同時維護該復合體內的處理器之間的存儲器一致性。
現轉向圖2,大體展示根據一個實施例的用于實施機器或物理核心(諸如,圖1中的物理核心106)的處理電路200的方塊圖。處理電路200可包括在多處理環(huán)境中的多個物理核心中的一個物理核心。圖2中所展示的處理電路200包括可將處理電路200耦合至其他核心及外圍設備的系統控制器接口單元202。系統控制器接口單元202亦可將Dcache 204(其讀取及存儲數據值)、Icache 208(其讀取程序指令)及高速緩存接口單元206連接至外部存儲器、處理器及其他外圍設備。
Icache 208可結合指令取回單元(IFU)210提供指令流的加載,所述指令取回單元預先取回指令且可包括推測性加載及分支預測能力??蓪⑺』刂噶钐峁┲林噶罱獯a單元(IDU)212以用于解碼成指令處理數據。
IDU 212可將指令提供至發(fā)出單元214,所述發(fā)出單元可控制指令至各種執(zhí)行單元(諸如,用于執(zhí)行一般運算的一個或多個定點單元(FXU)216及用于執(zhí)行浮點運算的一個或多個浮點單元(FPU)218)的發(fā)出。FPU 218可包括二進制浮點單元(BFU)220、十進制浮點單元(DFU)222或任何其他浮點單元。發(fā)出單元214亦可經由一個或多個LSU管線耦合至一個或多個加載/存儲單元(LSU)228。多個LSU管線被視為用于執(zhí)行加載及存儲以及用于分支的地址產生的執(zhí)行單元。LSU 228及IFU 210兩者可利用轉換后備緩沖器(TLB)230以提供用于操作數及指令地址的緩沖轉換。
FXU 216及FPU 218耦合至各種資源,諸如通用寄存器(GPR)224及浮點寄存器(FPR)226。GPR 224及FPR 226通過LSU 228提供用于自Dcache 204加載及存儲的數據值的數據值存儲。
現轉向圖3,大體展示可由一個實施例實施的計算環(huán)境300。圖3中所展示的計算環(huán)境300類似于圖1中所展示的計算環(huán)境100,外加在邏輯分區(qū)104(標記為LP2)中執(zhí)行的級別1系統管理程序302。如圖3中所展示,級別1系統管理程序302可提供先前關于系統管理程序108(在本文中亦稱為“級別0系統管理程序”)描述的相同系統管理程序功能,諸如在標記為LP2的邏輯分區(qū)104內的多個操作系統(例如,在虛擬機VM1 304、VM2 306及VM3 308中運行的OS1 314、OS2 312及OS3 310)之間的資源的透明時間分片及這些操作系統的彼此隔離。圖3中所展示的實施例包括作為實例的三個虛擬機且其他實施例可基于應用需求而包括更多或更少虛擬機。
如圖3中所展示,標記為LP1的邏輯分區(qū)104具有駐留操作系統110,且標記為LP2的邏輯分區(qū)104運行級別1系統管理程序302,級別1系統管理程序302繼而建立虛擬機304、306、308的級別1系統管理程序302,所述虛擬機中的每一者運行其自身的駐留操作系統314、312、310。任何數目個邏輯分區(qū)104可運行級別1系統管理程序302。在一實施例中,級別1系統管理程序302為由國際商業(yè)機器公司(Armonk,New York)提供的z/VM系統管理程序。在各種邏輯分區(qū)中運行的常駐操作系統可不同,且當在級別1系統管理程序302下運行時,單個分區(qū)104(例如,LP2)內的駐留操作系統(例如,操作系統314、312、310)亦可不同。在一實施例中,在標記為LP1的邏輯分區(qū)104中的操作系統110為由國際商業(yè)機器公司(Armonk,New York)提供的z/OS操作系統。在一實施例中,操作系統310及312為Linux且操作系統314為z/OS。
當級別1系統管理程序302在邏輯分區(qū)104中運行時,其可將由級別0系統管理程序(諸如,系統管理程序108)提供至邏輯分區(qū)104的資源的相同虛擬化提供至在虛擬機308、306、304中運行的操作系統310、312、314。當在第一級別處時,每一虛擬機可包括多個虛擬處理器。
物理核心106包括可為專用或如針對圖1所描述在邏輯分區(qū)104LP1、LP2、LP3及LP4之間共享的物理處理器資源。當在一個或多個物理核心上分派邏輯分區(qū)LP2時,級別1系統管理程序302可接著在其虛擬機VM1 304、VM2 306及VM3 308之間透明地共享這些資源。在一個實施例中,級別0系統管理程序108使用指定MT的開始VE指令來分派多線程化級別1系統管理程序302,所述多線程化級別1系統管理程序接著使用指定ST的開始VE指令來分派單線程化虛擬機VM1 304、VM2 306及VM3 308。在一不同實施例中,級別0系統管理程序108使用指定ST的開始VE指令來分派單線程化級別1系統管理程序302,所述單線程化級別1系統管理程序接著使用指定MT的開始VE指令來分派多線程化虛擬機VM1 304、VM2 306及VM3 308。在另一實施例中,級別1系統管理程序302及其客體VM 304、306、308兩者皆為單線程化的。
在客體多處理(MP)環(huán)境中,系統管理程序可維護被稱為系統控制區(qū)(SCA)的控制結構,其由系統管理程序及機器兩者使用以管理可影響客體配置中的多個邏輯處理器的某些功能。針對配置或虛擬機中的所有客體處理器,在狀態(tài)描述中指定相同SCA起點(SCAO)。在一實施例中,此區(qū)可包括公用區(qū)(一般用于協調全客體配置功能)及單獨處理器特定的項。公用區(qū)(例如)保存關于客體配置內的哪些虛擬處理器有效的信息。SCA內的單獨處理器特定的區(qū)可(例如)用于解釋或仿真處理器間客體功能(諸如,處理器間中斷)或容易地提供指向每一邏輯處理器的相應狀態(tài)描述的可存取指針。在一實施例中,用于ST的SCA通過針對每一潛在客體線程添加額外線程特定的項而擴展以供MT使用。
核心分派的一個實施例可允許在單個線程上運行的系統管理程序使用開始VE指令的變體(有時被稱為開始多線程化虛擬執(zhí)行(開始MVE))在其核心上分派多線程化客體。在多線程化客體中的每一線程可表示客體邏輯中央處理單元(CPU),或客體線程。開始VE指令能夠經由狀態(tài)描述中的控制字段啟用在物理核心上的多線程(MT)客體執(zhí)行。當用于核心分派時,開始VE指令的操作數可指定含有所有客體線程的狀態(tài)的單個狀態(tài)描述或各自(例如)表示單個客體線程的狀態(tài)的一組狀態(tài)描述。在一實施例中,邏輯核心包括該組狀態(tài)描述。核心分派需要虛擬執(zhí)行進入以將邏輯核心及這些客體邏輯線程中的每一者的狀態(tài)加載至物理核心線程及其線程中。這些線程可為彼此獨立地操作的指令流。在各種實施例中,可以若干方式指定狀態(tài)描述組,包括指定為彼此的固定偏移、指定為狀態(tài)描述地址或狀態(tài)描述的列表、或指定為適用于核心的狀態(tài)描述的循環(huán)列表(環(huán)),其中該組中的每一狀態(tài)描述表示單獨客體線程。此類技術允許系統管理程序及機器容易存取邏輯核心內的其他線程且允許適用于整個邏輯核心的字段被保持在單個位置中。
客體OS可通過發(fā)出啟用客體中的多線程的MT設定指令簡單地利用多線程。這允許客體OS將這些新線程視為額外獨立CPU且如這些新線程在不存在多線程化的情況下來管理它們。另外,客體OS可以以利用這些線程共享核心的事實的方式使用這些線程,或客體OS可使這些線程以相互更相依方式操作。這對于系統管理程序及機器為全部透明的。系統管理程序接著將這些額外線程提供至客體OS,同時系統管理程序自身繼續(xù)每核心在單個線程上運行且基于核心管理客體MT環(huán)境中的許多部分。在題為“Thread Context Preservation in a Multithreading Computer System”的美國專利申請14/226,895中更詳細地描述多線程的OS啟用。
在核心分派的一個實施例中,指定為指定MT的開始VE指令的操作數的狀態(tài)描述為“主要”狀態(tài)描述且相關聯的客體邏輯線程為“主要”線程。組中的其他狀態(tài)描述在本文中被稱為“次要”狀態(tài)描述,且如果適用,則適用于次要邏輯線程。當狀態(tài)描述組被實施為列表或環(huán)時,主要狀態(tài)描述中可存在指向第一次要狀態(tài)描述的下一狀態(tài)描述(NSD)字段,第一次要狀態(tài)描述繼而1)指向組中的下一次要狀態(tài)描述或2)含有指示組的結束的值。列表中的最后狀態(tài)描述中的NSD值可為主要狀態(tài)描述的地址,在此狀況下,列表形成狀態(tài)描述環(huán)。
在非MT實現中,系統管理程序每次在給定物理核心上分派一個客體邏輯處理器(在本文中亦被稱為“邏輯線程”)。如果特定邏輯處理器處于無效狀態(tài)(例如,在停止狀態(tài)下或在停用等待中),則系統管理程序將不分派該客體。在MT環(huán)境中,核心分派允許系統管理程序同時在核心上分派多個客體線程。為了適應該邏輯核心的狀態(tài)描述組中的線程中的一者或多者無效的可能性,一個實施例利用主要狀態(tài)描述中的線程有效性屏蔽(TVM),自軟件觀點,其中的每一位指示組中的對應狀態(tài)描述中的邏輯線程的有效性。
在另一實施例中,僅將有效線程包括在狀態(tài)描述組中且有效性指示為不必要的。在狀態(tài)描述組中包括無效邏輯線程的一個實施例允許系統管理程序維護與這些無效線程相關聯的狀態(tài)且這些線程可在將來再次變得有效。機器將僅初始化且運行具有有效狀態(tài)的這些線程。如果組中的至少一個線程為有效的,則系統管理程序將僅分派一個客體邏輯核心。
現轉向圖4,大體展示根據一個實施例的包括客體的架構狀態(tài)的大部分的邏輯線程的狀態(tài)描述。在此上下文中,術語“狀態(tài)描述”不僅包括狀態(tài)描述自身而且包括充當擴展的衛(wèi)星塊,其指針駐留于狀態(tài)描述中。如圖4中所展示,狀態(tài)描述400可包括客體通用寄存器(GR)402、存取寄存器(AR)404、控制寄存器(CR)406、客體定時器408(包括時鐘比較器及CPU定時器)、客體前綴寄存器410、虛擬CPU編號(VCN)412、程序狀態(tài)字(PSW)及指令地址(IA)414。另外,狀態(tài)描述可包括控制信息,諸如攔截控制(IC)位420,其用以指示某些指令(例如,加載程序狀態(tài)字(LPSW)及失效頁表項(IPTE))是否需要攔截主機或在客體指令執(zhí)行可開始之前是否需要清空客體轉換后備緩沖器(TLB)。狀態(tài)描述亦含有用于定義如圖6至圖9中所描述的狀態(tài)描述列表及環(huán)的下一狀態(tài)描述(NSD)422。主要狀態(tài)描述亦包括如圖5中所描述的TVM 430及邏輯分區(qū)編號(LPN)432。虛擬CPU編號(VCN)412等效于CPU編號,可被調節(jié)以包括MT模式中的線程編號,如題為“Address Expansion and Contraction in a Multithreading Computer System”的美國專利申請14/226,947中所描述。
核心內的線程可由二進制線程標識符(TID)識別。為簡潔起見,在以下各圖中,線程x常常通過術語TIDx來引用,所述術語在此狀況下含義為“具有TID x的線程”。
現參看圖5,大體展示根據一個實施例的線程有效性屏蔽(TVM)520的方塊圖。如圖5中所展示,TVM 520的位0 530表示狀態(tài)描述組中的邏輯線程0的有效性,位1 531表示線程1的有效性,位2 532表示線程2的有效性,位3 533表示線程3的有效性,等等,直至表示線程n(與此核心相關聯的狀態(tài)描述組中的最后可能邏輯線程)的有效性的位n 537。TVM可駐留于該組的主要狀態(tài)描述中。
現轉向圖6,大體展示根據一個實施例的固定偏移狀態(tài)描述組結構。如圖6中所展示,在彼此的固定偏移(N)處指定狀態(tài)描述組。在此狀況下,開始VE指令的操作數602指向邏輯線程0的主要狀態(tài)描述603。邏輯線程x的次要狀態(tài)描述605位于主要狀態(tài)描述之后N個字節(jié)的固定偏移處,且邏輯線程y的次要狀態(tài)描述607位于線程x的次要狀態(tài)描述之后N個字節(jié)處。對于組中的所有線程,此情形繼續(xù)。可以以若干方式確定組中的線程的數目,包括藉由主要狀態(tài)描述中的計數或藉由在列表中的最后狀態(tài)描述地址之后的結束標記。
圖6可表示兩種狀況,第一狀況為組包括組中的所有邏輯線程(無論其是否有效)的狀態(tài)描述的狀況,且第二狀況為僅有效狀態(tài)描述被包括在組中的狀況。在第一狀況下,線程x的狀態(tài)描述605表示線程1的狀態(tài),且線程y的狀態(tài)描述607表示線程2的狀態(tài)。僅在此第一狀況下需要的TVM 620表示這些邏輯線程中的每一者的有效性。在第二狀況下,線程x的狀態(tài)描述605表示第一有效的邏輯次要線程的狀態(tài),且邏輯線程y的狀態(tài)描述607表示第二有效的次要線程的狀態(tài)。舉例而言,如果線程1并不有效且線程2及3皆有效的,則線程x 605將表示線程2且線程y 607將表示線程3。將不存在包括于組中的線程1的狀態(tài)描述,這是因為線程1為無效的。這相同的兩種狀況亦可適用于以下圖7至圖9中所示的實施例,然而僅描述及圖示狀況1。
現轉向圖7,大體展示根據一個實施例的被指定為列表的狀態(tài)描述組結構。在此狀況下,開始VE指令的操作數702表示狀態(tài)描述地址的列表,其中所述列表中的第一項704指向線程0的主要狀態(tài)描述705,所述列表中的第二項706指向線程1的次要狀態(tài)描述707,所述列表中的第三項708指向線程2的次要狀態(tài)描述709,等等,針對組中的所有線程繼續(xù)。TVM720表示這些線程中的每一者的有效性。
現轉向圖8,大體展示根據一個實施例的被指定為鏈接列表的狀態(tài)描述組結構。在此狀況下,如在圖6中所描繪的狀況下,開始VE指令的操作數802指向線程0的主要狀態(tài)描述803,但實際上用于線程1的次要狀態(tài)描述805的指針804被提供為主要狀態(tài)描述中的下一狀態(tài)描述(NSD)字段804。繼而,用于線程2的次要狀態(tài)描述807的指針806被提供為線程1的次要狀態(tài)描述中的NSD 806。針對組中的所有線程,此情形將繼續(xù),其中最后線程n的狀態(tài)描述809中的NSD 810被指定為0或指示列表結尾的某一其他獨特值。在主要狀態(tài)描述803中提供的TVM 820表示這些線程中的每一者的有效性。
現轉向圖9,大體展示根據一個實施例的被指定為循環(huán)列表或環(huán)的狀態(tài)描述組結構。此狀況等同于圖8中所展示的狀況,因為開始VE指令的操作數902指向線程0的主要狀態(tài)描述903,其含有用于線程1的次要狀態(tài)描述905的NSD 904,所述次要狀態(tài)描述含有用于線程2的次要狀態(tài)描述907的NSD 906,且針對所有線程此情形繼續(xù)直至最后線程n。然而,在圖9中所展示的實施例中,在線程n的狀態(tài)描述909中的NSD 910形成循環(huán)列表且指回至主要狀態(tài)描述903。在主要狀態(tài)描述903中提供的TVM 920表示這些線程中的每一者的有效性。
核心分派允許系統管理程序管理在核心級別處的邏輯線程的許多方面。核心分派不僅常常通過將核心的多個線程的虛擬執(zhí)行的協調推送至機器中而簡化線程管理所需的系統管理程序代碼,而且其可減少管理配置中的更多處理器所需的開銷。用于邏輯分區(qū)(或客體)的優(yōu)先級管理可繼續(xù)在邏輯核心級別處進行,從而減少此類管理上的按比例調整壓力。系統管理程序自身仍需要管理與邏輯核心相關聯的線程集合以確保在重新發(fā)出開始VE指令之前其需求(諸如,指令攔截)全部被滿足。
現參看圖10,大體展示根據一個實施例的核心分派過程。如圖10中所展示,系統管理程序正在物理核心N 1010及物理線程A 1020上單線程化地運行。在塊1022中,系統管理程序發(fā)出指定MT的開始VE指令以分派多線程化客體核心。機器判定客體為多線程化的,且在塊1024中,使物理線程B及C可用于運行軟件。機器將客體狀態(tài)自線程中的每一者的狀態(tài)描述加載至對應物理線程中。在圖10中所描繪的實施例中,機器使用多個物理線程以執(zhí)行此功能,亦即,在物理線程A 1020上運行的毫碼將客體邏輯線程X的狀態(tài)加載至物理線程A中,如塊1026中所展示。同樣地,在物理線程B 1040及C 1060上運行的毫碼將客體邏輯線程Y及Z的狀態(tài)加載至物理線程B及C中,如塊1046及1066中所展示。一旦客體狀態(tài)已加載,在客體邏輯線程X、Y及Z上運行的軟件便在物理線程A、B及C上執(zhí)行,如塊1028、1048及1068中所展示。
現參看圖11,大體展示根據一個實施例的自虛擬執(zhí)行的協調退出。如圖11中所展示,客體邏輯線程X、Y及Z正在物理線程A 1120、B 1140及C 1160上執(zhí)行客體軟件,如塊1128、1148及1168中所指示。一個或多個客體線程判定需要自虛擬執(zhí)行的退出。參看圖11,在物理線程B 1140上運行的客體邏輯線程Y判定其必須退出虛擬執(zhí)行(如塊1150中所展示),從而使機器用信號通知物理線程A 1120及C 1160退出虛擬執(zhí)行,如塊1152中所展示。在塊1136、1154及1174中,在物理線程中的每一者上運行的毫碼協調自虛擬執(zhí)行的退出且接著使物理線程B 1140及C 1160不可用于由軟件使用,如塊1156及1176中所指示。物理線程A 1120上的毫碼將主機狀態(tài)重載至硬件中(如塊1138中所展示),這導致系統管理程序軟件在物理線程A上的執(zhí)行,如塊1140中所展示。系統管理程序接著將按需處理任何待決客體攔截及主機中斷。
圖12描繪根據一個實施例的用于包括多個邏輯核心的單個客體配置的核心導向式系統控制區(qū)(COSCA)的方塊圖。圖12中所展示的COSCA可用于提供核心內的邏輯線程之間的協調及不同核心上的邏輯線程之間的協調兩者。COSCA可包括具有指針的表示整個客體配置的公用區(qū),每一邏輯核心一個指針以便分離核心描述區(qū)。每一核心描述包括表示該核心的公用區(qū)及用于該核心的一系列鄰接的單獨線程特定區(qū)或線程描述。在另一實施例中,核心描述提供線程描述的位置。所提供位置可為隱含的(例如,它們?yōu)榘诤诵拿枋鲋械牧斜?,或它們可在與核心描述相連的存儲塊中)。在其他實施例中,可提供指向含有線程描述的其他存儲位置的指針。如本文中所使用,術語“指示位置”用于指確定項目(例如,線程描述或COSCA中的其他元素)的位置的這些方式中的任一者,或任何額外方式。此結構維護MT客體配置的樹狀表示,其促進(特定言之,在系統管理程序級別處)在一些情景下基于核心來管理事物,但其他情景下基于線程或處理器來管理事物。
可在客體配置內的所有客體線程的狀態(tài)描述中的SCA起點(SCAO)字段中提供相同COSCA起點(COSCAO),且可針對給定核心內的所有線程提供相同核心描述區(qū)地址(CDAA)。此實施例的優(yōu)點為其不需要一些系統管理程序可能難以提供的那樣多的鄰接實際存儲空間。另一實施例可添加額外間接層且使每一核心描述包括用于每一線程特定區(qū)的指針的列表,從而使含有這些區(qū)的控制塊無需是鄰接的。
現參看圖12,大體展示用于包括兩個邏輯核心(每一核心中具有三個邏輯線程)的單個客體配置的COSCA的一個實例實施例。在一實施例中,COSCA包括COSCA公用區(qū)1260(在圖12中展示為“COSCACA 1260”)、核心描述區(qū)1270及核心描述區(qū)1280的內容。將與邏輯核心0相關聯的狀態(tài)描述組的主要狀態(tài)描述1203指定為由系統管理程序使用以分派客體核心0的開始VE指令的操作數1202。另外,將與邏輯核心1相關聯的狀態(tài)描述組的主要狀態(tài)描述1233指定為用于分派核心1的開始VE指令的操作數1232。“核心0線程0”的此主要狀態(tài)描述1203含有NSD01 1205,其指向核心0線程1的次要狀態(tài)描述1213,所述次要狀態(tài)描述繼而含有指向組中的核心0線程2的最終次要狀態(tài)描述1223的NSD02 1215。類似地,邏輯核心1的狀態(tài)描述組以核心1線程0的主要狀態(tài)描述1233開始,所述主要狀態(tài)描述含有指向核心1線程1的次要狀態(tài)描述1243的NSD11 1235,所述次要狀態(tài)描述含有指向核心1線程2的最終次要狀態(tài)描述1253的NSD12 1245。此客體配置中的所有六個線程的狀態(tài)描述1203、1213、1223、1233、1243、1253在SCAO 1204、1214、1224、1234、1244、1254中包含相同值,其指向COSCA公用區(qū)1260。
如圖12中所展示的COSCA公用區(qū)1260含有用以協調全客體配置功能的核心級別信息。COSCA公用區(qū)1260包括指示客體配置內的每一邏輯核心的有效性的SCA核心有效性屏蔽(SCVM)1261,且亦包括每一核心的核心描述區(qū)地址(CDAA)1262、1264。SCVM中的位及核心描述地址的陣列兩者可通過核心編號來編制索引。指向核心0的核心描述區(qū)(CDA)1270的CDAA0 1262包括于COSCA公用區(qū)1260中。另外,核心0中的所有線程的狀態(tài)描述中的CDAA字段1206、1216、1226亦指向核心0的CDA 1270。指向核心1的CDA 1280的CDAA1 1264亦包括于COSCA公用區(qū)1260中,且同樣地,核心1中的所有線程的狀態(tài)描述中的CDAA字段1236、1246、1256亦指向核心1的CDA 1280。核心0的核心描述區(qū)(CDA)1270含有指示核心0內的每一邏輯線程的有效性的SCA線程有效性屏蔽(STVM0)1271。其亦含有核心0線程0的線程描述區(qū)1272、核心0線程1的線程描述區(qū)1274及核心0線程2的線程描述區(qū)1276。核心1的CDA1280類似地含有STVM1 1281以及核心1線程0的線程描述區(qū)1282、核心1線程1的線程描述區(qū)1284及核心1線程2的線程描述區(qū)1286。這些線程描述區(qū)1272、1274、1276、1282、1284、1286中的每一者含有用于對應于該線程描述區(qū)的線程(分別為核心0線程0、核心0線程1、核心0線程2、核心1線程0、核心1線程1及核心1線程2)的狀態(tài)描述地址(SDA)1273、1275、1277、1283、1285、1287。STVM中的位及線程描述區(qū)的陣列兩者可通過線程標識來編制索引。這些SDA使系統管理程序更容易管理核心內的線程且使機器更容易呈現客體處理器間中斷。
圖13描繪根據一個實施例的用于管理多線程化核心的過程流,其使用圖12中所展示的COSCA。在圖13中所展示的實例中,在塊1302處,在第一物理線程(例如,由狀態(tài)描述1213定義的核心0線程1)上運行的客體操作系統(OS)已確定其將用信號通知第二邏輯線程或目標線程(例如,由狀態(tài)描述1253定義的核心1線程2)。在塊1304處,客體OS(例如)通過發(fā)出處理器間中斷指令執(zhí)行此操作。作為執(zhí)行處理器間中斷指令的一部分,機器使用COSCA來仿真客體處理器間中斷指令。因為包括目標邏輯線程的邏輯核心在發(fā)信號進行時可能或可能未被分派,所以由機器仿真處理器間中斷指令。在塊1306處,機器定位(例如,經由SCA0 1214,這是因為處理器間中斷指令由邏輯核心0線程1執(zhí)行)用于客體配置的公用區(qū)(例如,COSCA公用區(qū)1260),以便存取SCVM(例如,SCVM 1261)以檢驗目標核心的有效性且獲得適當CDAA(例如,CDAA1 1264,這是因為目標線程系在核心1上)。
接下來,在塊1308處,機器定位(例如,經由CDA1 1264)用于目標核心的核心描述區(qū)(例如,CDA 1280)。機器通過存取核心描述區(qū)中的STVM(例如,CDA 1280中的STVM1 1281)而檢驗目標線程為有效的。在塊1310處,機器定位線程描述區(qū)(例如,對應于線程2的線程描述區(qū)1286,這是因為目標線程為線程2)。在塊1312處,將關于中斷的信息記錄在用于目標線程的線程描述區(qū)中(例如,其將發(fā)送線程的身份放置至線程描述區(qū)1286中)。在塊1314處,機器定位(例如,經由線程描述區(qū)1286中的SDA12 1287)目標線程的狀態(tài)描述(例如,核心1TID2的次要狀態(tài)描述1253)。在塊1316處,使中斷在目標狀態(tài)描述中待決(例如,在核心1TID2的狀態(tài)描述1253中設定IP位1257)。因此,當目標邏輯處理器(例如,核心1線程2)被分派在物理線程上且被啟用以用于中斷時,機器將向客體操作系統呈現中斷(在啟用情況下)。如果目標邏輯處理器已在中斷變?yōu)榇龥Q時被分派,則一旦其被啟用,其便將采取中斷。
存在機器亦可利用邏輯核心內的線程具有共同屬性的事實的情況。舉例而言,核心分派自然地適于使邏輯核心上的所有客體線程駐留在同一LPAR區(qū)或分區(qū)中。該設計可通過僅必須每核心一個地而非每線程一個地實施與該分區(qū)相關聯的事物來最小化硬件。另外,亦可簡化復雜的控制邏輯(例如,全系統中斷的處置),這是因為其必須僅處理單個核心值。
在一個實施例中,表示多線程化客體的狀態(tài)描述的組中的每一字段(或字段內的位)被分類為主要、核心公用或線程特定。主要字段僅駐留在主要狀態(tài)描述中且適用于邏輯核心中的所有處理器;代表核心的任何線程對主要字段的任何存取必須使用來自相關聯主要狀態(tài)描述的值。此分類用于定義核心的總狀態(tài)(諸如,線程有效性屏蔽)的字段。核心公用字段在邏輯核心內的所有處理器當中是公用的且此字段在組中的每一狀態(tài)描述中具有相同值;代表處理器對這些字段中的一者的任何存取可使用來自該組中的任何狀態(tài)描述的值。此分類用于在整個核心上應用的字段,諸如LP編號。需要系統管理程序維護在所有狀態(tài)描述中的核心公用字段,但允許機器存取任何線程的狀態(tài)描述中的此字段,無論哪個提供最佳性能。因為這些字段并不由系統管理程序常常改變但常常由機器每次進入虛擬執(zhí)行時存取,所以將字段定義為核心公用而非線程特定的允許虛擬執(zhí)行進入(例如)以使用主要狀態(tài)描述中的值自主要線程加載次要線程工具。線程特定字段對每一邏輯線程為特定的;代表任何給定線程對這些字段中的一者的任何存取必須使用來自該線程的狀態(tài)描述的值。此分類用于在線程之間通常是獨特的字段,諸如客體前綴。
一個實施例包括核心分派指令的機器實現。當系統管理程序發(fā)出核心分派或指定MT的開始VE指令時,由相關聯的狀態(tài)描述組描述的邏輯核心通過虛擬執(zhí)行進入(VE進入)毫碼加載至物理核心中。作為此過程的一部分,將每一有效邏輯線程的狀態(tài)加載至物理線程中。邏輯線程至物理線程的映射可為直接的一對一映射或可被虛擬化。在VE進入開始之前,每一物理線程的內容含有最后在其上運行的任一虛擬線程的狀態(tài)。因此,VE進入毫碼用新分派的客體線程的狀態(tài)替換整個狀態(tài)。
當核心分派由單線程化系統管理程序調用時,毫碼的職責為將個體客體線程(邏輯處理器)狀態(tài)加載至硬件中且設定硬件直至開始多線程化執(zhí)行。為了通過允許每一物理線程并行地加載其自身狀態(tài)的大部分來改進效率,毫碼可針對次要線程中的每一者加載少數硬件寄存器(由主要線程抑或另一已初始化的次要線程)。此加載可需要自硬件觀點來看當前不活動的次要線程“被喚醒”以開始執(zhí)行將完成其自身客體狀態(tài)的初始化的毫碼例程且最終開始執(zhí)行客體程序。存在以下狀況:盡管無系統管理程序或客體程序代碼正在次要線程上運行,但內部固件可正運行以便處置(例如)一些內部系統管理功能。如果為如此狀況,則機器必須協調此執(zhí)行與客體線程的分派。
存在可被指定以適用于整個核心的一些操作,諸如TLB的清除。此情形消除對每一線程判定清除是否必要且在必要時執(zhí)行該清除的需求。此外,存在在核心內的物理線程之間共享或公用的一些核心資源。毫碼可利用以下事實:需要僅自單個線程加載共享資源且如果認識到進行節(jié)省,則單個線程可加載公用線程資源的所有副本。VE進入毫碼亦可使用客體多線程啟用及線程有效性位以繞過無效邏輯線程的初始化,以便致力于加速初始化毫碼在有效線程上的執(zhí)行。靈活硬件設計允許毫碼的實施例隨設計開發(fā)而使其實施優(yōu)化。
現轉向圖14A及圖14B,大體展示根據一個實施例的核心分派的機器實現。如圖14A中所展示,在塊1400處,由在單個線程(被稱為主要線程)上運行的系統管理程序使用指定MT的開始VE指令來初始化核心分派?;谙到y管理程序發(fā)出開始VE指令,在主要線程上調用VE進入毫碼,該主要線程為發(fā)出所述指令的線程且其通過在用于整個核心的硬件上發(fā)起多線程而開始。此初始化的大部分可包括測試來自所有可適用的次要線程的硬件狀態(tài)位及/或設定所有可適用的次要線程中的硬件控制位或字段。圖14A中所展示的控制及狀態(tài)位1450可在邏輯上駐留于次要線程自身的硬件中,或它們可在邏輯上駐留于在線程之間共享但表示及控制次要線程的公用硬件資源中。在塊1402處,VE進入毫碼使用狀態(tài)描述中的線程有效性屏蔽(TVM)判定自軟件觀點來看哪個(哪些)客體邏輯線程有效且因此需要被加載至硬件中。其亦判定有效邏輯線程至物理線程的映射。
圖14A的塊1404至1414由毫碼執(zhí)行以檢驗所請求的物理線程是否可用。在塊1404處,毫碼防止可適用的次要硬件線程采用可調用內部代碼的新中斷或開始運行任何新程序代碼。此可通過在次要線程中設定適當硬件控制來實現。在塊1406處,判定軟件是否正在次要線程上運行。在一實施例中,在主要線程上正發(fā)出開始VE指令的系統管理程序保證此核心上的其他硬件線程并不執(zhí)行任何程序代碼(例如,系統管理程序或客體代碼)。在另一實施例中,發(fā)出開始VE指令的系統管理程序可能不能夠容易地判定此新的開始VE所需的任何其他硬件線程是否正執(zhí)行程序代碼,例如,代碼與獨立開始VE相關聯。在此狀況下,VE進入毫碼在塊1406處檢查關于次要線程(多個)的適當硬件狀態(tài)位(多個)。
如果在塊1406處判定程序代碼正在運行客體次要線程所需的硬件上運行,則新的開始VE指令完成且在塊1408處,系統管理程序由機器告知開始VE指令不成功且可能被告知當前可用硬件線程的數目。作為響應,系統管理程序可在于塊1400處再次發(fā)出開始VE指令之前采取適當動作,諸如減少待分派的有效客體線程的數目或等待一些預定時間,如由塊1410所指示的。如果在塊1406處判定硬件可用,則處理繼續(xù)至塊1412。在塊1412處,毫碼(例如)通過檢查硬件中的適當狀態(tài)位(多個)來判定可適用的次要線程中的任一者是否正運行內部固件代碼。如果正執(zhí)行,則在一個實施例中,主要線程等待次要線程(多個)完成運行內部代碼且在等待的同時,為了避免掛起,主要線程可實行某些中斷。然而,這可阻止次要線程(多個)采取其他中斷以使它們可更快速地達到閑置狀態(tài)。處理接著在塊1416處繼續(xù)。在另一實施例中,如果硬件線程正運行內部固件代碼(如在塊1412處所判定),則機器可在塊1414處使開始VE指令無效且將控制返回至系統管理程序。此操作給予主要線程采取內部固件中斷且避免潛在掛起的機會,且一旦無中斷在主要線程上待決,則再次執(zhí)行開始VE指令。當與暫停內部固件及在多線程工作完成時在硬件上再次重新開始相比較時,這些實施例中的兩者具有益處,這是因為固件代碼操作常常為系統操作(例如,并行升級)必需的且此外,線程充分不頻繁地運行內部固件使得等待其完成是可行的選項。
處理接著在塊1416處繼續(xù)以開始將邏輯線程(多個)加載至物理核心上的物理線程中。在塊1416處,毫碼檢查且采用與某些異常條件相關的異常。異常條件中的一些可適用于開始VE指令自身(例如,無效狀態(tài)描述環(huán)結構),且其他異常條件與可適用于次要邏輯線程的條件相關(例如,關于NSD的存取異常)。在塊1418處,可清除來自客體硬件后備緩沖器(包括TLB)的項。此清除可包括在適當時清除用于次要線程(多個)的后備緩沖器。在塊1420處,加載來自主要及次要狀態(tài)描述的最少狀態(tài)且初始化包括有效線程中的每一者的所需硬件工具。在一實施例中,最少狀態(tài)包括次要線程的狀態(tài)描述地址。在塊1422處,將次要線程(多個)的硬件控制設定為停止取回任何內部指令流(多個)。此可簡化自單個線程執(zhí)行至多線程化執(zhí)行的切換。在塊1424處,針對其他有效次要線程中的每一者加載毫碼指令地址(毫IA)。毫IA為一旦次要線程開始取回內部指令流,次要線程便開始執(zhí)行所處的位置且其通常指向毫碼中的將完成每一有效邏輯線程的初始化的位置。主要線程繼續(xù)其對VE進入毫碼的執(zhí)行且因此,此處不需要加載新的毫IA。在塊1426處,在一個實施例中,主要線程通過設定硬件控制來喚醒次要線程,硬件控制將次要線程的執(zhí)行模式改變?yōu)楹聊J?,其使次要線程開始在先前加載的毫IA處的執(zhí)行。在另一實施例中,主要線程(Ta)可喚醒第一次要線程(Tb);Tb可喚醒下一次要線程(Tc);等等,直至所有有效線程活動且在硬件中運行。在一實施例中,次要線程將直至另一線程將其執(zhí)行模式設定為毫碼執(zhí)行模式或毫模式時才開始執(zhí)行毫碼。
現參看圖14B,在塊1428及1478處,主要線程及每一有效次要線程執(zhí)行完成將相關聯的客體邏輯線程狀態(tài)加載至硬件中所需的毫碼。在一實施例中,該狀態(tài)包括如圖4中所展示的客體通用寄存器(GR)402、存取寄存器(AR)404、控制寄存器(CR)406、前綴寄存器410、客體定時器408、虛擬CPU編號(VCN)412、程序狀態(tài)字(PSW)及指令地址(IA)414、攔截控制(IC)位420及邏輯分區(qū)編號(LPN)432。在塊1430及1480處,主要線程及次要線程完成VE進入的執(zhí)行且它們退出毫碼模式(例如,毫模式)。在塊1432及1482處,它們開始執(zhí)行客體線程程序指令流。在一實施例中,每一線程的VE進入完成獨立于其他線程的VE進入完成。在另一實施例中,線程在完成VE進入之前同步。
在一實施例中,為了支持核心分派的使用及單線程化地運行的系統管理程序,可提供自虛擬執(zhí)行的協調退出(VE退出),其中給定核心中的所有客體線程同時退回至ST主機。在協調VE退出的情形中,VE退出的類型可劃分成三種類別:(1)與主機操作有關的主機中斷;(2)與客體操作有關的主機中斷;及(3)客體攔截。主機外部I/O及一些機器檢查中斷屬于VE退出類別(1)。對于此狀況,需要所有客體線程退出虛擬執(zhí)行模式,以便允許主機處置中斷。此中斷將可能引起主機分派不同客體。如果在以虛擬執(zhí)行模式運行時發(fā)生中斷,則可在所有線程上檢測到主機中斷,使得所有線程可退出虛擬執(zhí)行模式,或可在單個線程上檢測到主機中斷,所述單個線程接著用信號通知其他線程它們是否應退出。
VE退出類別(2)(與客體有關的主機中斷)可包括一些機器檢查中斷(諸如,不可糾正的存儲錯誤)。在非多線程化情景下,這些條件作為主機中斷來呈現。在核心分派情況下,僅存在一個主機線程,但因為這些異常與客體操作有關,所以多個客體線程針對同一主機中斷檢測到相異及不同的原因是可能的。為適應此情形,對于核心分派,在適當時,將這些主機中斷替代地呈現于對應客體狀態(tài)描述中作為新類型的客體攔截且與下文所描述的類別(3)相同地處置。在一實施例中,歸因于客體存儲器引用而產生的主機地址轉換錯誤中斷亦屬于類別(2),且可呈現為另一新類型的客體攔截。
對于VE退出類別(2)及(3)兩者(上述),客體攔截(甚至在客體多線程化環(huán)境中)與單個客體線程有關且獨立于另一線程的客體執(zhí)行。進一步可能的,多個客體線程同時認識到此類條件,需要主機處置它們中的全部。通常,當呈現有攔截時,主機將仿真代表客體的一些行為且接著重新分派該同一客體。對于這些狀況,因為主機正單個線程化地運行,所以所有客體線程必須在主機可處置攔截(多個)之前退出虛擬執(zhí)行模式。這可通過等待所有線程自然地退出或通過在一個線程已判定其必須攔截回至主機時用信號通知其他線程退出而實現。此被稱為“協調VE退出”。
當每一線程判定其必須退出虛擬執(zhí)行模式時,其進入VE退出,且在初始VE退出同步循環(huán)中等待,直至所有其他有效線程亦準備退出。如果實施需要,則其用信號通知其他線程在進入此同步循環(huán)之前退出。當在VE退出同步循環(huán)中時,僅處置最少中斷。為了考慮在無主機中斷且無客體攔截應用時需要客體線程退出虛擬執(zhí)行模式的情景,定義“無動作”攔截以向主機指示不需要代表此客體的攔截動作。
一旦所有線程已進入初始VE退出同步循環(huán),客體數據在所有有效狀態(tài)描述中的存儲便可完成。亦即,駐留于硬件中的當前客體狀態(tài)被保存在對應狀態(tài)描述中,此邏輯客體線程因此可在稍后被重新分派。在此存儲完成之后需要最終VE退出同步點以保證對次要線程狀態(tài)描述的所有更新在控制返回至系統管理程序(其通常在主要線程上運行)之前完成。一旦VE退出完成,系統管理程序便可處理環(huán)中的每一線程以判定是否呈現攔截,且如果呈現,則適當地處置攔截。在如此進行之后,其可接著在物理處理器上重新分派此同一客體邏輯核心或不同客體邏輯核心。
一個實施例包括自包含多線程化客體執(zhí)行的擱置及控制至單線程化主機的返回的虛擬執(zhí)行的協調退出的機器實現。在MT環(huán)境中,在大多數條件下,虛擬執(zhí)行退出(VE退出)毫碼負責用信號向其他有效客體線程通知一旦退出可行便退出虛擬執(zhí)行。特定言之,如果線程當前正運行無法中斷以退出虛擬執(zhí)行的內部代碼,則由請求退出的線程經歷的延遲可為顯著的。在一個線程正等待其他線程退出虛擬執(zhí)行時,毫碼可用于處置某些中斷,諸如可產生懸置條件的那些中斷或可影響整個系統性能的那些中斷。如果其他中斷現可僅延遲其他線程(其工作可已被中斷)已被用信號通知的自虛擬執(zhí)行的最終退出,則毫碼處置其他中斷可能并非最佳的。這必須都被完成,同時仍維持恰當的中斷優(yōu)先級。
此外,退出由毫碼進行的虛擬執(zhí)行所需的協調的大部分必須考慮每一線程的狀態(tài)。舉例而言,其必須考慮每一邏輯線程是否有效且物理線程是否正運行內部代碼。無關于主要線程是否無效,其必須仍被用信號通知,這是因為此線程通常為主機程序將重新繼續(xù)所在的線程。此操作均使用內部毫碼請求式中斷系統來實現。
毫碼亦可執(zhí)行一些動作以釋放已由次要客體線程(多個)使用但由于客體狀態(tài)已被保存且主機并不使用次要線程(多個)而不再需要的物理寄存器。舉例而言,作為釋放資源的手段,毫碼可將被映射寄存器置0,這是因為在某些實施中,硬件可將具有零內容的所有邏輯寄存器映射至單個物理寄存器,使其他物理寄存器供主要線程使用??纱嬖诳稍诰€程之間共享且可被釋放以僅由主要線程使用的其他資源。毫碼亦可屏蔽某些中斷,使得核心資源不會不必要地被用于調用毫碼。
一旦任何線程判定需要自虛擬執(zhí)行的退出,其便將用信號通知其他線程,如下文(例如)參看圖15A及圖15B所描述。所使用的過程可基于正退出虛擬執(zhí)行的線程是主要線程還是次要線程而變化。
在一實施例中,如果所有以下條件滿足,則主要線程可用信號通知有效次要線程以退出虛擬執(zhí)行:(1)其想要退出虛擬執(zhí)行模式且將控制返回至系統管理程序;(2)并非所有其他有效線程已在退出過程中(亦即,至少一個線程仍正運行客體指令);(3)所有其他線程尚未被用信號通知以退出;及(4)存在至少一個其他有效線程。如果這些條件未滿足,則每一次要線程被給予時間以獨立地進行清理且退出虛擬執(zhí)行。在一實施例中,若所有上述條件(1)至(3)滿足,則次要線程用信號通知主要線程(即使該線程無效)及所有其他有效次要線程以退出虛擬執(zhí)行模式。在一實施例中,即使次要線程為僅有的有效線程,其仍必須將信號發(fā)送至主要線程,這是因為其必須用信號通知主要線程以完成自虛擬執(zhí)行的協調退出。
現轉向圖15A及圖15B,大體展示根據一個實施例的自虛擬執(zhí)行的協調退出的機器實現。在圖15A及圖15B中所展示的實例中,在1502處,主要線程P正執(zhí)行客體指令流P,在1542處,次要線程A正執(zhí)行客體指令流A,且在1572處,次要線程B正執(zhí)行客體指令流B。在塊1544處,次要線程A判定其必須退出虛擬執(zhí)行且使用上文所描述的準則在塊1546處判定其必須用信號通知其他線程以同樣退出。次要線程A通過進行在主要線程P的硬件狀態(tài)控制1508及次要線程B的硬件狀態(tài)控制1578中待決的內部退出虛擬執(zhí)行請求中斷來用信號通知其他線程。次要線程A的硬件狀態(tài)控制1548亦展示于圖15A中。當對在針對主要線程P的塊1510處及針對次要線程B的塊1580處的內部中斷作出響應時,每一線程檢查內部中斷的原因且在針對主要線程P的塊1512處及在針對次要線程B的塊1582處判定內部中斷是否為退出虛擬執(zhí)行請求。如果判定并非退出虛擬執(zhí)行請求,則主要線程P及次要線程B分別執(zhí)行塊1514及1584以處置另一中斷請求。
如果所述中斷為退出虛擬執(zhí)行請求,則在一實施例中,每一線程可獨立地執(zhí)行以下過程。在針對主要線程P的塊1516處及在針對次要線程B的塊1586處,判定所述線程是否有效??杉僭O請求自虛擬執(zhí)行的退出的次要線程A為有效的。對于判定為有效的線程,將來自硬件的大部分相關聯客體狀態(tài)保存至其自身的狀態(tài)描述中。如圖4中所展示,此狀態(tài)包括客體通用寄存器(GR)402、存取寄存器(AR)404、控制寄存器(CR)406、程序狀態(tài)字(PSW)及指令地址(IA)414。不需要保存在虛擬執(zhí)行期間不改變的客體狀態(tài),諸如虛擬CPU編號(VCN)412及邏輯分區(qū)編號(LPN)432。這在圖15A中展示于針對主要線程P的塊1518處、針對次要線程A的塊1558處及針對次要線程B的塊1588處。每一線程更新其內部狀態(tài)以指示其處于初始VE退出同步點處。這在圖15A中展示于針對主要線程P的塊1520處、針對次要線程A的塊1560處及針對次要線程B的塊1590處。
所述線程均等待主要線程(例如,主要線程P)及所有有效次要線程(例如,次要線程A及B)到達初始同步點,之后繼續(xù)。這在圖15A中展示于針對主要線程P的塊1521處、針對次要線程A的塊1561處及針對次要線程B的塊1591處。一旦所有線程到達退出虛擬執(zhí)行毫碼中的初始VE同步點,所述線程中的每一者便結束更新狀態(tài)描述中的適當信息。此信息的實例可包括為圖4中的客體定時器408的一部分的客體CPU定時器。這在圖15A中展示于針對主要線程P的塊1522處、針對次要線程A的塊1562處及針對次要線程B的塊1592處。延遲此狀態(tài)保存直至同步點改進了線程之間的客體計時一致性。
現參看圖15B,每一線程更新其自身的內部狀態(tài)以指示其處于VE退出毫碼中的最終同步點處。這在圖15B中展示于針對主要線程P的塊1524處、針對次要線程A的塊1564處及針對次要線程B的塊1594處。此外,主要線程A在塊1526處等待所有線程到達最終同步點1599,之后在塊1528處繼續(xù)。每一次要線程設定內部硬件位以指示其不再執(zhí)行有效程序指令流,其使機器退出毫模式且停止執(zhí)行代碼。這在圖15B中展示于針對次要線程A的塊1566處及針對次要線程B的塊1596處。在一實施例中,每一次要線程將不執(zhí)行任何程序代碼直至下一開始VE,然而,其可按需執(zhí)行內部代碼以處置內部中斷。
一旦所有線程已到達VE退出毫碼中的最終同步點(在圖15B中展示為點1599),便在主要線程P上開始單線程化執(zhí)行。主要線程P在塊1528處完成核心清理,在塊1530處將包括主機程序IA的系統管理程序狀態(tài)加載至硬件中,且在塊1532處退出毫模式。結果,主要線程P正在主機模式中運行且將處置任何適當的主機中斷,且系統管理程序將處置任何客體攔截。
技術效果和益處包括執(zhí)行自所分派的MT客體邏輯核心協調退回ST主機的能力。
各實施例包括一種用于退出多線程客體虛擬機(VM)的系統、方法和計算機程序產品。根據一個方面,一種計算機系統包括具有機器的配置,所述機器被啟用以在單線程(ST)模式和多線程(MT)模式下操作。此外,所述機器包括物理線程。所述機器被配置為執(zhí)行一種方法,所述方法包括以MT模式在核心上執(zhí)行客體實體。所述客體實體包括客體VM的全部或一部分,以及在所述物理線程上執(zhí)行的多個邏輯線程。在所述機器處檢測退出事件?;跈z測到所述退出事件,所述機器一直等待,直到所有當前正在所述物理線程上執(zhí)行的邏輯線程已到達同步點。針對所述邏輯線程中的每一者保存包括退出原因信息的狀態(tài),且在所述物理線程中的一者上以所述ST模式啟動主機的執(zhí)行。
根據另一個方面,提供一種用于在包括機器的配置中退出多線程客體VM的計算機實施的方法,所述機器被啟用以在ST模式和MT模式下操作,并且所述機器包括物理線程。所述方法包括以MT模式在核心上執(zhí)行客體實體。所述客體實體包括客體VM的全部或一部分,以及在所述物理線程上執(zhí)行的多個邏輯線程。在所述機器處檢測退出事件?;跈z測到所述退出事件,所述機器一直等待,直到所有當前正在所述物理線程上執(zhí)行的邏輯線程已到達同步點。針對所述邏輯線程中的每一者保存包括退出原因信息的狀態(tài),且在所述物理線程中的一者上以所述ST模式啟動主機的執(zhí)行。
另一方面包括一種用于在包括機器的配置中退出多線程客體VM的計算機程序產品,所述機器被啟用以在ST模式和MT模式下操作,并且所述機器包括物理線程。所述計算機程序產品包括具有程序指令的計算機可讀存儲介質,其中所述計算機可讀存儲介質并非信號。所述程序指令能由處理電路讀取以使所述處理電路執(zhí)行一種方法。所述方法包括以MT模式在核心上執(zhí)行客體實體。所述客體實體包括客體VM的全部或一部分,以及在所述物理線程上執(zhí)行的多個邏輯線程。在所述機器處檢測退出事件?;跈z測到所述退出事件,所述機器一直等待,直到所有當前正在所述物理線程上執(zhí)行的邏輯線程已到達同步點。針對所述邏輯線程中的每一者保存包括退出原因信息的狀態(tài),且在所述物理線程中的一者上以所述ST模式啟動主機的執(zhí)行。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中在所述客體實體中的一個或多個所述線程處進行所述檢測。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中基于所述檢測,檢測到所述退出事件的一個或多個線程中的至少一者用信號通知客體實體中的其它線程退出所述核心。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中檢測到所述退出事件的一個或多個線程中的至少一者通過導致內部中斷在每個其它線程處待決,用信號通知其它邏輯線程。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中由所述多個線程中的每一者設定位以指示已到達所述同步點。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中在所述線程中的每一者到達所述同步點之前,將所述線程中的每一者的所述狀態(tài)的一部分保存到狀態(tài)描述位置。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中在所述物理線程中的一者上以所述ST模式啟動主機的執(zhí)行之前,所述機器一直等待,直到所述線程中的每一者的完整狀態(tài)被保存到狀態(tài)描述位置。
除上文所描述的特征中的一者或多者之外,或作為替代例,其他實施例可包括其中基于在所述物理線程中的一者上以所述ST模式啟動所述主機的執(zhí)行,在所述物理線程中的一者上以所述ST模式執(zhí)行所述主機。
本文中所用的術語,僅僅是為了描述特定的實施例,而不意圖限定本發(fā)明。本文中所用的單數形式的“一”和“該”,旨在也包括復數形式,除非上下文中明確地另行指出。還要知道,“包含”和/或“包括”在本說明書中使用時,說明存在所指出的特征、整體、步驟、操作、單元和/或組件,但是并不排除存在或增加一個或多個其它特征、整體、步驟、操作、單元和/或組件,以及/或者它們的組合。
以下的權利要求中的對應結構、材料、操作以及所有功能性限定的裝置(means)或步驟的等同替換,旨在包括任何用于與在權利要求中具體指出的其它單元相組合地執(zhí)行該功能的結構、材料或操作。所給出的對一個或多個實施例的描述其目的在于示意和描述,并非是窮盡性的,也并非是要將本發(fā)明限定到所表述的形式。對于所屬技術領域的普通技術人員來說,顯然可以作出許多修改和變型而不偏離本發(fā)明的精神和范圍。對實施例的選擇和描述,是為了最好地解釋本發(fā)明的原理和實際應用,使所屬技術領域的普通技術人員能夠明了,本發(fā)明可以有適合所要的特定用途的具有各種改變的各種實施例。
本發(fā)明的各種實施例的描述已為達成說明的目的而呈現,但不意欲為窮盡性的或限于所揭示的實施例。在不脫離所描述實施例的范圍及精神的情況下,許多修改及變化對于本領域技術人員將顯而易見。本文中所使用的術語被選擇以最好地解釋實施例的原理、實際應用或對市場中找到的技術的技術改進,或使其他本領域技術人員能夠理解本文所揭示的實施例。
現參看圖16,在一個實例中,計算機程序產品1600包括(例如)一個或多個存儲介質1602以在其上存儲計算機可讀程序代碼裝置或邏輯1604從而提供及促進本文中所描述的實施例的一個或多個方面,其中所述介質可為有形的及/或非暫時性的。
本發(fā)明可以是系統、方法和/或計算機程序產品。計算機程序產品可以包括計算機可讀存儲介質,其上載有用于使處理器實現本發(fā)明的各個方面的計算機可讀程序指令。
計算機可讀存儲介質可以是可以保持和存儲由指令執(zhí)行設備使用的指令的有形設備。計算機可讀存儲介質例如可以是但不限于電存儲設備、磁存儲設備、光存儲設備、電磁存儲設備、半導體存儲設備或者上述的任意合適的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROM或閃存)、靜態(tài)隨機存取存儲器(SRAM)、便攜式壓縮盤只讀存儲器(CD-ROM)、數字多功能盤(DVD)、記憶棒、軟盤、機械編碼設備、例如其上存儲有指令的打孔卡或凹槽內凸起結構、以及上述的任意合適的組合。這里所使用的計算機可讀存儲介質不被解釋為瞬時信號本身,諸如無線電波或者其他自由傳播的電磁波、通過波導或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸的電信號。
這里所描述的計算機可讀程序指令可以從計算機可讀存儲介質下載到各個計算/處理設備,或者通過網絡、例如因特網、局域網、廣域網和/或無線網下載到外部計算機或外部存儲設備。網絡可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機、網關計算機和/或邊緣服務器。每個計算/處理設備中的網絡適配卡或者網絡接口從網絡接收計算機可讀程序指令,并轉發(fā)該計算機可讀程序指令,以供存儲在各個計算/處理設備中的計算機可讀存儲介質中。
用于執(zhí)行本發(fā)明操作的計算機程序指令可以是匯編指令、指令集架構(ISA)指令、機器指令、機器相關指令、微代碼、固件指令、狀態(tài)設置數據、或者以一種或多種編程語言的任意組合編寫的源代碼或目標代碼,所述編程語言包括面向對象的編程語言—諸如Smalltalk、C++等,以及常規(guī)的過程式編程語言—諸如“C”語言或類似的編程語言。計算機可讀程序指令可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網絡—包括局域網(LAN)或廣域網(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網服務提供商來通過因特網連接)。在一些實施例中,通過利用計算機可讀程序指令的狀態(tài)信息來個性化定制電子電路,例如可編程邏輯電路、現場可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計算機可讀程序指令,從而實現本發(fā)明的各個方面。
這里參照根據本發(fā)明實施例的方法、裝置(系統)和計算機程序產品的流程圖和/或框圖描述了本發(fā)明的各個方面。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機可讀程序指令實現。
這些計算機可讀程序指令可以提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,從而生產出一種機器,使得這些指令在通過計算機或其它可編程數據處理裝置的處理器執(zhí)行時,產生了實現流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。也可以把這些計算機可讀程序指令存儲在計算機可讀存儲介質中,這些指令使得計算機、可編程數據處理裝置和/或其他設備以特定方式工作,從而,存儲有指令的計算機可讀介質則包括一個制造品,其包括實現流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的各個方面的指令。
也可以把計算機可讀程序指令加載到計算機、其它可編程數據處理裝置、或其它設備上,使得在計算機、其它可編程數據處理裝置或其它設備上執(zhí)行一系列操作步驟,以產生計算機實現的過程,從而使得在計算機、其它可編程數據處理裝置、或其它設備上執(zhí)行的指令實現流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作。
附圖中的流程圖和框圖顯示了根據本發(fā)明的多個實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個或多個用于實現規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。
權利要求書(按照條約第19條的修改)
1.一種用于在包括核心的配置中退出多線程客體虛擬機(VM)的計算機實現的方法,所述核心包括被啟用以在單線程(ST)模式及多線程(MT)模式下操作的機器,所述機器包括物理線程,所述方法包括:
以MT模式在所述核心上執(zhí)行客體實體,所述客體實體包括客體VM的全部或一部分,且所述客體實體包括在所述物理線程上執(zhí)行的多個邏輯線程,每個邏輯線程表示包括單個指令流和關聯狀態(tài)的獨立處理器;
在所述機器處檢測退出事件;以及
基于所述檢測:
一直等待,直到所有當前正在所述物理線程上執(zhí)行的邏輯線程已到達同步點,其中當所有所述邏輯線程準備好退出所述核心時到達所述同步點;
保存包括所述邏輯線程中的每一者的退出原因信息的狀態(tài);以及
在所述物理線程中的一者上以所述ST模式啟動主機的執(zhí)行。
2.如權利要求1所述的方法,其中通過所述客體實體中的所述線程中的一者或多者進行所述檢測。
3.如權利要求2所述的方法,其中基于所述檢測,檢測到所述退出事件的一個或多個線程中的至少一者執(zhí)行以下操作中的至少一者:
發(fā)信號通知所述客體實體中的其它線程退出所述核心;以及
導致內部中斷在所述其它線程中的每一者處待決。
4.如權利要求1所述的方法,其中由所述多個線程中的每一者設定位以指示已到達所述同步點。
5.如權利要求1所述的方法,其中在所述線程中的每一者到達所述同步點之前,將所述線程中的每一者的所述狀態(tài)的一部分保存到狀態(tài)描述位置。