CPU的亲缘性affinity
CPU的亲缘性affinity
- 前言
- 何谓亲缘性
- 亲缘性API介绍
- 测试
- 八个进程绑定八个CPU核心
- 八个进程绑定四个CPU核心
- 八个进程绑定一个CPU核心
前言
本文简单介绍一下CPU亲缘性以及实现方法。
本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。
何谓亲缘性
亲缘性的作用就是把线程or进程与CPU做黏合,也就是说,做了亲缘性的线程或进程,只会在这一个CPU核上运行,只在这一个CPU核上被调度,且不会切换到其他的CPU核上运行。这就是亲缘性。
亲缘性API介绍
cpu_set_t mask
:创建CPU核位图CPU_ZERO(&mask)
:将位图置空CPU_SET(self_id % num, &mask)
:将位图的某一位置1sched_setaffinity(self_id, sizeof(mask), &mask)
:将对应进程或线程绑定到置1的这个CPU核上
测试
八个进程绑定八个CPU核心
//
// Created by 68725 on 2022/8/4.
//
#define _GNU_SOURCE /* See feature_test_macros(7) */#include <unistd.h>
#include <sys/mman.h>
#include <sched.h>void process_affinity(int num) {pid_t self_id = getpid();
// pid_t self_id = syscall(__NR_gettid);cpu_set_t mask;CPU_ZERO(&mask);//绑定某个CPU核心CPU_SET(self_id % num, &mask);//设置亲缘性
// sched_setaffinity(0, sizeof(mask), &mask);sched_setaffinity(self_id, sizeof(mask), &mask);while (1);
}int main() {//获取cpu数量int cpu_num = sysconf(_SC_NPROCESSORS_CONF);int i;pid_t pid = 0;//创建与CPU数量一样多的进程for (i = 0; i < cpu_num; i++) {pid = fork();if (pid == (pid_t) 0) {break;}}if (pid == 0) {process_affinity(cpu_num);}while (1)usleep(1);
}
可以看到瞬间跑满了
八个进程绑定四个CPU核心
//
// Created by 68725 on 2022/8/4.
//
#define _GNU_SOURCE /* See feature_test_macros(7) */#include <unistd.h>
#include <sys/mman.h>
#include <sched.h>void process_affinity(int num) {pid_t self_id = getpid();
// pid_t self_id = syscall(__NR_gettid);cpu_set_t mask;CPU_ZERO(&mask);//绑定某个CPU核心CPU_SET(self_id % num, &mask);//设置亲缘性
// sched_setaffinity(0, sizeof(mask), &mask);sched_setaffinity(self_id, sizeof(mask), &mask);while (1);
}int main() {//获取cpu数量int cpu_num = sysconf(_SC_NPROCESSORS_CONF);int i;pid_t pid = 0;//创建与CPU数量一样多的进程for (i = 0; i < cpu_num; i++) {pid = fork();if (pid == (pid_t) 0) {break;}}if (pid == 0) {process_affinity(4);}while (1)usleep(1);
}
可以看到瞬间4个CPU核跑满
八个进程绑定一个CPU核心
//
// Created by 68725 on 2022/8/4.
//
#define _GNU_SOURCE /* See feature_test_macros(7) */#include <unistd.h>
#include <sys/mman.h>
#include <sched.h>void process_affinity(int num) {pid_t self_id = getpid();
// pid_t self_id = syscall(__NR_gettid);cpu_set_t mask;CPU_ZERO(&mask);//绑定某个CPU核心CPU_SET(self_id % num, &mask);//设置亲缘性
// sched_setaffinity(0, sizeof(mask), &mask);sched_setaffinity(self_id, sizeof(mask), &mask);while (1);
}int main() {//获取cpu数量int cpu_num = sysconf(_SC_NPROCESSORS_CONF);int i;pid_t pid = 0;//创建与CPU数量一样多的进程for (i = 0; i < cpu_num; i++) {pid = fork();if (pid == (pid_t) 0) {break;}}if (pid == 0) {process_affinity(1);}while (1)usleep(1);
}
CPU的亲缘性affinity相关推荐
- Linux CPU亲缘性
创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...
- java 线程亲缘性_CPU affinity 进程和线程的亲缘性
设置Processor Affinity 作用: 1.进程和线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行.(比如程序A,在第4个核心上运行) 2.设置进程 或者 线程, 使 ...
- Linux CPU亲缘性详解
前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣."自动根据CPU数目设置进程个数和绑定CPU亲缘性".当时笔者对CPU亲缘性没有任 ...
- CPU亲缘性及网卡中断绑定
#####编辑器依旧那么难用 难用 难用~~################ ################################################## CPU亲缘性及网卡中 ...
- 【Linux系统编程】| Linux性能优化——CPU亲缘性
文章目录 一.CPU亲和性 1.1 使用场景 二.使用接口 测试 一.CPU亲和性 CPU亲和性又称CPU关联,可以映射到一个或多个CPU上.该技术基于对称多处理机操作系统中的native centr ...
- Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)
Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 文章目录 Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 摘要 1 什么是CPU亲缘性 2 目的 3 API ...
- Nginx八(CPU亲缘性配置)
创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...
- 为什么子进程要继承处理器亲缘性?
请先考虑一个典型的程序为什么需要启动一个子进程.(当然资源管理器不算一个典型的程序) 这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中.例如,在实现多次遍历型编译器/链接 ...
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)
7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...
最新文章
- 网站载入太慢直接影响用户访问体验,该如何优化?
- LeetCode-77-Combinations
- mysql查询cpu使用率100%_数据库CPU使用率100% 排查记
- java高并发(三)并发编程的基础
- Python学习,装饰器,元类
- python有关函数的面试题
- 为什么饿着饿着就不饿了
- Web后端学习笔记Flask(2)模板
- 2019年1月13日【回家】
- Hightopo 受邀参加第二十三届中国国际高新技术成果交易会
- 康奈尔笔记法,早点认识你我可能去北大了
- 导致企业5S管理失败的八大根源
- 开心庄园html的代码,开心.html
- 完全搞懂java中的时间戳,时区,日期格式
- 三位数除以两位数竖式计算没有余数_四年级上册数学三位数除两位数练习题没有余数...
- 【win7安装composer错误】:The quot;https://getcomposer.org/download/1.6.2/composer.phar.sigquot; file cou
- LeetCode #179 - Largest Number
- 生信技能04 - 生信分析所需致病SNP位点Excel文件制作教程
- tensorflow 安装失败
- 系统如何自动识别短信验证码
热门文章
- 爬虫基础知识+Scrapy框架
- 学习游戏服务器编程提高篇
- LAMP环境的搭建与部署
- 文件正在使用,操作无法完成,因为文件已在...中打开
- 服务器字体显示繁体字怎么解决,win7繁体字乱码怎么办?win7繁体字显示乱码解决方法...
- 上位机PC控制UR3机器人实现方式
- 病毒式传播ip_病毒式传播后网络安全实践的简单指南
- recovery 恢复出厂设置失败Data wipe failed
- 火灾报警管理系统java,火灾报警系统开题报告
- 并行计算(三):并行计算效能的评估