下圖顯示了一些可以更改優(yōu)先級值的方法。
圖 6. 如何確定優(yōu)先級值。 插圖顯示了如何能在執行過(guò)程中或應用了 nice 命令之后更改線(xiàn)程調度優(yōu)先級值。優(yōu)先級值越小,線(xiàn)程優(yōu)先級越高。開(kāi)始時(shí),nice 值缺省為 20 而基本優(yōu)先級缺省為 40.在執行一些操作及處理器損失后,nice 的值仍為 20 且基本優(yōu)先級仍為 40.在運行 renice ——5 命令后及使用和以前相同的處理器的情況下,nice 值現在是 15 而基本優(yōu)先級仍為 40.在以 50 的值發(fā)出子例程 setpri() 之后,固定優(yōu)先級現在是 50 而 nice 值和處理器的使用無(wú)關(guān)。
線(xiàn)程的 nice 值在創(chuàng )建線(xiàn)程時(shí)設置并且在線(xiàn)程的整個(gè)生命期中都是常量,除非用戶(hù)通過(guò) renice 命令或 setpri()、setpriority()、thread_setsched() 或 nice() 系統調用明確更改了它的值。
處理器損失是一個(gè)整數,它通過(guò)線(xiàn)程最近的處理器使用來(lái)計算。如果每次在一個(gè) 10 ms 的時(shí)鐘滴答結束時(shí)線(xiàn)程受處理器控制,則最近的處理器使用值近似加 1,直到達到最大值 120.每個(gè)滴答的實(shí)際優(yōu)先級損失隨著(zhù) nice 的值增加。所有線(xiàn)程的最近處理器使用值每秒重算一次。
結果如下:
不固定優(yōu)先級的線(xiàn)程的優(yōu)先級隨著(zhù)其最近處理器使用的增加而變低,反之亦然。這暗示一般來(lái)講,某線(xiàn)程最近被分配的時(shí)間片越多,則它被分配下一個(gè)時(shí)間片的可能性越小。
不固定優(yōu)先級的線(xiàn)程的優(yōu)先級隨著(zhù)其 nice 值的增加而變低,反之亦然。
注:使用多處理器運行隊列及其負載平衡機制以后,nice 或 renice 的值對線(xiàn)程的優(yōu)先級可能沒(méi)有預期的影響,因為較低優(yōu)先級的運行時(shí)間可能等于或大于較高優(yōu)先級的運行時(shí)間。要求 nice 或 renice 產(chǎn)生預期效果的線(xiàn)程應該放在全局運行隊列中。
可以使用命令 ps 顯示進(jìn)程的優(yōu)先級值、nice 值和短期的處理器使用值。
請參閱「處理器的控制爭用」中對使用 nice 和 renice 命令的更詳細的討論。
請參閱「調諧線(xiàn)程優(yōu)先級值的計算」,里面有處理器損失計算和最近處理器使用值衰減的詳細信息。
優(yōu)先級機制也用于 AIX 工作負載管理器中來(lái)加強處理器資源管理。因為在工作負載管理器下分類(lèi)的線(xiàn)程具有的優(yōu)先級由工作負載管理器管理,它們可能與沒(méi)有在工作負載管理器下分類(lèi)的線(xiàn)程具有不同的優(yōu)先級行為。
線(xiàn)程的調度策略下面是線(xiàn)程調度策略的可能值:
SCHED_FIFO這種策略的線(xiàn)程被調度后,它會(huì )一直運行到結束,除非被阻塞或有一個(gè)較高優(yōu)先級的線(xiàn)程可分派,它將自愿服從處理器的控制。只有固定優(yōu)先級的線(xiàn)程才能有 SCHED_FIFO 調度策略。
SCHED_RR當一個(gè) SCHED_RR 線(xiàn)程在時(shí)間片的末尾有控制權時(shí),它將移動(dòng)到和它具有相同優(yōu)先級的可分派線(xiàn)程隊列的尾部。只有固定優(yōu)先級的線(xiàn)程才能有 SCHED_RR 的調度策略。
SCHED_OTHER這個(gè)策略在“POSIX 標準 1003.4a”中作為定義的執行程序進(jìn)行定義。在每個(gè)時(shí)鐘中斷時(shí)重算運行線(xiàn)程的優(yōu)先級值意味著(zhù)該線(xiàn)程可能失去控制權,因為它的優(yōu)先級值已經(jīng)超過(guò)了另一可分派線(xiàn)程的優(yōu)先級值。
SCHED_FIFO2該策略和 SCHED_FIFO 相同,只是它允許一個(gè)僅睡眠了很短時(shí)間的線(xiàn)程在被喚醒時(shí)可放置在其運行隊列的頭部。這個(gè)時(shí)間周期是相似性限制(可用 schedtune -a 進(jìn)行調節)。該策略?xún)H可用于 AIX 4.3.3 及其后續版本。
SCHED_FIFO3調度策略設置成 SCHED_FIFO3 的線(xiàn)程總是放置在運行隊列的頭部。為了防止屬于 SCHED_FIFO2 調度策略的線(xiàn)程放置在 SCHED_FIFO3 之前,當 SCHED_FIFO3 線(xiàn)程入隊列時(shí)更改運行隊列參數,這樣屬于 SCHED_FIFO2 的線(xiàn)程就不滿(mǎn)足使其能夠加入運行隊列頭部時(shí)必須滿(mǎn)足的標準。該策略?xún)H可用于 AIX 4.3.3 及其后續版本。
SCHED_FIFO4只要優(yōu)先級值相差 1,較高優(yōu)先級的 SCHED_FIFO4 調度類(lèi)線(xiàn)程就不會(huì )搶占當前正運行的低優(yōu)先級線(xiàn)程。缺省行為是當前運行于某給定 CPU 的低優(yōu)先級線(xiàn)程被有資格在同一 CPU 上運行的高優(yōu)先級線(xiàn)程搶占。該策略?xún)H可用于 AIX 5L V5100-01 + APAR IY22854 及其后續版本。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/