您看到的行为几乎可以肯定是因为Linux 2.6.38(2010年)中添加了自动组功能.据推测,当您描述运行这两个命令时,它们在不同的终端窗口中运行.如果你在同一个终端窗口中运行它们,那么你应该看到nice值有效.这个答案的其余部分详细阐述了这个故事.

内核提供了一种称为自动分组的功能,可以在多进程,cpu密集型工作负载(如构建具有大量并行构建过程的Linux内核(即make(1)-j标志)的情况下提高交互式桌面性能.

创建新会话时会创建新的自动组

通过setsid(2);例如,当启动新的终端窗口时会发生这种情况. fork(2)创建的新进程继承了它

父母的自动组成员资格.因此,一个过程中的所有过程

session是同一个autogroup的成员.

启用自动分组时,自动组合的所有成员

被放置在相同的内核调度程序“任务组”中. Linux内核调度程序采用一种均衡分布的算法

cpu跨任务组循环.可以通过以下示例描述此对交互式桌面性能的好处.

假设有两个自动组竞争同一个cpu

(即,假定单个cpu系统或使用任务集(1)

将所有进程限制在SMP系统上的同一cpu中).

第一组包含来自内核的十个cpu绑定进程

build以make -j10开头.另一个包含一个

cpu绑定过程:视频播放器.自动分组的效果是

这两组将分别接收一半的cpu周期.那是,

视频播放器将获得50%的cpu周期,而不是

只有9%的周期,这可能会导致视频质量下降

回放. SMP系统的情况比较复杂,但是

一般效果是相同的:调度程序分配cpu周期

跨任务组,以便包含大的自动组

cpu绑定进程的数量最终不会占用cpu周期

以牺牲系统上的其他工作为代价.

漂亮的价值和团队安排

在调度非实时进程(例如,那些已调度的进程)时

在默认的SCHED_OTHER政策下),

调度程序采用称为“组调度”的技术,在该技术下,线程被安排在“任务组”中.

任务组是在各种情况下形成的,相关案例在这里是自动分组.

如果启用了自动分组,那么所有线程都是

(隐含地)放在一个自动组中(即同一个会话,如

由setsid(2)创建)形成一个任务组.每个新的自动组都是

因此是一个单独的任务组.

在组调度下,线程的nice值会产生效果

调度决策仅相对于同一个中的其他线程

任务组.这有一些令人惊讶的后果

UNIX系统上很好的值的传统语义.特别是,如果启用了自动分组(这是各种Linux发行版中的默认设置),那么

在一个过程中使用nice(1)会产生影响

仅用于相对于在其中执行的其他进程的调度

相同的会话(通常:相同的终端窗口).

相反,对于(例如)鞋底的两个过程

不同会话中的cpu绑定进程(例如,不同的终端

windows,每个作业都绑定到不同的autogroup),

在其中一个会话中修改进程的nice值

对调度程序相对于调度的决策没有影响

在另一个会话中处理.这可能是您看到的情景,但您没有明确提到使用两个终端窗口.

如果要防止自动分组干扰此处所述的传统良好行为,可以禁用该功能

echo 0 > /proc/sys/kernel/sched_autogroup_enabled

请注意,这也会导致禁用自动组功能旨在提供的桌面交互性的好处(参见上文).

自动组很好的价值

可以通过查看进程的自动组成员资格

文件/ proc / [pid] / autogroup:

$cat /proc/1/autogroup

/autogroup-1 nice 0

此文件还可用于修改分配的cpu带宽

到一个自动组.这是通过在“好”中写一个数字来完成的

范围到文件以设置自动组的好值.允许的

范围从19(低优先级)到-20(高优先级).

autogroup nice设置与进程具有相同的含义很好的价值,但适用于cpu周期的分配autogroup作为一个整体,基于其他的相对好的值autogroups.对于自动组内的进程,cpu会循环它接收将是自动组的良好价值的产物(比较到其他autogroup)和过程的好价值(与…相比)同一自动组中的其他进程).

linux 优先级必须为整数,进程友好性(优先级)设置对Linux没有影响相关推荐

  1. linux制作成后台服务,把dotnetcore 控制台app设置成linux后台服务

    1,新建service文件vim vim /etc/systemd/system/dotnetTest.serviceip 内容 [Unit] Description=dotnet consoleit ...

  2. 实验六:分析Linux内核创建一个新进程的过程

    20135108 李泽源 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h ...

  3. linux用kill命令删除进程,linux 使用kill命令杀死进程的几个办法

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx       1822     1  0 11:38 ?        00:00:49 gnome-terminal smx ...

  4. 【Linux进程概念】冯 诺依曼体系结构 操作系统 进程 fork 进程状态 优先级

    文章目录 [写在前面] 一.冯 ? 诺依曼体系结构 ?? 体系结构 ?? 数据流向 ?? 实例 二.操作系统 (Operator System) ?? 概念 ?? 计算机体系及操作系统定位 ?? 管理 ...

  5. Linux进程中的优先级的理解(PRI 和 NI)

    文章目录 优先级的基本理解 为什么有优先级的概念 查看进程的优先级 对PRI和NI的理解 用top命令更改已存在进程的nice:达到修改进程优先级 总结 优先级的基本理解 cpu资源分配的先后顺序,就 ...

  6. linux基础篇-系统中进程相关概念

    进程概念  内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等  Process: 运行中的程序的一个副本,是被载入内存的一个指令集合进程ID(Process ID,PID) ...

  7. linux中怎么退出执行过程,(进程)处理过程中的Linux:从执行到退出

    Linux是一个多任务操作系统,表面上看,同时运行许多任务--即进程.每一个进程都在系统中留下足迹.这里介绍一些检查这些足迹的工具,并且还要说明蔓延的/proc目录到底是什么. 欢迎归来.上周我们考察 ...

  8. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  9. 在Linux系统下实现进程,Linux进程学习(一)之Linux进程的基本知识和实现

    最近一周学习了Linux 进程编程的知识,现对其总结如下. 在第一部分中我们先对进程的基本概念以及在Linux 中是如何来现实进程的进行介绍 Tiger-John说明 : 许多人在学习中只注重如何编程 ...

最新文章

  1. Python 快速生成 web 动态展示机器学习项目!
  2. AI洞观 | 戴上红帽 看IBM冲杀云计算市场
  3. java maven项目构建ssh工程 父工程与子模块的拆分与聚合
  4. java反射设置access_Java反射之java.lang.reflect.Field
  5. error while loading shared libraries: ../../lib/libopencv_core.so
  6. Linux的经常使用命令(1) - 指定执行级别
  7. 【C++学习】对私有构造析构函数的思考:new一个类对象vs直接创建类对象
  8. mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程
  9. C/C++:Windows编程—MFC基于CWnd自绘CListCtrl控件且带滚动条
  10. matlab 下采样_Lattice规划与Matlab实现(1)
  11. server.xml解析
  12. 为什么git的“ pull request”不称为“ push request”?
  13. 把SWT包装成Plugin需要修改的地方
  14. 小米销量被荣耀赶超:手机枭雄如何跌落神坛?
  15. MFC最详细入门教程[转载]
  16. 壁式框架内力计算_钢结构墙梁内力计算
  17. python控制机器人走8字_爱,死亡和机器人 第十四集 齐马蓝 中文字幕(Python处理utf8文件获取想要的内容)...
  18. 测试新人如何编写测试用例?一文带你写一个合格的测试用例
  19. python之红楼梦词频统计并生成图云
  20. 新型场板提高阻断电压

热门文章

  1. 粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现
  2. opencv基础知识及其一些例子
  3. Kibana Guide ( Kibana 向导 )
  4. 记录遇到的Python陷阱和注意点
  5. Struts2源码阅读(三)_DispatcherConfigurationProvider
  6. spark sql hbase java_Spark 读写 HBase 的两种方式(RDD、DataFrame)
  7. linux磁盘管理的命令行,Linux磁盘管理命令介绍
  8. shell 字典_腾讯T4周末不陪对象,就为了手打这份shell编程笔记
  9. 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球
  10. linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...