首页 > 其他分享 >一种动态实现核隔离的方法

一种动态实现核隔离的方法

时间:2023-10-30 11:56:56浏览次数:33  
标签:systemd 隔离 网元 内核 进程 动态 方法 cpu

本文分享自天翼云开发者社区《一种动态实现核隔离的方法》,作者:y****n

一、技术背景

相关概念:

核隔离:指定的cpu核心只参与最低限度的OS内核计算; 

DPDK(Date planedevelopment kit):是一个用来进行包数据处理加速的软件库。

Cpu亲和性:进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。

背景:

网元节点上,对cpu消耗比较多的进程可以分为几个类别:

1、系统运行相关进程(通过systemd启动和管理的进程以及内核线程)

2、网元相关进程(比如dpos、gobgpd进程)。

然而在现网中发现,由于系统运行相关进程与网元相关进程在同内核下运行时,会概率性的抢占pmd线程的cpu,从而导致dpdk丢包,影响网元性能。一般使用的隔离系统进程方法如修改grub文件、tuned调优方式都需要重启才能生效,对于已经部署到现网的网元而言,这些方式会对用户业务造成极大的影响。

因此,需要寻求一种核隔离方法,使得系统进程和网元进程互相隔离,互不影响,以解决网元设备在系统进程抢占业务进程cpu内核时可能出现的网络延时变高,丢包等问题,提高网络通信的性能和可靠性。并且对于现网上运行的网元节点能够做到无感知。

二、方案设计及实现

本方案主要是隔离systemd启动和管理的进程的cpu核,限制其运行在网元进程的预留核上。

1、确定cpu预留核分配策略

根据系统规格的不同,确定不同的cpu内核分配策略。如1Numa8Cores的系统,可将系统进程分配到0-2核上;或者2Numa96Cores的系统。可将系统进程分配到numa0的前3个cpu核以及numa1的后3个cpu核上,其余的内核为网元进程所占用。分配策略需按照服务器规格以及实际需求进行设计。

2、设置systemd进程亲和性

通过修改/etc/systemd/system.conf文件中的CPUAffinity中的值,将其改为第一步中的预留核数,如0-2。

通过systemd 

3、设置systemd子进程亲和性

对于systemd启动和创建的进程主要分为几类:

1、正在运行的systemd子进程

2、后续由systemd创建或者重启的子进程

对于后续需要由systemd创建的进程或者重启的进程,其cpu亲和性会自动与systemd保持一致,因此只需要考虑正在运行的systemd子进程的核隔离。对此,采用taskset -cp cpus pid的方式进行设置。taskset是linux操作系统中的一个命令,它可以对进程进行CPU亲和性设置,即让进程在指定的CPU核心或者CPU核心集合上运行。

通过cgroup和taskset两种方式的结合,可以实现在现网运行过程中,动态的对系统相关的进程(尤其是systemd启动和管理的进程)进行核隔离的目的。

标签:systemd,隔离,网元,内核,进程,动态,方法,cpu
From: https://www.cnblogs.com/developer-tianyiyun/p/17797444.html

相关文章

  • JS动态在父元素里追加元素——insertAdjacentHTML
    insertAdjacentHTML() 方法将指定的文本解析为 Element 元素,并将结果节点插入到DOM树中的指定位置。它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素。这避免了额外的序列化步骤,使其比直接使用innerHTML操作更快。 element.insertAdjacentHTML(position,......
  • Net 高级调试之三:类型元数据介绍(同步块表、类型句柄、方法描述符等)
    一、简介今天是《Net高级调试》的第三篇文章,压力还是不小的。上一篇文章,我们浅浅的谈了谈CLR和Windows加载器是如何加载Net程序集的,如何找到程序的入口点的,有了前面的基础,我们今天看一点更详细的东西。既然Windows操作系统已经加载了CLR,初始化了应用程序域,加载......
  • 反射的内置方法
    内置方法__str__:1.如果不重写__str__return会打印出内存地址2.print()打印的时候,会自动触发该函数的执行如果重写了,会打印出你想要的classFoo:def__init__(self,name):self.name=namedef__str__(self):return'['+self.name+']'......
  • 绑定方法和非绑定方法
    绑定方法 对象绑定方法/类的绑定方法对象绑定方法:定义在类内部,没有装饰器装饰的方法,都是对象的绑定方法需要对象来调用,对象调用的时候,会把自身传入classPerson:def__init__(slef,name='my'):self.name=nameself.age=17defchange_name(s......
  • scrum开发方法
    一、Scrum概述Scrum本指橄榄球运动中的“争球”的动作——团队通力合作,在场地内传球。这个过程需要认真配合、信念一致、目标明确。这个过程完美体现了对一个团队的所有要求。用Scrum命名一种开发过程,比喻开发团队在开发一个项目时,像打橄榄球一样迅速、激情,人人你争我抢地完成......
  • 【木棉花】向用户动态申请授权
    前言应用向用户动态申请授权,是指在用户使用应用的过程中,应用方会根据应用场景和业务向用户动态地请求相应的权限。例如,当应用需要访问用户的相机或麦克风时,会向用户弹出一个授权请求框,询问用户是否允许应用访问这些设备,而用户可以选择允许或拒......
  • 按Value对Map进行排序,技术大佬们都在用这个方法
    在Java中,Map的排序一般会根据Key或者Value来进行。按照Value对Map进行排序,通常会用在以下几种场景。1.数据可视化:如果你正在创建一个数据可视化工具,你可能会需要根据数据的值来进行排序。例如,你可能有一个表示员工工资的Map,你想要根据工资值来对员工进行排序,并在图表中展示。2.......
  • 性能测试的实践痛点和解决方法
    昨天有同学找我咨询了一个性能测试相关的问题,他说:他们公司的性能测试实践目前基本成为了形式主义,除了版本迭代时候的单系统单接口压测,没有其他亮点,领导也不重视。想做一些异常测试和高可用测试,体现自己的价值,但又不知道从何入手,该怎么解决当下不被重视的现状?其实很多测试同......
  • java中native源码查找方法
    以Object的hashCode()方法为例:1.下载openjdk源码或从github中查找,这里以github中查找为例;2.GitHub中查找https://github.com/bpupadhyaya/openjdk-8/tree/master/hotspot源码;3.搜索到Object.c源码文件,并查找hashCode字眼,如下所示: 4.由上可知,hashCode方法实际是调用的jvm.c......
  • Java基础 反射获取构造方法
    在Java中,万物皆对象。比如,字节码文件可以看作是Class这个类的对象;Constructor这个类是用来描述构造方法的,所以这个类的对象就表示构造方法的对象;Field这个类是用来描述成员变量的,所以这个类的对象就表示成员变量的对象;Method 这个类是用来描述成员方法的,所以这个类的对......