来源 | 编程技术宇宙

责编 | Carol

封图 | CSDN 下载自视觉中国

内存访问瓶颈

我是CPU一号车间的阿Q,前一阵子我们厂里发生了一件大喜事,老板拉到了一笔投资,准备扩大生产规模。

不过老板挺抠门的,拉到了投资也不给我们涨点工资,就知道让我们拼命干活,压榨我们的劳动力。

老板说了,投资的钱要用来添置设备,招聘新员工,咱们原来就有八个车间了,这一下直接double,变成了十六个!我们的工资要是也能double就好了···

现在我们变成了一个16核的CPU啦!

原以为我们生产效率也能double,没想到却遇到了新的问题。

我们CPU里面各个车间访问内存都要通过内存控制器和总线系统,有时候碰到几个车间都要访问内存,就得要竞争。

以前我们八个车间的时候竞争情况还不是很激烈,大家互相谦让一下也就罢了。现在变成了十六个车间都要过独木桥,这竞争一下就激烈了,尤其是我们这帮老员工基本不会让着新来的,为了此事经常发生不愉快。

内存访问出现了瓶颈,这性能自然是折损严重。

NUMA架构

老板把这一切都看在眼里,私下里找了我、二号车间的虎子还有总线主任开了个小会。

“你们几个都是厂里的核心员工,对厂里目前的问题你们怎么看?”,老板问我们几个。

我和虎子互相瞅了瞅,都没说话。

这时总线主任开口了:“老板,现在的问题是访问内存的路只有一条,大家都要来挤,难免会发生摩擦,影响工作性能。要想从根本解决问题,最好再建一条路”

“再建一条路,什么意思?”

“我建议把新扩建的那8个车间独立出去,建一个分厂。然后再把内存分一下,让两个厂各管理一部分。一来可以减少新老员工之间的矛盾,二来可以减少大家访问内存拥挤造成的资源浪费。再说了,万一以后继续扩大规模还可以继续用这个办法”,总线主任继续说到。

领导正低头思索,我倒是想到了一个问题:“主任,要是我们一号核执行的线程要访问的内存页面不在我们厂管理的内存上,在他们分厂怎么办呢?”

“嗯,这样的话,两个厂之间需要通信,如果访问的内存不在自己管辖的范围,就要互相帮忙传递一下”

老板拍了下桌子:“好主意!就这么办!”

第二天,老板召集16个车间的代表,总线主任,还有操作系统那边负责内存管理的代表小李,一起开了一个大会,会上正式通过了新的技术方案。

还给这项技术取了一个名字:NUMA(Non Uniform Memory Access),非一致性内存访问。

现有的16个车间拆分成两个CPU工厂,叫做两个NUMA节点(Node),每个节点直接连接一部分内存,两个节点之间有专门的的inter-connect通道。各节点直接访问自己管理的内存叫Local Access,通过inter-connect通道访问其他分厂管理的内存叫做Remote Access。很显然,前者的访问速度要比后者快得多,所以这也是这项技术名字的由来:非一致性内存访问。

新的组织架构调整过后,厂里的工作效率提升不少,矛盾摩擦也少了很多,又可以愉快的干活了。

操作系统支持

我们的组织架构调整了,操作系统那边可忙坏了。为了支持我们新的架构,操作系统不得不配合着做一些调整。

首先是缓存的问题,操作系统的进程&线程调度管理部门需要注意尽量不要跨NUMA节点进行调度线程,不能让一个线程一会儿在隔壁分厂运行,一会儿又在我们厂运行,这样建立的缓存就失效了。

还有就是内存亲和性的问题了,为了能得到更快的内存访问速度,操作系统的内存管理部门制定了一个内存分配策略,线程在哪个NUMA节点内执行,那就把内存分配到那个节点直接连接的内存中,避免跨节点的内存访问。

还别说,操作系统这么一优化调整,工作效率真是提升了不少呢。

然而好景不长,就因为这个调整,新的问题又双叒叕出现了~~~

MySQL的问题

最近一段时间,发生了一件怪事,不知道怎么回事,我们分厂管辖的内存很快耗光了,但隔壁分厂管理的内存还有很多空间。

操作系统不去分配那边的内存页面,却让我们一个劲的把内存页面swap到硬盘上去,腾挪空间。我们花了大量时间在这上边,搞得我们业绩下滑,还比不上隔壁分厂那帮新人。

终于有一天,忍不了了,我伙同厂里几个老家伙,把操作系统内存管理部门的小李又叫来了。

“你们怎么回事,就不能分配隔壁二号节点分厂管辖的内存吗,明明还有那么多空间,却让我们忙个不停”,我有点生气。

小李满脸无辜的说到:“不瞒你们各位,前几天有人来我们Linux帝国开设了一家新公司,叫MySQL,这家伙是个吃内存大户啊,一上来就要吃掉几十G,你们厂管辖的内存大半都被它给吃掉了”

虎子问到:“这跟我们有什么关系,你别推卸责任啊”

“上次我来开会,你们不是搞了个什么NUMA架构吗,访问本地连接的内存要比访问远程内存快一些嘛,所以我们制定了内存亲和性策略嘛,线程在哪个NUMA节点执行,就把内存分配到哪个节点直接连接的内存,想着这样能提升性能嘛”,小李继续委屈的说到。

“那也不能死脑筋啊,访问远程内存虽然比不上访问本地内存快,那也比一个劲的把页面从内存和硬盘上换来换去的强啊,你真是好心办坏事!”

被我们这样一说,小李也意识到了这样做的问题,“我回去反馈一下大家的意见,调整一下我们的策略”

过了几天,操作系统那边上了新的内存分配策略,将内存均匀的分配到各个NUMA节点,我们再也不用坑次坑次的把数据从内存和硬盘之间搬来搬去了。

NUMA虽好,可要是用得不好,只会徒增烦恼啊~

彩蛋

Linux帝国最近又来了一家公司,发布了一项工程招标。

“听说了吗,我们厂居然没中标”

“怎么可能,除了我们还有谁干这活”

“听说是一家叫GPU的工厂”

预知后事如何,请关注后续精彩······

推荐阅读
  • 浅谈分布式存储中的网络通信

  • 138 张图带你 MySQL 入门!

  • 如何在 Kubernetes 上配置 Jenkins?

  • 突发!印度封禁抖音、微信、快手等 59 款中国 App

  • 厉害!国内大学生计算机编程第一人,一人挑战一个队,百度最年轻 T10,现创业自动驾驶

  • Balancer因通缩代币STA遭遇闪电贷攻击,价值50万美元资产被黑

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

真香,朕在看了!

为了这个技术,操作系统把 CPU 害惨了!相关推荐

  1. mysql3d000啥意思_我是Redis,MySQL大哥被我害惨了!

    我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上. 说起我的诞生,跟关系数据库MySQL还挺有渊源的. 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发 ...

  2. 转 SPOOLING技术——操作系统

    传送门 SPOOLING技术--操作系统 SPOOLING技术(Simultaneous Peripheral Operating On Line) 同时联机外围操作技术,它是关于慢速字符设备如何与计 ...

  3. 计算机处理io和cpu,虚拟化技术原理(CPU、内存、IO)

    虚拟化 云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一. 云计算的云端系统, 其实质上就是一个大型的分布式系统. 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台, 而其中 ...

  4. 【AIX】LPar分区技术、逻辑CPU、虚拟CPU、物理CPU

    [AIX]LPar分区技术.逻辑CPU.虚拟CPU.物理CPU      IBM硬件管理控制台(Hardware Management Console)提供了标准的用户接口来配置和管理Power Sy ...

  5. 超线程cpu的寄存器_操作系统之CPU知识扫盲

    前言 CPU的英文全称是(Central Processing Unit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据.计算机的可编程性主要是指 ...

  6. 操作系统基础-CPU虚拟化

    点击上方"小强的进阶之路",选择"星标"公众号 优质文章,及时送达 预计阅读时间: 13分钟 操作系统的三个要素 操作系统的定位是计算机资源(CPU,内存,硬盘 ...

  7. 2019计算机网络考试,2019年计算机网络技术操作系统试题及答案.doc

    2019年计算机网络技术操作系统试题及答案 一.单项选择题(每小题1分,共15分) 1.操作系统是一种() A.系统软件B.系统硬件C.应用软件D.支援软件 2.MS-DOS的存贮管理采用了() A. ...

  8. 整理linux 查看操作系统、CPU、内存、磁盘等信息

    整理linux 查看操作系统.CPU.内存.磁盘等信息 一.查看 cpu 信息 1 . 所 有 信 息 lscpu [root@localhost ~]# lscpu Architecture: x8 ...

  9. 操作系统与CPU的指令集的关系是怎样的?

    正好在做相关的项目,就把 知道的说说,程序猿的一大特点就是说话不利索,将就着看. CPU指令集 取决于 CPU的 体系架构,目前主流的就是两类 ,ARM 和 X86 ,其他的也有,当然非主流. 指令集 ...

最新文章

  1. asp.net 获取当前时间的格式
  2. 强化学习(一)——专业术语及OpenAI Gym介绍
  3. Redis管道 发布订阅
  4. C语言实现离散余弦变换(DCT)并用MATLAB和Python验证
  5. php获取随机字符串的几种方法
  6. 最小新整数(信息学奥赛一本通-T1231)
  7. 21天Jmeter打卡day16参数传递token传递,接口关联
  8. Java多线程一个有趣的题目
  9. sstv解码_新的业余无线电 SSTV 设备已运抵国际空间站
  10. JMS系列(三)-java操作JMS Topic实例
  11. AVFrame的数据填充方式
  12. 微信公众平台开发入门教程(图文详解)
  13. Linux网络服务——DHCP
  14. 基于Verilog HDL的数字时钟
  15. 编程训练-求矩阵乘积
  16. 华为鸿蒙pc系统试用版,华为开源操作系统 鸿蒙OS 升级版曝光,打通PC等一大批硬件...
  17. Comprehensive Analysis of Time Series Forecasting Using Neural Networks
  18. “SqlSession[xxx] was not registered for synchronization because synchronization is not active”问题成功解决
  19. 公司常用的Project管理工具
  20. python作业火车票订购系统_Python实现12306火车票查询系统

热门文章

  1. 定值保险计算举例_保险公司的“开门红”又要来了!理财险真的值得买吗?
  2. 多位院士、院士候选人入选,132人拟获表彰!
  3. 讲师两年升“教授”,成功实现“三连跳”
  4. 开学典礼上,施一公寄语:西湖大学绝不允许任何形式的学术不端!
  5. 【福利】周志华教授专著《集成学习:基础与算法》上市,豆瓣满分森林书破解AI实践难题...
  6. 有一种神一样的学霸,叫北大保安
  7. 性质极其恶劣!针对基因编辑婴儿,怀进鹏这样说…
  8. 他曾是离诺贝尔奖最近的中国人之一!
  9. 二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement
  10. Java反射设置list的属性值_利用java反射比较两个实体有哪些属性值不一样