linux effective_protection函数实现

函数的目的是根据 cgroup 的配额来计算它实际能从上层group中瓜分的额度。
以 min 为例:


struct page_counter {/** Make sure 'usage' does not share cacheline with any other field. The* memcg->memory.usage is a hot member of struct mem_cgroup.*/atomic_long_t usage; // 本节点已经用的页数CACHELINE_PADDING(_pad1_);/* effective memory.min and memory.min usage tracking */unsigned long emin; // 本节点实际从上层瓜分的min保留额度。atomic_long_t min_usage; // 本节点已经使用的min保留额度。atomic_long_t children_min_usage; // 本节点的所有子节点已经实际使用的页数(当有子节点的实际使用页数没有达到它的min保留额度时,其使用值会当成min保留额度去累加)。/* effective memory.low and memory.low usage tracking */unsigned long elow;atomic_long_t low_usage;atomic_long_t children_low_usage;unsigned long watermark;unsigned long failcnt;/* Keep all the read most fields in a separete cacheline. */CACHELINE_PADDING(_pad2_);unsigned long min; // 本节点设置的min保留额度unsigned long low;unsigned long high;unsigned long max;struct page_counter *parent;
} ____cacheline_internodealigned_in_smp;

effective_protection实现如下,其多退少补的原则大概描述为:实际额度已用完,就按已分配的页数占总分配页的比瓜分额度;实际额度未用完,则在本节点已分配内存的基础上,按本节点使用超出额度的部分占所有使用超出额度部分的比瓜分剩余额度。


/*** @param setting: 本节点实际分配了的页数* @param parent_effective: 父节点从祖父节点实际划分来的预留额度* @param siblings_protected: 父节点的所有子节点已分配页数或预留额度的和(已分配页数不足预留额度时,按预留额度计),这其中包含了本节点*/
static unsigned long effective_protection(unsigned long usage,unsigned long parent_usage,unsigned long setting,unsigned long parent_effective,unsigned long siblings_protected)
{unsigned long protected;unsigned long ep;// 已分配页数不足预留额度时,按预留额度计protected = min(usage, setting);// 子实际使用或预留额度的和超出了父节点实际瓜分的值,则按父本节点在所有子节点中的比例去瓜分父的实际额度if (siblings_protected > parent_effective)return protected * parent_effective / siblings_protected;ep = protected;if (!(cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_RECURSIVE_PROT))return ep;// 父瓜分额度大于所有子节点的实际使用或预留额度时,如果本节点分配的页数超出了设定额度,则按与本节点超出预留部分,与父节点超出所有子节点使用部分或预留部分的比值,来瓜分未分配的预留额度。如果本节点使用已经超出了预留额度,则不再瓜分。if (parent_effective > siblings_protected &&parent_usage > siblings_protected &&usage > protected) {unsigned long unclaimed;unclaimed = parent_effective - siblings_protected;unclaimed *= usage - protected;unclaimed /= parent_usage - siblings_protected;ep += unclaimed;}return ep;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/145601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.jib-maven-plugin构建springboot项目镜像,docker部署配置

目录 1.构建、推送镜像 1.1 执行脚本 2.2 pom.xml配置 ​2.部署镜像服务 2.1 执行脚本 2.2 compose文件 3.docker stack常用命令 介绍:使用goole jib插件构建镜像,docker stack启动部署服务; 通过执行两个脚本既可以实现构建镜像、部…

Scala---方法与函数

一、Scala方法的定义 有参方法&无参方法 def fun (a: Int , b: Int) : Unit {println(ab) } fun(1,1)def fun1 (a: Int , b: Int) ab println(fun1(1,2)) 注意点: 方法定义语法 用def来定义可以定义传入的参数,要指定传入参数的类型方法可以写返…

Stable Diffusion1.5网络结构-超详细原创

目录 1 Unet 1.1详细整体结构 1.2 缩小版整体结构 1.3 时间步编码 1.4 CrossAttnDownBlock2D 1.4.1 ResnetBlock2D 1.4.2 Transformer2DModel 1.4.2.1 BasicTransformerBlock 1.4.2.1.1 SelfAttention 1.4.2.1.2 CrossAttention 1.4.2.1.3 FeedForward 1.4.3 DownS…

windows虚拟内存自定义分配以及mysql错误:Row size too large (> 8126)

文章目录 虚拟内存概要windows-server配置虚拟内存技术名词解释关于mysql错误Row size too large (> 8126)问题分析解决办法 虚拟内存概要 虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用…

pdf文档转word文档

很久以前写的代码了,当时好象是因为朋友临时需要,找了好几个工具都是要付费,单独为了一个文档花钱好象有点划不来,就用python简单做了个,今天不小心划拉了出来,反正收着也没什么用,贴出来开心一…

Angular, React,Vus三大主流前端开发框架Setup

Angular: //文档 https://angular.dev/ //创建项目 1. npm install -g angular/cli2. ng new my-angular-app//启动 npm run start//构建 npm run build//代码检查 ESlint React: //文档 https://create-react-app.dev/docs/getting-started //TypeScript https://www.types…

遥感领域最热门的研究主题介绍

遥感是有效地直接从地球收集数据的最重要技术之一。由于生态信息科学的进步,遥感技术在日常生活的多个研究方面变得非常有价值,其中包括大气物理学、生态学、土壤和水污染、土壤科学、地质学、火山爆发和地球演化。以下是遥感领域的主要趋势研究主题&…

抖音订单列表查询api接口

怎么获取订单列表接口 请求地址:响应示例及参数

.bashrc文件中环境变量配置错误,导致linux命令无法正常使用

问题描述 配置环境变量时出错,导致linux命令无法使用 解决方案: 执行下面命令 export PATH/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin vim就可以使用了,将错误纠正 vim ~/.bashrc 环境生效 source ~/.bashrc…

(论文阅读30/100)Convolutional Pose Machines

30.文献阅读笔记CPMs 简介 题目 Convolutional Pose Machines 作者 Shih-En Wei, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh, CVPR, 2016. 原文链接 https://arxiv.org/pdf/1602.00134.pdf 关键词 Convolutional Pose Machines(CPMs)…

IDEA 中设置 File Header 以及自定义类、方法注释模板的方法

目录 1 设置 File Header2 自定义类、方法注释生成类注解模板生成方法注解模板 1 设置 File Header File -> Settings -> File and Code Templates -> Includes -> File Header -> 编辑 2 自定义类、方法注释 File -> Settings -> Live Templates -&g…

ETCD 集群安装、部署、备份和使用

命令的含义是:在 /etcd_backup/ 目录下查找 30 天前创建的文件或目录,并将它们全部删除。 find /bak/backup/ -ctime 30 -exec rm -r {} \;

kafka+ubuntu20.04+docker配置

记录一次配置过程 安装docker 参加下面链接的第一部分 Ubuntu20.04使用docker安装kafka服务-CSDN博客 安装zookeeper docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper安装kafka服务 docker run -d --name kafka …

Jquery 通过class名称属性,匹配元素

UI自动化过程中,常常需要判断某个元素是否满足条件,再走不通的脚本逻辑;、本文介绍如何通过jquery判断菜单是否展开,来决定是否执行菜单展开脚本;Jquery通过class名称属性,匹配元素 我们先分析,…

C++核心编程 day09 类型转换、异常、输入输出流

C核心编程 day09 类型转换、异常、输入输出流 1. 类型转换2. 异常2.1 异常语法2.2 C标准异常库 3. 输入输出流3.1 输入输出流概念以及流类库3.2 标准输入流3.3 标准输出流3.4 文件读写 1. 类型转换 C中的类型转换有四类,分别是静态转换、动态转换、常量转换、重新解…

图像分类系列(二) VGGNet学习详细记录

经典神经网络论文超详细解读(二)——VGGNet学习笔记(翻译+精读) 前言 上一篇我们介绍了经典神经网络的开山力作——AlexNet:经典神经网络论文超详细解读(一)——AlexNet学习笔记&a…

14.dimp导入、dexp导出达梦DM数据库

目录 命令执行位置 1.备份 1.1 导出库 1.2 导出表 2.恢复 2.1 导入数据库 2.1.1 导入 2.1.2 导入到另一数据库 2.2 导入表 3. dexp和dimp常见操作命令 命令执行位置 在opt/dmbms/bin下执行.dexp #进入达梦数据库容器内部 docker exec -it f99 /bin/bash#进入目录 c…

C生万物 | 从浅入深理解指针【最后部分】

C生万物 | 从浅入深理解指针【最后部分】 文章目录 C生万物 | 从浅入深理解指针【最后部分】前言sizeof和strlen的对比sizeofstrlen 数组和指针笔试题解析一维数组字符数组二维数组 前言 我们前面学了四个部分了,如果没有看前面的建议可以看一下前面的~~ C生万物 |…

java架构师禁止在项目中使用继承,合理吗?

java架构师禁止在项目中使用继承,合理吗? 如果建议用组合替代继承,非必要不用继承,这个很合理的建议的。 在非必要的情况下不用继承,用组合替代有几个优势:最近很多小伙伴找我,说想要一些 Jav…

使用Python调用API接口获取京东关键词详情数据

在电商领域,获取关键词的详情数据对于产品分析、市场研究等方面具有重要意义。京东作为中国最大的电商平台之一,提供了丰富的API接口供开发者使用。本文将详细介绍如何使用Python调用京东的API接口获取关键词详情数据,并给出相应的代码实现。…