專利名稱:一種基于鎖的線程管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計算機技術(shù)領(lǐng)域,尤其涉及一種基于鎖的線程管理方法及裝置。
背景技術(shù):
隨著計算機技術(shù)的發(fā)展,多核或眾核架構(gòu)已經(jīng)成為當(dāng)前計算環(huán)境的主流趨勢。但是,計算機的性能并不是隨著計算機系統(tǒng)核數(shù)目的增長而呈現(xiàn)線性增長,甚至有時出現(xiàn)隨著核數(shù)目的增長,性能卻隨著下降的現(xiàn)象。這種現(xiàn)象稱之為核擴(kuò)展性問題。其中,鎖競爭是限制系統(tǒng)在多核架構(gòu)上并行擴(kuò)展性的因素之一。特別時發(fā)生鎖震蕩時,系統(tǒng)的性能損失非常大。相應(yīng)的鎖震蕩是指很多線程在同時競爭同一個鎖,并且不釋放CPU,從而導(dǎo)致等待鎖的時間遠(yuǎn)遠(yuǎn)大于持有鎖的時間。 為克服上述問題,目前采用的技術(shù)手段是首先,在多種不同的模擬應(yīng)用場景下,分別監(jiān)測獲得鎖競爭發(fā)展趨勢和熱點鎖,以及鎖震蕩臨界點相關(guān)信息,以獲得各個不同的模擬應(yīng)用場景下的可能會發(fā)生鎖競爭問題(如鎖震蕩)的鎖。之后,在實際應(yīng)用場景中基于可能會發(fā)生鎖競爭問題的鎖實時監(jiān)測每一個線程,在相應(yīng)的鎖的鎖競爭達(dá)到一定程度但未發(fā)生鎖震蕩之前,將該線程遷移到一組核中,使得競爭鎖嚴(yán)重的線程運行在一組核中,以降低鎖競爭帶來的性能影響。在實現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題上述現(xiàn)有技術(shù)需要通過模擬不同的應(yīng)用場景,并對模擬的應(yīng)用場景中的鎖應(yīng)用情況進(jìn)行監(jiān)測分析,以提前獲知可能出現(xiàn)鎖競爭問題的鎖,實現(xiàn)過程較為復(fù)雜。而且,在實際的各應(yīng)用場景中,通常是對上述提前獲的可能出現(xiàn)鎖競爭問題的鎖實時進(jìn)行監(jiān)控,以便在出現(xiàn)鎖競爭問題時可以進(jìn)行相應(yīng)的線程遷移處理,這種持續(xù)的實時監(jiān)控過程將會占用大量的處理資源,影響系統(tǒng)的處理性能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于鎖的線程管理方法及裝置,以避免持續(xù)的鎖行為監(jiān)控導(dǎo)致占用系統(tǒng)中大量的處理資源,從而改善系統(tǒng)的處理性能。本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的一種基于鎖的線程管理方法,包括在判斷是否需要執(zhí)行鎖行為監(jiān)控后,若確定需要執(zhí)行鎖行為監(jiān)控,則獲得第一鎖競爭程度信息;根據(jù)所述第一鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。一種基于鎖的線程管理裝置,包括監(jiān)控判斷單元,用于判斷是否需要執(zhí)行鎖行為監(jiān)控;第一鎖競爭程度信息獲取單元,用于在所述監(jiān)控判斷單元確定需要執(zhí)行鎖行為監(jiān)控時,獲得第一鎖競爭程度信息;
線程遷移操作單元,用于根據(jù)所述第一鎖競爭程度信息獲取單元獲得的鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。由上述本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明實施例提供的一種基于鎖的線程管理方法及裝置,具體采用了通過動態(tài)判斷決定鎖行為監(jiān)控的執(zhí)行與否的技術(shù)手段,以避免出現(xiàn)因持續(xù)執(zhí)行鎖行為監(jiān)控導(dǎo)致的過量占用系統(tǒng)處理資源的問題。從而可以使得在基于鎖的線程管理過程中,系統(tǒng)的處理性能不會受到太大的影響。
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他附圖。
圖I為本發(fā)明實施例提供的方法的處理過程示意圖;圖2為本發(fā)明實施例提供的判斷是否執(zhí)行鎖行為監(jiān)控的實現(xiàn)過程示意圖;圖3為本發(fā)明實施例提供的基于自旋鎖的線程處理過程示意圖;圖4A為本發(fā)明實施例提供的線程切換的處理過程示意圖;圖4B為本發(fā)明實施例提供的調(diào)度域劃分技術(shù)的應(yīng)用環(huán)境示意圖;圖5A為本發(fā)明實施例提供的裝置的結(jié)構(gòu)示意圖一;圖5B為本發(fā)明實施例提供的裝置的結(jié)構(gòu)示意圖二 ;圖5C為本發(fā)明實施例提供的裝置的結(jié)構(gòu)示意圖三。
具體實施例方式下面結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明的保護(hù)范圍。本發(fā)明實施例,可以實現(xiàn)動態(tài)決定是否啟動鎖行為監(jiān)控,并在監(jiān)控過程中根據(jù)鎖競爭程度信息動態(tài)地判斷是否進(jìn)行線程遷移,從而克服了現(xiàn)有技術(shù)存在的問題。下面將結(jié)合附圖對本發(fā)明實施例作進(jìn)一步地詳細(xì)描述。本發(fā)明實施例提供的一種基于鎖的線程管理方法,如圖I所示,具體可以包括步驟11,判斷是否需要執(zhí)行鎖行為監(jiān)控,如果需要,執(zhí)行步驟12,以執(zhí)行相應(yīng)的鎖行為監(jiān)控操作,否則,執(zhí)行步驟13 ;相應(yīng)的判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟可以包括以下任一種方式方式一獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)該鎖競爭參數(shù)信息獲得第二鎖競爭程度信息,再根據(jù)所述第二鎖競爭程度信息判斷是否需要執(zhí)行鎖行為監(jiān)控,若該第二鎖競爭程度信息指示當(dāng)前鎖競爭達(dá)到預(yù)定程度,則確定需要執(zhí)行鎖行為監(jiān)控;這種方式可以設(shè)定為預(yù)定時間間隔重復(fù)執(zhí)行或指定的時間點重復(fù)執(zhí)行,即以預(yù)定時間間隔重復(fù)采用該方式一或者在指定的時間點重復(fù)執(zhí)行該方式一,以執(zhí)行相應(yīng)的判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟;
方式二 獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)鎖競爭參數(shù)信息確定鎖行為監(jiān)控的執(zhí)行時間,再根據(jù)該執(zhí)行時間及當(dāng)前時間信息判斷是否執(zhí)行鎖行為監(jiān)控,若當(dāng)前時間信息與所述執(zhí)行時間一致,則確定需要執(zhí)行鎖行為監(jiān)控;這種方式可以設(shè)定為預(yù)定時間間隔重復(fù)執(zhí)行或指定的時間點重復(fù)執(zhí)行,或者,也可以在首次確定了鎖行為監(jiān)控的執(zhí)行時間后,在每次到達(dá)下一次鎖行為監(jiān)控的執(zhí)行時間時重復(fù)執(zhí)行該方式二,以執(zhí)行相應(yīng)的判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟;方式三獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)鎖競爭參數(shù)信息確定執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),以根據(jù)相應(yīng)的時間片跳躍輪數(shù)判斷是否執(zhí)行鎖行為監(jiān)控,若當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到所述執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),則確定需要執(zhí)行鎖行為監(jiān)控;這種方式可以設(shè)定為預(yù)定時間間隔重復(fù)執(zhí)行行或指定的時間點重復(fù)執(zhí)行,或者,也可以在首次確定了需要執(zhí)行鎖行為監(jiān)控的時間片后,在每次到達(dá)下一次需要執(zhí)行鎖行為監(jiān)控的時間片時重復(fù)執(zhí)行該方式三,以執(zhí)行相應(yīng)的判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟;在上述三種方式中,相應(yīng)的指定的時間點重復(fù)執(zhí)行具體可以但不限于包括在本 次執(zhí)行判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟時指定下一次重復(fù)執(zhí)行的時間點,例如,根據(jù)獲取的鎖競爭參數(shù)信息指定下一次重復(fù)執(zhí)行的時間點,即確定相應(yīng)的指定的時間點。其中,上述處理過程中的鎖競爭參數(shù)信息可以但不限于包括開始嘗試持有鎖的時間和成功獲得鎖時的時間,線程被調(diào)度到處理器上開始執(zhí)行的時間和線程所在的處理器被其他線程搶占離開處理器的時間,以及獲取鎖的時間和釋放鎖的時間中的至少一項。其中,相應(yīng)的第二鎖競爭程度信息可以包括但不限于鎖等待時間、鎖持有時間和線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間中的至少一項;相應(yīng)的鎖等待時間是根據(jù)開始嘗試持有鎖時的時間和成功獲得鎖時的時間確定,鎖持有時間是根據(jù)獲取鎖的時間和釋放鎖的時間確定,相應(yīng)的線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間是指線程被調(diào)度到處理器上開始執(zhí)行的時間與線程所在的處理器被其他線程搶占離開處理器的時間之間的時間間隔。步驟12,若根據(jù)步驟11的判斷確定需要執(zhí)行鎖行為監(jiān)控,則記錄第一鎖競爭程度信息,并執(zhí)行步驟14;其中,相應(yīng)的第一鎖競爭程度信息可以包括但不限于鎖等待時間、鎖持有時間和線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間中的至少一項;且該第一鎖競爭程度信息與上述第二鎖競爭程度信息可以為相同的信息,也可以為不同的信息,例如,第一鎖競爭程度信息可以采用鎖等待時間,而第二鎖競爭程度信息可以采用線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間,或者,第一鎖競爭程度信息和第二鎖競爭程度信息均采用鎖等待時間;步驟13,若判斷確定不需要執(zhí)行鎖行為監(jiān)控,則本次操作過程結(jié)束;需要說明的是,若在該步驟之前相應(yīng)的鎖行為監(jiān)控操作一直處于執(zhí)行狀態(tài),則該步驟中還包括停止鎖行為監(jiān)控操作的處理。步驟14,根據(jù)記錄的第一鎖競爭程度信息確定需要進(jìn)行遷移操作的線程;步驟15,將需要進(jìn)行遷移操作的線程遷移至確定的目標(biāo)處理器;在該步驟中,相應(yīng)的目標(biāo)處理器可以通過下述步驟確定確定需要進(jìn)行遷移操作的線程所處于的調(diào)度域,并在該確定的調(diào)度域內(nèi),選擇確定該線程對應(yīng)的目標(biāo)處理器,即在遷移過程中基于調(diào)度域選擇將遷往的處理器,從而可以避免競爭同一類鎖的處于不同調(diào)度域的線程被遷移到同一組CPU或邏輯CPU上,導(dǎo)致在負(fù)載平衡的過程中,影響系統(tǒng)的性能。本發(fā)明實施例中,為保證在調(diào)度域內(nèi)能夠滿足線程處理操作,可以根據(jù)當(dāng)前線程的鎖競爭程度調(diào)整當(dāng)前線程所在的調(diào)度域,具體的調(diào)整方式可以包括判斷當(dāng)前線程的鎖競爭程度是否超過預(yù)定值,若是,則提高該線程對應(yīng)的負(fù)載平衡級別,否則,降低該線程對應(yīng)的負(fù)載平衡級別,其中,不同的負(fù)載平衡級別對應(yīng)著不同的調(diào)度域,且負(fù)載平衡級別越高則線程所處于的調(diào)度域包含的處理器越多。從而使得在遷移的過程中,能夠基于調(diào)度域感知能力實現(xiàn)負(fù)載平衡,以提高系統(tǒng)的處理性能。通過上述處理過程,可以在多核平臺上,可以基于鎖對線程進(jìn)行合理地管理,從而保證系統(tǒng)的的擴(kuò)展性,使得隨著核數(shù)的增加,系統(tǒng)的性能仍然能夠得到保證,并可以避免產(chǎn)生鎖震蕩,即避免占用CPU較長時間。下面將以上述步驟11中的方式三提供的判斷是否需要執(zhí)行鎖行為監(jiān)控的實現(xiàn)方式為例,對步驟11的具體實現(xiàn)過程進(jìn)行描述,如圖2所示,相應(yīng)的判斷否需要執(zhí)行鎖行為監(jiān)控的步驟具體可以包括步驟21,在當(dāng)前輪時間片內(nèi),當(dāng)前線程判斷上一輪時間片內(nèi)是否執(zhí)行了鎖行為監(jiān)控,若是,則實行步驟22,否則執(zhí)行步驟26。步驟22,計算確定上一輪時間片的鎖競爭程度信息,并判斷鎖競爭程度信息指示的鎖競爭程度是否大于預(yù)設(shè)的閾值,若是,則執(zhí)行步驟23,否則執(zhí)行步驟24。步驟23,確定上一輪時間片的鎖競爭程度大于預(yù)設(shè)的閾值,設(shè)置鎖行為監(jiān)控時間片跳躍輪數(shù)為0,然后執(zhí)行步驟25 ;其中,相應(yīng)的鎖行為監(jiān)控執(zhí)行時間片跳躍輪數(shù),用于記錄從下一個時間片開始計算,需要跳過多少輪時間片,才執(zhí)行鎖行為監(jiān)控,初始值為O。步驟24,確定上一輪鎖競爭程度不大于預(yù)設(shè)的閾值,則調(diào)整相應(yīng)的鎖行為監(jiān)控時間片跳躍輪數(shù);具體地,判斷鎖行為監(jiān)控時間片跳躍輪數(shù)是否為0,若為0,則設(shè)置鎖行為監(jiān)控時間片跳躍輪數(shù)為I ;若鎖行為監(jiān)控時間片跳躍輪數(shù)大于O且小于128 (該值是可變的,用戶可以根據(jù)時間情況設(shè)定,可以為2的冪次方),則設(shè)置鎖行為監(jiān)控時間片跳躍輪數(shù)為原來的2倍;若鎖行為監(jiān)控時間片跳躍輪數(shù)不小于128,則設(shè)置鎖行為監(jiān)控時間片跳躍輪數(shù)為128,之后執(zhí)行步驟21。步驟25,設(shè)置鎖行為監(jiān)控標(biāo)志位,根據(jù)該標(biāo)志位,在本輪時間片內(nèi)將執(zhí)行鎖行為監(jiān)控,在完成鎖行為監(jiān)控后,清除鎖行為監(jiān)控標(biāo)志位,并在下輪時間片重復(fù)執(zhí)行步驟21 ;在該步驟中,還需要,還設(shè)置時間片輪數(shù)變量為零,以便于重新統(tǒng)計經(jīng)過的時間片輪數(shù),作為后續(xù)是否執(zhí)行鎖行為監(jiān)控的判斷依據(jù);相應(yīng)的時間片輪數(shù)變量,用于記錄自從上次鎖行為檢測后,已經(jīng)運行了多少輪時間片,初始值為O。步驟26 :判斷時間片輪數(shù)變量記錄的值與相應(yīng)的鎖行為監(jiān)控執(zhí)行時間片跳躍輪數(shù)是否一致,如果是,則設(shè)置鎖行為監(jiān)控時間片跳躍輪數(shù)為0,并執(zhí)行步驟25,否則,將時間 片輪數(shù)變量加1,即在本輪時間片不執(zhí)行鎖行為監(jiān)控,而在下輪時間片重復(fù)執(zhí)行步驟21。需要說明的是,在應(yīng)用本發(fā)明實施例的系統(tǒng)中,默認(rèn)在線程啟動時,均需要執(zhí)行相應(yīng)的鎖行為監(jiān)控操作,之后,在后續(xù)的時間片便可以執(zhí)行上述步驟21及后續(xù)過程對是否執(zhí)行鎖行為監(jiān)控進(jìn)行判斷處理。通過上述處理過程,可以合理地啟動相應(yīng)的鎖行為監(jiān)控操作過程,從而可以避免因在系統(tǒng)中持續(xù)執(zhí)行鎖行為監(jiān)控導(dǎo)致影響系統(tǒng)性能的問題。下面將以線程需要獲取某自旋鎖為例,對相應(yīng)的基于鎖的線程管理過程進(jìn)行說明。具體地,如圖3所示,相應(yīng)的處理過程可以包括步驟31,判斷線程的遷移標(biāo)志是否置位,如果置位,則表示需要對該線程進(jìn)行遷移操作,執(zhí)行步驟32,否則執(zhí)行步驟33 ;在該步驟中,相應(yīng)的線程的遷移標(biāo)志是由之前執(zhí)行的鎖行為監(jiān)控過程決定是否置位的,即若之前執(zhí)行的鎖行為監(jiān)控過程根據(jù)鎖競爭程度信息確定該線程需要進(jìn)行遷移操作,則將該線程的遷移標(biāo)志置位。步驟32,將該線程遷往已經(jīng)確定的ID(標(biāo)識)號為to_Cpu(目標(biāo)CPU)的CPU(處理器),并執(zhí)行步驟33;步驟33,當(dāng)前線程判斷是否需要執(zhí)行鎖行為監(jiān)控,如果需要,則執(zhí)行步驟34,否貝U,執(zhí)行步驟35 ;在該步驟中,具體可以采用以下任一方式實現(xiàn)(I)獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)該鎖競爭參數(shù)信息確定第二鎖競爭程度參數(shù)信息,再根據(jù)該第二鎖競爭程度參數(shù)信息判斷是否需要執(zhí)行鎖行為監(jiān)控,若該第二鎖競爭程度信息指示當(dāng)前鎖競爭達(dá)到預(yù)定程度,則確定需要執(zhí)行鎖行為監(jiān)控;例如,相應(yīng)的預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息可以為過去幾個時間片的鎖競爭參數(shù)信息;(2)若之前確定了鎖行為監(jiān)控的執(zhí)行時間,則在當(dāng)前時間信息與鎖行為監(jiān)控的執(zhí)行時間一致,則確定需要執(zhí)行鎖行為監(jiān)控;該鎖行為監(jiān)控的執(zhí)行時間可以根據(jù)預(yù)定時間段內(nèi)獲取的鎖競爭參數(shù)信息確定,例如,若該鎖競爭參數(shù)信息指示當(dāng)前鎖競爭程度較高,則可以將鎖行為監(jiān)控的執(zhí)行時間與當(dāng)前時間之間的間隔時間設(shè)置的小一些,否則,可以將相應(yīng)的間隔時間設(shè)置的大一些;執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),以根據(jù)相應(yīng)的時間片跳躍輪數(shù)判斷是否執(zhí)行鎖行為監(jiān)控,若當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到所述執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),(3)若之前確定執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),則當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到所述執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),便確定需要執(zhí)行鎖行為監(jiān) 控;該執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù)具體可以根據(jù)預(yù)定時間段內(nèi)獲取的鎖競
爭參數(shù)信息確定;通過上述三種方式中的任一種方式可以決定是否啟動鎖行為監(jiān)控操作,或者,也可以在執(zhí)行鎖行為監(jiān)控操作的過程中決定是否停止鎖行為監(jiān)控操作;具體地,在該步驟中,可以采用以上任一方式判斷是否需要執(zhí)行鎖行為監(jiān)控,或者,也可以在采用以上任一方式判斷是否需要執(zhí)行鎖行為監(jiān)控后設(shè)置相應(yīng)的鎖行為監(jiān)控標(biāo)志位,以便于在該步驟中可以直接根據(jù)相應(yīng)的鎖行為監(jiān)控標(biāo)志位判斷是否需要執(zhí)行鎖行為監(jiān)控;步驟34,記錄當(dāng)前時間作為第一時間,并執(zhí)行步驟35 ;步驟35,獲取自旋鎖,并執(zhí)行步驟36 ;步驟36,判斷是否執(zhí)行鎖行為監(jiān)控,如果是,則執(zhí)行步驟37,否則,執(zhí)行步驟38 ;
步驟37,獲取當(dāng)前時間作為第二時間,將該第二時間與步驟34記錄獲得的第一時間比較,計算鎖等待時間,并執(zhí)行步驟38 ;在該步驟中,對于計算獲得的鎖等待時間決定是否該鎖的信息記錄到數(shù)組lock_info中,數(shù)組Iockjnfo用于記錄當(dāng)前線程執(zhí)行過程中鎖等待時間最長的若干鎖信息;步驟38,執(zhí)行臨界區(qū)操作,即獲取自旋鎖的當(dāng)前線程執(zhí)行該自旋鎖對應(yīng)的操作,之后執(zhí)彳了步驟39 ;步驟39,釋放自旋鎖,并執(zhí)行步驟310 ;步驟310,判斷是否需要執(zhí)行鎖行為監(jiān)控(如判斷鎖行為監(jiān)控標(biāo)志位是否置位),如果是,則確定需要執(zhí)行鎖行為監(jiān)控,即執(zhí)行步驟311,否則執(zhí)行步驟312 ;在該步驟中,可以直接利用33的判斷結(jié)果,或者,也可以通過相應(yīng)的鎖行為監(jiān)控 標(biāo)志位確定是否需要執(zhí)行鎖行為監(jiān)控。步驟311,獲取當(dāng)前時間,與步驟37獲得的第二時間比較,計算鎖持有時間,并決定是否該鎖的信息記錄到數(shù)組lock_inf0中,之后執(zhí)行步驟312 ;其中,數(shù)組Iockjnfo用于記錄當(dāng)前線程執(zhí)行過程中鎖持有時間最長的若干鎖信
肩、O步驟312,判斷線程的遷回標(biāo)志是否置位,如果置位,則執(zhí)行步驟313,否則,鎖行為監(jiān)控和線程遷移流程結(jié)束;步驟313,將線程遷回原來的CPU (即ID為from_cpu的CPU),鎖行為監(jiān)控和線程遷移流程結(jié)束?;谏鲜鎏幚磉^程可以在線程獲取自旋鎖的過程中,根據(jù)針對是否需要執(zhí)行鎖行為監(jiān)控的判斷結(jié)果決定是否執(zhí)行相應(yīng)的鎖行為監(jiān)控,而不是持續(xù)地對相應(yīng)的自旋鎖進(jìn)行監(jiān)控,從而可以避免監(jiān)控過程大量地占用系統(tǒng)的處理資源,使得系統(tǒng)的處理性能不會因鎖行為監(jiān)控的執(zhí)行而受到較大影響。下面將以在線程進(jìn)行上下文切換的過程中實現(xiàn)基于鎖的線程管理的實現(xiàn)過程為例進(jìn)行說明。假設(shè)需要從線程A切換至線程B,則將由線程A對是否繼續(xù)執(zhí)行鎖行監(jiān)控,以及負(fù)載平衡的級別是否滿足需求進(jìn)行決策,如圖4A所示,具體可以包括
步驟41,當(dāng)前線程,即線程A記錄當(dāng)前時間片的結(jié)束時間,即線程A所在的處理器被其他線程搶占離開處理器的時間,并計算當(dāng)前時間片的實際長度,即根據(jù)之間記錄的線程A被調(diào)度到處理器上開始執(zhí)行的時間,以及該線程A所在的處理器被其他線程搶占離開處理器的時間確定線程A在當(dāng)前時間段內(nèi)的實際執(zhí)行時間,之后執(zhí)行步驟42 ;步驟42,確定是否啟動鎖彳丁為監(jiān)控,如果需要啟動鎖彳丁為監(jiān)控,則啟動鎖彳丁為監(jiān)控,通過鎖行為監(jiān)控獲取鎖競爭參數(shù)信息,進(jìn)而可以根據(jù)相應(yīng)的鎖競爭參數(shù)信息確定用于判斷是否進(jìn)行線程遷移的鎖競爭程度信息(如之前描述的第二鎖競爭程度信息),否則不啟動鎖行為監(jiān)控,之后執(zhí)行步驟43 ;步驟43,判斷當(dāng)前線程的第一鎖競爭程度信息確定的鎖競爭程度是否大于競爭程度閾值,如果是,則設(shè)置遷移位,在下一個時間片內(nèi)進(jìn)行線程遷移操作,之后執(zhí)行步驟44,否貝U,執(zhí)行步驟47 ;其中,在該步驟中,相應(yīng)的第一鎖競爭程度信息可以利用數(shù)組lock_info中記錄的鎖等待時間總和或平均或加權(quán)平均計算獲得,或者,利用數(shù)組lock_inf0中記錄的鎖持有時間的總和或平均或加權(quán)平均計算獲得;步驟44,判斷當(dāng)前線程的鎖競爭程度是否大于負(fù)載平衡調(diào)整閾值,如果是,則執(zhí)行步驟45,否則,執(zhí)行步驟46。步驟45,提高負(fù)載平衡級別,即將負(fù)載平衡級別設(shè)置為原來負(fù)載平衡級別對應(yīng)調(diào)度域的上層調(diào)度域,以擴(kuò)大該線程可以運行的核的數(shù)目(即線程可以運行的CPU或邏輯CPU的數(shù)目),并執(zhí)行步驟47;步驟46,降低負(fù)載平衡級別,即將負(fù)載平衡級別設(shè)置為原來負(fù)載平衡級別對應(yīng)調(diào)度域的低一級的調(diào)度域,以降低該線程可以運行的CPU或邏輯CPU的數(shù)目,如果當(dāng)前為基本 調(diào)度域,則不再調(diào)整,之后執(zhí)行步驟47 ;步驟47,執(zhí)行線程切換操作,即將線程A換出,線程B換入,以實現(xiàn)線程的上下有切換處理,之后執(zhí)行步驟48 ;步驟48,為線程B記錄時間片的起始值,即線程B被調(diào)度到處理器上開始執(zhí)行的時間,用于計算當(dāng)前時間片的實際執(zhí)行時間,該處理流程結(jié)束。為便于對上述步驟45和步驟46中提及的負(fù)載平衡級別的理解,下面將對負(fù)載平衡級別的概念進(jìn)行舉例說明。具體地,以4節(jié)點,且每節(jié)點包括兩個物里CPU,每個物理CPU上包含4個邏輯CPU的NUMA(Non-Uniform Memory Access,非均勻存儲器訪問)架構(gòu)為例,則相應(yīng)的負(fù)載平衡級別的可以但不限于劃分為基本調(diào)度域、一級調(diào)度域和二級調(diào)度域,各個調(diào)度域的概念如下基本調(diào)度域,可以為屬于一個物理CPU的所有邏輯CPU,對應(yīng)于最低負(fù)載平衡級另Ij,例如,每一個物理CPU均可以稱為一個基本調(diào)度域;一級調(diào)度域,可以為屬于一個NUMA上的所有邏輯CPU,對應(yīng)的負(fù)載平衡級別(對應(yīng)地可以稱為一級負(fù)載平衡等級)比最低負(fù)載平衡級別高一級,例如,每一個節(jié)點可以成為一個一級調(diào)度域;二級調(diào)度域,可以為與當(dāng)前線程所運行的節(jié)點距離為I跳的所有節(jié)點上的邏輯CPU,對應(yīng)的負(fù)載平衡級別為二級負(fù)載平衡等級,例如,如圖4B所示,節(jié)點nodel和與之有I跳的節(jié)點node O及node 2是可以組成一個二級調(diào)度域,同理節(jié)點node I, 2, 3、節(jié)點node
2,3, O、節(jié)點node 0,1,3也可以組成一個二級調(diào)度域;還可以按照與NUMA架構(gòu)包含的節(jié)點距離的遠(yuǎn)近組成不同等級的調(diào)度域,如三級調(diào)度域、四級調(diào)度域等等;最高級調(diào)度域,可以包括當(dāng)前系統(tǒng)的所有的邏輯CPU。需要說明的是,上述負(fù)載平衡級別的劃分只是一個示例,并不構(gòu)成對本發(fā)明實施例的唯一限定。本領(lǐng)域技術(shù)人員知曉本發(fā)明實施例中采用其他負(fù)載平衡級別的劃分方式同樣可以滿足相應(yīng)的基于調(diào)度域的負(fù)載平衡需求。而且,上述說明中僅以NUMA架構(gòu)為例,顯然,本發(fā)明實施例也可以應(yīng)用于其他有類似需求的架構(gòu)中。通過上述實施例的實現(xiàn)可以看出,由于采用了動態(tài)決定是否鎖行為監(jiān)控的手段,從而可以降低系統(tǒng)的性能開銷。而且,在鎖感知線程遷移中,通過調(diào)度域感知的負(fù)載平衡策略,有效降低了線程在不同NUMA節(jié)點間遷移的性能開銷。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random AccessMemory, RAM)等。本發(fā)明實施例還提供了一種基于鎖的線程管理裝置,其具體實現(xiàn)結(jié)構(gòu)如圖5A所示,可以包括以下處理單元監(jiān)控判斷單元51,用于判斷是否需要執(zhí)行鎖行為監(jiān)控,即用于根據(jù)當(dāng)前的鎖競爭情況動態(tài)判斷是否執(zhí)行鎖行為監(jiān)控;鎖競爭程度信息記錄單元52,用于在監(jiān)控判斷單元51確定需要執(zhí)行鎖行為監(jiān)控時,記錄鎖競爭程度信息;線程遷移操作單元53,用于根據(jù)鎖競爭程度信息記錄單元52記錄的鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。
可選地,如圖5B所示,根據(jù)監(jiān)控判斷單元51判斷是否需要執(zhí)行鎖行為監(jiān)控所采用的技術(shù)手段的不同,該裝置還可以包括以下處理單元鎖競爭參數(shù)信息獲取單元54,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息;以及第二鎖競爭程度信息獲取單元55,用于根據(jù)鎖競爭參數(shù)信息獲取單元54獲取的鎖競爭參數(shù)信息獲得第二鎖競爭程度信息,并將第二鎖競爭程度信息提供給監(jiān)控判斷單元51,以作為監(jiān)控判斷單元51判斷是否需要執(zhí)行鎖行為監(jiān)控的依據(jù),若監(jiān)控判斷單元51確定相應(yīng)的第二鎖競爭程度信息指示當(dāng)前鎖競爭達(dá)到預(yù)定程度,則確定需要執(zhí)行鎖行為監(jiān)控,否則,不需要執(zhí)行鎖行為監(jiān)控;或者,監(jiān)控時間獲取單元56,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)該鎖競爭參數(shù)信息確定鎖行為監(jiān)控的執(zhí)行時間,再將鎖行為監(jiān)控的執(zhí)行時間提供給上述監(jiān)控判斷單元51,以作為監(jiān)控判斷單元51判斷是否執(zhí)行鎖行為監(jiān)控的依據(jù),若監(jiān)控判斷單元確定當(dāng)前時間信息與該鎖行為監(jiān)控的執(zhí)行時間一致,則確定需要執(zhí)行鎖行為監(jiān)控,否則,不需要執(zhí)行鎖行為監(jiān)控;或者,監(jiān)控時間片輪數(shù)確定單元57,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)該鎖競爭參數(shù)信息確定執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),以作為監(jiān)控判斷單元51判斷是否執(zhí)行鎖行為監(jiān)控的依據(jù),若監(jiān)控判斷單元51確定當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),則確定需要執(zhí)行鎖行為監(jiān)控,否則,不需要執(zhí)行鎖行為監(jiān)控。需要說明的是,上述鎖競爭參數(shù)信息可以但不限于包括開始嘗試持有鎖的時間和成功獲得鎖時的時間,線程被調(diào)度到處理器上開始執(zhí)行的時間和線程所在的處理器被其他線程搶占離開處理器的時間,以及獲取鎖的時間和釋放鎖的時間中的至少一項;其中,根據(jù)開始嘗試持有鎖的時間和成功獲得鎖時的時間可以確定相應(yīng)的鎖等待時間,根據(jù)線程被調(diào)度到處理器上開始執(zhí)行的時間和線程所在的處理器被其他線程搶占離開處理器的時間可以確定線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間,根據(jù)獲取鎖的時間和釋放鎖的時間可以確定相應(yīng)的鎖持有時間;上述第一鎖競爭程度信息可以但不限于包括鎖等待時間、鎖持有時間和線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間中的至少一項;相應(yīng)的第二鎖競爭程度信息可以但不限于包括鎖等待時間、鎖持有時間和線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間中的至少一項;而且,相應(yīng)的第一鎖競爭程度信息和第二鎖競爭程度信息可以相同,也可以不同??蛇x地,該裝置還可以包括目標(biāo)處理器確定單元58,用于確定需要進(jìn)行遷移操作的線程所處于的調(diào)度域,并在該確定的調(diào)度域內(nèi),選擇確定該線程的目標(biāo)處理器(如CPU或邏輯CPU等),以便于線程遷移操作單元53將相應(yīng)的線程遷移至在確定的調(diào)度域內(nèi)所確定的目標(biāo)處理器。優(yōu)選地,為便于上述目標(biāo)處理器確定單元58為當(dāng)前線程選擇確定合理的目標(biāo)處理器,則該裝置還可以包括鎖競爭程度判斷單元59,用于判斷當(dāng)前線程的鎖競爭程度是否超過預(yù)定值;
調(diào)度域調(diào)整單元510,用于在上述鎖競爭程度判斷單元59確定當(dāng)前線程的鎖競爭程度超過預(yù)定值時,提高該線程對應(yīng)的負(fù)載平衡級別,否則,降低該線程對應(yīng)的負(fù)載平衡級另O,其中,不同的負(fù)載平衡級別對應(yīng)著不同的調(diào)度域,且負(fù)載平衡級別越高則線程所處于的調(diào)度域包含的處理器越多;通過對該線程對應(yīng)的負(fù)載平衡級別的調(diào)整,可以使得上述目標(biāo)處理器確定單元58可以在合理的調(diào)度域內(nèi)為需要遷移的線程確定相應(yīng)的目標(biāo)處理器。需要說明的是,上述裝置實施例中各個處理單元所實現(xiàn)的功能的具體實現(xiàn)方式在之前的實施例中已經(jīng)描述,且本領(lǐng)域技術(shù)人員知曉之前實施例中描述的各功能的具體實現(xiàn)方式也適用于該裝置中,故在此不再重復(fù)描述。通過上述裝置實施例的實現(xiàn)可以看出,由于該裝置采用了動態(tài)決定是否鎖行為監(jiān)控的技術(shù)手段,從而可以降低系統(tǒng)的性能開銷,改善系統(tǒng)的性能。而且,在鎖感知線程遷移中,該裝置還可以通過調(diào)度域感知的負(fù)載平衡策略,來效降低線程在不同處理器節(jié)點間遷移的性能開銷。以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種基于鎖的線程管理方法,其特征在于,包括 在判斷是否需要執(zhí)行鎖行為監(jiān)控后,若確定需要執(zhí)行鎖行為監(jiān)控,則獲得第一鎖競爭程度信息; 根據(jù)所述第一鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述判斷是否需要執(zhí)行鎖行為監(jiān)控的步驟包括 獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)所述鎖競爭參數(shù)信息獲得第二鎖競爭程度信息,再根據(jù)所述第二鎖競爭程度信息判斷是否需要執(zhí)行鎖行為監(jiān)控,若所述第二鎖競爭程度信息指示當(dāng)前鎖競爭達(dá)到預(yù)定程度,則確定需要執(zhí)行鎖行為監(jiān)控; 或者, 獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)所述鎖競爭參數(shù)信息確定鎖行為監(jiān)控的執(zhí)行時間,再根據(jù)所述執(zhí)行時間及當(dāng)前時間信息判斷是否執(zhí)行鎖行為監(jiān)控,若當(dāng)前時間信息與所述執(zhí)行時間一致,則確定需要執(zhí)行鎖行為監(jiān)控; 或者, 獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)所述鎖競爭參數(shù)信息確定執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),以根據(jù)所述時間片跳躍輪數(shù)判斷是否執(zhí)行鎖行為監(jiān)控,若當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到所述執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),則確定需要執(zhí)行鎖行為監(jiān)控。
3.根據(jù)權(quán)利要求2所述的方法,其特征在干, 所述鎖競爭參數(shù)信息包括開始嘗試持有鎖的時間和成功獲得鎖時的時間,和/或,線程被調(diào)度到處理器上開始執(zhí)行的時間和線程所在的處理器被其他線程搶占離開處理器的時間,和/或,獲取鎖的時間和釋放鎖的時間; 所述第一鎖競爭程度信息包括鎖等待時間,和/或,鎖持有時間,和/或,線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間; 所述第二鎖競爭程度信息包括鎖等待時間,和/或,鎖持有時間,和/或,線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間。
4.根據(jù)權(quán)利要求I至3所述的方法,其特征在于,確定所述目標(biāo)處理器的步驟包括 確定需要進(jìn)行遷移操作的線程所處于的調(diào)度域,并在該確定的調(diào)度域內(nèi),選擇確定該線程的目標(biāo)處理器。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,該方法還包括 判斷當(dāng)前線程的鎖競爭程度是否超過預(yù)定值,若是,則提高該線程對應(yīng)的負(fù)載平衡級另O,否則,降低該線程對應(yīng)的負(fù)載平衡級別,其中,不同的負(fù)載平衡級別對應(yīng)著不同的調(diào)度域,且所述負(fù)載平衡級別越高則線程所處于的調(diào)度域包含的處理器越多。
6.一種基于鎖的線程管理裝置,其特征在于,包括 監(jiān)控判斷単元,用于判斷是否需要執(zhí)行鎖行為監(jiān)控; 第一鎖競爭程度信息獲取單元,用于在所述監(jiān)控判斷単元確定需要執(zhí)行鎖行為監(jiān)控時,獲得第一鎖競爭程度信息; 線程遷移操作単元,用于根據(jù)所述第一鎖競爭程度信息獲取單元獲得的鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,該裝置還包括 鎖競爭參數(shù)信息獲取單元,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息;以及第ニ鎖競爭程度信息獲取單元,用于根據(jù)所述鎖競爭參數(shù)信息獲取單元獲取的鎖競爭參數(shù)信息獲得第二鎖競爭程度信息,并將所述第二鎖競爭程度信息提供給所述監(jiān)控判斷単元,以作為監(jiān)控判斷単元判斷是否需要執(zhí)行鎖行為監(jiān)控的依據(jù),若所述監(jiān)控判斷単元確定第二鎖競爭程度信息指示當(dāng)前鎖競爭達(dá)到預(yù)定程度,則確定需要執(zhí)行鎖行為監(jiān)控; 或者, 監(jiān)控時間獲取単元,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)所述鎖競爭參數(shù)信息確定鎖行為監(jiān)控的執(zhí)行時間,再將所述鎖行為監(jiān)控的執(zhí)行時間提供給所述監(jiān)控判斷単元,以作為監(jiān)控判斷単元判斷是否執(zhí)行鎖行為監(jiān)控的依據(jù),若監(jiān)控判斷単元確定當(dāng)前時間信息與所述執(zhí)行時間一致,則確定需要執(zhí)行鎖行為監(jiān)控; 或者, 監(jiān)控時間片輪數(shù)確定單元,用于獲取預(yù)定時間段內(nèi)的鎖競爭參數(shù)信息,并根據(jù)所述鎖競爭參數(shù)信息確定執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),以作為所述監(jiān)控判斷単元判斷是否執(zhí)行鎖行為監(jiān)控的依據(jù),若所述監(jiān)控判斷単元確定當(dāng)前經(jīng)過的時間片輪數(shù)達(dá)到所述執(zhí)行鎖行為監(jiān)控需要經(jīng)過的時間片跳躍輪數(shù),則確定需要執(zhí)行鎖行為監(jiān)控。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在干, 所述鎖競爭參數(shù)信息包括開始嘗試持有鎖的時間和成功獲得鎖時的時間,和/或,線程被調(diào)度到處理器上開始執(zhí)行的時間和線程所在的處理器被其他線程搶占離開處理器的時間,和/或,獲取鎖的時間和釋放鎖的時間; 所述第一鎖競爭程度信息包括鎖等待時間,和/或,鎖持有時間,和/或,線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間; 所述第二鎖競爭程度信息包括鎖等待時間,和/或,鎖持有時間,和/或,線程在當(dāng)前時間段內(nèi)的實際執(zhí)行時間。
9.根據(jù)權(quán)利要求6至8所述的裝置,其特征在于,該裝置還包括 目標(biāo)處理器確定單元,用于確定需要進(jìn)行遷移操作的線程所處于的調(diào)度域,并在該確定的調(diào)度域內(nèi),選擇確定該線程的目標(biāo)處理器。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,該裝置還包括 鎖競爭程度判斷単元,用于判斷當(dāng)前線程的鎖競爭程度是否超過預(yù)定值; 調(diào)度域調(diào)整單元,用于在所述鎖競爭程度判斷単元確定當(dāng)前線程的鎖競爭程度超過預(yù)定值時,提高該線程對應(yīng)的負(fù)載平衡級別,否則,降低該線程對應(yīng)的負(fù)載平衡級別,其中,不同的負(fù)載平衡級別對應(yīng)著不同的調(diào)度域,且所述負(fù)載平衡級別越高則線程所處于的調(diào)度域包含的處理器越多。
全文摘要
本發(fā)明公開了一種基于鎖的線程管理方法及裝置,包括在判斷是否需要執(zhí)行鎖行為監(jiān)控后,若確定需要執(zhí)行鎖行為監(jiān)控,則獲得第一鎖競爭程度信息;根據(jù)所述第一鎖競爭程度信息確定需要進(jìn)行遷移操作的線程,并將所述線程遷移至確定的目標(biāo)處理器。由于采用了通過動態(tài)判斷決定鎖行為監(jiān)控的執(zhí)行與否的技術(shù)手段,因此,可以避免出現(xiàn)因持續(xù)執(zhí)行鎖行為監(jiān)控導(dǎo)致的過量占用系統(tǒng)處理資源的問題,進(jìn)而可以使得在基于鎖的線程管理過程中,系統(tǒng)的處理性能不會受到太大的影響。
文檔編號G06F9/46GK102662742SQ20121010432
公開日2012年9月12日 申請日期2012年4月11日 優(yōu)先權(quán)日2012年4月11日
發(fā)明者劉儀陽 申請人:華為技術(shù)有限公司