linux资源隔离是哪些,【转载】Linux cgroup资源隔离各个击破之

Linux cgroup 有两个子系统支持CPU隔离。

一个是cpu子系统,另一个是cpuset子系统。

cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法

.1. 完全公平调度 Completely Fair Scheduler (CFS)

原理详见

CFS用于处理以下几种进程调度策略

SCHED_OTHER

SCHED_BATCH

SCHED_IDLE

.2. 实时调度 Real-Time scheduler (RT)

原理详见

RT用于处理以下几种进程调度策略

SCHED_FIFO

SCHED_RR

CFS调度方法

CFS调度针对属性为SCHED_OTHER, SCHED_BATCH, SCHED_IDLE的进程。

限制手段分为两方面,

.1. 限制资源组的CPU使用硬上限,

.2. 以及资源组的CPU使用权重。

CFS调度资源组内的任务在CPU空闲时超权重使用CPU资源,但是不能超过硬上限。

例子

groupA : cpu.shares=250

groupB : cpu.shares=750

CFS保证了groupA的进程能使用25%的CPU资源,groupB的进程能使用75%的CPU资源。

如果CPU较空闲,groupA的进程能使用超过25%的CPU资源。

如果又加了个groupC进来,并且配置了cpu.shares = 250,那么CPU资源将在三个GROUP之间重分配。

groupA : groupB : groupC = 25:75:25

注意 cpu.shares 务必 >= 2

cpu.shares只限制了使用下限,如果同时还需要设置CPU使用上限,可以通过以下两个参数来设置。

cpu.cfs_period_us = 统计CPU使用时间的周期

cpu.cfs_quota_us = 周期内允许占用的CPU时间(指单核的时间, 多核则需要在设置时累加)

如果分组中的任务在周期cpu.cfs_period_us内使用的CPU时间超过了cpu.cfs_quota_us,则进入抑制状态,并且需要等下一个周期才能继续使用CPU。

例子,周期为1秒,允许使用4秒CPU时间。(假设CPU>=4核心,表示这个组在一个使用周期(1s)内可以跑满4核资源)

cpu.cfs_period_us = 1000000

cpu.cfs_quota_us = 4000000

RT(real-time)调度方法

RT调度针对属性为SCHED_FIFO, SCHED_RR的进程。

与cfs的quota和period类似,限制了CPU使用的上限。但是rt调度只限制real-time tasks的CPU使用。

The RT scheduler works in a similar way to the ceiling enforcement control of the CFS (for more information, refer to Section 3.2.1, “CFS Tunable Parameters”) but limits CPU access to real-time tasks only.

cpu.rt_period_us = 统计CPU使用时间的周期

cpu.rt_runtime_us = 周期内允许任务使用单个CPU核的时间,如果系统中有多个核,则可以使用核倍数的时间 (计算方法与cfs不一样,需要注意)

例子

As mentioned above, the access times are multiplied by the number of logical CPUs.

For example, setting cpu.rt_runtime_us to 200000 and cpu.rt_period_us to 1000000 translates to the task being able to

access a single CPU for 0.4 seconds out of every 1 second on systems with two CPUs (0.2 x 2),

or 0.8 seconds on systems with four CPUs (0.2 x 4).

分组统计信息

既然有抑制状态和CPU时间片的概念,那就有对应的统计信息

用来报告该分组内的CPU调度周期,抑制次数,抑制时长等信息。(注意它的统计不包括子分组的,另外有一个cpuacct的子系统统计信息包含了子分组的,另一篇文档会讲到)

cpu.stat

reports CPU time statistics using the following values:

已经过去多少个片段了

nr_periods — number of period intervals (as specified in cpu.cfs_period_us) that have elapsed.

抑制了多少次

nr_throttled — number of times tasks in a cgroup have been throttled

(that is, not allowed to run because they have exhausted all of the available time as specified by their quota).

所有任务加起来总共抑制了多长时间

throttled_time — the total time duration (in nanoseconds) for which tasks in a cgroup have been throttled.

从统计信息的抑制时间和抑制次数,可以判断是否需要给分组增加CPU的上限。

例子

.1.

限制组cgroupA的任务最多可以使用8核资源

限制组cgroupB的任务最多可以使用16核资源

加载CPU子系统,创建子资源分区

mkdir -p /cgroup/cpu

mount -t cgroup -o cpu cpu /cgroup/cpu

cd /cgroup/cpu

mkdir cgroupA

mkdir cgroupB

配置资源配比(以100为基数,核数乘以100即得到cpu.shares)

cd cgroupA

echo 800 > cpu.shares

echo 1000000 > cpu.cfs_period_us

echo 8000000 > cpu.cfs_quota_us

cd ../cgroupB

echo 1600 > cpu.shares

echo 1000000 > cpu.cfs_period_us

echo 16000000 > cpu.cfs_quota_us

运行任务

cgexec -g cpu:cgroupA pg_ctl start -D /home/digoal/pgdata1921

cgexec -g cpu:cgroupB pg_ctl start -D /home/digoal/pgdata1922

小结

.1. 限下限

cpu.shares

.2. 限上限

cpu.cfs_period_us

cpu.cfs_quota_us

.3. 限实时任务上限

cpu.rt_period_us

cpu.rt_runtime_us

cpuacct 子系统

cpuacct 子系统是用来统计CPU使用情况的子系统,功能定位不是隔离资源,而是统计资源的使用情况。

cpuacct子系统的统计数据包含子分区的。

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

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

相关文章

14秋《c语言程序设计》作业2,《C语言程序设计》 作业参考答案.doc

作业参考答案一、单项选择1. B    2. D    3. B    4. D    5. B    6. B7. C    8. D    9. D 10.C 11.B 12&#…

华中科技大学c语言期末考试题,华中科技大学C语言期末考库剖析.docx

华中科技大学C语言期末考试题库试题及答案汇总1.设int a12,则执行完语句aa-a*a后,a的值是__D____。A、552 B、264 C、144 D、-264知识点:算术表达式2.以下变量x、y、z均为double类型且已正确赋值,不能正确表…

网页版bpc电波对时_科普向:无需联网却能自动对时的钟表

有一种神秘的钟表,它能够自动对时,却不需要联网,它十分准时,和传说中的的原子钟的误差也仅有几毫秒,它十分小众,却也随处可见,它就是电波表。今天猫头我就跟大家说说这个电波表。首先什么是电波…

动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?

灯箱作为日常广告标识业务的重要板块,相信每个标识人都已经非常熟悉了,国内标识人也经常去学习相关新工艺新案例,但其实很多人不知道世界上最早的灯箱可能是中国人制作的哦~接下来就带大家一起揭开灯箱的前世今生,并详细盘点一下如…

c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数,求这三个数的平均数的程序。2.编写一个程序,用于水果店售货员结账。已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,…

cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...

近年来,随着激光切割机的发展,不仅被用于切割平面板材,而且被应用于切割管材,我们称之为“管材激光切割机”。那么管材激光切割机用于切割管材时是否会出现问题呢,是的,确实出现了问题。由于管材的封闭性&a…

C语言填空题10道,3道C语言填空题,谁帮忙做下,谢谢

3道C语言填空题,谁帮忙做下,谢谢0功能:输出两个整数中大的那个数,两个整数由键盘输入。#include #include int main(){int a,b,*p1,*p2;p1(int *)malloc(sizeof(int));p2(int*)malloc(sizeof(int));scanf("%d%d",__(1)_…

大学计算机课程考试系统C语言题库,《大学计算机基础》考试题库(含答案).doc...

《大学计算机基础》试题题库及答案一、单选题练习 1.完整的计算机系统由( C )组成。A.运算器、控制器、存储器、输入设备和输出设备B.主机和外部设备C.硬件系统和软件系统D.主机箱、显示器、键盘、鼠标、打印机2&…

识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!

今天跟大伙聊一聊关于各种瓶子的外观检测/视觉检测。我们都知道,不管是瓶子、杯子还是其他的,在生产过程种对产品的质量检测这种有着超高重复性动作与随机应变能力的工作,在以前的工业时代,完全依靠人“人眼识别”人工检测来完成&…

go 调用c语言,golang之调用C语言代码

此篇教程只是简单的描述怎么使用以及遇到的一些错误我写的实例,C语言与golang在同一个文件中,并没有分开。我这里演示两个例子:⑴ 调用C语言函数打印“Hello World”#include void PrintHello(){ printf("Hello World!\n");}c代…

jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

沟通重要吗?太重要了,可以这么说,我们在生活中遇到的绝大部分问题其实都是沟通问题。你的身边有这样的对话吗?老婆对丈夫说:“老娘当初瞎眼了才看上你,成天就知道打牌“妈妈对儿子说:”你看看人…

c语言long说明符,C语言-类型说明符 long,short,unsigned,signed

类型说明符基本概念C 语言提供了一下四种说明符,四个都属于关键字;short短型等价于 short intlong 长型 等价于 long intsigned 有符号型unsigned 无符号型这些说明符一般就是用来修饰 int 类型的,所以在使用时可以省略 intshort和 longshort 和 long 可以提供不同长度的整型数…

常见食物营养成分表图_营养成分表,你会看么?

中国居民对于营养标签的认知较低。一项针对中国五城市居民的调查显示,仅有40.54%的消费者会阅读营养标签。恭喜你成为其中之一。这是什么数据?营养成分表通常有三项主要内容,从左到右依次为营养素的名称、营养素的含量以及营养素参考值&#…

求年龄和的c语言数据类型,第1章 c语言与数据类型.ppt

第1章 c语言与数据类型转义字符 转义字符 功能描述 举例 \n 换行,将当前位置移到下一行开头 printf("请输入你的年龄\n"); \t 水平制表(跳到下一个tab位置) printf("\n姓名\t年龄\t地址\n"); \ 单引号(撇号)字符? printf("字符\a\的ASCII…

mysql安装mac 压缩包_MAC mysql安装及设置

首先,去http://www.mysql.com/downloads/mysql下载mysql-5.1.44-osx10.6-x86_64.dmg,然后,双击该文件,安装映像中的两个安装包文件。a. mysql-5.1.44-osx10.6-x86_64.pkg(mysql标准版安装)b. MySQLStartupItem.pkg(mysql启动项目)…

android 自定义view滚动条,Android自定义View实现等级滑动条的实例

Android自定义View实现等级滑动条的实例实现效果图:思路:首先绘制直线,然后等分直线绘制点;绘制点的时候把X值存到集合中。然后绘制背景图片,以及图片上的数字。点击事件down的时候,换小图片为大图片。move…

二项分布的期望方差证明_关于二项分布

2007-01-07二项分布和正态分布的期望与方差EXn我介绍一个较繁但易懂的方法。先证kC(n,k)*p^k*q^(n-k)np*[C(n-1,k-1)*p^(k-1)q^(n-k)]过程如下:kC(n,k)*p^k*q^(n-k)k*(n!/[(n-k)!k!])*p^k*q^(n-k)np*[(n-1)!/((n-k)!(k-1)!]*p^(k-1)*q^(n-k)np*[C(n-1,k-1)*p^(k-1)q…

android短信验证码代码,Android短信验证码自动填写实现代码

今天给大家分享一个Android短信验证码自动填写的功能。先看下效果图,我发送了一条短信到手机,自动填写验证码。如图:这个小功能运用到了观察者模式,什么是观察者模式?观察者模式 :定义对象间的一种一个(Sub…

decimal类型 go_Go 语言程序设计——字符串类型(2)

格式化布尔值布尔值使用 %t (真值) 格式指令来输出例子:package mainimport ("fmt")func IntForBool (b bool) int {if b {return 1}return 0}func main() {fmt.Printf("%t %t\n", true, false)fmt.Printf("%d %d\n", IntForBool(tru…

android 评论的展开功能,Android开发实现ListView点击展开收起效果示例

本文实例讲述了Android开发实现ListView点击展开收起效果。分享给大家供大家参考,具体如下:废话不说先上效果:实际上这是采用一个ExpandableListView实现的布局文件很简单:xmlns:android"http://schemas.android.com/apk/res…