0

0

CPU绑核的意义

看不見的法師

看不見的法師

发布时间:2025-07-18 10:46:27

|

610人浏览过

|

来源于php中文网

原创

smp架构与numa架构对比cpu绑核的意义cpu绑核的意义

SMP架构是一种多处理器系统,其中所有处理器紧密耦合,共享系统的所有资源,包括总线、内存和I/O系统。操作系统或数据库管理系统只有一个副本。这种系统的显著特点是所有资源的共享。各个CPU之间没有差异,平等地访问内存、外设和单一操作系统。操作系统管理一个队列,各个处理器依次处理队列中的进程。如果两个处理器同时请求访问同一资源(如同一段内存地址),通过硬件和软件的锁机制解决资源争用问题。

NUMA架构的基本特征是包含多个CPU模块,每个模块由多个CPU(如4个)组成,并拥有独立的本地内存和I/O槽口。节点之间通过互联模块(如Crossbar Switch)连接和交换信息,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的关键区别)。显然,访问本地内存的速度远高于访问远程内存(系统内其他节点的内存),这就是非一致性内存访问(NUMA)的来源。由于这一特性,为了更好地发挥系统性能,开发应用程序时应尽量减少不同CPU模块之间的信息交互。

CPU亲和性指的是特定任务倾向于在给定的CPU上长时间运行,而不被迁移到其他处理器。这意味着进程或线程不需要在多个处理器之间频繁切换。在Linux内核中,进程或线程通常由task_struct结构体表示,其中表示CPU亲和性的字段是cpus_allowed位掩码。同时,Linux内核API提供了用户修改掩码以绑定CPU的功能。

中国电子商务企业版
中国电子商务企业版

数据与动网论坛数据捆绑,动网论坛已经去掉上传组件,商城主体打了远程冰河等暴力攻击补丁功能:1 评论登陆审核 很多免费版本不带的2 自定义搜索3 vip与会员分面板 分权限4 多商家入驻 分别发布商品 下订单5 独有的域名主机系统 更易操作用户名、密码均为admin

下载
// 用于绑定线程或进程在某个CPU上运行
sched_set_affinity()

// 查看线程或进程在哪个CPU上运行
sched_get_affinity()

// 线程绑定到某个CPU Core
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);

// 查看绑定情况
int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

在多核CPU系统中,提高外设和程序工作效率的最有效方法是让每个物理核心负责专门的任务。每个核心都有L1、L2、L3缓存,进程或线程绑定到核心后会提高L1/L2/L3缓存的命中率,同时进程将持续在这个CPU核心上运行,不会被操作系统调度到其他CPU核心上,从而节省了反复调度带来的开销。对于NUMA架构,进程在多个CPU核心之间切换会导致大量的L3缓存失效,性能损耗非常大。

CPU绑核适用于计算密集型的进程、时间敏感的进程、核心进程、CPU进程或线程独占的场景。即使进程或线程绑定到某个CPU Core,仍可能发生线程或进程切换。为了进一步减少其他进程对该进程或线程的影响,可以将CPU Core从Linux内核调度中剥离出来。Linux内核提供了isolcpus参数,对于有4个CPU core的系统,在启动时加入isolcpus=2,3,那么系统启动后将不会使用CPU3和CPU4。这里的不使用不是绝对的,但可以通过taskset命令来设置。

// 1. 在Linux内核启动参数中添加isolcpus参数
vi /boot/grub2.cfg中添加isolcpus=2,3

// 2. 查看设置情况
cat /proc/cmdline

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

532

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

412

2024.03.13

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

481

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

348

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2074

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号