QNX 自適應分區

QNX 自適應分區

  QNX中微子RTOS支持自適應分區,允許您控制競爭進程之間的資源分配。

分區是什麼?

  在許多計算機系統中,保護不同的應用程序或應用程序組不受其他應用程序的影響是很重要的。你不希望一個應用程序——無論是有缺陷的還是惡意的——破壞另一個或阻止它運行.
  爲了解決這個問題,一些系統在一組應用程序周圍使用稱爲分區的虛擬牆,以確保每個分區都有一組經過設計的資源。考慮的主要資源是CPU時間,但也可以包括任何共享資源,如內存和文件空間(磁盤或閃存)。
Figure55

  通常,競爭資源分配系統的主要目標是將一臺計算機劃分爲儘可能少交互的一組較小的計算機;然而,這種方法不是很靈活。自適應分區採用了更靈活的視圖。QNX中微子分區是自適應的,因爲:

  • 您可以在運行時更改配置。
  • 它們通常在一個配置時間內固定
  • 分區行爲在運行時自動適應各種條件。例如:
    1. 空閒時間被重新分配到其他調度程序分區.
    2. 文件系統可以使用一種臨時在時間分區之間移動線程的機制來向客戶端計費時間。

  因此,自適應分區的限制更少,功能更強大。除了自適應之外,時間分區還允許您在將CPU時間視爲資源時,輕鬆地對其基本不同的行爲建模。

如果自適應分區不是“盒子”,那麼它們是什麼?

  自適應分區是一組命名規則。選擇這些規則是爲了控制系統的全局資源行爲。當一個進程或線程與一個特定的分區相關聯時,它的行爲將由該分區當時的規則管理。
  例如,自適應分區類似於屬於俱樂部的人。每個人可以加入幾個不同的俱樂部。他們有時甚至可以從一個俱樂部轉到另一個俱樂部。但是當他們在一個特定的俱樂部時,他們同意遵守那個特定俱樂部的規則。
分區提供:

  1. 內存保護: 每個分區都是離散的,由內存管理單元(MMU)控制。
  2. 超載保護:每個分區都保證有一個執行時間片,由系統設計師指定。
      通過使用多個分區,可以避免出現單點故障。例如,失控的進程不能佔用整個系統的資源;其他分區中的進程仍然接收它們分配的系統資源份額。
      目前,QNX中微子的過程模型比其他一些操作系統提供了更多的保護,包括:
  3. 進程之間的全內存保護。
  4. 消息傳遞提供統一的和受控的IPC
  5. 乾淨的客戶機-服務器模型進行優先級繼承
  6. 硬實時確定性調度
  7. 設備、文件和內存的詳細權限模型
  8. 內存、文件描述符、CPU和優先級限制,使用POSIX setrlimit()函數來約束失控的進程

爲什麼自適應?

  爲了在保證不超載的情況下提供實時性能,QNX中微子引入了自適應分區。嚴格的分區在很少或沒有動態部署軟件的靜態系統中工作得最好。在動態系統中,靜態分區可能是低效的。例如,分區之間執行時間的靜態劃分會浪費CPU時間並帶來延遲:

  • 如果大多數分區都是空閒的,並且其中一個分區非常忙,那麼這個繁忙的分區就不會收到任何額外的執行時間,而其他分區中的後臺線程則會浪費CPU時間。
  • 如果爲一個分區被調度了一箇中斷,那麼它必須等待,直到該分區運行。這可能會導致不可接受的延遲,特別是在出現連續突發中斷的情況下。
    NOTE:雖然必須重新構建系統的OS映像,但您可以在不更改(甚至重新編譯)應用程序代碼的情況下引入自適應分區。
      自適應分區是一組線程,它們工作在一個公共或相關的目標或活動上。與靜態分區一樣,自適應分區也有一個分配給它的預算,這個預算保證了它對CPU資源的最小共享。與靜態分區不同,自適應分區:
  1. 自適應分區沒有鎖定的一組固定代碼在靜態分區上;您可以根據需要動態地添加和配置自適應分區
    分區的數量是有限制的。對於線程調度器,最多有8個調度器分區,因爲對於每個調度操作,線程調度器必須檢查每個分區,然後才能選擇要在其上運行的線程。在700mhz x86上每秒可能發生50000次。(一個緩慢的機器)。因此,一定要限制調度器分區的數量,以將調度器開銷降到最低。
  2. 在正常負載下表現爲全局硬實時線程調度,但即使在過載情況下仍然可以提供最小的中斷延遲。
  3. 最大化CPU資源的使用。對於線程調度程序,它將分區的未使用預算分配給那些在系統未加載時需要額外資源的分區。

自適應劃分的優勢

  自適應分區爲系統的設計、開發、運行和調試提供了許多好處。

###工程產品性能
  自適應分區允許您設計系統以優化其性能。

分區

  分區對資源進行劃分,使它們可以被一組程序使用。一個分區表示一個資源的一部分,並且包含很少的定義資源使用的規則。資源包括基本對象,如處理器週期、程序存儲或高級對象,如緩衝區、頁表或文件描述符。對於線程調度程序,自適應分區確保了系統中任何可用的空閒時間(即,一個分區不需要的分區預算中的CPU時間)對其他分區可用。這使系統能夠處理在正常系統操作期間發生的突發處理需求。對於循環線程調度程序,有一種“使用它”或“丟失它”的方法,即未使用的CPU時間在沒有使用完整預算的分區上運行一個空閒線程。

分區繼承

  自適應分區的另一個重要特性是分區繼承的概念。
  對於線程調度程序,該特性允許設計人員開發無需(或最少)預算就可以運行的服務器進程。當服務器執行來自客戶端的請求時,客戶端分區將按時間計費。如果沒有這個特性,CPU預算就會分配給服務器,而不管它使用了多少或者使用了多少次。這些功能的好處包括:

  1. 你不必對系統進行過度的設計,這樣整體成本就會降低。
  2. 如果您添加了一個應用程序,您不必重新設計公共服務(如文件系統或服務器)的預算。
  3. 該系統對用戶的響應速度更快、響應速度更快。
  4. 該系統保證了重要任務的時間。
  5. 您可以使用優先級來指定進程的緊急性,使用分區的CPU預算來指定其重要性。

處理設計複雜性

  設計大規模的分佈式系統本質上是複雜的。典型的系統有大量的相互獨立開發的子系統、進程和線程。設計被分成不同的組,這些組具有不同的系統性能目標、不同的確定優先級的方案和不同的運行時優化方法。
  在不同的地理位置和時區進行產品開發會使情況進一步複雜化。一旦所有這些不同的子系統都集成到一個公共的運行時環境中,系統的所有部分都需要在所有的操作場景下提供足夠的響應,例如:

  • 正常的系統加載
  • 高峯期
  • 故障模式

  在並行的開發道路上,在集成產品時總會出現系統問題。通常,一旦系統運行,就會發現導致嚴重性能下降的不可預見的交互。當出現這種情況時,通常很少有設計師或架構師能夠在系統級診斷並解決這些問題。解決方案通常需要大量的修改(通常是通過反覆試驗)才能得到正確的結果。這擴展了系統集成,影響了投放市場的時間。
  這種性質的問題可能需要一週或更長的時間來排除故障,並且需要幾周的時間來調整整個系統的優先級、重新測試和改進。如果這些問題不能得到有效的解決,產品的可擴展性就會受到限制。
  這主要是由於沒有有效的方法來“預算”跨這些組的CPU使用。線程優先級提供了一種確保關鍵任務運行的方法,但是沒有爲重要的、非關鍵的任務提供有保證的CPU時間,這些任務在正常操作中可能會被中斷。此外,建立線程優先級的通用方法很難跨大型開發團隊擴展。
  自適應分區使用線程調度程序允許架構師儲備應急資源,比如一個災難恢復系統,或field-debugging shell,併爲每個子系統定義高級CPU預算,允許開發團隊實現自己的計劃和在預算內進行優化。這種方法允許設計團隊獨立地開發子系統,並簡化了集成工作。這樣,提高了產品上市的時間,促進了產品的規模化。

提供安全性

  許多系統容易受到拒絕服務(DOS)攻擊。例如,惡意用戶可以用需要處理的請求轟炸系統, 當受到攻擊時,這個進程會使CPU超載,並有效地使系統的其他部分陷入飢餓。
Figure56

  一些系統試圖通過實現一個監測進程來克服這個問題,該進程檢測CPU使用率,並在它認爲某個進程使用了太多CPU時調用糾正操作。這種方法有很多缺點,包括:

  1. 響應時間通常很慢。
  2. 這種方法在處理合法請求時,限制了CPU的使用。
  3. 它不是絕對可靠的;它依賴於適當的線程優先級來確保監視器進程獲得足夠的CPU時間。
      線程調度程序可以解決這個問題。線程調度程序可以爲系統的各種功能提供單獨的預算。這確保了系統總是有一些處理重要任務的CPU容量。線程可以更改自己的優先級,這可能是一個安全漏洞,但是可以配置線程調度程序,以防止在分區中運行的代碼更改自己的預算。
    Figure57

  由於自適應分區可以將任何未使用的CPU時間分配給需要它的分區,所以當需要增加處理時,它不會不必要地限制。

Debugging

  自適應分區甚至可以通過向系統提供一個“應急門”來簡化嵌入式系統的調試(在開發或部署期間)。
  只需創建一個可以運行診斷工具的分區;如果不需要使用該分區,則線程調度程序將在其他分區之間分配其預算。這爲您提供了在不影響系統性能的情況下訪問系統的機會。

自適應分區線程調度程序

  線程調度器是一個可選的調度器,它允許您保證將CPU吞吐量的最小百分比分配給一組線程、進程或應用程序。分配給一個分區的CPU時間百分比稱爲預算。線程調度器被設計在覈心QNX中微子架構之上,主要是爲了解決嵌入式系統設計中的這些問題:

  • 當系統過載時,保證指定的CPU時間的最小共享
  • 防止不重要或不受信任的應用程序獨佔系統
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章