linux核心設計學習

來源:互聯網
上載者:User

標籤:des   io   os   ar   for   div   art   sp   cti   

Server Load Balancer程式 load_balance
調用條件:
只要當前可執行隊列為空白,它就會被調用。
被定時器調用:系統空閑時每隔1毫秒調用一次或其他情況下每隔200mm調用一次。
單一處理器不會被調用

執行步驟
1. 首先,load_balance調用find_busiest_queue(),找到最繁忙的可執行隊列。也就是說該隊列的進程數目最多。如果沒有哪個可執行隊列中進程的數目比當前隊列的數目多25%或25%以上,find_busiest_queue()返回NULL,並且load_balance()也返回。否則最繁忙可執行隊列就被返回。
2.其次,load_balance()從最繁忙的運行隊列中選擇一個優先順序數組以便抽取進程。最好是到期數組,因為那裡面的進程已經有相對較長的一段時間沒有運行了,很可能不在處理器的快取中(換句話說,他們不是快取命中(cache hot)如果到期數組為空白,那麼就只能選活動數組。
3.接著,load_balance()尋找到含有進程並且優先順序最高(值最小)的鏈表,因為先把優先順序高的進程平均分散開來才是最重要的。
4.分析找到的所有這些優先順序相同的進程,選擇一個不是正在執行,也不會因為取消處理器相關性而不可移動,並且不在快取中的進程。如果有進程滿足這些條件,就調用pull_task()將其從最繁忙的隊列中抽取到當前隊列。
5.只要可執行隊列之間仍然不均衡,就重複上面兩個步驟,繼續從繁忙的隊列中抽取進程到當前隊列。這最終會消除不平衡,此時,接除對當前隊列進程的鎖定,從load_balance()返回。

 

linux核心設計學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.