亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3222 | 回復(fù): 1
打印 上一主題 下一主題

請教一個CPU時鐘更新的問題(sched_fair.c和sched_rt.c) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-11-26 08:58 |只看該作者 |倒序瀏覽
這兩個調(diào)度算法的文件中都有一個更新CPU  clock的函數(shù),sched_rt為:
static void update_curr_rt(struct rq *rq)
{
        struct task_struct *curr = rq->curr;
        struct sched_rt_entity *rt_se = &curr->rt;
        struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
        u64 delta_exec;
       
        if (!task_has_rt_policy(curr))
                return;

        delta_exec = rq->clock - curr->se.exec_start;
        if (unlikely((s64)delta_exec < 0))
                delta_exec = 0;

        schedstat_set(curr->se.exec_max, max(curr->se.exec_max, delta_exec));
        curr->se.sum_exec_runtime += delta_exec;
        account_group_exec_runtime(curr, delta_exec);
......  ......

sched_fair為:
static void update_curr(struct cfs_rq *cfs_rq)
{
        struct sched_entity *curr = cfs_rq->curr;
        u64 now = rq_of(cfs_rq)->clock;
        unsigned long delta_exec;

        if (unlikely(!curr))
                return;

        /*
         * Get the amount of time the current task was running
         * since the last time we changed load (this cannot
         * overflow on 32 bits):
         */
        delta_exec = (unsigned long)(now - curr->exec_start);
        if (!delta_exec)
                return;
....... .......

為什么sched_fair中的delta_exec不用判斷是否小于0,而直接判斷等于0

現(xiàn)在碰到一個問題,多核CPU上,每個CPU的sched_clock_cpu的值不一樣,就出現(xiàn)了CPU0上一會更新為CPU0自己的CLOCK,一會更新為CPU1的CLOCK,但是后者比前者小,結(jié)果減出來是個負數(shù),導(dǎo)致很多地方的進程時間不正確.

各位大狹們多多指教,非常感謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2011-11-26 10:26 |只看該作者
自己先頂一下. 看到kernel.org上的原始修改:
sched: optimize update_curr()

author Peter Zijlstra <a.p.zijlstra@chello.nl>  
Tue, 16 Dec 2008 07:45:31 +0000 (08:45 +0100)
committer Ingo Molnar <mingo@elte.hu>  
Tue, 16 Dec 2008 08:46:33 +0000 (09:46 +0100)
commit 34f28ecd0f4bdc733c681294d02d9fab5880591b
tree 7869949614b6a4f2bf52f01dfaa769ebe22c8aab tree | snapshot
parent 03e89e4574a680af15f59329b061f35d9813aff4 commit | diff

sched: optimize update_curr()

Impact: micro-optimization

Skip the hard work when there is none.

index 928cd74..5ad4440 100644 (file)

--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -492,6 +492,8 @@ static void update_curr(struct cfs_rq *cfs_rq)
         * overflow on 32 bits):
         */
        delta_exec = (unsigned long)(now - curr->exec_start);
+       if (!delta_exec)
+               return;

        __update_curr(cfs_rq, curr, delta_exec);
        curr->exec_start = now;


只是為了優(yōu)化, sched_rt上的那個小于0的判斷是一直存在的. 不清楚作者為什么不采用和rt一樣的判斷.
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP