linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)

本文介绍了如何在Linux系统中通过CPU亲和性技术将进程绑定到指定CPU核,以避免调度开销并提高性能。文章详细阐述了CPU亲和性的概念,以及涉及的宏和函数,如`CPU_SET`、`sched_setaffinity`等,并提供了测试代码以验证绑定效果。
摘要由CSDN通过智能技术生成

前言

现在计算机上的CPU大多都是多核的,有4核甚至是8核的。但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行。但是对于应用程序或者进程,其性能要求较高时,可能有必要绑定该进程到指定的CPU核来运行,避免调度带来的额外开销。我自己也是因为最近的项目上有需要进程运行在指定的CPU核上的要求,所以了解了一下这项技术,并且将过程和总结记录于此。

CPU亲和性

在学习这项新技术之前,我们先来了解一下什么是CPU亲和性?所谓亲和性,就是把进程在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性;再简单的点的描述就将制定的进程或线程绑定到相应的cpu上;在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高。

预备知识

在编写测试程序之前,我们先来了解一下CPU相关的宏和函数。

1.首先要想使用CPU系列函数及相关的宏,需要声明下面的宏,以告诉编译器启用这些函数

#define _GNU_SOURCE

2.声明一个cpu_set_t,然后用 CPU_ZERO()宏来初始化数据:

cpu_set_t mask;

CPU_ZERO(&mask);

3.再下来就是要指定绑定的CPU核心,用CPU_SET()宏来指定,例如:

CPU_SET(1, &mask);//绑定CPU核心1

4.下面这个函数是进程绑定CPU核心最关键函数,也是实际绑定CPU核的操作。其原型即参数说明如下:

int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);

该函数设置进程为pid的这个进程,让它运行在mask所设定的CPU上.如果pid的值为0,则表示指定的是当前进程,使当前进程运行在mask所设定的那些CPU上.第二个参数cpusetsize是mask所指定的数的长度.通常设定为sizeof(cpu_set_t).如果当前pid所指定的进程此时没有运行在mask所指定的任意一个CPU上

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值