cgroup限制cpu使用率

news2024/12/28 20:01:04

写一段代码,如下所示,可以看到是单核拉满情况

#include <stdio.h>
#include <pthread.h>


int main()
{
int i = 0;
for(;;)i++;
return 0;
}

运行起来,通过top命令可以看到cpu使用率大致是100%,如下图所示:
在这里插入图片描述

现在想限制该cpu使用率为20%,可以通过cgroup来限制,进入/sys/fs/cgroup/cpu,通过mkdir创建cputest目录,然后进入到该目录,这里面有两个文件需要说下:cpu.cfs_period_us和cpu.cfs_quota_us,
其中cpu.cfs_period_us为一个调度周期的时间,通过最后的us可以知道,单位为微秒,系统默认该值是100000,咱们不需要修改。
cpu.cfs_quota_us表示一个调度周期内,可以使用的cpu时间,故cpu.cfs_quota_us/cpu.cfs_period_us就是cpu使用率。
现在需要设置cpu使用率为20%,故cpu.cfs_quota_us设置为20000即可,然后执行
echo 20000 > cpu.cfs_quota_us
最后将cputest的进程号12472设置到tasks文件中,echo 12472 > tasks。
如下所示,效果显著。
在这里插入图片描述

现在将程序进行修改,创建一个线程,如下所示:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *th_fun(void *arg)
{
    while(1);
}


int main()
{
//sleep(100);
pthread_t pid;//线程ID
    void *tret;
    int n=10;

    pthread_create(&pid,NULL,th_fun,(void*)&n);//pid 线程ID,传出参数
    while(1);

return 0;
}

可以看到,该程序是两核拉满,top命令如下:
在这里插入图片描述
可以看到,top信息显示是正常的。

现在用cgroup将此进程的cpu利用率变为20%。
执行echo 12886 > tasks
再看top信息如下:
在这里插入图片描述
这里是120%,跟想象中的不一样,之前有研究过cgroup限制内存
,发现cgroup限制内存需要在内存涨起来之前就进行限制,cpu限制是否也有这个约束呢。

于是修改代码如下。

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *th_fun(void *arg)
{
    while(1);
}


int main()
{
sleep(100);
pthread_t pid;//线程ID
    void *tret;
    int n=10;

    pthread_create(&pid,NULL,th_fun,(void*)&n);//pid 线程ID,传出参数
    while(1);

return 0;
}

注意,这里面最开始有个100秒的睡眠,需要在100秒内将进程号设置到tasks中,100秒后,top效果如下:
在这里插入图片描述

原来cpu限制也需要在进程真正利用cpu之前设置好,进程运行后,再设置,单线程进程有效,多线程进程无效,具体原因未知。

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

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

相关文章

Python相关知识点

读取zip文件 import zipfilelistAipInfo zipfile.ZipFile(xxx.zip, r) print(listZipInfo.namelist()) # 以列表列出所有压缩文件列出所有被压缩的文件&#xff0c;以及文件名、文件大小和压缩结果大小。 for info in listZipInfo.infolist():print(info.filename, info.…

数据分析三剑客之一:Numpy详解及实战

1 NumPy介绍 NumPy 软件包是Python生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python的一些主要软件包&#xff08;如 scikit-learn、SciPy、pandas 和 tensorflow&#xff09;都以 NumPy 作为其架构的基础部分。除了能对数值数据…

VMware下的ubuntu虚拟机,实现虚拟机与本地硬盘间的文件互传

本次安装vmware tools工具&#xff0c;以实现二者间的文件互传。 1、打开VMware软件&#xff0c;运行Ubuntu系统虚拟机 安装过程需在ubuntu虚拟机启动的情况下&#xff0c;才能进行安装&#xff1b; 2、安装VMware Tools 在VM主菜单栏中&#xff0c;点击 “虚拟机&#xff0…

【图论C++】Floyd算法(多源最短路径长 及 完整路径)

>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff…

【AI视野·今日NLP 自然语言处理论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 29 Sep 2023 Totally 45 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MindShift: Leveraging Large Language Models for Mental-States-Based Problematic Smartphone Use Interve…

【单片机】11-步进电机和直流电机

1.直流电机 1.什么是电机 电能转换为动能 2.常见电机 &#xff08;1&#xff09;交流电机【大功率】&#xff1a;两相【200W左右】&#xff0c;三相【1000W左右】 &#xff08;2&#xff09;直流电机【小功率】&#xff1a;永磁【真正的磁铁】&#xff0c;励磁【电磁铁】 &…

Mysql 安装搭建

文章目录 Mysql 搭建一、安装包下载二、创建用户组用户和修改权限三、配置my.cnf Mysql 搭建 一、安装包下载 mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 这里有所有的mysql的版本&#xff0c;下载自己需要的版本&#xff0c;我们这里下载 …

知识储备--基础算法篇-回溯法

1.回溯法介绍 1.1递归和回溯 每一个递归都包含回溯&#xff0c;回溯是一种纯暴力搜索方法。每个回溯法都可以抽象为一种N叉树。树的宽度为子集的个数&#xff0c;深度为递归返回的条件。二叉树中的递归都会有回溯算法&#xff0c;只不过有些题目用到了&#xff0c;有些没有用…

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

R语言进行孟德尔随机化+meta分析(2)----基于R和stata

目前不少文章用到了孟德尔随机化meta分析&#xff0c;在上一章咱们简单介绍了一下meta分析的基础知识。咱们今天来介绍一篇11分文章&#xff0c;由文章看看孟德尔随机化meta分析如何进行&#xff0c;文章的题目是&#xff1a;Appraising the causal role of smoking in multipl…

大数据Doris(二):Doris原理篇

文章目录 Doris原理篇 一、Doris 特点 1、支持标准SQL接口 2、列式存储引擎

百度统计配置详细图文教程包含siteId、百度统计AccessToken、百度统计代码获取步骤教程

一、前言 很多网友开发者都不知道百度统计siteId、百度统计token怎么获取&#xff0c;在网上找的教程都是几年前老的教程&#xff0c;因此给大家出一期详细百度统计siteId、百度统计token、百度统计代码获取详细步骤教程。 二、登录到百度统计 1.1 登录到百度统计官网 使用个…

【利用冒泡排序的思想模拟实现qsort函数】

1.qsort函数 1.1qsort函数的介绍 资源来源于cplusplus网站 1.2qsort函数的主要功能 对数组的元素进行排序 对数组中由 指向的元素进行排序&#xff0c;每个元素字节长&#xff0c;使用该函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对&#xff0c;并将指…

测试用例的编写(面试常问)

作者&#xff1a;爱塔居 专栏&#xff1a;软件测试 作者简介&#xff1a;不断总结&#xff0c;才能变得更好~踩过的坑&#xff0c;不能再踩~ 文章简介&#xff1a;常见的几个测试用例。 一、淘宝购物车 二、登录页面 三、三角形测试用例 abc结果346普通三角形333等边三角形334…

文件I/O与标准I/O

如果不知道inode&#xff0c;请看这篇文章inode 我们知道当打开一个文件时&#xff0c;OS会先使用inode编号在磁盘文件系统里面去寻找这个文件&#xff0c;找到以后根据文件的属性为其创建一个内核层面的结构体来描述这个文件&#xff0c;该结构体里面含有文件的属性信息&#…

我的创作纪念日 不忘初心,砥砺前行

机缘 本来我只是记录一些自己平时安装各种软件或者组件的教程&#xff0c;以及记录平时遇到的一些bug。 没想到一些教程收到了各位同学的喜爱。 收获 这篇VMware虚拟机安装Linux教程(超详细) 深受大家喜爱。写这篇文章的初衷一是为了记录&#xff0c;二是为了分享。自己一步…

操作符详解——(比特课件)

操作符怎么搞&#xff1f;没办法掌握基础知识就可以 ** 需要课件完整版的可以关注私信我&#xff01;&#xff01;&#xff01; 你的支持就是我更新的最大动力 **

String常见面试题

目录 1.String为什么不可变2.String和StringBuilder、StringBuffer的区别3.String为什么要设置为不可变4.判断定义为String类型的s1和s2是否相等5.下面这句话在内存中创建了几个对象?6.判断定义为String类型的s1和s2是否相等7.判断定义为String类型的s1和s2是否相等8.判断定义…

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下&#xff0c;我们在PHP里使用echo等函数输出的内容&#xff0c;是不会马上发送给前端的&#xff0c;原因是有 buffer 的存在&#xff0c;buffer又分两处&#xff0c;一处是PHP本身的buffer&#xff0c;另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…

unity打包工具

接手了一个项目&#xff0c;打包存在重大问题&#xff0c;故此在unity addressables 基础上弄了一个简单的打包工具&#xff0c;代码也都做好了注释&#xff0c;操作非常简单以下为操作方法&#xff1a; 首先设置导入Addressables插件&#xff0c;并设置好详细参见&#xff1a…