三八资料网

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

三八资料网 门户首页 电脑维修 查看内容

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

2020-7-28 08:06| 发布者: 南召修电视| 查看: 154| 评论: 0

摘要: 中断机制我是 CPU 一号车间的阿 Q,我又来了!我们日常的工作就是不断执行代码指令,不过这看似简单的工作背后其实也并不轻松。咱不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其他单位打交道。经 ...

中断机制


我是 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,咱们八个车间就可以专心处理了,为我们省了不少事儿。


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


中断亲和性


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


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


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


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


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


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

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


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


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


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


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

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


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


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


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


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


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


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

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


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


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


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

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


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


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


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


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


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


总线技术


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


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


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

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


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


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


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

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

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

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


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



路过

雷人

握手

鲜花

鸡蛋

最新评论

论坛最新帖
  • 打磨型号的集成电路求助
  • 三菱变频器A540电路图(包含电源,驱动 保
  • 索尼KV-F29 、KV-K29 、KV-J29 型号图像暗
  • 上菱BCD-180W无霜电冰箱烧坏风扇电机故障检
  • 实战冰箱冰柜维修现场维修经验
  • 仿白金机维修及驱动板电路图参数
  • 高压放电拉弧点火模块
  • 户户通主芯片植锡成功
  • 第三代中9户户通机顶盒各种模块刷机串口,
  • 三代中9卫星接收机户户通刷机之签名小板基
门户最新文章
  • 三相电源断零线,为什么会接二连三烧坏电器
  • 又是推架子,工人被活活电死,直到化成灰烬,
  • 故障修的快是我的本事,凭什么不给钱?
  • 配电房是如何送电的?送电方式是什么?看完
  • 电工接的电缆头,能找到5个错误以上的,都
  • 防雷接地地焊怎么做?单面焊还是双面焊
  • 电线都燃了为什么空开不跳闸?80%的电工不
  • 配电箱14大禁忌,千万要注意!
  • 惨烈!配电室爆炸,3人瞬间变成渣!
  • 你知道避雷器和浪涌保护器的区别吗?

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.