CPU 明明 8 个核,网卡为啥拼命折腾一号核?
作者 | 编程技术宇宙
责编 | Carol
封图 | CSDN 下载自视觉中国
中断机制
我是CPU一号车间的阿Q,我又来了!
我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松。
咱不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其他单位打交道。经常保持联系的有键盘、鼠标、磁盘,哦对,还有网卡,这家伙最近把我惹到了,待会再说这事儿。
原以为内存那家伙已经够慢的了,没想到跟上面这几位通个信比他更慢,咱CPU工厂的时间一刻值千金,不能干等着,耽误工夫。后来厂里一合计,想了个叫中断
的办法。
在我们车间装了个大灯,这些单位想联系我们办事儿,就先给我们发一个中断信号,大灯就会自动亮起。我们平时工作执行代码指令的时候,每执行一条指令就会瞅一眼看看大灯有没有亮起来。一旦发现灯亮了,就把手头的工作先放一边,去处理一下。
我们记性很差的,等会处理了完了还得回来接着原来的活继续干,为了等会回来还能接的起来,走之前得把当前执行的这个线程的各个寄存器的值,执行到哪里了等等这些信息都保存在这个线程的栈里去。
不过有时候我们在执行非常重要的事情的时候,就不想被他们打断。于是我们又在车间里那个eflags寄存器
中设置了一个标记,如果是1我们才允许被打断,如果是0那就算天王老子找我们也不管了。
哦不对,还有一种不可以屏蔽的中断NMI
,走得是绿色通道。不过我可不期望有这种事情发生,因为一般都没有好事,不是电源断电就是温度过高,或者总线出了错误等这之类严重的事情。
8259A PIC
还有一个问题,找我们办事儿的单位有很多,我们得要区分开来,到底是谁来消息了,而且要是他们一起来找,按什么样优先级顺序处理,也是一件头疼的事情。
为此,厂里单独组建了一个全资的子公司来负责这事儿,他就是可编程中断控制器PIC
,外号8259A,其他单位想联系我们都得通过这个PIC,我们只需要和PIC进行对接就可以了。
我们给办事单位都分配了一个编号,叫做中断向量
。我们还准备了一个表格叫中断描述符表IDT
,表格里记录了很多信息,其中就有处理这个中断号对应的函数地址。我们找PIC拿到编号后就执行处理函数就OK了。
这个表格有点大,足足有256项,咱CPU车间空间有限,放不下,就把它放在内存那家伙那里了,为了能快速找到这个表,专门添置了一个叫idtr
的寄存器指向这个表格。
其实除了中断,我们在执行指令的时候如果遇到了异常
情况,也会去这个表里执行异常处理函数,最常见的比如遇到了除数是0,内存地址错误等等情况。
这种情况下,我们必须主动放下手里的活,去处理异常,所以我们也说异常
是同步的,而中断不知道什么时候发生,所以是异步的。
APIC
8259A干的挺不错的,不过后来咱们厂扩大规模,从单核CPU变成了多核,他就有点应付不过来了。
终于有一天,厂里召开会议,把8259A给撤了,成立了一个新的全资子公司叫高级可编程中断控制器APIC
,名字就多了个高级两个字,干的活还是一样的。
不过你还别说,这两个字还真不是吹嘘,比8259A不知道高到哪里去了。
这个APIC的新公司一上台,就成立了两个部门,一个叫I/O APIC
,负责接待那些要找我们办事儿的单位,一个叫Local APIC
,以外包的形式入驻到我CPU的各个车间工作,因为就挨着我们办公,所以取名叫Local。
I/O APIC
收到中断信号以后,根据自己的策略就分发到对应的Local APIC
,咱们八个车间就可以专心处理了,为我们省了不少事儿。
不仅如此,通过这个外包团队,我们八个车间还能向彼此发起中断请求,我们把这个叫做处理器间中断Inter-Processor Interrupt
,简称IPI。
中断亲和性
每当网络中有数据包到来,网卡那家伙就发送一个中断消息过来,告诉我们去处理。
不过最近不知道怎么回事,网络数据量激增。咱们厂里明明有8个车间,他非得一个劲的只给我们发消息,搞得我们手头的工作老是被打断,忙得不可开交。
终于,我忍不住了,去找网卡那家伙理论了一番。不过他告诉我,这也不能怪他,分发给谁处理,那是APIC在负责。
想想也是,回头我就去了APIC那里,要求他们分摊一点给别的车间处理。
APIC表示这他们做不了主,得让厂里来决定。
没过几天,厂里开了个会,参会的有各车间代表、APIC负责人,还请了操作系统那边的相关代表过来。
会上,大家为了此事争执不休。
二号车间虎子:“阿Q,谁叫你们一号车间是Bootstrap Processor
,你们就多辛苦一点嘛”
三号车间代表:“你这话说的不合适,大家是一个Team,要互相帮助!要不这样,既然有这么多单位要联系我们,咱就分下工,比如一号车间负责网卡,二号负责磁盘,我们三号负责键盘,以此类推”
五号车间代表:“你想的倒是挺美哦,键盘一天能发多少中断,网卡一天要发多少中断,你净挑轻松的干。这样吧,咱就用随机分发进行负载均衡你们觉得怎么样?”
八号车间代表:“随机个啥啊,多麻烦,依我看呐咱8个车间就轮流来呗”
这时,领导问操作系统代表有没有什么建议。
这代表站起身来,推了推眼镜说到:“几位有没有听过线程的CPU亲和性
?”
大家都摇了摇头,问到:“这是个什么意思?”
“就是有些线程想绑定在你们之中的某一个核上面执行,不希望一会儿在这个核执行,一会儿在那个核执行”
我接过他的话:“好像是有这么回事儿,之前有遇到过,有个线程一直被分配到我们一号车间,不过我们对这个不用关心吧,执行谁不是干活啊,对我们都一个样”
代表摇了摇头,“唉,这可不一样!你们每个核的一二级缓存都是自己在管理,要是换到别的核,这缓存多半就没用了,又得重新来建立,这换来换去的岂不是瞎耽误功夫嘛!对于一般的线程他们倒是不关心,但是有些线程执行大量的内存访问和运算处理,又对性能要求很高的话,那就很在意这个问题了”
我们几个都恍然大悟,纷纷点头。
虎子起身问到:“那你们是如何实现这个亲和性的呢?这跟我们今天的会议又有什么关系呢?”
代表继续回答说到:“我先回答你的第一个问题。线程调度是我们操作系统完成的工作,我们提供了API接口,线程通过调用这些接口表明自己的亲和性意愿,我们在调度的时候就能按照他们的意愿把线程分配给你们来执行。”
代表喝了一口水接着说到:“我再回答你的第二个问题。既然线程可以有亲和性,那中断也可以按照这个思路来分发啊!APIC默认有一套分发策略,但是也提供亲和性的设置,可以指定谁哪些核来处理,这样不用把规矩定死,灵活可变,岂不更好?”
刚说完,会议室门口突然出现一年轻少年,挥手将操作系统代表唤了出去。
接下来,我们详细讨论了这种方案的可行性,最后大家一致决定,就照这么办,我们一起提出了一个叫中断亲和性
的东西,操作系统那边提供一个可配置的入口smp_affinity,可以通过设置各处理器核的掩码来决定中断交由谁来处理,APIC回去负责落地支持。
有了这套方案,再遇到网络高峰期,咱们一号车间的压力就有办法缓解了。
我们刚刚达成一致,操作系统代表返回会议室,神色凝重的说到:“不好意思各位,操作系统那边有点事情需要赶回去处理一下,先走一步了”
未完待续······
彩蛋
随着网卡的一声中断,一个新的数据包来到了这片土地。
帝国网络部新来的年轻人显然没有意识到危险的到来······
预知后事如何,请关注后续精彩······
推荐阅读
138 张图带你 MySQL 入门!
如何在 Kubernetes 上配置 Jenkins?
这 10 行比较字符串相等的代码给我整懵了,不信你也来看看
200 个工具分析机器学习十年:前途未卜、工程师是核心!
天下苦苹果久矣:面对苹果税,开发者揭竿而起!
独家揭秘!抖音爆款漫画变身特效的背后技术
2013年买了100万美元比特币却希望“比特币归零”,这位亿万富翁公开“比特币鲸鱼”身份
真香,朕在看了!
CPU 明明 8 个核,网卡为啥拼命折腾一号核?相关推荐
- 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!!
关于PVE win10直通核显与HDMI声卡直通的解决方案 关于双网卡PVE:openwrt(LEDE) + win10直通核显+ DSM918+ 实现HDMI与声卡直通HTPC的解决方案!! 本人硬 ...
- ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制
ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制 目的 程序编制 总结 目的 开发一个仪表,在使用过程中发现用ESP32控制打印机和主控制有冲突,会造成数据采集流程慢.而控制蓝牙打印 ...
- 8核和16核服务器性能差异,intel再次科普:8核处理器玩游戏最好,16核真心没必要...
一年一度的双十一购物狂欢节已经落下了帷幕,各大电商也忙着整理自己的战报.在2019年JD双十一的CPU销售额TOP5榜单中AMD首次超越了intel占据了3个席位,分别是R7 3700X.R7 380 ...
- 大学计算机专业核显和集显,分不清核显和独显?一分钟带你了解清楚
萌新.小白不管在那个复方都最容易被蒙骗和吃亏,在硬件行业更是如此,因为硬件保质能力远强于一般的产品,这里能做很多文章,之前我们也科普过CPU最容易被蒙骗的地方是分类和命名, 而今天而我们在针对萌新科普 ...
- 双核跟四核的区别linux,双核和四核有什么区别?教你区分双核和四核的方法
很多网友在讨论讨论电脑双核和四核有什么区别?我们都知道电脑CPU最重要的组成部分,CPU中心那块隆起的芯片就是核心.有些用户发现有的CPU型号虽然是双核,但是性能比四核好,那么双核和四核有什么区别?本 ...
- 计算机几核的作用,电脑处理器最高几核_如何查看电脑属于几核(方法步骤教程)...
描述 随着电脑硬件的发展,一台电脑的核数越来越多,电脑运行速度也越来越快.本文首先介绍了什么是几核及核数目是不是越多越好的解答,其次介绍了电脑处理器最高几核,最后阐述了如何查看电脑属于几核的步骤方法, ...
- 快速上手Xilinx DDR3 IP核(4)----把MIG IP核封装成一个FIFO(下)(Native接口)
写在前面 本文将把Xilinx的MIG IP核DDR3的Native接口进行二次封装,将其封装成一个类似FIFO的接口,使其应用起来更加方便简单. 本文为下篇,建议与上篇一起阅读,有利于理解: 快速上 ...
- 注意啦,公司注册核名需要秉承哪四种核名原则出台了
纵观成功的企业都有一个共同的特点,那就是公司名取得特别好.那么,如何取一个便于大家记忆且有内涵深度的名字呢?公司核名要注意哪些问题呢?权鹏集团企业服务管家今天给大家分享一下公司核名注意事项,希望能够帮 ...
- c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程
案例分析 你的准备 今天依旧探究系统CPU使⽤率⾼的情况,所以这次实验的准备⼯作,与上节课的准备⼯作基本相同,差别在于案例所⽤的Docker 镜像不同. 本次还是基于 Ubuntu 18.04,同样适 ...
最新文章
- 如何从异步调用返回响应?
- C语言goto语句的使用
- poj 2240 Arbitrage (floyd 变形)
- Oracle SQL脚本学习记录一
- pytorch学习入门 (二) Variable(变量)
- WordPress苏醒Grace v8.2博客主题模板去sq版
- 《深入理解计算机系统》(2) 信息的表示和处理
- python数据结构与算法——栈、队列与双端队列
- python土味情话_有哪些比较新的土味情话?
- 通过swagger下载的文件乱码解决方法,求解
- 祝贺父亲节快乐的python代码_祝福父亲节快乐的句子50句
- as常用固定搭配_英语专业四级常用固定搭配
- 高红梅:第二章 海明威个人身份的探寻 第一节 性别身份意识与代际关系书写
- nodejs入门视频教程 Node.js Web开发框架
- javascript中获取非行间样式的方法
- 三屏指挥调调度终端/三屏计算机/一机三屏指挥调度/三屏融合指挥调度
- 微信的红包算法 了解一下两种就可以了
- postgresql启动流程之信号初始化
- 从内积、外积和叉乘到多维空间的理解
- Ubuntu 安装Samba教程
热门文章
- 开题报告方案论证_观点讨论研究方案、立项申报书、开题报告的联系和区别
- android contacts 编辑,如何在Android中的.csv文件中逐行编写contactn...
- arduino 停止程序_极路由1S OpenWrt开机自启程序及串口调试
- promise的三种状态_一.Promise中核心逻辑的实现
- 那些年,乘风破浪的科学家们
- 李航:未来若干年,AI 技术发展可能会进入平缓期
- 刚刚,三位科学家获得2019年诺贝尔物理学奖!
- 他们也曾在数学“苦海”里痛不欲生
- mysql root密码过期了_Mac下重置mysql的root密码
- python增删改查mysql_python对数据库mysql的操作(增删改查)