为了这个技术,操作系统把 CPU 害惨了!
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
内存访问瓶颈
我是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的工厂”
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-07-06
本文作者:轩辕之风
本文来自:“CSDN”,了解相关信息可以关注“CSDN”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SpringBoot 一个依赖搞定 session 共享,没有比这更简单的方案了!
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道我说的是对的了! 在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图: 在这样的架构中,会出现一些单服务中不存在的问题,例如客户端发起一个请求,这个请求到达 Nginx 上之后,被 Nginx 转发到 Tomcat A 上,然后在 Tomcat A 上往 session 中保存了一份数据,下次又来一个请求,这个请求被转发到 Tomcat B 上,此时再去 Session 中获取数据,发现没有之前的数据。对于这一类问题的解决,思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方(主流方案就是 Redis). 当所有 Tomcat 需要往 Session 中写数据时,都往 Redis 中写,当所有 Tomcat 需要读数据时,都从 Redis 中读。这样,不同的服务...
- 下一篇
作为架构师,下一次你应该考虑的10个数据库
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 1、PostgreSQL PostgreSQL听起来比较陌生,其实这种关系数据库解决方案自1997年以来一直存在,并且是Ruby,Python,Go等社区中的首选。 将PostgreSQL作为下一个项目的数据库解决方案,您绝不会失望(国内邮储银行开始全面使用PostgreSQL作为oracle的替代品。市面上已经有大量不错的SQL客户端可用于连接到PostgreSQL数据库进行管理和开发。 与其他关系数据库(特别是MySQL)相比,PostgreSQL具有一些引人入胜的功能,例如: 数组,Range(范围),UUID,地理位置等的内置数据类型。 支持文档存储(JSON样式),XML以及key-value存储(Hstore)。 同步、异步复制 引入了使用其它程序语言编写函数的能力,可在PL,Perl,Python等中编写脚本 全文搜索 何时使用PostgreSQL 如果您正在开始一个新项目,之前被MySQL事务锁定打败过,那么现在是考虑PostgreSQL的好时机。 如果需要部分NoSQL...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器