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):将位图的某一位置1
  • sched_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相关推荐

  1. Linux CPU亲缘性

    创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...

  2. java 线程亲缘性_CPU affinity 进程和线程的亲缘性

    设置Processor Affinity 作用: 1.进程和线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行.(比如程序A,在第4个核心上运行) 2.设置进程 或者 线程, 使 ...

  3. Linux CPU亲缘性详解

    前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣."自动根据CPU数目设置进程个数和绑定CPU亲缘性".当时笔者对CPU亲缘性没有任 ...

  4. CPU亲缘性及网卡中断绑定

    #####编辑器依旧那么难用 难用 难用~~################ ################################################## CPU亲缘性及网卡中 ...

  5. 【Linux系统编程】| Linux性能优化——CPU亲缘性

    文章目录 一.CPU亲和性 1.1 使用场景 二.使用接口 测试 一.CPU亲和性 CPU亲和性又称CPU关联,可以映射到一个或多个CPU上.该技术基于对称多处理机操作系统中的native centr ...

  6. Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

    Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 文章目录 Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 摘要 1 什么是CPU亲缘性 2 目的 3 API ...

  7. Nginx八(CPU亲缘性配置)

    创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...

  8. 为什么子进程要继承处理器亲缘性?

    请先考虑一个典型的程序为什么需要启动一个子进程.(当然资源管理器不算一个典型的程序) 这是因为手头的任务被分解为子任务,无论出于何种原因,这些子任务都被放入子流程中.例如,在实现多次遍历型编译器/链接 ...

  9. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  10. 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七

    线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...

最新文章

  1. 网站载入太慢直接影响用户访问体验,该如何优化?
  2. LeetCode-77-Combinations
  3. mysql查询cpu使用率100%_数据库CPU使用率100% 排查记
  4. java高并发(三)并发编程的基础
  5. Python学习,装饰器,元类
  6. python有关函数的面试题
  7. 为什么饿着饿着就不饿了
  8. Web后端学习笔记Flask(2)模板
  9. 2019年1月13日【回家】
  10. Hightopo 受邀参加第二十三届中国国际高新技术成果交易会
  11. 康奈尔笔记法,早点认识你我可能去北大了
  12. 导致企业5S管理失败的八大根源
  13. 开心庄园html的代码,开心.html
  14. 完全搞懂java中的时间戳,时区,日期格式
  15. 三位数除以两位数竖式计算没有余数_四年级上册数学三位数除两位数练习题没有余数...
  16. 【win7安装composer错误】:The quot;https://getcomposer.org/download/1.6.2/composer.phar.sigquot; file cou
  17. LeetCode #179 - Largest Number
  18. 生信技能04 - 生信分析所需致病SNP位点Excel文件制作教程
  19. tensorflow 安装失败
  20. 系统如何自动识别短信验证码

热门文章

  1. 爬虫基础知识+Scrapy框架
  2. 学习游戏服务器编程提高篇
  3. LAMP环境的搭建与部署
  4. 文件正在使用,操作无法完成,因为文件已在...中打开
  5. 服务器字体显示繁体字怎么解决,win7繁体字乱码怎么办?win7繁体字显示乱码解决方法...
  6. 上位机PC控制UR3机器人实现方式
  7. 病毒式传播ip_病毒式传播后网络安全实践的简单指南
  8. recovery 恢复出厂设置失败Data wipe failed
  9. 火灾报警管理系统java,火灾报警系统开题报告
  10. 并行计算(三):并行计算效能的评估