首页 > 其他分享 >Scheduler pelt c program 【ChatGPT】

Scheduler pelt c program 【ChatGPT】

时间:2023-12-11 22:00:22浏览次数:31  
标签:pelt sum printf program max ChatGPT calc void define

/*
 * The following program is used to generate the constants for
 * computing sched averages.
 *
 * ==============================================================
 *		C program (compile with -lm)
 * ==============================================================
 */

#include <math.h>
#include <stdio.h>

#define HALFLIFE 32
#define SHIFT 32

double y;

void calc_runnable_avg_yN_inv(void)
{
	int i;
	unsigned int x;

	/* To silence -Wunused-but-set-variable warnings. */
	printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {");
	for (i = 0; i < HALFLIFE; i++) {
		x = ((1UL<<32)-1)*pow(y, i);

		if (i % 6 == 0) printf("\n\t");
		printf("0x%8x, ", x);
	}
	printf("\n};\n\n");
}

int sum = 1024;

void calc_runnable_avg_yN_sum(void)
{
	int i;

	printf("static const u32 runnable_avg_yN_sum[] = {\n\t    0,");
	for (i = 1; i <= HALFLIFE; i++) {
		if (i == 1)
			sum *= y;
		else
			sum = sum*y + 1024*y;

		if (i % 11 == 0)
			printf("\n\t");

		printf("%5d,", sum);
	}
	printf("\n};\n\n");
}

int n = -1;
/* first period */
long max = 1024;

void calc_converged_max(void)
{
	long last = 0, y_inv = ((1UL<<32)-1)*y;

	for (; ; n++) {
		if (n > -1)
			max = ((max*y_inv)>>SHIFT) + 1024;
			/*
			 * This is the same as:
			 * max = max*y + 1024;
			 */

		if (last == max)
			break;

		last = max;
	}
	n--;
	printf("#define LOAD_AVG_PERIOD %d\n", HALFLIFE);
	printf("#define LOAD_AVG_MAX %ld\n", max);
//	printf("#define LOAD_AVG_MAX_N %d\n\n", n);
}

void calc_accumulated_sum_32(void)
{
	int i, x = sum;

	printf("static const u32 __accumulated_sum_N32[] = {\n\t     0,");
	for (i = 1; i <= n/HALFLIFE+1; i++) {
		if (i > 1)
			x = x/2 + sum;

		if (i % 6 == 0)
			printf("\n\t");

		printf("%6d,", x);
	}
	printf("\n};\n\n");
}

void main(void)
{
	printf("/* Generated by Documentation/scheduler/sched-pelt; do not modify. */\n\n");

	y = pow(0.5, 1/(double)HALFLIFE);

	calc_runnable_avg_yN_inv();
//	calc_runnable_avg_yN_sum();
	calc_converged_max();
//	calc_accumulated_sum_32();
}

标签:pelt,sum,printf,program,max,ChatGPT,calc,void,define
From: https://www.cnblogs.com/pengdonglin137/p/17895675.html

相关文章

  • 调度器 Nice 设计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-nice-design.html调度器Nice设计本文档解释了在新的Linux调度器中重新设计和简化nice-levels实现的思路。在Linux下,nicelevels一直比较弱,人们不断地纠缠我们,希望让nice+19的任务使用更少的CPU时间。不......
  • 实时组调度 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-rt-group.html实时组调度0.警告调整这些设置可能导致系统不稳定,这些旋钮只有root用户才能操作,并且假设root用户知道自己在做什么。最值得注意的是:在sched_rt_period_us中使用非常小的值可能导致系统不稳定,......
  • 利用率夹紧(Utilization Clamping) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-util-clamp.html利用率夹紧1.简介利用率夹紧,也称为utilclamp或uclamp,是一种调度器功能,允许用户空间帮助管理任务的性能需求。它是在v5.3版本中引入的。CGroup支持在v5.4中合并。Uclamp是一种提示机制,允许调度器了解......
  • 能量感知调度(EAS) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-energy.html能量感知调度1.简介能量感知调度(EnergyAwareScheduling,EAS)赋予调度器预测其决策对CPU能量消耗的影响的能力。EAS依赖于CPU的能量模型(EnergyModel,EM)来为每个任务选择一个能效高、对吞吐量影响最小......
  • Schedutil 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/schedutil.htmlSchedutil注意所有这些都假设频率和工作能力之间存在线性关系,我们知道这是有缺陷的,但这是最好的可行近似。PELT(PerEntityLoadTracking)使用PELT,我们跟踪各种调度实体的一些指标,从单个任务到任务组切片到......
  • 容量感知调度 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-capacity.html容量感知调度1.CPU容量1.1简介传统的同质SMP平台由纯粹相同的CPU组成。另一方面,异构平台由具有不同性能特征的CPU组成-在这样的平台上,并非所有CPU都可以被视为相等。CPU容量是衡量CPU可......
  • Completions - "wait for completion" barrier APIs 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/completion.htmlCompletions-"waitforcompletion"barrierAPIs介绍:如果您有一个或多个线程必须等待某些内核活动达到某个点或特定状态,完成(completions)可以为这个问题提供无竞争的解决方案。从语义上讲,它们有点像pthread......
  • CFS调度器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-design-CFS.htmlCFS调度器1.概述CFS代表“完全公平调度器”,是由IngoMolnar实现并合并到Linux2.6.23中的新“桌面”进程调度器。它是替代先前普通调度器SCHED_OTHER交互代码的调度器。CFS设计的80%可以用一句话概括......
  • 调度器域 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-domains.html调度器域每个CPU都有一个“基本”调度域(structsched_domain)。域层次结构是通过这些基本域通过->parent指针构建的。->parent必须以NULL结尾,并且域结构应该是每个CPU的,因为它们是无锁更新的。每......
  • xx 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-bwc.htmlCFS带宽控制注意本文仅讨论SCHED_NORMAL的CPU带宽控制。SCHED_RT情况在实时组调度中有所涉及。CFS带宽控制是CONFIG_FAIR_GROUP_SCHED的扩展,它允许指定组或层次结构可用的最大CPU带宽。为组允许的带宽使用......