使用鎖定機制的高效任務調度的制作方法
【技術領域】
[0001] 本發明一般地涉及計算系統,更具體地說,涉及用于針對在計算環境中的多個線 程之間需要鎖的并行操作,使用鎖定機制進行高效任務調度的系統和方法。
【背景技術】
[0002] 在當今社會中,計算機系統普遍存在。可以在工作場所、家里或學校中發現計算機 系統。計算機系統可以包括數據存儲系統或盤存儲系統,以便處理和存儲數據。考慮到當 今社會中對計算機的依賴性持續增加,計算機技術必須在許多方面都有所發展以便跟上增 加的需求。重要研究和開發工作的一個特定主題是并行性,即,多個任務的并行執行。
[0003] 已開發多種計算機軟件和硬件技術以促進增加的并行處理。從軟件角度來看,已 開發多線程操作系統和內核,這允許在多個"線程"中同時執行計算機程序,以使得可以基 本同時執行多個任務。線程通常表示程序的獨立執行路徑。例如,對于電子商務計算機應 用,可能將不同線程分配給不同客戶,以使得在單獨的線程中處理每個客戶的特定電子商 務交易。從硬件角度來看,計算機越來越依賴多個微處理器來提供增加的工作負載能力。此 外,已開發某些微處理器,它們支持并行執行多個線程的能力,從而有效地提供可通過使用 多個微處理器獲得的許多相同性能增益。
【發明內容】
[0004] 在一個實施例中,提供一種用于在計算環境中通過至少一個處理器設備使用鎖定 機制進行高效任務調度的方法。在一個實施例中,僅作為舉例,如果針對所述鎖定機制自旋 的任務的數量小于在多個線程之間需要鎖的并行操作的預定閾值,則允許新任務針對所述 鎖定機制自旋。
[0005] 在另一個實施例中,提供一種用于在計算環境中通過至少一個處理器設備使用鎖 定機制進行高效任務調度的計算機系統。所述計算機系統包括計算機可讀介質和處理器, 所述處理器可操作以與所述計算機可讀介質通信。在一個實施例中,僅作為舉例,如果針對 所述鎖定機制自旋的任務的數量小于在多個線程之間需要鎖的并行操作的預定閾值,則所 述處理器允許新任務針對所述鎖定機制自旋。
[0006] 在另一實施例中,提供一種用于在計算環境中通過至少一個處理器設備使用鎖定 機制進行高效任務調度的計算機程序產品。所述計算機可讀存儲介質具有存儲在其上的計 算機可讀程序代碼部分。所述計算機可讀程序代碼部分包括第一可執行部分,其在針對所 述鎖定機制自旋的任務的數量小于在多個線程之間需要鎖的并行操作的預定閾值的情況 下,允許新任務針對所述鎖定機制自旋。
[0007] 除了上述示例性方法實施例之外,還提供其它示例性系統和計算機產品實施例并 且提供相關優點。已提供上述概要以便以簡化形式引入概念的選擇,下面在"具體實施方 式"中進一步描述這些概念。此"
【發明內容】
"并非旨在標識所要求保護的主題的關鍵特性或 基本特性,也并非旨在用于幫助確定所要求保護的主題的范圍。所要求保護的主題并不限 于解決"【背景技術】"中描述的任何或全部缺點的實施方式。
【附圖說明】
[0008] 為了容易地理解本發明的優點,將通過參考在附圖中示出的特定實施例給出上面 簡要描述的本發明的更具體的說明。要理解,這些附圖僅示出本發明的典型實施例,并且因 此不被視為其范圍的限制,將通過使用附圖以額外特殊性和細節描述和解釋本發明,這些 附圖是:
[0009] 圖1是示出其中可以實現本發明的各個方面的具有實例存儲設備的計算系統環 境的框圖;
[0010] 圖2是示出根據本發明的其中可以實現本發明的各個方面的計算機系統中的數 據存儲系統的示例性硬件結構的框圖;
[0011] 圖3是示出其中可以實現本發明的各個方面的用于使用鎖定機制進行高效任務 調度的示例性方法的流程圖;以及
[0012] 圖4是示出其中可以實現本發明的各個方面的用于使用鎖定機制進行高效任務 調度的其它示例性方法的流程圖。
【具體實施方式】
[0013] 在一個實施例中,多處理計算機系統中的架構是分布式共享存儲器架構。分布式 共享存儲器架構包括多個節點,處理器和存儲器位于這些節點中。多個節點經由耦合在其 間的網絡通信。當被視為一個整體時,包括在多個節點中的存儲器形成計算機系統的共享 存儲器。可以使用目錄標識哪些節點已緩存對應于特定地址的數據的副本。可以經由檢查 目錄生成一致性活動。在一個實施例中,分布式共享存儲器系統是可伸縮的,從而克服與共 享總線架構關聯的各種限制。因為許多處理器訪問都在一個節點中完成,所以與共享總線 架構為了獲得可比較性能而必須針對其共享總線提供的帶寬要求相比,節點通常針對網絡 具有低得多的帶寬要求。節點可以在高時鐘頻率和帶寬下操作,從而在需要時訪問網絡。可 以向網絡添加其它節點而不影響節點的本地帶寬。借助邏輯分區,共享資源(被稱為"系統 管理程序"或分區管理器)管理邏輯分區并促進將資源分配給不同邏輯分區。例如,分區管 理器可以將諸如處理器、工作站適配器、存儲設備、存儲空間、網絡適配器之類的資源分配 給各分區,以便支持每個邏輯分區以與單獨物理計算機基本相同的方式進行相對獨立的操 作。
[0014] 此外,在一個實施例中,大型數據庫和因特網交易應用需要并行服務器,這些服 務器能夠在具有二十到一百個處理器或更多處理器的機器上運行。此外,在一個實施例 中,以某種方式的并行編程可以涉及使用最低級別的鎖定。鎖是提供互相排斥的基元 (primitive),它們允許數據結構保持處于一致狀態。在一個實施例中,如果沒有鎖定機制, 則執行的多個線程可能同時修改數據結構。如果沒有深思熟慮并且通常復雜的無鎖算法, 則結果通常是崩潰或掛起,因為進入非預期程序狀態。因為無鎖算法的創建極其困難,所以 大多數程序都使用鎖。如果更新數據結構緩慢,則選擇的鎖是某種類型的互斥(例如,互相 排斥)。當這些線程阻塞時,它們將控制轉移到操作系統。這允許當第一個線程休眠時,另 一個線程運行并且可能取得進展。這種控制轉移包括一對上下文切換,它們是相當緩慢的 操作。因此,如果鎖持有時間預計很短,則這可能不是最快的方法。
[0015] 在一個實施例中,自旋鎖(spin-lock)操作可以用于并行操作,并且自旋鎖操作 可以與軟件鎖關聯,程序使用軟件鎖以便確保每次只有一個并行進程可以訪問存儲器的關 鍵區域。在一個實施例中,自旋鎖可以用于互相排斥。自旋鎖是這樣的鎖:其導致嘗試獲得 該鎖的線程簡單地在循環中等待("自旋"),同時反復檢查該鎖是否可用。因為線程保持活 動但未執行有用任務,所以此類鎖的使用是一種忙等待。在獲得之后,自旋鎖可以被持有到 它們被顯式釋放,然而在某些實現中,如果正在等待(持有鎖)的線程阻塞或"轉到休眠", 則自旋鎖可以被自動釋放。
[0016] 在一個實施例中,自旋鎖(例如,信號量(semaphore))可以被實現為變量或令牌, 該變量或令牌與指向數據結構的共享指針關聯,并且可由多個線程讀取以便判定指針當前 是否由線程之一使用。每當線程讀取指示沒有其它線程當前正在使用指針的信號量時,該 線程能夠將信號量設置為一個值,該值向所有其它線程指示指針當前在使用中(被稱為 "獲得"信號量的過程)。因此,當另一個線程希望訪問數據結構,但檢測到信號量由另外一 個線程持有時,需要該線程一直等待,直到另外一個線程釋放信號量以便指示其它線程可 再次訪問指針(并且因此訪問數據結構)。在一個實施例中,在任何給定時間僅允許一個線 程持有信號量。
[0017] 此外,在一個實施例中,自旋鎖將"自旋"并且反復檢查以便查看鎖是否被解鎖,而 不是上下文切換。自旋非常快速,因此解鎖-鎖定對之間的延遲很小。但是,自旋不完成任 何工作,因此如果花費的時間變得很多,則可能不如休眠互斥高效。因此,本發明提供一種 解決方案,其1)通過在始終自旋的同時減少CPU周期的浪費,提高計算效率,并且2)如果 任務不能立即獲得鎖,則允許任務避免轉到休眠并且始終重新分派任務。
[0018] 因此,本發明用于在計算環境中通過至少一個處理器設備使用鎖定機制進行高效 任務調度。在一個實施例中,僅作為舉例,如果針對鎖定機制