QNX system architecture 16 - Adaptive Partitioning

QNX支持自適應分區,這裏的分區並不是常見的磁盤分區,而是一個可分配資源集合。QNX通過自適應分區控制競爭進程間的資源分配控制。

What are partitions

在一些計算機系統中,需要把應用或者應用組同其他應用或應用組隔離起來。我們不希望一個應用程序(不管是不是惡意的)破換其他應用或者阻止其他應用執行。

針對這個問題,某些系統使用虛擬牆,也稱爲分區,確保在這個分區內的一組進程給定一組資源。主要的資源是CPU運行時間,也包括其他共享資源,比如memory和文件空間。

Figure 55: Static partitions guarantee that processes get the resources specified by the system designer

典型的,競爭資源分區系統的主要目標是把計算機劃分爲一組小計算機,並使得他們間的交互儘可能少。然而,這種方法非常的不靈活。自適應分區採用了更靈活的方式。

QNX 分區自適應表現在:

  • 可以在運行時改變配置
  • 分區僅僅在配置作用時間內固定
  • 分區在運行時自動適應條件,比如:
    • 空閒時間重新分配給其他的調度分區
    • 文件系統可以對在不同時間分區移動的clients進行時間記賬。

因此,自適應分區限制更少更強大。除了自適應,時間分區允許我們根據不同的行爲,劃分CPU時間分區。


If adaptive partitions aren't boxes, what are they?

一個自適應分區是一組規則的集合。規則用來控制系統內資源的分配。

當一個進程或者線程被關聯到一個特定的分區,那麼它的行爲就受到分區規則的控制。

比如,自適應分區類似於俱樂部中的成員。每個人可以參加幾個不同的俱樂部。他們甚至可以從一個俱樂部移到另外一個俱樂部。但是當他們在某個特定俱樂部時,他們必須遵守這個俱樂部的規則。

分區提供:

  • 內存保護 - 每個分區是分離的,被MMU控制。
  • overload protection - 每個分區都保證執行時間片,時間片由系統設計者指定。

通過使用多個partitions,你可以避免單點失敗。例如,一個跑飛的程序不能佔用整個地址空間,在其他分區運行的進程仍然可以分配系統資源。

當前,QNX進程模型和其他操作系統相比,提供了更多保護,包括:

  • 進程間的全內存保護
  • 消息傳遞提供了唯一的可控值的IPC
  • client-server模型的優先級繼承
  • 硬時間決定調度
  • devices,files,和內存的更細節的權限模型。
  • 內存,文件描述符,CPU和優先級限制,使用POSIX setrlimit()函數限制跑飛的進程。

Why adaptive?

提供實時性能,防止過載。QNX引入了自適應分區。固定分區在靜態系統,很少或沒有軟件動態配置的情況下,運行良好。對於動態系統,靜態分區是低效的。比如,在分區間靜態劃分CPU時間會導致延遲:

  • 如果大部分分區空閒,僅有一個非常忙,忙的分區無法獲得額外的執行時間,而其他分區的後臺線程卻在浪費時間。
  • 如果一箇中斷在某個分區內調度,那麼中斷要等到分區運行。這可能會造成無法接受的延遲,特別是如果中斷是突發的情況。

一個自適應分區是一組線程,爲了共同的目標和行爲。對於靜態分區,自適應分區分配了預算,保證它的最小共享CPU資源。而對於靜態分區,自適應分區:

  • 可以按需動態的增加和調整自適應分區。
  • 在正常負載下,運行爲全局硬實時線程調度。但是在超載的情況下,仍然能提供最小中斷延遲。
  • 爲了最大化CPU資源使用。線程調度器把一個分區未用的配額分配給需要額外資源的分區。

Benefits of adaptive partitioning

自適應分區在設計,開發,運行和調試系統時提供了很多好處。

Engineering product performance

自適應分區設計系統有助於性能優化

Partitioning

分區劃分系統資源,供應用程序使用。一個分區包含一些資源並且定義了這些資源的使用規則。資源包括處理器,buffers,頁表或者文件描述符。

關於線程調度,自適應分區確保空閒的時間可以分配給其他分區使用。這使得系統可以處理突發的進程需求。對於輪轉線程調度器,未用的CPU時間被花費在運行idler線程上。

Partition inheritance

自適應分區的另外一個特色是分區繼承概念。

對於線程調度器,這個功能讓設計者開發沒有配額的服務進程。當server執行clients的請求時,client分區爲這個操作買單。沒有這個功能,只能給server分配無限制的配額,使用這個功能有如下好處:

  • 不需要過度設計系統,所以整體代價降低
  • 如果增加一個應用,並不需要重新設計通用服務的配額,比如文件系統或者servers
  • 系統速度快,響應及時。
  • 系統保證重要task的時間。
  • 使用優先級標識線程的優先級,使用分區CPU配額它的重要性。

Deal with design complexity

設計大規模的分佈式系統是複雜的。典型的系統有很多子系統,進程,彼此獨立開發的線程。設計系統時,會根據不同的系統性能目標,優先級模式和不同的運行時優化方法,進行分組設計。

產品開發會在不同地理位置,不同時區進行,使得系統設計變得更加複雜。一旦這些分離的系統被集成運行時,系統所有部分需要在下面操作場景提供相同的響應速度

  • 正常系統負載
  • 峯值期
  • 失敗情況下

在並行開發情況下,進行產品集成時會引發各種問題。典型的,一旦系統正在運行,不可預見的交互會導致嚴重的性能下降。當這類問題發生時,很少有設計者和架構師能夠從系統層面檢測或者解決該類問題。解決通常需要相當長時間的修改。這擴大了系統集成周期,影響了上市時間。

通常需要一週或者幾周才能定位該類問題,再需要幾周調整系統的優先級,重新測試,重新改進。如果這種問題不能有效的解決,產品的可擴展性是有限的。

這很大的歸結於沒有有效的方法分配CPU給不同的組。線程優先級提供了一種方法來確保關鍵任務執行,但是並沒有保證重要,非關鍵任務的執行時間,導致正常操作沒有給予足夠的CPU時間。此外,很難推廣通用的建立線程優先級方法到巨大的開發團隊。

自適應分區使用線程調度器,使得結構維護保留資源給緊急任務,比如災難恢復系統,或者調試shell。爲每個子系統定義了CPU預算,允許開發組實現自己的優先級模式,並在給定的預算內進行優化。這個方法可以讓開發者獨立的設計開發子系統,並且簡化了繼承努力。最終效果是改善了上市時間並且有助於產品的擴展。

Providing security

一些系統很容易收到拒絕服務攻擊(DOS)。比如,一個惡意的用戶通過請求需要進程處理的服務來轟炸系統。在大量請求攻擊下,這個進程可能過度佔用CPU資源,導致系統其他進程處在飢餓狀態。


Figure 56: Without adaptive partitioning, a DOS attach on one process can starve other critical functions

某些系統試圖通過增加一個監測進程,該進程監視CPU使用情況,當一個進程佔用太多CPU時間時,監測進程執行矯正行動。這個方法有如下缺點,包括:

  • 響應時間太慢
  • 這個方法抓取了合理處理需要的CPU時間。
  • 該方法不可靠,因爲它依賴於相應線程的優先級,必須確保監測線程可以獲取充足的CPU時間。

線程調度器可以解決這個問題,線程調度器通過提供額外的配額給系統功能。這可以確保系統重要任務有CPU配額。線程可以修改他們的優先級,這棵能是個安全漏洞,但是你可以配置線程調度器防止分區上運行的代碼修改它的配額。


Figure 57: With scheduler partitions, a DOS attach is contained

因爲自適應分區可以分配未用的CPU時間給需要的分區,所以沒必要捕捉那些在合法需求內的處理操作。

Debugging

自適應分區設置可以使得調試嵌入式系統更容易,在開發和部署階段提供一個"emergency door"到系統中。

創建一個可以運行診斷工具的分區,如果不需要使用這個分區,線程調度器把分區的配額分配給其他的分區。這使得有可以訪問系統而不影響性能。更多的信息,可參考Adaptive partitioning User's Guide中的Testing and Debugging 一章


Adaptive partitioning thread scheduler

該線程調度器是一個可選調度器,允許你保證每個進程組,線程或者應用都能獲得的最小CPU時間,分配給一個分區的CPU百分比稱爲配額。

QNX架構的線程調度器主要用來解決嵌入式系統設計中的如下問題:

  • 當系統負載高時,保證可獲得一個最小CPU運行時間。
  • 防止不重要的或者非可信應用獨佔系統資源。

更多的信息,參見Apative Partitioning User's Guide

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章