1. 程式人生 > >排隊理論之性能分析 - Little Law & Utilization Law

排隊理論之性能分析 - Little Law & Utilization Law

util ive community target 等待時間 時間 說明 div rman

了解一個系統的性能一般是參考一些度量值(Metric),而怎樣計算出這些Metric就是我們要討論的。Little Law(排隊理論:利特兒法則)和Utilization Law是Performance Engineering(System Engineering的一部分)經常使用的法則,它們都是數學理論,因此可作為性能計算的理論根據。具體分析兩個法則超出了我個人的知識範圍。因此我將只談一下怎樣應用。


在這之前我有寫過存儲系統性能 - 帶寬計算,當中就應用到了Little Law和Utilization Law,大家能夠參考一下。


Little Law 是由Philip M.Morse在1954年提出,公式為L = λW,但當時並沒有被證明,所以只如果為正確。而一直被人們使用著。Philip希望讀者可以提供這樣的關系所不適用的情況來推翻它。

John Little在1961年證明了並沒有一種情況不適用於Little Law,從而為Little Law的正確性提供了理論證明。


Little Law定義了(以超市為例):在一個穩定的系統中。長時間觀察到的平均顧客數量L = 長時間觀察到的有效顧客到達速率λ * 平均每一個顧客在系統中花費的時間W,即L = λW。本法則適用於不論什麽系統,甚至是一個系統中的子系統,比方一家銀行的客戶隊列。唯一的要求就是系統必須是穩定的。非搶占式的


為了更好的理解Little Law,請考慮一家僅有一個櫃臺的小型超市。櫃臺每次僅僅能服務一位顧客。而且如果全部人都會買東西。這個系統的工作流程能夠化簡為:入店 -> 瀏覽 -> 結賬 -> 離開。這是一個穩定的系統。如果【顧客進入超市的速率 > 顧客離開超市的速率】。即Arrival rate > Exit rate,那麽系統就會開始不穩定。由於等待的客戶隊列會逐漸變得無限長。


  • Little Law告訴我們:超市內的平均客戶數量L = 客戶到達速率λ * 客戶在超時內的逗留時間W,即L = λW
  • 如果客戶達到速率為10人/小時,平均每一個人在超市內逗留0.5小時,那麽該超市在不論什麽一個時間點的顧客數量 L= 10 * 0.5 = 5人
  • 現如果顧客開始蜂擁,達到速率增長至20人/小時,如果顧客逗留時間不變依舊為0.5小時,那麽超市必須可以容納 L=20*0.5 = 10人,否則都多出的5人須要在超市外等待;如果超市臨時無法擴容。即僅僅能容納5人。為了讓多出的5人不須要在超市外等待。必須縮短顧客逗留時間W = 5/20 = 0.25小時


總結來說,在流量添加的情況下。為了保證系統穩定執行(保持一個可接受的隊列長度,從而保證可接受的響應時間),即超市在隨意時間點都能保證可以服務5位顧客的能力,依據Little Law法則,有兩種方案:

  • 第一:擴大超市容量(建造更大的超市)
  • 第二:降低顧客逗留時間(提高櫃臺效率,比方添加櫃臺數量。培訓櫃臺人員)

====================================================

說了那麽多都沒提到性能,別急。假設我們把相同的樣例應用到磁盤系統。即:


l 確保磁盤穩定執行所同意的最大請求數量 L

l I/O請求達到速率 λ

l 磁盤處理每個I/O所花費的時間 W


因此,保證一塊磁盤穩定執行所同意的最大I/O請求數量 L = I/O請求達到速率λ * 磁盤處理每個I/O所花費的時間W,即L = λW;同理,對於一個I/O控制器,到達速率必須 < 服務速率,或者說服務時間必須 < 內部到達時間,否則I/O控制器的處理能力無法滿足過量的I/O請求,必定會導致性能下降。


結合Utilization Law(不介紹了。直接應用。它可用於描寫敘述I/O控制器的利用率)。公式為 U = λ * Rs


l U = I/O控制器的利用率

l Rs = 服務時間,即控制器處理一個I/O的平均時間,對於磁盤來說,服務時間 Rs = 尋道時間 + 旋轉延遲 + 內部傳輸速率(數據從一個盤面上的單個磁道傳輸到Buffer的速率)。所以一般是一個定值,由磁盤本身的物理特性決定。

l λ = 到達速率


Little Law + Utilization Law能夠推導出例如以下公式(推導過程省略,直接用)


l 平均響應時間 R = Rs / (1-U)

l 平均隊列長度 Nq = U^2 /(1-U)


有了如上這些公式。我們來考慮這樣一個磁盤系統, λ = 100個/秒,Rs = 8ms。我們能夠得到


l 磁盤利用率 U = Rs / Ra = 8/10 = 0.8或80%

l 響應時間R = Rs / (1-U) = 8/(1-0.8) = 40ms

l 平均隊列長度Nq = U^2 / (1-U) = 0.8^2 / (1-0.8) = 3.2

l 一個請求在隊列中的等待時間 = 【U * Rs】或【響應時間 – 服務時間】 = 40 – 8 = 32ms


若把控制器處理能力加倍,則服務時間和利用率都會減半,Rs = 4ms。U = 40%。

此時,響應時間R能夠大大減少;同理。假設處理能力減半,那麽服務時間和利用率都會極大添加。這裏有一個很重要的概念。就是我們常常提到的,隨著利用率添加到某一個點。假設繼續上升,那麽響應時間會呈指數形式增長,也就是說R和U並非線性的關系,我們分析一下【響應時間R = Rs / (1-U)】來看看是為什麽:


平均響應時間 R = Rs / (1-U),Rs是定值。可見。當U = 1時,也就是控制器飽和時。【響應時間R】趨近於無窮大,這是一個極限的概念,技術分享 。當U趨向於1時,又Rs是常量,所以R趨向於無窮大。

因此。處於100%利用率的控制器就是瓶頸所在,它會迫使I/O序列化(I/O serialization),即每一個I/O都必須在隊列中等待它前面的I/O被處理完成之後才幹得到服務。一旦隊列無限加大(一般buffer會有控制機制阻止隊列的無限增長,比方Fiber Channel BB Credit,TCP Window,Ethernet PAUSE等等),響應時間會急劇上升。


通常我們都覺得當利用率達到70%以後。未來的繼續增長會使得性能以指數形式下降。而不是線性的

為什麽是非線性的。大家能夠嘗試畫一下 R= Rs/ (1-U) 的函數圖像,在U逐漸趨向於1時,R趨向於無窮大,垂直漸近線是 x = 1。只是我不明確70%是怎樣計算出來的,可能是求U在 [0,1)範圍內的導數通過比較斜率變化率來推斷的?其實,當U取0.9,0.99,0.999,....,0.9999999時。你會發現R = 10Rs, 100Rs, 1000Rs,....,10000000Rs,R以指數形式增長。

而U取0.1,0.11,0.111時,R的添加就緩慢非常多。

隨著U的取值添加,R的上升趨勢也會以非線性的方式呈上升趨勢。70%可能是通過數學方式計算得到。也可能僅僅是一個比較得來的經驗值,擅長數學的朋友能夠補充說明一下。

技術分享

技術分享

排隊理論之性能分析 - Little Law &amp; Utilization Law