linux PELT算法中的load计算

滑窗平均的累加计算

权重y按滑窗距离衰减,y^32 = 0.5,也就是经历32个周期将衰减一半的权重,假设本周期值是V,本周期的加权累加值为Vx,则:

一个完整周期是T,给一个基础值1024

其中

Group entity share 的计算

一个entity 的share值指它在计算runqueue上的load时(load_avg)赋予的权重,这个权重用它所在的group的对应cpu上分得的share值来表示(group 在每个cpu上都有一个runqueue,cpu上分得的share用runqueue的share来表示)

runqueue 的 load weight计算,用avg更合适,因为它比实时的weight更稳定,但由于avg的启动比较慢,在极端的场景要保证与用weight来表示的权重一致。例如组内cpu全idle突然启动一个task的场景,这相当于一个只有一个cpu的场景,需要让avg得到的值和单cpu时的值一致,即:

于是用一个近似的形式来拟合:

考虑到Wrq=0时可能有除0问题,分母变为

Entity 与 runqueue 在 load 计算上的区别

block 的 entity 虽然不在 cpu 的 runqueue 上了,但依然在 cfs runqueue 上,只是 load 会以 0 的值对窗口加权。sleep 时间久了,entity 对应的 load avg 会越来越小。

entity 有两种:task,group

task

load sum: 是 runnable 的时间加权和

load avg: 是 load sum × 瞬时权值/ 所有时间窗口加权值

所有时间窗口加权值即前面提过的:

task blocking 时,瞬时值是 0, running 时瞬时值由 nice 值决定,瞬时值与 nice 值关系如下:

cpp 复制代码
const int sched_prio_to_weight[40] = {
 /* -20 */     88761,     71755,     56483,     46273,     36291,
 /* -15 */     29154,     23254,     18705,     14949,     11916,
 /* -10 */      9548,      7620,      6100,      4904,      3906,
 /*  -5 */      3121,      2501,      1991,      1586,      1277,
 /*   0 */      1024,       820,       655,       526,       423,
 /*   5 */       335,       272,       215,       172,       137,
 /*  10 */       110,        87,        70,        56,        45,
 /*  15 */        36,        29,        23,        18,        15,
};

group entity

一个 group entity 对应一个 group 中某个 cpu 上的 run queue

load sum : 有一个任务在 running 状态的时间加权和

load avg : entity对应cfs runqueue分到的share值 * load_sum / 所有时间窗口加权值

cfs runqueue分到的share值是上面提到的:

runqueue

**load sum:**runqueue 中每个 entity 的 load sum * entity 的权重的和

load avg:runqueue 中每个 entity 的 load avg 的和(load avg 已经被加权过了,不用再重新加权)

相关推荐
小哈里3 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军4 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司4 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
H_oRIZoN_4 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
a187927218315 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记5 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z5 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
GeW6 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
wzdark6 小时前
多维数组在算法设计中的存储映射问题4
算法
Escalating_xu6 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm