当前位置: 首页 > news >正文

linux隔离内核使用某些CPU,isolcpu参数 隔离cpu使其不被自动调度(linux 修改boot参数)...

我的系统是Ubuntu16.04,以下方法在我的系统上测试有效

首先需要说明的是,隔离cpu对用户空间的进程有效,但是对内核的进程无效,所以被隔离的cpu并不是完全空闲的。(参考:https://unix.stackexchange.com/questions/282256/isolcpus-kernel-parameter-has-no-effect-on-ubuntu-16-04-desktop)

步骤:

(1)在/etc/default/grub中的下面一行添加最后的isolcpus参数

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=1,3"(这里表示1和3两个cpu被隔离,cpu序号从0开始)

也可以添加到:

GRUB_CMDLINE_LINUX="isolcpus=1,3"

(2)更新/boot/grub/grub.cfg文件

常规方法是:

sudo update-grub

(这个方法在/etc/default/grub文件开头的注释里说明)

如果提示update-grub命令找不到,安装一下:

sudo apt-get update; sudo apt-get install --reinstall grub

执行完update-grub之后,看一下/boot/grub/grub.cfg的时间戳,如果更新了说明成功了。我用这个命令没能成功更新。

如果没有更新成功,可以试试另一种更新方法:

sudo grub-mkconfig -o /boot/grub/grub.cfg

(我用这个命令成功更新了,参考:https://ubuntuforums.org/showthread.php?t=1448978)

(3)重启系统

(4)检查是否生效(参考:https://unix.stackexchange.com/questions/336017/how-to-detect-if-isolcpus-is-activated/338372)

有好几种方法:

- 首先可以查看 /proc/cmdline里是不是有isolcpu参数,有的话说明本次重启确实带了这个参数

- 查看进程1的cpu affinity:

$taskset -cp 1

pid 1"s current affinity list: ff5

如果没有cpu隔离的话,这里应该是fff(假设有12个逻辑cpu)

也可以查看当前进程的cpu affinity: $taskset -cp $$

- 查看所有进程、线程的cpu分配情况(可以用htop查看,也可以用ps -eo pid,cmd,psr查看所有进程cpu分配情况,用ps -To "pid,lwp,psr,cmd" -p [PID]查看进程的所有线程的cpu分配情况)

(5)在docker里面的情况

在我的系统里,直接启动docker,在docker里面的进程看起来似乎并不受这个cpu隔离的限制。后来调研了一番,发现在启动docker的时候,给run添加一个参数:--cpuset-cpus="0-3",这个cpu列表表示的是这个docker的进程可以使用的cpu序号(也就是isolcpu的参数的补集),docker里的进程就会有cpu隔离的效果。(参考:https://stackoverflow.com/questions/20123823/how-does-docker-use-cpu-cores-from-its-host-operating-system)但是亲测如果在docker里面用taskset指定某个进程运行在被隔离的cpu上,会报错。目前还不知道怎么在docker里面实现cpu隔离的同时,还能将docker内的进程指定在被隔离的cpu上,如果有人知道望告知~

相关文章:

  • linux路径信息,linux 底层 基础命令 路径信息
  • Linux基础信息,Linux基础(用户信息)
  • 在linux下安装mongo数据库,Linux系统下安装MongoDB
  • linux5编辑文本,linux 学习5 文本编辑器 vim
  • c语言数字类型转字符类型,C语言的基本数据类型及数据类型转换
  • 李含光c语言程序设计教程百度云,C语言程序设计教程 李含光 郑关胜 清华大学出版社习题答案...
  • 个人密码管理程序c语言,密码管理系统C语言(8页)-原创力文档
  • c语言程序设计数字电位器,可编程数字电位器在AVR单片机中的应用
  • 编程语言与c语言转换,【转】一些变态的编程语言
  • android 位于底部的tab,GitHub - DevinFu/BottomTabBar: Android应用中位于底部的tab栏
  • android studio 程序包r不存在,Android Studio问题!无法解析符号R,找不到与...
  • 麒麟810鸿蒙内核移植,2K魅眼屏+鸿蒙OS系统+麒麟810 华为出大招了
  • C51编程语言的特点 与C的异同点,编程语言异同点归纳之一:注释方法 | 求索阁...
  • 华为鸿蒙系统启示,华为的机遇——鸿蒙系统启示录
  • signature=9721a1ecae6007cb6671337ee094b6b3,Nature Rev Immunol. The dark side of C5a in sepsis
  • [译]Python中的类属性与实例属性的区别
  • CSS实用技巧
  • C学习-枚举(九)
  • JSDuck 与 AngularJS 融合技巧
  • k个最大的数及变种小结
  • Python中eval与exec的使用及区别
  • v-if和v-for连用出现的问题
  • 百度地图API标注+时间轴组件
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 解决iview多表头动态更改列元素发生的错误
  • 如何利用MongoDB打造TOP榜小程序
  • 设计模式 开闭原则
  • 实现简单的正则表达式引擎
  • hi-nginx-1.3.4编译安装
  • 湖北分布式智能数据采集方法有哪些?
  • 说说我为什么看好Spring Cloud Alibaba
  • #考研#计算机文化知识1(局域网及网络互联)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (4)logging(日志模块)
  • (4)事件处理——(7)简单事件(Simple events)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Python第六天)文件处理
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (学习日记)2024.01.19
  • ***通过什么方式***网吧
  • ... 是什么 ?... 有什么用处?
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Remoting学习笔记(三)信道
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 代码性能 - (1)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net多线程总结
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net解析传过来的xml_DOM4J解析XML文件
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [<MySQL优化总结>]