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

天翼云开发者社区
• 阅读 331

本文分享自天翼云开发者社区《一种动态实现核隔离的方法》,作者: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启动和管理的进程)进行核隔离的目的。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
TIDB集群安装部署方案————————上篇
1.   安装TIDB生成环境硬件要求组件CPU内存硬盘类型网络数量(最低要求)TiDB16核48GBSAS万兆网卡(2块最佳)2PD8核16GBSSD万兆网卡(2
Wesley13 Wesley13
3年前
CPU核数怎么计算?
物理cpu数主板上实际插入的cpu数量,可以数不重复的physicalid有几个(physicalid)Linuxcat/proc/cpuinfo|grep"physicalid"|sort|uniq|wclcpu核数单块CPU上面能处理数据的芯片组的数量,
Stella981 Stella981
3年前
Python实现多进程
Python可以实现多线程,但是因为GlobalInterpreterLock(GIL),Python的多线程只能使用一个CPU内核,即一个时间只有一个线程在运行,多线程只是不同线程之间的切换,对多核CPU来说,就是巨大的浪费。如4核CPU,实际上只利用了一个核,CPU利用率只有25%。要充分利用多核CPU,可以实现Python的多进程。首先,im
Stella981 Stella981
3年前
Linux系统性能检测常用命令
查看CPU数量总核数物理CPU个数X每颗物理CPU的核数总逻辑CPU数物理CPU个数X每颗物理CPU的核数X超线程数查看物理CPU个数:cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wcl
Stella981 Stella981
3年前
Linux日常运维小结
1\.如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?物理cpu个数:cat/proc/cpuinfo|grepc'physicalid'CPU一共有多少核:grepcprocessor/proc/cpuinfo将CPU的总核数除以物理CPU的个数,得到每颗CPU的核数。2\.查看系统负载有两个常用的命
Stella981 Stella981
3年前
Nginx 作为web server 的优化要点
常用优化要点nginx使用的是固定数量的workers,每个worker都处理进入的请求。最佳实践是每个CPU内核配置一个worker.如何知道您的系统有几个CPU?$ grep ^processor /proc/cpuinfo | wc l对于一个四核处理器,配置文件类似:\Oneworkerper
Wesley13 Wesley13
3年前
F28379D烧写双核程序(在线&离线)
烧写双核程序前需知在分别对F28379D的CPU1和CPU2两个核进行烧写程序时,需要在CCS中建立两个工程,独立编写两个核的程序。如controlSUITE中提供的双核程序例程:1\.在线1.1编译烧写CPU1程序到F28379D中1.2编译CPU2程序,把生成的.out文件加载到CPU2中选中上图中红色框框中的
Stella981 Stella981
3年前
Linux RPS RFS
随着单核CPU速度已经达到极限,CPU向多核方向发展,要持续提高网络处理带宽,传统的提升硬件设备、智能处理(如GSO、TSO、UFO)处理办法已不足够。如何充分利用多核优势来进行并行处理提高网络处理速度就是RPS解决的课题。以一个具有8核CPU和一个NIC的,连接在网络中的主机来说,对于由该主机产生并通过NIC发送到网络中的数据,CPU核的并行性是自热而然
Wesley13 Wesley13
3年前
CPU,并行,并发,多线程
1.CPUI5处理器有四核四线程和四核八线程两种:(1).四核四线程:就是CPU有四个物理核心,每个核心一个时间内只处理一个线程调度,任务管理器中只显示4个CPU图表;(2)四核八线程:使用了超线程技术,把一个物理核心,模拟成两个逻辑核心,任务管理器中会显示8个CPU图表;I7处理器的八核八线程:有八个物理核心可以
十月飞翔 十月飞翔
2年前
将CPU 打满到接近 100% 长跑高CPU负载脚本 + 消耗大内存脚本
可直接下载附件上传到需要测试的服务器执行lscpu查看cpu核数,将内核数量,作为参数在执行以下脚本时添加上。运行命令:./killcpu.sh88是cpu核数,脚本后面跟cpu核数,执行完毕后去/root/logs下查log,可根据需要自己决定测试时间。!/bin/bashfilenamekillcpu.shc
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
696
粉丝
15
获赞
40