zoukankan      html  css  js  c++  java
  • 啥叫sched-domain

    这周问过公司里专家,说cpu-load是说CPU的计算能力,但是从代码实在不知道cpu-load说的是啥!

    SD_SHARE_CPUPOWER 0X8000  domain的成员共享cpu power!

    SD_SHARE_PKG_RESOURCES  domain成员共享pkg resource!

    为什么要引入rt scale down的问题?

    e9e9250bc78e7f6342517214c0178a529807964b

    这个commit中的解释是:

    sched: scale down cpu_power due to RT tasks

    keep an average of amount of time spent on RT time and use the fraction to scale down the cpu_power for regular task,这个是

    -------------------------------

    sched_rt_avg_update 的巧妙计算方法:

    static inline void sched_rt_avg_update(struct rq *rq, u64 rt_delta)

    {

      rq->rq_avg += rt_data;

      sched_avg_update(rq);

    }

    void sched_avg_update(struct rq *rq)

    {

      s64 period = sched_avg_period();

      while(s64(rq->clock - rq->age_stamp) > pereriod)) {

        rq->age_stamp += period;

        rq->rt_avg /= 2;

    }

    详细分析下上面的公式发生了啥,

    while循环不断在把age_stamp往rq->clock上靠,但是

    }

    --------------------------------

    这个值在初始化sched-group的时候用的最多,是说smt关系的看看cpu的能力到底是多少吗?

    http://cache.baiducontent.com/c?m=9d78d513d98210fc06ba837f7d01d0120e55f0237ac0d16568d3e75f9214191c0231a3af60624e0b89833a2516ae3a41f7b57337200357e3d1cb8b4ccabbe57478ce3a77230b863711c419d9cb4523c023934de9d84aa6f8ba&p=993dc64ad4934eaf5be7e6291c7a93&newp=8f368d0a86cc41ac52fec7710f00c4231610db2151d4da01298ffe0cc4241a1a1a3aecbf21241406d3c2786206ae4e5deef034743d0034f1f689df08d2ecce7e3c&user=baidu&fm=sc&query=scale%5Frt%5Fpower&qid=ed7985e500042b74&p1=7

    该函数用于计算指定CPU上可用于完全公平调度的CPU POWER统计值。

    比如把整个CPU的Power 看为 SCHED_LOAD_SCALE,

    该CPU上用于运行实时进程平均时间为rq->rt_avg.

    那么可用于完全公平调度的时间就为 available = total - rq->avg.

    然后 ( available / total ) * SCHED_LOAD_SCALE就是该CPU可用于运行非实时进程的Power值。

    unsigned long scale_rt_power(int cpu)

    {
        struct rq *rq = cpu_rq(cpu);
        u64 total, available;

        sched_avg_update(rq);

        total = sched_avg_period() + (rq->clock - rq->age_stamp);
        available = total - rq->rt_avg;

        if (unlikely((s64)total < SCHED_LOAD_SCALE))
            total = SCHED_LOAD_SCALE;

        total >>= SCHED_LOAD_SHIFT;

        return div_u64(available, total);

    }


     
  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/honpey/p/7266239.html
Copyright © 2011-2022 走看看