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万美元比特币却希望“比特币归零”,这位亿万富翁公开“比特币鲸鱼”身份

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2684亿销售额背后的阿里AI技术

人工智能生态发展趋势 大家好,我是林伟,我今天演讲的主题是《AI 突破无限可能—5 亿消费者的云上双 11》。我本人是做系统出身的,但在最近的一些会议上发现,越来越多做系统出身的人开始研究 AI。在 90 年代末的那波热潮里&#x…

FTP多用户权限 linux环境 一站式解决方案(基础篇)

需求背景:第三方厂商中国移动、电信、联通、微软、京东与我司内部进行接口交易,采用ftp协议,外部厂商负责上传文件,内部系统负责下载各厂商上传的文件。 文章目录一、用户与目录1. 用户与目录约定2. 用户创建3. 用户密码4. 创建用…

gateway集成nacos、loadbalancer实现自定义负载均衡器,带源码解析(cloud版本:2021.0.3|boot版本:2.7.4)[场景1:灰度发布(金丝雀发布)]

🎨领域:Java后端开发🔥收录专栏: 系统设计与实战 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录前言…

高德服务单元化方案和架构实践

导读:本文主要介绍了高德在服务单元化建设方面的一些实践经验,服务单元化建设面临很多共性问题,如请求路由、单元封闭、数据同步,有的有成熟方案可以借鉴和使用,但不同公司的业务不尽相同,要尽可能的结合业…

免费直播:1小时带你体验Python车牌识别实战

Python基础学会了,实战又是爬虫?太枯燥?别无聊,CSDN学院邀请章秀淞老师开设技术直播课:1小时带你体验车牌识别实战。让你从众多车中,能用Python技术找到夏树上的那辆叔叔的奔驰车牌(玩笑&#x…

IDEA 断点调试高级玩法 |debug高手必看!

文章目录条件表达式//条件表达式public static void main(String[] args) {for (int i 0; i < 10; i) {System.out.println(i);}} }需求1&#xff1a; 当i2时&#xff0c;断点停顿 添加断点&#xff0c;鼠标右击添加自定义条件即可 需求2&#xff1a; 当i偶数时&#xff…

听说了吗?阿里双11作战室竟1根网线都没有

双11不光是购物狂欢节&#xff0c;更是对技术的一次“大考”&#xff0c;对于阿里巴巴企业内部运营的基础保障技术而言&#xff0c;亦是如此。 回溯双11历史&#xff0c;这背后也经历过“小米加步枪”的阶段&#xff1a;作战室从随处是网线&#xff0c;交换机放地上的“一地狼…

如何给U盘设置一张妖娆又骚气的图标

夫陶公清风千古&#xff0c;余又何人&#xff0c;敢称庶几 &#x1f4a1;介绍 设置完就这样&#xff0c;看起来有些巴适&#xff0c;其实没啥用&#xff01;&#xff01; &#x1f3a8; 一、准备工作 百度上找一张妖娆的图片将图片转换成图标文件&#xff08;.ico格式&#…

最佳实践 | 数据库迁云解决方案选型 流程全解析

Oracle是非常强大的综合数据库&#xff0c;但同时也存在一些劣势&#xff0c;比如由于采用集中式架构&#xff0c;无法很好地实现横向扩展&#xff0c;并且其稳定性依赖于硬件。出于架构升级、降低成本和云化等需求&#xff0c;越来越多的企业需要“去Oracle”。 日前&#xff…

Centos7.x 在线安装Docker和离线安装 Docker

文章目录一、在线安装二、联网下载软件2.1. 下载rpm2.2. 安装 docker2.3.测试验证一、在线安装 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunsystemctl enable docker systemctl s…

没错!Python杀死了Excel!

月前&#xff0c;日本最大的证券公司之一野村证券首席数字官马修汉普森&#xff0c;在Quant Conference上发表讲话&#xff1a;“用Excel的人越来越少&#xff0c;大家都在码Python代码。”甚至直接说&#xff1a;“Python在数据分析领域正在超越Excel&#xff01;”作为一门胶…

给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践

早在 2011 年&#xff0c;阿里巴巴内部便开始了应用容器化&#xff0c;当时最开始是基于 LXC 技术构建容器&#xff0c;然后逐渐切换到 Docker&#xff0c;自研了大规模编排调度系统。到了 2018 年&#xff0c;我们团队依托 K8s 体系开始推进“轻量级容器化”&#xff0c;同时投…

VMware 快照

文章目录1. 拍摄快照2. 将此虚拟机恢复到快照3. 管理此虚拟机的快照1. 拍摄快照 2. 将此虚拟机恢复到快照 3. 管理此虚拟机的快照

基于OOS批量修改资源标签值

场景 当资源上有个标签键: 部门&#xff0c;标签值&#xff1a;零售&#xff0c;由于部门资源整合要把标签&#xff08;键: 部门&#xff0c;值&#xff1a;零售&#xff09;修改为标签&#xff08;键: 部门&#xff0c;值&#xff1a;新零售&#xff09;&#xff0c;如何快速…

首度公开!OceanBase存储系统架构的演进历程及工程实践

随着用户数据量的不断增长&#xff0c;基于传统共享存储的纵向扩展能力渐渐变得力不从心&#xff0c;分布式存储成为应对用户海量数据的标配。 作为一位架构师&#xff0c;在设计系统的分布式存储架构时&#xff0c;需要关注哪些方面呢&#xff1f;或者我们换句话说&#xff0c…

Java“拍了拍”你,面试其实没那么难...

后疫情时代&#xff0c;连程序员这个多金的职业也遭受到了一定程度的打击。从各大招聘网站和多次面试经历中&#xff0c;相信大家已经意识到&#xff0c;面试官对程序员技能体系和项目经验考核似乎更严苛了。你在面试中常常为什么苦恼呢&#xff1f;简历撰写&#xff1f;数据算…

双 11 模块 79.34% 的代码是怎样智能生成的?

导读&#xff1a;作为今年阿里经济体前端委员会的四大技术方向之一&#xff0c;前端智能化方向一被提及&#xff0c;就不免有人好奇&#xff1a;前端结合 AI 能做些什么&#xff0c;怎么做&#xff0c;未来会不会对前端产生很大的冲击等等。本篇文章将围绕这些问题&#xff0c;…

在 xfire中使用 GZip来 压缩 传输量

在XFire1.2以后支持SOAP消息的GZip压缩传输&#xff0c;在合适的地方启动GZip压缩可以减少网络传输的数据量&#xff0c;加快速度。 文章目录1. jar下载地址2. 服务端3.客户端1. jar下载地址 https://sourceforge.net/projects/pjl-comp-filter/ 或者直接点击下载最新版本&am…

从零开始入门 | Kubernetes 中的服务发现与负载均衡

一、需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用&#xff0c;与传统的应用部署不同&#xff0c;传统应用部署在给定的机器上面去部署&#xff0c;我们知道怎么去调用别的机器的 IP 地址。但是在 K8s 集群里面应用是通过 pod 去部署的&#xff0c; 而 …

浅谈分布式存储中的网络通信

作者 | 火尉子责编 | Carol封图 | CSDN 下载自视觉中国在各行各业数字化转型深入的当下&#xff0c;数据呈爆炸式增长。面对海量数据的存储需求&#xff0c;分布式存储显然在架构上有着天然优势&#xff0c;但在这波数据洪流之中也面临着性能上的全新挑战。由于分布式存储的工作…