linux autogroup

一:概述

对于linux autogroup的作用,很多同学可能是听说过,但,并未验证过。

考虑下面场景,开两个terminal,T1和T2,在T1中运行进程P1,P1开启9个线程编译代码,在T2中运行进程P2,P2开启1个线程编译代码,那么,在top命令中查看cpu使用率时,P1和P2各占据 多少CPU呢?

我们的期待是:

1. 当未开启linux autogroup时,P1 90%,P2 10%

2. 当已开启linux autogroup时,P1 50%,P2 50%

让我们使用下面的配置来进行验证

marvin@vm:~$ uname -a
Linux vm 6.5.0-28-generic #29~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Apr  4 14:39:20 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
marvin@vm:~$ 

二:autogroup不符合预期

1. 未开启linux autogroup时,如下所示。确实 h1 90%, h2 10%。符合预期。

2. 已开启linux autogroup时,如下图所示,很不幸,依然是 h1 90%, h2 10%。不符合预期。

三:不符合预期的直接原因

在已开启linux autogroup的情况下,为什么CPU并未均分呢?从下图可以看到,无论是否开启autogroup,h1和h2的 "cpu,cpuacct" 都位于 /user.slice这个cgroup下面。

而,sched(7) - Linux manual page根据autogroup文档,进程只有当位于root cgroup下时,autogroup才会起作用。

sched(7) - Linux manual page

四:放入root cgroup,则一切符合预期

于是,我们开启autogroup,然后,启动进程h1和h2,然后,我们将两个进程都移动进root cgroup中。

果然看到效果啦,h1 9个线程,h2 1个线程,但,两者确实平分CPU的。很好,符合预期啦。

还需要注意到:

如果一开始autogroup是开启的,然后,我们将进程移动到root cgroup,于是,h1和h2各占50% CPU。

如果一开始autogroup是关闭的,然后,我们将进程移动到root cgroup,然后,我们再打开autogroup,此时,autogroup依然是无效的。(也就说,动态修改autogroup后,已移动进root cgroup中的进程 依然不会按着 开启autogroup 执行)。

五:systemd的原因?

为什么在不同terminal中运行的进程,却位于user.slice中呢?这应该是systemd的原因,当有了systemd之后,autogroup应该是无法起作用了,systemd会将terminal启动的进程都放置到user.slice中(而不是root cgroup)。但,具体为什么会这样,不知道,后面研究吧!

六:参考

2024年的Linux的进程优先级与nice值

Linux 的进程优先级与 nice 值 - 依云's Blog

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

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

相关文章

yield函数怎么理解?

目录 白话系列: 例子🌰: 什么叫暂停 yield和next搭配使用 例子🌰: 白话系列: 可以暂停,可以生成,next一个,yield一个 例子🌰: def generat…

CUDA线程管理

核函数在主机端启动时,执行会转移到设备上,并且将控制权转移回主机。当核函数在GPU上运行时,主机可以运行其他函数。因此,主机与核函数是异步的。 此时,设备端也就是GPU上会产生大量的线程,并且每个线程都…

(七)小案例银行家应用程序-申请贷款-some方法和every方法

some方法 ● 我们先回顾一下includes方法 console.log(movements.includes(-130));只要数组中存在-130这个值,就会返回true,否则就会返回flase ● 而some方法只要达成某一个条件就会返回true,否则就返回flase const someMethod movement…

Unity常用射线检测接口用法及优缺点

在Unity中,射线检测是一种非常常见的技术,用于检测物体之间的碰撞、获取物体之间的距离等。今天我们来说一说射线检测的方法以及它们的优缺点: Physics.Raycast: using UnityEngine;public class RaycastExample : MonoBehaviou…

stm32开发之threadx之modulex模块文件的生成脚本项目

前言 为了保证在window上运行,且体积小的问题,所以采用c语言编写生成脚本,将相关路径由json文件进行配置,使用了一个cjson库进行解析项目构建使用的是cmake 项目代码 CMakeLists文件 cmake_minimum_required(VERSION 3.27) project(txm_bat_script C…

Day13-Java进阶-IO字节流及其练习题

1. IO流介绍 2. IO 流体系结构 字节流读取纯文本文件会出现乱码问题 2.1 FileOutputStream 字节输出流 package com.itheima.stream.output;import java.io.FileOutputStream; import java.io.IOException;public class FileOutputStreamDemo3 {/*IO流的异常处理方式: jdk7版本…

socket编程——tcp

在我这篇博客:网络——socket编程中介绍了关于socket编程的一些必要的知识,以及介绍了使用套接字在udp协议下如何通信,这篇博客中,我将会介绍如何使用套接字以及tcp协议进行网络通信。 1. 前置准备 在进行编写代码之前&#xff…

dell r730 ESXi重启后找不到raid盘(待续)

dell r730 ESXi重启后找不到raid盘,报错ESXi error failed to connect to database ,怀疑是不小心硬关机导致的问题..... 在这之前的操作是在ESXi 的虚拟机FreeBSD里尝试安装nvidia驱动和anaconda,结果关机重启后,找不到虚拟机…

Python小程序 - 文件类型统计

文件以后缀名区分类型:统计文件个数;不同类型文件个数 1. 遍历文件目录,判断当前对像类型(文件夹、文件)后统计文件类型数量 2. 通过DIR 或 LS 命令遍历当前目录,输出至文件,对文件进行解析…

C语言学习/复习30--结构体的声明/初始化/typedef改名/内存对齐大小计算

一、自定义数据类型 二、结构体 1.结构体的定义(与数组相对比) 2.结构体全局/局部变量的定义 3.typedef对结构体改名 4.匿名结构体类型的声明 注意事项1: 匿名后必须立即创建结构体变量 、 5.结构体与链表节点定义 注意事项1&…

arduino rc522

读取卡号 #include <SPI.h> #include <MFRC522.h>#define RST_PIN 9 // Reset pin of the module #define SS_PIN 10 // Slave Select pin of the moduleMFRC522 rfid(SS_PIN, RST_PIN); // Create MFRC522 instancevoid setup() {Serial…

【VLP(Visual-Linguistic Pretraining)模型相关基本知识】

VLP&#xff08;Visual-Linguistic Pretraining&#xff09;模型相关基本知识 VLP&#xff08;Visual-Linguistic Pretraining&#xff09;模型是一种用于视觉与语言联合训练的模型。它旨在通过同时学习视觉和语言任务&#xff0c;从大规模的视觉和语言数据中提取丰富的视觉和…

Datawhale ChatGPT基础科普

根据课程GitHub - datawhalechina/hugging-llm: HuggingLLM, Hugging Future. 摘写自己不懂得一些地方&#xff0c;具体可以再到以上项目地址 LM&#xff1a;这是ChatGPT的基石的基石。 Transformer&#xff1a;这是ChatGPT的基石&#xff0c;准确来说它的一部分是基石。 G…

nodejs工具模块学习

util 是一个Node.js 核心模块&#xff0c;提供常用函数的集合&#xff1b; util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法&#xff0c;通常用于调试和错误输出&#xff1b; 如果只有一个参数 object&#xff0c;是要转换的对象&…

英伟达AI系列免费公开课

英伟达公开课官网地址 Augment your LLM Using Retrieval Augmented Generation Building RAG Agents with LLMs langchain的workflow: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c90cb157c9c84bb5b3da380ec56f5c2a.png Generative AI Explained

函数的使用

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 前面已经介绍了函数的创建以及调用&#xff0c;下面就通过范例学习函数的使用 创建一个函数&#xff0c;如果是偶数则计算其平方&#xff0c;如果是奇数则计算其平方根 分…

如何在 Flutter 中制作多种颜色的 TextField

TextField widget 本身并不施加任何样式。相反&#xff0c;它会要求 TextEditingController 生成一个样式化的 TextSpan 对象&#xff0c;即一段带有样式的文本。 TextField 将其样式传递给 TextEditingController &#xff0c;默认实现只是将其放入 TextSpan 对象中&#xff0…

abide数据集时间序列获取

1.http://preprocessed-connectomes-project.org/abide/ 2. 3.windows批量下载 &#xff08;1&#xff09;创建links.txt&#xff0c;写入链接&#xff0c;例如 https://s3.amazonaws.com/fcp-indi/data/Projects/ABIDE_Initiative/Outputs/dparsf/filt_global/rois_cc400/K…

Java拓扑排序知识点(含面试大厂题和源码)

在技术面试中&#xff0c;大厂可能会要求候选人实现或优化一些与图相关的算法&#xff0c;比如深度优先搜索&#xff08;DFS&#xff09;、广度优先搜索&#xff08;BFS&#xff09;和拓扑排序等。以下是三道与这些算法相关的面试题目&#xff0c;以及它们的Java源码示例。 1.…

Hdu3118 Arbiter【二进制枚举建二分图】

Arbiter 题意 给定 n n n 个点和 m m m 条边&#xff0c;要求删除最少数量的边&#xff0c;使图中没有奇环 n ≤ 15 , m ≤ 300 n \leq 15,m \leq 300 n≤15,m≤300 思路 没有奇环的图是二分图 我们可以直接从定义入手&#xff0c;用二进制枚举二分图的两个颜色的点&#…