您当前的位置:首页 > 电脑百科 > 硬件技术 > CPU

CPU明明8个核,网卡为啥拼命折腾1号核?

时间:2020-07-21 17:04:25  来源:  作者:

前段时间分享的一篇《完了!CPU 一味求快出事了》得到了众多网友的好评,今天我们就来继续探讨 CPU 的那些事!

CPU明明8个核,网卡为啥拼命折腾1号核?

图片来自 Pexels

CPU明明8个核,网卡为啥拼命折腾1号核?

CPU明明8个核,网卡为啥拼命折腾1号核?

 

中断机制

我是 CPU 一号车间的阿 Q,我又来了!

我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松。

咱不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其他单位打交道。

经常保持联系的有键盘、鼠标、磁盘,哦对,还有网卡,这家伙最近把我惹到了,待会再说这事儿。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

原以为内存那家伙已经够慢的了,没想到跟上面这几位通个信比他更慢,咱 CPU 工厂的时间一刻值千金,不能干等着,耽误工夫。后来厂里一合计,想了个叫中断的办法。

在我们车间装了个大灯,这些单位想联系我们办事儿,就先给我们发一个中断信号,大灯就会自动亮起。

我们平时工作执行代码指令的时候,每执行一条指令就会瞅一眼看看大灯有没有亮起来。

一旦发现灯亮了,就把手头的工作先放一边,去处理一下。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

我们记性很差的,等会处理了完了还得回来接着原来的活继续干,为了等会回来还能接的起来,走之前得把当前执行的这个线程的各个寄存器的值,执行到哪里了等等这些信息都保存在这个线程的栈里去。

不过有时候我们在执行非常重要的事情的时候,就不想被他们打断。于是我们又在车间里那个 eflags 寄存器中设置了一个标记,如果是 1 我们才允许被打断,如果是 0 那就算天王老子找我们也不管了。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

哦不对,还有一种不可以屏蔽的中断 NMI,走得是绿色通道。不过我可不期望有这种事情发生,因为一般都没有好事,不是电源断电就是温度过高,或者总线出了错误等这之类严重的事情。

8259A PIC

还有一个问题,找我们办事儿的单位有很多,我们得要区分开来,到底是谁来消息了,而且要是他们一起来找,按什么样优先级顺序处理,也是一件头疼的事情。

为此,厂里单独组建了一个全资的子公司来负责这事儿,他就是可编程中断控制器 PIC,外号 8259A,其他单位想联系我们都得通过这个 PIC,我们只需要和 PIC 进行对接就可以了。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

我们给办事单位都分配了一个编号,叫做中断向量。我们还准备了一个表格叫中断描述符表 IDT,表格里记录了很多信息,其中就有处理这个中断号对应的函数地址。

我们找 PIC 拿到编号后就执行处理函数就 OK 了。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

这个表格有点大,足足有 256 项,咱 CPU 车间空间有限,放不下,就把它放在内存那家伙那里了,为了能快速找到这个表,专门添置了一个叫 idtr 的寄存器指向这个表格。

其实除了中断,我们在执行指令的时候如果遇到了异常情况,也会去这个表里执行异常处理函数,最常见的比如遇到了除数是 0,内存地址错误等等情况。

这种情况下,我们必须主动放下手里的活,去处理异常,所以我们也说异常是同步的,而中断不知道什么时候发生,所以是异步的。

APIC

8259A 干的挺不错的,不过后来咱们厂扩大规模,从单核 CPU 变成了多核,他就有点应付不过来了。

终于有一天,厂里召开会议,把 8259A 给撤了,成立了一个新的全资子公司叫高级可编程中断控制器 APIC,名字就多了个高级两个字,干的活还是一样的。

不过你还别说,这两个字还真不是吹嘘,比 8259A 不知道高到哪里去了。

这个 APIC 的新公司一上台,就成立了两个部门,一个叫 I/O APIC,负责接待那些要找我们办事儿的单位,一个叫 Local APIC,以外包的形式入驻到我 CPU 的各个车间工作,因为就挨着我们办公,所以取名叫 Local。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

I/O APIC 收到中断信号以后,根据自己的策略就分发到对应的 Local APIC,咱们八个车间就可以专心处理了,为我们省了不少事儿。

不仅如此,通过这个外包团队,我们 8 个车间还能向彼此发起中断请求,我们把这个叫做处理器间中断 Inter-Processor Interrupt,简称 IPI。

中断亲和性

每当网络中有数据包到来,网卡那家伙就发送一个中断消息过来,告诉我们去处理。

不过最近不知道怎么回事,网络数据量激增。咱们厂里明明有 8 个车间,他非得一个劲的只给我们发消息,搞得我们手头的工作老是被打断,忙得不可开交。

终于,我忍不住了,去找网卡那家伙理论了一番。不过他告诉我,这也不能怪他,分发给谁处理,那是 APIC 在负责。

想想也是,回头我就去了 APIC 那里,要求他们分摊一点给别的车间处理。

APIC 表示这他们做不了主,得让厂里来决定。

没过几天,厂里开了个会,参会的有各车间代表、APIC 负责人,还请了操作系统那边的相关代表过来。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

会上,大家为了此事争执不休。

二号车间虎子:“阿 Q,谁叫你们一号车间是 Bootstrap Processor,你们就多辛苦一点嘛”。

三号车间代表:“你这话说的不合适,大家是一个 Team,要互相帮助!要不这样,既然有这么多单位要联系我们,咱就分下工,比如一号车间负责网卡,二号负责磁盘,我们三号负责键盘,以此类推。”

五号车间代表:“你想的倒是挺美哦,键盘一天能发多少中断,网卡一天要发多少中断,你净挑轻松的干。这样吧,咱就用随机分发进行负载均衡你们觉得怎么样?”

八号车间代表:“随机个啥啊,多麻烦,依我看呐咱 8 个车间就轮流来呗。”

CPU明明8个核,网卡为啥拼命折腾1号核?

 

这时,领导问操作系统代表有没有什么建议。

这代表站起身来,推了推眼镜说到:“几位有没有听过线程的 CPU 亲和性?”

大家都摇了摇头,问到:“这是个什么意思?”

“就是有些线程想绑定在你们之中的某一个核上面执行,不希望一会儿在这个核执行,一会儿在那个核执行。”

我接过他的话:“好像是有这么回事儿,之前有遇到过,有个线程一直被分配到我们一号车间,不过我们对这个不用关心吧,执行谁不是干活啊,对我们都一个样。”

代表摇了摇头,“唉,这可不一样!你们每个核的一二级缓存都是自己在管理,要是换到别的核,这缓存多半就没用了,又得重新来建立,这换来换去的岂不是瞎耽误功夫嘛!对于一般的线程他们倒是不关心,但是有些线程执行大量的内存访问和运算处理,又对性能要求很高的话,那就很在意这个问题了。”

我们几个都恍然大悟,纷纷点头。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

虎子起身问到:“那你们是如何实现这个亲和性的呢?这跟我们今天的会议又有什么关系呢?”

代表继续回答说到:“我先回答你的第一个问题。线程调度是我们操作系统完成的工作,我们提供了 API 接口,线程通过调用这些接口表明自己的亲和性意愿,我们在调度的时候就能按照他们的意愿把线程分配给你们来执行。”

代表喝了一口水接着说到:“我再回答你的第二个问题。既然线程可以有亲和性,那中断也可以按照这个思路来分发啊!APIC 默认有一套分发策略,但是也提供亲和性的设置,可以指定谁哪些核来处理,这样不用把规矩定死,灵活可变,岂不更好?”

刚说完,会议室门口突然出现一年轻少年,挥手将操作系统代表唤了出去。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

接下来,我们详细讨论了这种方案的可行性,最后大家一致决定,就照这么办。

我们一起提出了一个叫中断亲和性的东西,操作系统那边提供一个可配置的入口 smp_affinity,可以通过设置各处理器核的掩码来决定中断交由谁来处理,APIC 回去负责落地支持。

有了这套方案,再遇到网络高峰期,咱们一号车间的压力就有办法缓解了。

我们刚刚达成一致,操作系统代表返回会议室,神色凝重的说到:“不好意思各位,操作系统那边有点事情需要赶回去处理一下,先走一步了。”

随着网卡的一声中断,一个新的数据包来到了这片土地。帝国网络部新来的年轻人显然没有意识到危险的到来······

太慢不能忍!CPU 又拿硬盘和网卡开刀了!

总线技术

我是 CPU 一号车间的阿 Q,最近为了一件事儿搞得我挺烦的。

当初我们 CPU 工厂刚刚来到主板上建厂时,那时候主板上的单位还不多,跟我们打交道最多的就是内存那家伙了。

后来,键盘、鼠标、硬盘、网卡、声卡、显卡等等设备纷纷入驻主板,这块土地变得越来越热闹起来。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

不过,他们的到来并没有影响我们的地位,毕竟我们是中央处理器,所有人都得听我们指挥。

为了和主板上这些家伙们通信,我们花了重金铺了一条线路,主板上家家户户都连上了这条线路,我们把它叫做总线,虽然说是一条,但实际上它包含了传输数据的数据总线,传输地址的地址总线和进行控制管理的控制总线。

这样一来,各单位就能一起聊天了。不过这线路是共用的,大家不能都一起传数据,那就乱套了。

为了统一管理,我们设立了一个新的单位叫总线控制器,这个单位来统一管理总线,大家要通信就得找它申请,这就叫做总线仲裁。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

不过啊,主板上的单位之间的速度还是千差万别的,像内存就比硬盘、网卡这些单位快多了(当然,跟我们 CPU 车间的工作速度那还是不能比)。

不仅如此,不同单位他们的接口还千差万别,用一套总线矛盾就日益明显了,后来就变成了多级总线,让慢的跟慢的玩,快的跟快的玩,最后大家再用一个东西把不同总线连接起来,这个东西就是桥!

主板上后来出现了两个著名的桥,一个离我们 CPU 很近的叫北桥,内存那家伙和我们通信就会经过它,另一个离我们远一点的叫南桥,那些慢一些的 I/O 设备就通过南桥接进来。

再后来,随着我们 CPU 工厂的壮大,直接把北桥收购了,现在变成了我们厂里的一个部门了。

PIO 模式

现在我们可以和这些 I/O 设备通信了,就拿硬盘来说吧,它有 I/O 端口,我们提供了 in 和 out 两条指令,就可以对它进行读写数据了。

这种通信的方式叫做可编程输入输出模型,Programming Input/Output Model,简称 PIO。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

我们是整个主板上的核心,俗话说得好,能力越大,责任越大,但有时候真心觉得有点累。

随着越来越多的设备接入主板,越来越多的程序需要等待我们去执行,工作量大的压的我们喘不过气来。

尤其是随着技术进步,我们 CPU 工厂的速度越来越快,与硬盘的读写速度之间的差距越来越拉大,我们还用这种方式通信就太浪费我们的时间了。

DMA 技术

这几天,我们几个车间的 Leader 私下聚在一起讨论起这个事情来。

“阿 Q,你不觉得现在我们花了太多时间再读写硬盘上了吗,这家伙慢不是他的错,扯我们后腿这就是他的错了啊。传输一次数据,我们要执行好多次 I/O 端口读写,我们宝贵的时间都浪费在这上面了!”,二号车间的虎子一脸幽怨的说到。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

“嗨,我最近也为这事发愁呢,程序越来越多,读写硬盘的时间越来越多了,尤其是那个叫 MySQL 的,老让我访问硬盘,可累死我了。”

没想到我俩都憋了一肚子苦水呢。

这时,平日里爱拍老板马屁的八号车间老大说了一句话:“你们说的问题确实存在,这工作太没技术含量了,就是个体力活嘛,要不咱给老板说说,让他外包出去吧。”

我俩一听,妙啊,要是能把这体力活外包出去,那可简直太好了,我们就可以专心做我们的专职工作了。

“你跟老板平时走得近,这事你去说吧”,我给虎子使了个眼色,一起撺掇老八去说这事。

“行,我去就我去”。

还别说,领导立马就同意了这个想法,毕竟能提高我们的工作效率,他自然是举双手欢迎。

没过多久,就成立了一个外包团队,独立出我们厂子,专门来负责这件事。

和我们 CPU 一样,他们也提供了几个寄存器,传输数据的时候,只需要设置一下这些寄存器的内容,告诉他们要传输哪里的数据,从哪到哪,长度是多少,接下来的事情我们就不用操心了,交由他们来完成。

我们就可以腾出功夫做其他事情,等数据传输完毕了,他们再用中断的方式告诉我们,我们直接去处理就好了,省去了让我们亲自去搬运的过程,真是爽的飞起!

CPU明明8个核,网卡为啥拼命折腾1号核?

 

后来,我们给这项技术也取了一个名字,叫 Direct Memory Access,直接存储器访问,简称 DMA,这个外包团队就是 Dmac,DMA 控制器。

DMA 全面开花

前几天的月总结会上,领导表扬了老八,说多亏他的建议让厂里的生产效率大大提升。早知道,当初就不撺掇老八去跟老板提建议了,我自己去。

CPU明明8个核,网卡为啥拼命折腾1号核?

 

正想着走神,突然想到了一个问题,这一次我打算抓住机会挣个表现。

“老板,这个 DMA 技术好是好,但现在只能用于硬盘哦。最近网卡那家伙数据包也挺多的,我花了好多时间去把数据包从网卡读取到内存中,又低效又没有技术含量,可不可以把这技术推广到网卡上啊?”,我起身说到。

老板点了点头,若有所思。

二号车间虎子见状也起身说到:“老板,除了硬盘和网卡,显示器也有这个需求。我经常要疲于奔波于把内存数据传输到显示器,也是劳神劳力,建议 DMA 技术也推广到显示器呢。”

老板听完,皱了皱眉头说到,“这个不同设备之间的差别还是挺大的,没法通用。难不成我们要为每个设备成立一个外包团队?这成本有点高啊···”

老板果然还是老板,还是把成本考虑在第一位。

这时,爱拍马屁的老八又说话了,“老板说的是。我倒是有个建议,这个 DMA 推广到网卡、显示器这些单位也可以,不过让他们自己掏钱来增加 DMAC,按照他们各自不同的需求来做。咱们不能当这冤大头。”

老板一听,喜形于色,大声叫好!

CPU明明8个核,网卡为啥拼命折腾1号核?

 

就这样,很快我们就把这项技术推广了出去,主板上以网卡、显示器、摄像头为首的那些个单位为了不落后于人,纷纷拥抱变化,集成了 DMAC。

我们得到了彻底的解放,再也不用做枯燥的搬运工了~

彩蛋:“阿 Q,听说了吗,最近 linux 帝国新成立了一个公司,居然绕过我们 CPU 就能把数据从网卡写入硬盘中”。

“不可能啊,至少得经过我们拷贝一下吧”,“根本不用,他们号称是零拷贝技术”。预知后事如何,请关注后续精彩······

作者:轩辕之风

编辑:陶家龙

出处:转载自微信公众号编程技术宇宙(ID:xuanyuancoding)



Tags:CPU   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
硬件升级和软件升级一样,各路大神总归要第一时间趟这潭水,作为普通消费者还是老老实实等一段时间为好,原因就是省钱、省心。 最近Intel第12代CPU上市了,不少小伙伴有升级的需求,...【详细内容】
2021-12-28  Tags: CPU  点击:(3)  评论:(0)  加入收藏
我们想要知道CPU之间的性能高低,只需要通过一张“CPU”天梯图,就可以快速了解。笔记本移动版CPU相比台式机CPU在型号上更加繁多,并且杂乱无章,相同的型号下,CPU分为标压和低压版,...【详细内容】
2021-12-27  Tags: CPU  点击:(12)  评论:(0)  加入收藏
# macos查看cpu支持的指令集sysctl -a | grep machdep.cpu.features # macos 查看cpu是否支持SSE 4.2sysctl -a | grep machdep.cpu.features | grep SSE # 查看cpu的所有...【详细内容】
2021-12-22  Tags: CPU  点击:(10)  评论:(0)  加入收藏
Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如ps -ef | grep kafka ,可以看到kafka这个程序的进程id 可以看到是2913,现在可以使用如下命令查看内存:top...【详细内容】
2021-12-07  Tags: CPU  点击:(37)  评论:(0)  加入收藏
上上周生产出现问题,记录一下定位问题的方案,原创不易,欢迎关注测试代码:@RestController@RequestMapping("/test")public class TestController { private static Logger log...【详细内容】
2021-11-23  Tags: CPU  点击:(21)  评论:(0)  加入收藏
出品:科普中国制作:王智豪(中科院长春光机所)监制:中国科学院计算机网络信息中心中央处理器,简称CPU,是现在电子计算机的核心元件,也是信息时代最主要的器件之一。从小的方面说,我们...【详细内容】
2021-11-15  Tags: CPU  点击:(30)  评论:(0)  加入收藏
近年来摩尔定律“失速”,使得中央处理器(CPU)的性能增长边际成本急剧上升。有研究数据表明,现在CPU的性能年化增长率(面积归一化之后)仅有3%左右。然而,人们对计算的需求依然爆发性增长。...【详细内容】
2021-11-05  Tags: CPU  点击:(44)  评论:(0)  加入收藏
lscpu 命令显示有关 CPU 架构的信息lscpu 命令安装:-bash: lscpu: command not found #Ubuntuapt-get install util-linux#CentOSyum install util-linux #Fedoradnf install...【详细内容】
2021-09-22  Tags: CPU  点击:(70)  评论:(0)  加入收藏
虚拟机报告不同类型的使用指标,例如服务器负载、内存使用和Steal Time。客户经常询问Steal Time——它是什么,为什么会在他们的虚拟机上报告?继续阅读,我们将解释Ste...【详细内容】
2021-09-09  Tags: CPU  点击:(92)  评论:(0)  加入收藏
计算机如何执行你写的代码?知乎上有人提问:电脑怎样执行编程语言的? 很多刚刚入坑的小白可能对此完全没有概念,或者模模糊糊知道个大概,我们写下的一行行代码,计算机到底是如何在...【详细内容】
2021-09-03  Tags: CPU  点击:(101)  评论:(0)  加入收藏
▌简易百科推荐
我们想要知道CPU之间的性能高低,只需要通过一张“CPU”天梯图,就可以快速了解。笔记本移动版CPU相比台式机CPU在型号上更加繁多,并且杂乱无章,相同的型号下,CPU分为标压和低压版,...【详细内容】
2021-12-27  装机之家晓龙    Tags:笔记本CPU   点击:(12)  评论:(0)  加入收藏
CPU在访问的页面不在物理内存时,便会产生缺页中断,请求操作系统将所缺页调入到物理内存。缺页中断与其他中断的区别? 缺页中断在指令执行期间产生和处理中断信号,一般中断在一条...【详细内容】
2021-10-19  DifferentJava    Tags:内存   点击:(55)  评论:(0)  加入收藏
电脑CPU性能天梯图 手机CPU性能天梯图 电视盒子CPU性能天梯图前几天发了一张CPU性能天梯图,好多小伙伴说型号不全,没有他的CPU。这次整了个齐全的,截止到2021年8月份,不仅有台式...【详细内容】
2021-08-17  StoneM    Tags:CPU   点击:(666)  评论:(0)  加入收藏
电脑中的CPU和显卡可以说是DIY朋友最最关切的两部分了,说到买CPU大家最关注的是它是Intel的还是AMD的,或者它是第十代还是十一代,甚至它是能超频还是不超频,却很少有人关注你买...【详细内容】
2021-08-02  亿说电脑    Tags:CPU   点击:(62)  评论:(0)  加入收藏
在与CPU性能表现相关的参数中,频率大概是最直观也最明显的了,一般来说,同样的核心架构下,频率越高,性能肯定越高,相信很多小伙伴也这样选的吧。不过近期的CPU中,又有了一些变化,厂商...【详细内容】
2021-07-16  电脑爱好者    Tags:CPU频率   点击:(77)  评论:(0)  加入收藏
上二年级的小明正坐在教室里。现在是数学课,下午第一节,窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡。此时,刘老师在黑板上写下一个问题: 6324 + 244675 = ? 小明抬头看了一眼,觉...【详细内容】
2021-05-25  Java识堂  今日头条  Tags:CPU   点击:(123)  评论:(0)  加入收藏
CPU天玑1000+和麒麟985哪个更强悍?下面对这两款芯片,做一个简单的对比,让我们可以更直观的了解,哪一款芯片更强。1.天玑1000 Plus性能如何这款芯片是2020下半年发布的,7nm制程工...【详细内容】
2021-03-26      Tags:麒麟985   点击:(2020)  评论:(0)  加入收藏
随着AMD第三代锐龙处理器的上市,整数和浮点运算又成了DIYer们谈论的热点话题。与此同时,PCIe 4.0固态硬盘在只提高顺序读写、随机读写却无长进的情况下是否具备购买价值也成为...【详细内容】
2021-03-25      Tags:CPU   点击:(241)  评论:(0)  加入收藏
我们在选购电脑的时候,经常会听到一些“几核几线程CPU”的术语,比如四核八线程,八核十六线程之类的,那么这个所谓的几个核心和线程都是什么意思呢?请看下面介绍。CPU的“几核几线...【详细内容】
2021-03-04      Tags:处理器   点击:(387)  评论:(0)  加入收藏
作者 | 小林coding来源 | 小林coding(ID:CodingLin) 前言你清楚下面这几个问题吗? 有了内存,为什么还需要 CPU Cache? CPU 是怎么读写数据的? 如何让 CPU 能读取数据更快一些? C...【详细内容】
2020-11-11      Tags:CPU   点击:(145)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条