两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于在共享處理器分區(qū)環(huán)境中移動線程的方法及裝置的制作方法

文檔序號:6592833閱讀:212來源:國知局
專利名稱:用于在共享處理器分區(qū)環(huán)境中移動線程的方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及用于將線程放置在處理器上的計算機實現(xiàn)的方法、數(shù)據(jù)處理系 統(tǒng)及計算機程序產(chǎn)品。更具體地說,本發(fā)明涉及將線程放置在共享處理器分區(qū)環(huán)境中。
背景技術(shù)
計算機設(shè)計者日益依賴于多個處理器架構(gòu)以利用通過現(xiàn)代技術(shù)而可用的較高 級的硬件整合及小型化。一種流行類型的架構(gòu)為對稱多處理器(SMP)架構(gòu),例如,如在 P0Wer5 計算機系統(tǒng)中實現(xiàn)的架構(gòu)。PoWer5為紐約阿蒙克的國際商業(yè)機器公司的商標。對稱多處理器的共同特征為將計算機資源從池分配給一個或多個邏輯分區(qū)的能 力。計算機資源包括(例如)存儲器、盤存儲裝置及物理處理器。在邏輯分區(qū)之間共享物 理資源的架構(gòu)被稱為Micro-partitioning 。Micro-partitioning為國際商業(yè)機器公司在 美國和/或其它國家地區(qū)的商標。在此類配置中,系統(tǒng)管理程序可將物理處理器的時間片 分配給邏輯分區(qū),且稍后將物理處理器的第二時間片分配給第二邏輯分區(qū)。此類時間共享 配置被稱為虛擬處理器。虛擬處理器為物理處理器的時間分攤部分。通常,以按時間片度 量的單位分攤虛擬處理器??蓪r間片分組成被稱作分派輪(dispatch wheel)的集合。在系統(tǒng)管理程序的虛擬化及可用之前,物理處理器上的操作系統(tǒng)時間分片的軟件 線程在被稱為分時共享的架構(gòu)中操作。通過系統(tǒng)管理程序的可用性,存在物理處理器的兩 個大致獨立的調(diào)度器。第一調(diào)度器或系統(tǒng)管理程序?qū)⑻摂M處理器分派至物理處理器。第二 調(diào)度器或操作系統(tǒng)在執(zhí)行時管理軟件線程。然而,在微分區(qū)環(huán)境中,通過使用處理器或虛擬處理器而執(zhí)行軟件以執(zhí)行處理程 序或軟件線程的指令。典型操作系統(tǒng)實例或分區(qū)可具有在若干物理處理器上同時操作的許 多軟件線程。此外,可使用微分區(qū)而向分區(qū)分配處理器時間的較細粒分配,這導(dǎo)致對于物理 處理器的分攤分時共享級別。此結(jié)果是混用操作系統(tǒng)調(diào)度與系統(tǒng)管理程序分區(qū)調(diào)度的后 果。此細粒度是可能的,因為虛擬處理器對應(yīng)于物理處理器的各種權(quán)利(entitlement)。權(quán) 利為物理處理器針對線程而操作的分派輪的比例。在此類配置中,每個線程在每個線程被 分配的時間片期間執(zhí)行。此類配置可增加每個物理處理器的總體使用。軟件線程可在分派至虛擬處理器的操作系統(tǒng)內(nèi)在執(zhí)行狀態(tài)與睡眠狀態(tài)之間交替。 舉例而言,當所有必要資源皆可用于軟件線程時,該軟件線程執(zhí)行。當資源不受由同一分區(qū) 中執(zhí)行的另一軟件線程所持有的互斥鎖控制時,資源可用。相反地,當同一分區(qū)中執(zhí)行的另 一軟件線程鎖定由軟件線程的代碼所需的資源時,該軟件線程睡眠。睡眠軟件線程為由于 數(shù)據(jù)處理資源被由第二執(zhí)行軟件線程獲取的鎖占據(jù)而不能進展的軟件線程。盡管如此,當 軟件線程正等待某一事件(例如,鎖釋放)且所述事件發(fā)生時,操作系統(tǒng)使軟件線程可執(zhí)行 且向該軟件線程分配邏輯處理器。邏輯處理器是抽象硬件線程的虛擬處理器的延伸。其處 理軟件線程的指令的執(zhí)行。如果多個軟件線程同時操作,則軟件可實現(xiàn)改進的性能。然而,必須小心的是,由 一個線程所使用的資源被保留或被以其他方式防止由第二線程在第一線程的此類有限使用周期期間進行存取及/或修改。排除第二軟件線程進行存取的一種方式是使第一線程建 立與資源關(guān)聯(lián)的鎖。鎖是對應(yīng)于數(shù)據(jù)處理資源(例如,一段存儲器)的位集合。鎖可包括 用于追蹤鎖的細節(jié)的索引號或其它識別符。SMP的設(shè)計者試圖實現(xiàn)的一個目標是使線程等待鎖變得可用的時間最小化。因此, 需要有效地調(diào)度競爭鎖以便減少在睡眠狀態(tài)下所花費的時間的軟件線程。

發(fā)明內(nèi)容
本發(fā)明優(yōu)選地提供一種用于將軟件線程分配給具有多個虛擬處理器且可能在虛 擬處理器內(nèi)具有多個邏輯處理器的數(shù)據(jù)處理系統(tǒng)的公共虛擬處理器的計算機實現(xiàn)的方法 及裝置。初始地,所述數(shù)據(jù)處理系統(tǒng)可將第一軟件線程分配給所述公共虛擬處理器。數(shù)據(jù) 處理系統(tǒng)優(yōu)選地檢測第一軟件線程與第二軟件線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源 關(guān)聯(lián)的鎖的合作。響應(yīng)于檢測到合作,所述數(shù)據(jù)處理系統(tǒng)優(yōu)選地將所述第二軟件線程移動 到所述公共虛擬處理器。根據(jù)第一方面,提供了一種用于將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處 理系統(tǒng)的第一虛擬處理器的計算機實現(xiàn)的方法,所述方法包含將第一軟件線程分配給所 述第一虛擬處理器;檢測第一軟件線程與第二軟件線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資 源關(guān)聯(lián)的鎖的合作;及響應(yīng)于檢測到合作,將所述第二軟件線程移動到所述第一虛擬處理
O根據(jù)第二方面,提供了一種用于將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處 理系統(tǒng)的第一虛擬處理器的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包含用于響應(yīng)于檢測 到合作而將第一線程分配給所述第一虛擬處理器的計算機可用程序代碼;用于檢測第一線 程與第二線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作的計算機可用程序代 碼;及用于響應(yīng)于檢測合作的計算機可用程序代碼而將所述第二線程移動到所述第一虛擬 處理器的計算機可用程序代碼。根據(jù)第三方面,提供了一種數(shù)據(jù)處理系統(tǒng),所述系統(tǒng)包含總線;存儲設(shè)備,其連 接至所述總線,其中計算機可用代碼位于所述存儲設(shè)備中;通信單元,其連接至所述總線; 處理單元,其連接至所述總線,其中所述處理單元可操作以執(zhí)行所述計算機可用代碼以便 將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處理系統(tǒng)的第一虛擬處理器,所述處理單元 還可操作以執(zhí)行所述計算機可用代碼以將第一線程分配給所述第一虛擬處理器;檢測第一 線程與第二線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作;及響應(yīng)于檢測到合 作,將所述第二線程移動到所述第一虛擬處理器。


現(xiàn)在將僅通過示例的方式參考附圖描述本發(fā)明,這些附圖是圖IA為根據(jù)本發(fā)明的一個說明性實施例的數(shù)據(jù)處理系統(tǒng);圖IB及圖IC為根據(jù)本發(fā)明的一個說明性實施例的數(shù)據(jù)處理系統(tǒng)的組件的邏輯 圖;圖2A及圖2C為兩個軟件線程的示意圖;圖2B示出了根據(jù)本發(fā)明的一個實施例的在一時間間隔期間軟件線程到一個或多個虛擬處理器的分配;圖2D、圖2E及圖2F示出了根據(jù)本發(fā)明的一個說明性實施例的用于移動軟件線程 以在邏輯處理器上操作的步驟;圖3示出了根據(jù)本發(fā)明的一個說明性實施例的與每個軟件線程關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu);圖4A示出了根據(jù)本發(fā)明的一個說明性實施例的軟件線程及虛擬處理器的狀態(tài);圖4B示出了根據(jù)本發(fā)明的一個說明性實施例的允許操作系統(tǒng)將軟件線程移動到 虛擬處理器的流程圖;圖5示出了根據(jù)本發(fā)明的一個說明性實施例的響應(yīng)喚醒之后的軟件線程的流程 圖;以及圖6示出了根據(jù)本發(fā)明的一個說明性實施例的可基于異步方式而移動軟件線程 的流程圖。
具體實施例方式圖IA示出了其中可實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的方塊圖。數(shù)據(jù) 處理系統(tǒng)100可為對稱多處理器(SMP)系統(tǒng),其包括連接至系統(tǒng)總線106的多個處理器 101、102、103及104。舉例而言,數(shù)據(jù)處理系統(tǒng)100可以是IBM eServer 且實現(xiàn)為網(wǎng)絡(luò) 內(nèi)的服務(wù)器。IBM和eServer為國際商業(yè)機器公司的商標。備選地,可使用單處理器系統(tǒng)。 還連接至系統(tǒng)總線106的是存儲器控制器/高速緩存108,其向多個本地存儲器160-163提 供接口。I/O總線橋接器110連接至系統(tǒng)總線106且向I/O總線112提供接口??扇缢?繪而集成存儲器控制器/高速緩存108與I/O總線橋接器110。數(shù)據(jù)處理系統(tǒng)100是邏輯分區(qū)(LPAR)數(shù)據(jù)處理系統(tǒng)。因此,數(shù)據(jù)處理系統(tǒng)100可 使多個異構(gòu)操作系統(tǒng)或單個操作系統(tǒng)的多個實例同時運行。這些多個操作系統(tǒng)中的每一個 都可具有執(zhí)行于其內(nèi)的任何數(shù)目的軟件程序。數(shù)據(jù)處理系統(tǒng)100被邏輯地分區(qū),使得可將 不同外圍組件互連輸入/輸出(PCI I/O)適配器120、121、128、129及136、圖形適配器148 及硬盤適配器149分配給不同邏輯分區(qū)。在此情況下,圖形適配器148連接顯示設(shè)備(未 圖標),而硬盤適配器149連接至硬盤150且控制硬盤150。因此,舉例而言,假設(shè)將數(shù)據(jù)處理系統(tǒng)100劃分為三個邏輯分區(qū)PI、P2及P3。將 PCI I/O適配器120、121、128、129及136中的每一個、圖形適配器148、硬盤適配器149、處 理器101-104中的每一個及來自本地存儲器160-163的存儲器分配給三個分區(qū)中的每個分 區(qū)。在這些示例中,本地存儲器160-163可采取雙列直插存儲器模塊(DIMM)的形式。通常 不基于每個DIMM而將DIMM分配給分區(qū)。實際上,分區(qū)將得到全部存儲器的由平臺所看到的 部分。舉例而言,可將處理器102-103、來自本地存儲器160-163的存儲器的某一部分及PCI I/O適配器121及136分配給邏輯分區(qū)P2 ;以及可將處理器104、來自本地存儲器160-163 的存儲器的某一部分、圖形適配器148及硬盤適配器149分配給邏輯分區(qū)P3。將在數(shù)據(jù)處理系統(tǒng)100內(nèi)執(zhí)行的每個操作系統(tǒng)分配給不同邏輯分區(qū)。因此,在數(shù) 據(jù)處理系統(tǒng)100內(nèi)執(zhí)行的每個操作系統(tǒng)僅可存取處于其邏輯分區(qū)內(nèi)的那些I/O單元。舉例 而言,高級交互執(zhí)行(AIX )操作系統(tǒng)的一個實例可在分區(qū)Pl內(nèi)執(zhí)行,AIX 操作系統(tǒng)的第 二實例或映像可在分區(qū)P2內(nèi)執(zhí)行,以及Linux 操作系統(tǒng)可在邏輯分區(qū)P3內(nèi)操作。AIX_ 為國際商業(yè)機器公司的注冊商標。Linux 為Linus Torvalds的注冊商標。
7
連接至I/O總線112的外圍組件互連(PCI)主機橋接器114向PCI本地總線115 提供接口。多個PCI輸入/輸出適配器120-121經(jīng)由PCI至PCI橋接器116、PCI總線118、 PCI總線119、I/O插槽170及I/O插槽171而連接至PCI總線115。PCI至PCI橋接器116 向PCI總線118及PCI總線119提供接口。分別將PCI I/O適配器120及121放置在I/O 插槽170及171中。典型PCI總線實現(xiàn)支持介于四個與八個之間的I/O適配器,亦即,用于 附加連接器的擴展插槽。每個PCI I/O適配器120-121在數(shù)據(jù)處理系統(tǒng)100與輸入/輸出 設(shè)備(例如,是數(shù)據(jù)處理系統(tǒng)100的客戶端的其它網(wǎng)絡(luò)計算機)之間提供接口。附加PCI主機橋接器122向附加PCI總線123提供接口。PCI總線123連接至多 個PCI I/O適配器128-129。PCI I/O適配器128-129經(jīng)由PCI至PCI橋接器124、PCI總 線126、PCI總線127、I/O插槽172及I/O插槽173而連接至PCI總線123。PCI至PCI橋 接器124向PCI總線126及PCI總線127提供接口。分別將PCI I/O適配器128及129放 置在I/O插槽172及173中。以此方式,可經(jīng)由PCI I/O適配器128-129中的每一個而支 持附加I/O設(shè)備(例如,調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器)。因此,數(shù)據(jù)處理系統(tǒng)100允許連接至 多個網(wǎng)絡(luò)計算機。存儲器映射的圖形適配器148插入至I/O插槽174中且經(jīng)由PCI總線144、PCI至 PCI橋接器142、PCI總線141及PCI主機橋接器140而連接至I/O總線112。可將硬盤適 配器149放置在I/O插槽175中,I/O插槽175連接至PCI總線145。此總線又連接至PCI 至PCI橋接器142,PCI至PCI橋接器142通過PCI總線141而連接至PCI主機橋接器140。PCI主機橋接器130向PCI總線131提供接口以連接至I/O總線112。PCI I/O適 配器136連接至I/O插槽176,I/O插槽176通過PCI總線133而連接至PCI至PCI橋接器 132。PCI至PCI橋接器132連接至PCI總線131。此PCI總線還將PCI主機橋接器130連 接至服務(wù)處理器郵箱接口及ISA總線存取透通邏輯194及PCI至PCI橋接器132。服務(wù)處 理器郵箱接口及ISA總線存取透通邏輯194轉(zhuǎn)發(fā)前往PCI/ISA橋接器193的PCI存取。還 被稱為非易失性RAM的NVRAM存儲器192連接至ISA總線196。服務(wù)處理器135經(jīng)由其本 地PCI總線195而連接至服務(wù)處理器郵箱接口及ISA總線存取透通邏輯194。服務(wù)處理器 135還經(jīng)由多個JTAG/I2C總線134而連接至處理器101-104。JTAG/I2C總線134是JTAG/ 掃描總線(如由電氣電子工程師協(xié)會標準1149. 1所界定)與Philips I2C總線的組合。然 而,備選地,JTAG/I2C總線134可僅由Philips I2C總線或僅由JTAG/掃描總線替換。處理 器101、102、103及104的所有SP-ATTN信號一起連接至服務(wù)處理器135的中斷輸入信號。 服務(wù)處理器135具有其自己的本地存儲器191且能夠存取硬件OP面板190。當數(shù)據(jù)處理系統(tǒng)100初始地加電時,服務(wù)處理器135使用JTAG/I2C總線134詢問 系統(tǒng)處理器101-104、存儲器控制器/高速緩存108及I/O橋接器110。在此步驟完成時, 服務(wù)處理器135具有數(shù)據(jù)處理系統(tǒng)100的詳細目錄及拓撲理解。服務(wù)處理器135還對通過 詢問處理器101-104、存儲器控制器/高速緩存108及I/O橋接器110而發(fā)現(xiàn)的所有元件執(zhí) 行內(nèi)建自測試(BIST)、基本保證測試(BAT)及存儲器測試。由服務(wù)處理器135收集和報告 在BIST、BAT及存儲器測試期間所檢測的故障的任何錯誤信息。如果在取出在BIST、BAT及存儲器測試期間被發(fā)現(xiàn)為有故障的元件之后系統(tǒng)資源 的有意義或有效配置仍為可能的,則允許數(shù)據(jù)處理系統(tǒng)100繼續(xù)將可執(zhí)行代碼加載至本地 存儲器160-163中。服務(wù)處理器135接著釋放處理器101-104以用于執(zhí)行加載至本地存儲器160-163中的代碼。當處理器101-104正在執(zhí)行來自數(shù)據(jù)處理系統(tǒng)100內(nèi)的相應(yīng)操作系 統(tǒng)的代碼時,服務(wù)處理器135進入監(jiān)視及報告錯誤的模式。服務(wù)處理器135所監(jiān)視的項目 類型包括(例如)冷卻扇速度及操作、熱傳感器、電源調(diào)節(jié)器,及由處理器101-104、本地存 儲器160-163及I/O橋接器110所報告的可恢復(fù)及不可恢復(fù)錯誤。服務(wù)處理器135保存及報告與數(shù)據(jù)處理系統(tǒng)100中的所有受監(jiān)視項目有關(guān)的錯誤 信息。服務(wù)處理器135還基于錯誤類型及所定義閾值而采取行動。舉例而言,服務(wù)處理器 135可在處理器的高速緩沖存儲器上對過多可恢復(fù)錯誤采取注釋,且判定此條件預(yù)測硬故 障。基于此判定,服務(wù)處理器135可標記該處理器或用于在當前執(zhí)行會話及未來初始程序 加載(IPL)期間解除配置的其它資源。IPL有時還被稱作“引導(dǎo)”或“自舉” (bootstrap) 0可使用各種市售計算機系統(tǒng)實現(xiàn)數(shù)據(jù)處理系統(tǒng)100。舉例而言,可使用可購自國際 商業(yè)機器公司的IBM eServer iSeries Model 840系統(tǒng)實現(xiàn)數(shù)據(jù)處理系統(tǒng)100。此類系 統(tǒng)可支持邏輯分區(qū),其中0S/400 操作系統(tǒng)可存在于一分區(qū)內(nèi)。iSeries 及0S/400 為國 際商業(yè)機器公司的注冊商標。本領(lǐng)域技術(shù)人員應(yīng)了解,圖IA所描繪的硬件可變化。舉例而言,除了所描繪的硬 件之外或代替所描繪的硬件,還可使用諸如光驅(qū)及其類似物的其它外圍設(shè)備。所描繪的示 例并非暗示關(guān)于本發(fā)明的實施例的架構(gòu)限制。圖IB示出了根據(jù)本發(fā)明的一個實施例的在同時多處理系統(tǒng)的某一時刻分配的邏 輯配置。架構(gòu)的每個層支持緊接于上方的層。微處理器176可向核心層175中的一個或多 個核心提供支持電路。核心層175可包含多個處理器,例如,圖IA的處理器101-104。核心 層175支持多個硬件線程,亦即,每個核心向多個硬件線程提供支持。硬件線程層174支持 虛擬處理器層173。虛擬處理器層173支持邏輯處理器層172。邏輯處理器層172支持軟 件線程層171。圖IC示出了根據(jù)本發(fā)明的一個實施例的如圖IB所說明的邏輯配置的示例。系統(tǒng) 管理程序177將虛擬處理器0 178分派至核心1,這導(dǎo)致邏輯處理器0 179及邏輯處理器 1 180變得活動。操作系統(tǒng)181將每個軟件線程分派至邏輯處理器。舉例而言,操作系統(tǒng) 181將軟件線程0 183分派至邏輯處理器0 179,且將軟件線程1 185分派至邏輯處理器1 180。時常地,軟件線程到達其受阻止或被預(yù)占的點??蓪⑹茏柚骨覝蕚鋱?zhí)行的軟件線程隊 列存儲在準備執(zhí)行隊列189中。操作系統(tǒng)181可自準備執(zhí)行隊列189中的軟件線程之間選 擇以分派至邏輯處理器。初始地,在將軟件線程分配給邏輯處理器或甚至分配給虛擬處理 器中可能不存在偏差。本發(fā)明的說明性實施例可施加一偏差,以便將在鎖上合作的軟件線 程分派至自身被分派至公共虛擬處理器的邏輯處理器。對比而言,現(xiàn)有技術(shù)的數(shù)據(jù)處理系 統(tǒng)分派軟件線程,而不考慮若干虛擬處理器之間的哪一個支持每個合作軟件線程。附加虛擬處理器(例如,虛擬處理器1 188)可在附加核心(未圖示)上或甚至在 核心1上操作,但在與虛擬處理器0 178不同的時間操作??蓪⑦壿嬏幚砥?未圖標)分 派至附加虛擬處理器。還可將軟件線程(未圖標)動態(tài)地分派至這些邏輯處理器。操作系 統(tǒng)181可在這些其它邏輯處理器之間使用軟件線程。初始地可將在鎖上與軟件線程0 183 合作的軟件線程分派至自身被分派至虛擬處理器1 188的邏輯處理器。操作系統(tǒng)可檢測針 對鎖在軟件線程之間的合作,例如,當操作系統(tǒng)檢測到每個軟件線程試圖獲取鎖時。圖4B 至圖6所描述的計算機實現(xiàn)的方法可重新分配要與軟件線程0 183 —起分派的此類軟件線
圖2A示出了根據(jù)本發(fā)明的一個說明性實施例的在虛擬處理器上所分派的軟件線 程??稍谌粘U{(diào)度的時間片上將軟件線程分配給不同的處理器。軟件線程是處理內(nèi)的執(zhí)行 單位。每個處理器具有一個或多個軟件線程。因此,可將軟件線程0 200分配給虛擬處理 器2上的邏輯處理器0。可將軟件線程1 220分配給虛擬處理器0上的邏輯處理器2。初 始地,將軟件線程0200及軟件線程1 220在其相應(yīng)虛擬處理器上進行分派。在包括權(quán)利周 期247及權(quán)利周期249的兩個時間片期間分派軟件線程0 200。在第一時刻211,軟件線程 1 220獲取鎖210。由于虛擬處理器可在任何時間由系統(tǒng)管理程序預(yù)占,所以圖2A說明如 在時間231所預(yù)占的軟件線程1的虛擬處理器。結(jié)果,軟件線程0 200無法前向進展,直至 在時間232重新分派軟件線程1的虛擬處理器且軟件線程1 220釋放鎖。在第二時刻213, 軟件線程0 200試圖獲取鎖210且被阻止。軟件線程0 200在睡眠周期205期間進入睡眠。 軟件線程0 200可將剩余時間讓與至另一軟件線程,然而,軟件線程0 200將不能夠進行進 一步進展,直至軟件線程1 220經(jīng)由虛擬處理器0而釋放軟件線程2 200或可能稍后如果 具有較高優(yōu)先級的其它線程也針對所述線程進行競爭。在某些情況下,軟件線程0 200可 能不能讓與,例如,對于在禁用中斷情況下操作的設(shè)備驅(qū)動器鎖的情況。在該情況下,可阻 止邏輯處理器完成任何有用的工作,直至軟件線程1 220釋放鎖。圖2B示出了在一時間間隔期間軟件線程至其相應(yīng)虛擬處理器的分配。在對應(yīng)于 圖2A的時間230的時間示出所述分配。將軟件線程0 200分派至虛擬處理器2 241。將軟 件線程1 220分派至虛擬處理器0 243。在共享存儲器245中的鎖210是軟件線程1 220 已獲取但軟件線程0 200被阻止的鎖。軟件線程0 200至一個虛擬處理器的分配及軟件線 程1 220至第二虛擬處理器的分配有助于軟件線程0 200與軟件線程1 220的同時操作。 結(jié)果,圖2A的睡眠周期可使無軟件線程的被分配虛擬處理器執(zhí)行與其關(guān)聯(lián)的指令。對比而言,圖2C說明根據(jù)本發(fā)明的一個說明性實施例的軟件線程至處理器的分 配。軟件線程0 200及軟件線程1 220至公共虛擬處理器的分配有助于各軟件線程被分 配給具有用于支持的公共虛擬處理器的邏輯處理器。因此,軟件線程0 200具有睡眠周期 255,其在分派軟件線程0 200的時間片期間較好地利用公共虛擬處理器。圖2C描繪了一系列事件。在線程執(zhí)行時間250,軟件線程1 220在分配給虛擬處 理器0的邏輯處理器上執(zhí)行。在鎖獲取時間251,軟件線程1 220獲取鎖。在阻止時間252, 軟件線程0 200試圖獲得鎖且被阻止。隨后,軟件線程1 220在釋放時間253釋放鎖。接 下來,軟件線程0 200獲取鎖,由此結(jié)束睡眠周期255。在時間片254的末尾,可將軟件線程 0 200放置在等待隊列中。相應(yīng)地,圖2D至圖2F說明根據(jù)本發(fā)明的一個說明性實施例在圖2C的時間期間軟 件線程1 220至虛擬處理器的分配。因此,對于可競爭單個鎖的軟件線程,可通過將軟件線 程移動到具有第二軟件線程的公共虛擬處理器而獲得某些效率。如圖2C所示,根據(jù)本發(fā)明 的一個說明性實施例,可將針對鎖合作的兩個軟件線程移動到公共虛擬處理器。圖2D示出根據(jù)本發(fā)明的一個說明性實施例的被分配給邏輯處理器的軟件線程。 軟件線程0 260處于被稱為在準備執(zhí)行隊列261內(nèi)準備執(zhí)行的睡眠狀態(tài)。當分派軟件線程 0 260時,其在邏輯處理器0 263上執(zhí)行。虛擬處理器0 265支持邏輯處理器0 263以及邏 輯處理器1 267兩者。對比而言,軟件線程1 271在邏輯處理器3 273上執(zhí)行且由虛擬處理器1 275支持。基于圖2D,圖2E示出在后續(xù)時間,軟件線程1 271進入等待隊列280。軟件線程 可在其被預(yù)占或在變得被阻止之后進入等待隊列。當在等待隊列上時,軟件線程處于其不 適合于在虛擬處理器上被分派的狀態(tài)。未被分派的虛擬處理器的狀態(tài)與未被分派的軟件線 程的狀態(tài)不同,以下參看圖4而對其進行進一步解釋。圖2F示出在圖2D之后的時間進行準備執(zhí)行軟件組件288的操作。進行準備執(zhí) 行軟件組件288可以是由操作系統(tǒng)執(zhí)行的指令。舉例而言,指令可針對被稱作“threacL wakeup_lock"的例程。該例程選擇向其分配在等待隊列的頭部的軟件線程的邏輯處理器。 圖2F示出軟件線程1 271至邏輯處理器1 267的分配。進行準備執(zhí)行288可參看優(yōu)化標 志以檢測關(guān)聯(lián)軟件線程是否要被分配邏輯處理器,而不參考軟件線程先前已被分配給其的 任一先前處理器。因此,優(yōu)化標志可基于軟件線程可具有的任一種類的處理器親和性而抑 制分配軟件線程。圖3示出根據(jù)本發(fā)明的一個說明性實施例的與每個軟件線程關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)。每 個軟件線程與一優(yōu)化標志相關(guān)聯(lián)。優(yōu)化標志是被設(shè)置以指示可針對鎖的合作測試軟件線程 的一個或多個位。然后,根據(jù)本發(fā)明的一個說明性實施例實現(xiàn)的操作系統(tǒng)可將軟件線程分 配給具有第二軟件線程的公共虛擬處理器。舉例而言,軟件線程1 301使用優(yōu)化標志303 以向操作系統(tǒng)用信號表示軟件線程1 301的關(guān)于針對合作的測試及到虛擬處理器的伴隨 共同分配的狀態(tài)。示出了附加線程及優(yōu)化標志,例如,軟件線程2 311及優(yōu)化標志313,以及 軟件線程η 321及優(yōu)化標志323。圖4Α示出根據(jù)本發(fā)明的一個說明性實施例的軟件線程及虛擬處理器的狀態(tài)。線 程狀態(tài)可在已分派401與閑置/睡眠402之間交替。當軟件線程檢測到諸如鎖競爭或同步 I/O之類的阻止事件時,軟件線程可轉(zhuǎn)變至閑置/睡眠狀態(tài)。睡眠周期為軟件線程處于睡眠 或閑置狀態(tài)的時間。類似地,當針對軟件線程而清除阻止事件時,軟件線程可轉(zhuǎn)變至已分派 401。虛擬處理器可在已分派405與未分派407的狀態(tài)之間移動??砂l(fā)生中斷,在此期 間,操作系統(tǒng)的中斷處理機將軟件線程分配給虛擬處理器。當軟件線程存取鎖定的資源時, 軟件線程將阻止。此阻止可導(dǎo)致讓與至系統(tǒng)管理程序的操作系統(tǒng)未分派407虛擬處理器。 因此,當軟件線程閑置(例如,閑置402)時,軟件線程被分配到其或軟件線程處于“其上”的 虛擬處理器可變?yōu)槲捶峙?07。圖4Β示出根據(jù)本發(fā)明的一個說明性實施例的允許操作系統(tǒng)將軟件線程移動到虛 擬處理器的流程圖。操作系統(tǒng)可與系統(tǒng)管理程序協(xié)作以執(zhí)行圖4Β的步驟。初始地,操作系 統(tǒng)代表軟件線程執(zhí)行鎖代碼。鎖操作檢測到鎖當前不可用,這是由于其正被另一軟件線程 持有(步驟411)。此外,軟件線程(例如,圖2D的軟件線程0 260)可被標識為在由當前 未分派的虛擬處理器所支持的邏輯處理器上(步驟412)。操作系統(tǒng)阻止軟件線程(軟件 線程1)試圖獲取鎖。然而,操作系統(tǒng)可確定使阻止線程(軟件線程1)指向與鎖持有線程 (軟件線程0)相同的虛擬處理器上的邏輯處理器的需要性(步驟413)。此重新確定目標 可通過判定該虛擬處理器(虛擬處理器0)在CPU容量方面的相對忙碌性來進行。如果該 虛擬處理器具有可用容量,則將使阻止軟件線程(軟件線程1)成為在該虛擬處理器上的邏 輯處理器(邏輯處理器1)上的喚醒目標。操作系統(tǒng)判定忙碌級別是否低于忙碌閾值(步驟415)。在步驟411、412及415處的否定判定可使操作系統(tǒng)終止處理。源虛擬處理器具有低于忙碌閾值的忙碌級別的判定導(dǎo)致操作系統(tǒng)將目標軟件線 程移動到源虛處理器(步驟417)。當處理或系統(tǒng)調(diào)用指示軟件線程要被分派至邏輯處理器 時,使軟件線程成為喚醒目標。處理此后終止。關(guān)于步驟415的否定判定也使處理終止。移動目標軟件線程可能需要使操作系統(tǒng)移動軟件線程。作為一個示例,圖2E及圖 2F示出處于軟件線程已在虛擬處理器1271上執(zhí)行之后的狀態(tài)的軟件線程1。圖2F示出在 移動到虛擬處理器0 265之后的軟件線程。圖5示出根據(jù)本發(fā)明的一個說明性實施例的響應(yīng)在喚醒之后的軟件線程的流程 圖。初始地,軟件線程0在所分派的虛擬處理器上喚醒(步驟501)。接下來,軟件線程0檢 測到軟件線程1將其喚醒(步驟503)。軟件線程可與操作系統(tǒng)及/或系統(tǒng)管理程序合作。 接下來,軟件線程0基于虛擬處理器容量而判定每個線程的負載是否兼容(步驟505)。支 持虛擬處理器是被分配給軟件線程0及軟件線程1的虛擬處理器。如果(例如)在小于所 消耗的兼容極限的速率下消耗目標虛擬處理器,則支持虛擬處理器可兼容。兼容極限可為 (例如)80%。目標虛擬處理器是被分配給喚醒另一線程的軟件線程的虛擬處理器。在此 情況下,喚醒另一線程的軟件線程是軟件線程1。消耗是所占據(jù)的時鐘循環(huán)與可用的凈時鐘 循環(huán)相比的相對數(shù)目。此外,如果每個軟件線程具有同一歸屬處理器且兩個軟件線程在該 歸屬處理器上同時執(zhí)行,則軟件線程0及軟件線程1可被進一步優(yōu)化。歸屬處理器是這樣 的虛擬處理器在某一間隔期間,軟件線程對其的使用多于任何其它虛擬處理器。兼容性由操作系統(tǒng)機制調(diào)節(jié)以避免使虛擬處理器過載。因此,在某一虛擬處理器 在所有虛擬處理器之間不會變得不成比例地未被分派的程度下執(zhí)行將軟件線程放置在公 共歸屬處理器上。即,在將兩個或更多軟件線程放置到公共處理器時,CPU消耗是一個因素。 當軟件線程0與軟件線程1被判定為不兼容時,發(fā)生對步驟505的否定結(jié)果。在此情況下, 處理終止。然而,如果軟件線程0與軟件線程1兼容,則軟件線程0請求在執(zhí)行軟件線程1的 虛擬處理器上的放置(步驟507)。可對操作系統(tǒng)且隨后對系統(tǒng)管理程序做出請求。接下 來,操作系統(tǒng)將軟件線程0移動到具有軟件線程1的公共虛擬處理器上(步驟509)。處理 此后終止。圖6示出根據(jù)本發(fā)明的一個說明性實施例的可基于異步方式而移動軟件線程的 流程圖。初始地,操作系統(tǒng)檢查當前鎖(步驟603)。接下來,操作系統(tǒng)檢查當前軟件線程, 假設(shè)軟件線程具有啟用的優(yōu)化標志(步驟605)。接下來,操作系統(tǒng)判定等待鎖的軟件線程 未被分派(步驟607)。(可以判定已有多長時間未分派該線程并利用此信息。例如,如果 已在特定時間量內(nèi)未分派該線程,則其可以是較好的移動候選者。)接下來,操作系統(tǒng)計算與鎖及虛擬處理器的潛在CPU容量關(guān)聯(lián)的得分(步驟608)。 操作系統(tǒng)可將所述得分與得分閾值相比較(步驟609)。得分是要放置在虛擬處理器上的 軟件線程的合適性的測量。得分可為用于處理軟件線程的虛擬處理器的瞬時容測量量。得 分閾值是一個比較值。操作系統(tǒng)使用得分閾值判定所述得分是否足以將軟件線程移動到虛 擬處理器。得分可以是關(guān)于虛擬處理器容量的極限。舉例而言,如果虛擬處理器已被消耗 80 %,則將更多軟件線程移動到其上可能起反作用。如果得分高于得分閾值,則操作系統(tǒng)將 軟件線程移動到目標虛擬處理器(步驟611)。接下來,系統(tǒng)管理程序判定是否存在其他未
12經(jīng)檢查的軟件線程(步驟613)。如果存在其他未經(jīng)檢查的軟件線程,則系統(tǒng)管理程序在步 驟605處繼續(xù)。否則,系統(tǒng)管理程序判定附加鎖是否未經(jīng)檢查(步驟615)。如果是,則系統(tǒng) 管理程序遞增至下一鎖(步驟617)。系統(tǒng)管理程序返回步驟605并且處理繼續(xù)。如果步驟 615的結(jié)果為否定的,則處理終止。說明性實施例允許將在鎖上合作的軟件線程放置在公共虛擬處理器上。操作系統(tǒng) 可檢測合作軟件線程,例如,通過執(zhí)行圖4的步驟411及412、圖5的步驟503或圖6的步驟 608及609。此配置可改進處理器利用,而不會通過上下文切換或CPU時間至自旋鎖的無效 分配而對數(shù)據(jù)處理系統(tǒng)造成過多負擔(dān)。應(yīng)了解,雖然提供了將軟件線程移動到具有另一軟 件線程的公共虛擬處理器的示例,但實際上,本發(fā)明的實施例也可在虛擬處理器上一起移 動具有三個或更多軟件線程的集合。本發(fā)明可以采取完全硬件實施例、完全軟件實施例或包含硬件和軟件元素兩者的 實施例的形式。在一個優(yōu)選實施例中,本發(fā)明以軟件實現(xiàn),所述軟件包括但不限于固件、駐 留軟件、微代碼等。 此外,本發(fā)明可以采取可從計算機可用或計算機可讀介質(zhì)訪問的計算機程序產(chǎn)品 的形式,所述計算機可用或計算機可讀介質(zhì)提供了可以被計算機或任何指令執(zhí)行系統(tǒng)使用 或與計算機或任何指令執(zhí)行系統(tǒng)結(jié)合的程序代碼。出于此描述的目的,計算機可用或計算 機可讀介質(zhì)可以是任何能夠包含、存儲、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使 用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的有形裝置。所述介質(zhì)可以是電、磁、光、電磁、紅外線或半導(dǎo)體系統(tǒng)(或裝置或設(shè)備)或傳播 介質(zhì)。計算機可讀介質(zhì)的實例包括半導(dǎo)體或固態(tài)存儲器、磁帶、可移動計算機盤、隨機存取 存儲器(RAM)、只讀存儲器(ROM)、硬磁盤和光盤。光盤的當前實例包括光盤-只讀存儲器 (CD-ROM)、光盤-讀 / 寫(CR-R/W)和 DVD。適合于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個直接或通過系 統(tǒng)總線間接連接到存儲器元件的處理器。所述存儲器元件可以包括在程序代碼的實際執(zhí)行 期間采用的本地存儲器、大容量存儲裝置以及提供至少某些程序代碼的臨時存儲以減少必 須在執(zhí)行期間從大容量存儲裝置檢索代碼的次數(shù)的高速緩沖存儲器。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點設(shè)備等)可以直接或通 過中間I/O控制器與系統(tǒng)相連。網(wǎng)絡(luò)適配器也可以被連接到系統(tǒng)以使所述數(shù)據(jù)處理系統(tǒng)能夠通過中間專用或公 共網(wǎng)絡(luò)變得與其他數(shù)據(jù)處理系統(tǒng)或遠程打印機或存儲設(shè)備相連。調(diào)制解調(diào)器、電纜調(diào)制解 調(diào)器和以太網(wǎng)卡只是當前可用的網(wǎng)絡(luò)適配器類型中的少數(shù)幾種。出于示例和說明目的給出了對本發(fā)明的描述,并且所述描述并非旨在是窮舉的或 是將本發(fā)明限于所公開的形式。對于本領(lǐng)域的技術(shù)人員來說,許多修改和變化都將是顯而 易見的。實施例的選擇和描述是為了最佳地解釋本發(fā)明的原理、實際應(yīng)用,并且當適合于所 構(gòu)想的特定使用時,使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實 施例。
權(quán)利要求
一種用于將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處理系統(tǒng)的第一虛擬處理器的計算機實現(xiàn)的方法,所述方法包含將第一軟件線程分配給所述第一虛擬處理器;檢測第一軟件線程與第二軟件線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作;及響應(yīng)于檢測到合作,將所述第二軟件線程移動到所述第一虛擬處理器。
2.如權(quán)利要求1所述的計算機實現(xiàn)的方法,其中檢測合作的步驟包含 檢測到所述第一軟件線程成為在未分派的第二虛擬處理器上喚醒的目標。
3.如權(quán)利要求1或2所述的計算機實現(xiàn)的方法,其中檢測合作的步驟包含 檢測到所述第二軟件線程使所述第一軟件線程成為喚醒目標。
4.如權(quán)利要求3所述的計算機實現(xiàn)的方法,還包含判定所述第一軟件線程上的負載以及所述第二軟件線程上的負載是否高于忙碌閾值;且其中分配步驟基于所述第一軟件線程上的所述負載以及所述第二軟件線程上的所述 負載。
5.如權(quán)利要求4所述的計算機實現(xiàn)的方法,其中檢測合作的步驟包含判定目標虛擬處理器是否具有低于兼容極限的消耗,其中所述目標虛擬處理器是分配 給所述第二軟件線程的所述虛擬處理器。
6.如權(quán)利要求4或5所述的計算機實現(xiàn)的方法,還包含判定得分大于得分閾值,其中將所述第二軟件線程分配給所述第一虛擬處理器的步驟 是響應(yīng)于所述得分大于所述得分閾值的判定。
7.如任一先前權(quán)利要求所述的計算機實現(xiàn)的方法,還包含判定針對所述第一軟件線程設(shè)置了第一優(yōu)化標志且針對所述第二軟件線程設(shè)置了第 二優(yōu)化標志;及執(zhí)行檢測合作的步驟,且分配步驟基于設(shè)置了所述第一優(yōu)化標志并且設(shè)置了所述第二 優(yōu)化標志的判定。
8.一種用于將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處理系統(tǒng)的第一虛擬處理 器的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包含用于響應(yīng)于檢測到合作而將第一線程分配給所述第一虛擬處理器的計算機可用程序 代碼;用于檢測第一線程與第二線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作 的計算機可用程序代碼;及用于響應(yīng)于檢測合作的計算機可用程序代碼而將所述第二線程移動到所述第一虛擬 處理器的計算機可用程序代碼。
9.如權(quán)利要求8所述的計算機程序產(chǎn)品,其中用于檢測合作的計算機可用程序代碼包含用于檢測到所述第一線程成為在未分派的第二虛擬處理器上喚醒的目標的計算機可 用程序代碼。
10.如權(quán)利要求8或9所述的計算機程序產(chǎn)品,其中用于檢測合作的計算機可用程序代碼包含用于檢測到所述第二線程使所述第一線程成為喚醒目標的計算機可用程序代碼。
11.如權(quán)利要求10所述的計算機程序產(chǎn)品,還包含用于判定所述第一線程上的負載以及所述第二線程上的負載是否高于忙碌閾值的計 算機可用程序代碼;且其中用于分配的計算機可用程序代碼基于所述第一線程上的所述負載以及所述第二 線程上的所述負載而操作。
12.如權(quán)利要求11所述的計算機程序產(chǎn)品,其中檢測合作的計算機可用程序代碼包含用于判定目標虛擬處理器是否具有低于兼容極限的消耗的計算機可用程序代碼,其中 所述目標虛擬處理器是分配給所述第二線程的所述虛擬處理器。
13.如權(quán)利要求11或12所述的計算機程序產(chǎn)品,還包含用于判定得分大于得分閾值的計算機可用程序代碼,其中用于將所述第二線程分配給 所述第一虛擬處理器的計算機可用程序代碼是響應(yīng)于所述得分大于所述得分閾值的判定。
14.如權(quán)利要求8至13中的任一權(quán)利要求所述的計算機程序產(chǎn)品,還包含用于判定針對所述第一線程設(shè)置了第一優(yōu)化標志且針對所述第二線程設(shè)置了第二優(yōu) 化標志的計算機可用程序代碼;及用于執(zhí)行用于檢測的計算機可用程序代碼的計算機可用程序代碼,且基于設(shè)置了所述 第一優(yōu)化標志并設(shè)置了所述第二優(yōu)化標志的判定而執(zhí)行用于分配的計算機可用程序代碼。
15.一種數(shù)據(jù)處理系統(tǒng),所述系統(tǒng)包含總線;存儲設(shè)備,其連接至所述總線,其中計算機可用代碼位于所述存儲設(shè)備中;通信單元,其連接至所述總線;處理單元,其連接至所述總線,其中所述處理單元可操作以執(zhí)行所述計算機可用代碼 以便將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處理系統(tǒng)的第一虛擬處理器,所述處理 單元還可操作以執(zhí)行所述計算機可用代碼以將第一線程分配給所述第一虛擬處理器;檢測 第一線程與第二線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作;及響應(yīng)于檢測 到合作,將所述第二線程移動到所述第一虛擬處理器。
16.如權(quán)利要求15所述的數(shù)據(jù)處理系統(tǒng),其中在執(zhí)行所述計算機可用代碼以檢測合作 中,所述處理單元執(zhí)行計算機可用代碼以檢測到所述第一線程成為在未分派的第二虛擬處 理器上喚醒的目標。
17.如權(quán)利要求15或16所述的數(shù)據(jù)處理系統(tǒng),其中在執(zhí)行所述計算機可用代碼以檢測 合作中,所述處理單元執(zhí)行計算機可用代碼以檢測到所述第二線程使所述第一線程成為喚 醒目標。
18.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中所述處理單元還可操作以執(zhí)行計算機可 用代碼以判定所述第一線程上的負載以及所述第二線程上的負載是否高于忙碌閾值;且其中基于所述第一線程上的所述負載以及所述第二線程上的所述負載執(zhí)行用于分配 的計算機可用代碼。
19.如權(quán)利要求18所述的數(shù)據(jù)處理系統(tǒng),其中在執(zhí)行所述計算機可用代碼以檢測合作中,所述處理單元執(zhí)行計算機可用代碼以判定目標虛擬處理器是否具有低于所述虛擬處理 器分配給所述第二線程的兼容極限的消耗。
20.如權(quán)利要求18或19所述的數(shù)據(jù)處理系統(tǒng),其中所述處理單元還可操作以執(zhí)行計算 機可用代碼以判定得分大于得分閾值,其中執(zhí)行用于將所述第二線程分配給所述第一虛擬 處理器的計算機可用代碼是響應(yīng)于所述得分大于所述得分閾值的判定。
21.如權(quán)利要求15至20中的任一權(quán)利要求所述的數(shù)據(jù)處理系統(tǒng),其中所述處理單元還 可操作以執(zhí)行計算機可用代碼以便執(zhí)行以下步驟判定針對所述第一軟件線程設(shè)置了第一優(yōu)化標志且針對所述第二軟件線程設(shè)置了第 二優(yōu)化標志;及執(zhí)行檢測合作的步驟,且分配步驟基于設(shè)置了所述第一優(yōu)化標志并設(shè)置了所述第二優(yōu) 化標志的判定。
22.—種計算機程序,包括當所述程序在計算機上運行時,適于執(zhí)行如權(quán)利要求1至7 中的任一權(quán)利要求所述的方法的程序代碼裝置。
全文摘要
本發(fā)明提供一種用于將軟件線程分配給具有多個虛擬處理器的數(shù)據(jù)處理系統(tǒng)的公共虛擬處理器的計算機實現(xiàn)的方法及裝置。數(shù)據(jù)處理系統(tǒng)檢測第一線程與第二線程之間關(guān)于與所述數(shù)據(jù)處理系統(tǒng)的資源關(guān)聯(lián)的鎖的合作。響應(yīng)于檢測到合作,所述數(shù)據(jù)處理系統(tǒng)將所述第一線程分配給所述公共虛擬處理器。所述數(shù)據(jù)處理系統(tǒng)將所述第二線程移動到所述公共虛擬處理器,由此將所述第一線程及所述第二線程所經(jīng)歷的與所述鎖關(guān)聯(lián)的睡眠時間減少到低于在檢測合作步驟之前所經(jīng)歷的睡眠時間。
文檔編號G06F9/50GK101946235SQ200980105214
公開日2011年1月12日 申請日期2009年2月24日 優(yōu)先權(quán)日2008年2月27日
發(fā)明者B·R·奧爾斯?jié)伤够? D·米歇爾, L·B·布倫納 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
海丰县| 呈贡县| 华容县| 恭城| 阿勒泰市| 丹东市| 道孚县| 武威市| 洛隆县| 友谊县| 碌曲县| 扎赉特旗| 宝应县| 丰台区| 于田县| 敦化市| 布尔津县| 镇巴县| 宁德市| 大安市| 香河县| 建始县| 陆川县| 玉林市| 利辛县| 林芝县| 仙居县| 临潭县| 长沙市| 宣武区| 庄浪县| 济阳县| 六盘水市| 河曲县| 定州市| 普格县| 资阳市| 原平市| 万全县| 广宗县| 柳河县|