isolcpus的学习与了解


前言

最近一直跟同事说要进行CPU的bind
bind到具体的core
当时还一直装B, 说这样能够提高性能.
但是今天起床早上查看资料时发现,其实是先设置隔离的.
让操作系统的scheduler不往这些CPU上面执行调度
再使用taskset的方式执行绑定才可以.

知识简介

isolcpus功能存在已久,Kernel v2.6.11(2005年)那时内核就已经存在了isolcpus功能。
根据kernel-parameters.txt 上的解释,”isolcpus功能用于在SMP均衡调度算法中将一个或多个CPU
孤立出来。同时可通过亲和性设置将进程置于 “孤立CPU”运行,isolcpus后面所跟的cpu参数,
可设置孤立0~最大CPU个数-1个cpu。这种方法是推荐使用的孤立cpu的方式,
与手动设置每个任务的亲和性相比,后一种方式降低了调度器的性能”。 isolcpus带来的好处是有效地提高了孤立cpu上任务运行的实时性。
该功能在保证孤立cpu上任务的运行,同时减少了其他任务可以运行的cpu资源,
所以需要使用前对cpu资源进行规划
From: https://blog.csdn.net/weixin_39094034/article/details/122104295

原理分析

现阶段CPU的技术发展,在同一个NUMA节点内部有多个CPU的Core
这里CPU为了性能, 每一个CPU都有独享的L1和L2的cache. 更重要他有自己的TLB还有寄存器
因为cc高速缓存一致性的要求, 一般多核共享L3, 很多高端CPU还有一些off-CPU的L4的SRAM的cache 所以能够将这个核心 避免被调度使用, 仅使用目标进程的话性能是最好的
这样他的TLB, 他的寄存器几乎切换就会很少. 上线文和中断也会变少. 但是这里还有一个注意事项. 不建议孤立/隔离0-1号CPU, 他们一半是网卡中断以及各种中断使用.
所以建议可以孤立一个numa节点的靠后面计数的CPU核心,给像是redis或者是nginx这样的高CPU的应用使用. 所以这里主要是两个工具命令 isolcpus 隔离孤立CPU taskse他手动将进程绑定到具体的CPU核心

具体命令的使用

需要使用grub修改启动设置,将几个CPU停止调度.
其实测试比较难, 因为机器压力比较小, 估计效果不明显.
注意如下操作非常危险. 要做好机器宕机的准备, 建议自己务必多测试,尤其是标点符号一个字符都不能错.
以我这边的 OpenEuler22.03举例进行说明
vim /boot/grub2/grub.cfg
可以查找 vmlinuz 的关键词. 注意一般至少有两行, 一行是标准启动,一行是救援启动. 建议只需要改标准的,不要改rescue的.
在 rhgb quiet 附近添加上: isolcpus=6,7
注意不能用连接符, 只能用英文逗号, 设置完保存,然后重启.
为了测试验证,可以先进行孤立CPU之前测试一把,再重新测试一把. 手工绑定CPU可以使用 taskset -c 1-4 进行绑定, 这里可以用 范围符号(-) 或者是枚举(,) 需要说明, 必须机器压力大的情况下才更有效果,如果压力不大并且机器专用的话,效果不明显.

简单测试-isolcpus之前

测试命令 针对redis的ping测试
./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 100000 ping
不做任何绑定 多次测试的结果为:
56850.48 对server 进行绑定内核 7
taskset -c 7 ./redis-server redis.conf
测试脚本为:
taskset -c 6 ./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 100000 ping
58173.36
# 感觉误差就够了.. 这个破玩意真不准. 每次测试能插10%
# 我用虚拟机感觉不太靠谱. 只是感觉大概有 4%左右的提升.
# 不过我突发奇想, client和server在一起会怎么样...
taskset -c 7 ./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 100000 ping
33978.93
# 这个差距就明显了..
# 为了准确我重启一下再验证.
# 重启压力最小时的确能搞 2000TPS左右. 准备进行一些其他设置.

简单测试-孤立CPU之后

对server 进行绑定内核 7
taskset -c 7 ./redis-server redis.conf
测试脚本为:
taskset -c 6 ./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 100000 ping
结果差异不大 !-_-!
56116.72 甚至还下降了....
又是虚拟机,有没啥压力, 所以测试结果不具备说服性...
我感觉压力大 并且是物理机 多种应用 网络复杂比较大时效果应该是可以的.

isolcpus的学习与了解的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  10. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

随机推荐

  1. 带你认识多模数据库GeminiDB架构与应用实践

    本文分享自华为云社区<多模归一,一生万物--华为云多模数据库GeminiDB架构与应用实践>,作者: GaussDB 数据库 . 在这个信息爆炸的时代,数据的管理和应用变得越来越重要.互联 ...

  2. 【华为云技术分享】玩转物联网IoTDA服务系列三-自动售货机销售分析场景示例

    摘要:物联网解决方案中,作为数据主体的"物"可能数量会非常大,产生的数据已经无法通过传统的数据处理服务进行处理.如何分析与利用这庞大的物联网设备数据对物联网企业来说又是一个新的挑战 ...

  3. 4大焕新,华为云CCE带你感受容器化上云体验

    本文分享自华为云社区<华为云CCE邀您共同打造最佳容器化上云体验>,作者:云容器大未来 . 在容器化日益成为中大型企业上云主流选择的情况下,容器服务如何能帮助用户更简单快捷的上云.高效可信 ...

  4. LiteOS内核源码分析:动态内存之Bestfit分配算法

    摘要:本文为大家剖析LiteOS动态内存模块bestfit算法的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要 ...

  5. 独家下载!突破开源Redis,华为云十年自研内核修炼之路《企业级Redis技术与应用解读》重磅发布

    摘要:互联网业务神器最新揭秘:GaussDB(for Redis)如何以自研架构,突破开源版本限制,带来企业级稳定可靠?通过入门篇.性能篇.测评篇.应用篇四个章节,聚焦问题解决.场景应用和开发实战,分 ...

  6. 实践解析可视化开发平台FlinkSever优势

    摘要:华为Flink可视化开发平台FlinkServer作为自研服务,能够提供比原生flinksql接口更强的企业级特性,比如任务的集中管理,可视化开发,多数据源配置等. 本文分享自华为云社区< ...

  7. Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)

    ​ Unity3D 导出的apk进行混淆加固.保护与优化原理(防止反编译) 目录 前言: 准备资料: 正文: 1:打包一个带有签名的apk 2:对包进行反编译 3:使用ipaguard来对程序进行加固 ...

  8. 如何配置Apple推送证书 push证书

    ​ 转载:如何配置Apple推送证书 push证书 想要制作push证书,就需要使用快捷工具appuploader工具制 作证书,然后使用Apple的推送功能配置push证书,就可以得到了.PS:pu ...

  9. 用 Java?试试国产轻量的 Solon v1.10.1

    相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...

  10. Vue | vuex安装失败解决的方法实例

    Vuex是一个专为Vue.js应用程序开发的状态管理模式 下面这篇文章主要给大家介绍了关于vuex安装失败解决的方法,文中通过图文介绍的非常详细,需要的朋友可以参考下 1.报错信息: npm ERR! ...