日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

linux+任务默认优先级,uclinux内核的任务优先级及其load_weight

發(fā)布時(shí)間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux+任务默认优先级,uclinux内核的任务优先级及其load_weight 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

快樂(lè)蝦

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文適用于

ADSP-BF561

uclinux-2008r1.5-RC3(移植到vdsp5)

Visual DSP++ 5.0(update 5)

歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息

內(nèi)核將任務(wù)分為兩類,一類是實(shí)時(shí)任務(wù),另一類是非實(shí)時(shí)任務(wù),這兩類任務(wù)的優(yōu)先級(jí)并不同,在include/linxu/sched.h中有如下定義:

/*

* Priority of a process goes from 0..MAX_PRIO-1, valid RT

* priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH

* tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority

* values are inverted: lower p->prio value means higher priority.

*

* The MAX_USER_RT_PRIO value allows the actual maximum

* RT priority to be separate from the value exported to

* user-space.This allows kernel threads to set their

* priority to a value higher than any user task. Note:

* MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.

*/

#defineMAX_USER_RT_PRIO100

#defineMAX_RT_PRIOMAX_USER_RT_PRIO

#defineMAX_PRIO(MAX_RT_PRIO + 40)

即實(shí)時(shí)任務(wù)的優(yōu)先級(jí)為[0, 99],而非實(shí)時(shí)任務(wù)的優(yōu)先級(jí)則為[100, 139]。這個(gè)數(shù)值越小,表示其優(yōu)先級(jí)越高。

相應(yīng)的,調(diào)度策略也分為兩類:

/*

* Scheduling policies

*/

#defineSCHED_NORMAL0

#defineSCHED_FIFO1

#defineSCHED_RR2

#defineSCHED_BATCH3

其中對(duì)于實(shí)時(shí)任務(wù)可以使用SCHED_FIFO與SCHED_RR兩種策略,而對(duì)于非實(shí)時(shí)任務(wù)則使用SCHED_NORMAL和SCHED_BATCH兩種策略。

1.2static_prio到load_weight的轉(zhuǎn)換

每一個(gè)任務(wù)都有一個(gè)prio成員和load_weight成員,可以從優(yōu)先級(jí)計(jì)算load_weight,這個(gè)工作由set_load_weight函數(shù)完成:

staticvoid set_load_weight(struct task_struct *p)

{

if (has_rt_policy(p)) {

#ifdefCONFIG_SMP

if (p == task_rq(p)->migration_thread)

/*

* The migration thread does the actual balancing.

* Giving its load any weight will skew balancing

* adversely.

*/

p->load_weight = 0;

else

#endif

p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority);

} else

p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio);

}

這里有:

#defineis_rt_policy(p)((p) != SCHED_NORMAL && (p) != SCHED_BATCH)

#definehas_rt_policy(p)unlikely(is_rt_policy((p)->policy))

從這里就可以看出對(duì)于實(shí)時(shí)任務(wù)和非實(shí)時(shí)任務(wù)來(lái)講,它們的計(jì)算方式是不同的。

#definePRIO_TO_LOAD_WEIGHT(prio) /

LOAD_WEIGHT(static_prio_timeslice(prio))

#defineRTPRIO_TO_LOAD_WEIGHT(rp) /

(PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp))

比較這兩個(gè)宏定義可以發(fā)現(xiàn)實(shí)時(shí)任務(wù)計(jì)算所得的load_weight值都將大于非實(shí)時(shí)任務(wù)的load_weight值,下面對(duì)此原因進(jìn)行分析:

#defineLOAD_WEIGHT(lp) /

(((lp) * SCHED_LOAD_SCALE) / TIME_SLICE_NICE_ZERO)

#defineSCHED_LOAD_SCALE128UL/* increase resolution of load */

#defineTIME_SLICE_NICE_ZERO DEF_TIMESLICE

#defineDEF_TIMESLICE(100 * HZ / 1000)

由于SCHED_LOAD_SCALE和TIME_SLICE_NICE_ZERO這兩個(gè)值均為常數(shù),因而傳遞給LOAD_WEIGHT的值越大,計(jì)算所得的結(jié)果也越大。

在上面的宏定義中,使用了static_prio_timeslice函數(shù):

staticunsigned int static_prio_timeslice(int static_prio)

{

if (static_prio < NICE_TO_PRIO(0))

return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);

else

return SCALE_PRIO(DEF_TIMESLICE, static_prio);

}

#defineSCALE_PRIO(x, prio) /

max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)

從這里可以看出,傳給此函數(shù)的static_prio值越小,其計(jì)算所得的值越大。

再回頭看

#defineRTPRIO_TO_LOAD_WEIGHT(rp) /

(PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp))

由于非實(shí)時(shí)任務(wù)的值都將大于MAX_RT_PRIO,因此PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO)計(jì)算所得的值都將大于非實(shí)時(shí)任務(wù)計(jì)算所得的值,再加上LOAD_WEIGHT(rp)自然更大。從而可以得出結(jié)論:

實(shí)時(shí)任務(wù)計(jì)算所得的load_weight值都將大于用戶任務(wù)的load_weight值,且任務(wù)的優(yōu)先級(jí)越低,計(jì)算所得的值越大,不論它是實(shí)時(shí)任務(wù)還是非實(shí)時(shí)任務(wù)。

對(duì)于init_task這個(gè)默認(rèn)的任務(wù)來(lái)講,在HZ取默認(rèn)值250的情況下,其load_weight的值將為128。

總結(jié)

以上是生活随笔為你收集整理的linux+任务默认优先级,uclinux内核的任务优先级及其load_weight的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。