1. 程式人生 > >vxWorks SMP程式排程及親和性

vxWorks SMP程式排程及親和性

vxWorks smp環境下,可以同時排程N個最高優先順序任務。

1、CPU親和性

cpu affinity就是分配指定的中斷或者任務給指定CPU,分為任務親和性與中斷親和性。在SMP環境下,任務可以執行在任務一個CPU,這樣通常能夠很好的平衡各核負荷,但是如果想使用一個核專心處理訊號處理任務,就可以把CPU分配為一個核,這樣可以保證CACHE不被經常在核間切換時遭到沖刷,提高效能。可以使用如下函式對其進行設定:

中斷親和性是需要通過程式設計中斷控制器實現的,將特定ISR分配為某個核。

2、CPU預留

vxworks還為設定CPU親和性的任務提供了CPU預留功能,保證預留的CPU不被其它任務搶佔,保證任務效能。

3、SMP任務排程演算法

排程演算法首先判斷任務是否有CPU親和性,如果有則放入指定CPU ready佇列,否則放入全域性非親和性佇列。對於全域性非親和性ready佇列的任務,則要尋找沒有為其它任務做預留的CPU,進行任務排程。

下面看幾個例子:

沒有CPU預留情況1

有ABC三個任務,當A ready後,則從四個核上執行的任務中找到最低優先順序的任務為cpu2上的ty,並搶佔。當B進入readdy狀態後,由於B設定了CPU2的親和性,但這時A正在cpu2上執行,而B優先順序低於A,所以B進入掛起狀態。當C變為ready時,C具備CPU3親和性,而cpu3上的當前執行任務優先順序低於C,故C在cpu3上執行。

上面這張圖,A變成ready後,因為CPU3上執行的任務優先順序最低,做在CPU3上執行。這樣,導致具有CPU親和性的任務C沒法搶佔CPU3。

下面一張圖是CPU預留的情況:

如果CPU2,cpu3被預留後,A變成ready後,A沒有親和性條件只能在CPU0與CPU1上排程,這樣A選擇了優先順序低的CPU1。接下來B與C分別分配到了CPU2與CPU3。