Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152515
  • 博文数量: 477
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(477)

文章存档

2024年(28)

2023年(247)

2022年(202)

我的朋友

分类: 系统运维

2023-10-30 13:45:17

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


一、技术背景

相关概念:
核隔离:指定的cpu核心只参与{BANNED}{BANNED}最佳佳低限度的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中的值,将其改为{BANNED}中国{BANNED}中国第一步中的预留核数,如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启动和管理的进程)进行核隔离的目的。

阅读(106) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~