文章目录

  • 一、CPU与内存的硬件知识
    • CPU的概念
    • CPU与内存之间:Cache(高级缓存)
    • 多核CPU的内存共享问题(Cache一致性问题)
      • Cache Line
      • MESI协议
      • 缓存伪共享问题
    • SMP架构与NUAM架构
  • 二、内存计算技术
      • 超高性能一体机的内存数据库
    • 内存数据库
    • 内存数据网格/内存计算网格(IMDG/IMCG)
      • 分布式数据库
    • 实时流处理系统
    • 新型的数据仓库系统
  • 三、内存缓存技术

一、CPU与内存的硬件知识

CPU的概念
  • CPU:泛指,中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
  • Socket或者Processor:指一个物理CPU芯片,盒装的或者散装的,上面有很多针脚,直接安装在主板上。
  • Core:每个Socket里面的一个CPU核心,一个独立的计算单元。我们常说的4核CPU指的就是一个Socket里面有4个Core
  • Hyper-Threading:超线程技术,支持一个Core里并行执行两个线程。对于操作系统来说就相当于两个逻辑CPU。
CPU与内存之间:Cache(高级缓存)

CPU与内存之间的速度差了差不多100倍,所以CPU不可能直接与内存相连。中间过渡的缓冲区就是Cache。
Cache属于SRAM,内存属于DRAM。这两者的区别是SRAM更快、更小、电路更复杂和更贵。巨大差距的原因如下:

  • 存储1bit数据,DRAM需要1个电容和1个晶体管,而SRAM需要6个晶体管。DRAM数据存放在电容里,电容的充放电需要时间,所以比较慢。
  • SRAM的频率基本与CPU的频率保持一致,而DRAM会慢很多。
    Cache一般会集成在CPU里面。由于Cache很贵,所以一般采取金字塔形的多级缓存的方式,级数越高性能越低,但是容量越大。例如Intel Sandy Bridge架构的CPU,L1 Cache容量为64KB,L2 Cache容量为256KB,L3 Cache的容量为32MB。另外L3 Cache是Socket内部所有CPU共享的。
多核CPU的内存共享问题(Cache一致性问题)

多核CPU的内存共享问题,即多个CPU使用同一个内存时的数据一致性问题。每个CPU看到的Cache数据应该是一样的,如果不一样就可能发生数据错乱。
来自Intel的MESI协议是目前业界公认的解决Cache一致性问题的最佳方案。

Cache Line

首先要说一下缓存行的概念(Cache Line)。Cache Line 是Cache中的最小存储单位,Intel CPU一般为64B。当Cache 从内存中加载数据时,一次加载一条Cache Line的数据。为什么这么设计呢?因为CPU的速度远快于IO,一次读一个字节与一次读多个字节的速度差不多。另外数据访问一般具有连续性,需要某个字节很可能需要后面的字节,索性一起读取了。

MESI协议

Cache Line 的前两bit表示当前状态,所以共4个状态:

  • M:modified 修改状态,其他CPU上没有数据副本,且在本CPU上被修改过,与存储器中的数据不一致,最终必然引发系统总线的写指令,将Cache Line 中的数据写回到内存中。
  • E:exclusive 独占状态,当前Cache Line中的数据与内存中的数据一致,且其他CPU上没有副本。
  • S:shared 共享状态,当前Cache Line中的数据与内存中的数据一致,且其他CPU上有副本。
  • I:invalid 无效状态,当前的Cache Line 中没有有效的数据,或者已失效。此状态也是Cache Line的初始状态。
    由此可见,MESI也可以理解为一种状态机模型。我们讨论4中状态转移场景:
  • 一个读,另一个再读:刚开始所有的Cache Line 都是Invalid 状态,有个CPU A读取某个变量,此时Cache中没有数据,Cache会发起一个到内存的Load指令进行数据加载,加载完之后Cache Line变成Exclusive状态。此时另一个CPU B也读取同一个变量,在总线上发起读请求。这个读请求会被CPU A嗅探到(snoop)。CPU A会在内存总线上复制一份Cache Line 作为应答,同时将自身的Cache Line修改为shared状态。CPU B收到应答并保存到自己的Cache Line中,同时状态改为shared。
  • 一个写,另一个读:CPU A 写完数据后,缓存行状态为modified。此时CPU B对同一变量进行读操作。CPU A在总线上嗅探到这个读操作后,先将数据回写到内存,然后复制一份缓存行数据作为应答,并把自己的缓存行状态改为shared。CPU B收到应答后缓存行状态为shared。
  • 一个写,另一个写:CPU A发起写操作,其缓存行数据为Modified。CPU B也发起写操作,当CPU A在总线上嗅探到此操作后,会阻止CPU B的写请求并取得总线控制权,随后将自己缓存行的数据写入内存,同时将自己的缓存行状态改为invalid,因为马上要被改。此时CPU B发现自己的请求没有回应,会进行重试。
  • 如果某个变量被多个CPU加载到各自的缓存行,其中某个CPU对此变量的修改会导致所有拥有此变量缓存的缓存行都失效,这是引发性能下降的一种典型Cache Miss问题。
缓存伪共享问题

讲这个的比较多,这里简单说一下。问题原因上面已经说到了。当两个CPU同时各自缓存了某个缓存行,但是这个缓存行包含多个变量,两个CPU各自操作自己的变量,按理说应该是互不影响的。由于缓存行的是最小操作单位,当一个CPU修改缓存行中某个变量时,另一个CPU的相应缓存行会失效,不得不频繁地从内存中加载,导致频繁的Cache Miss,性能会急剧下降。
如果解决这个问题?尽量让这种变量占用整个缓存行,使变量之间互不影响。java8之前可以进行填充,java8提供了@Contented注解,确保变量与其他变量不在同一个Cache Line 中。

SMP架构与NUAM架构
  • SMP : Symmetrical Multi-Processing 对称多处理,是一种对称结构,所有CPU Core都连接到一个内存总线上,每个CPU Core都是平等的,而且内存是一个统一寻址的整个内存(UAM, Uniform Memory Architecure)。
    随着CPU核数不断增长,一条内存总线的带宽已经无法满足。这时提出了所谓的NUAM架构(None Uniform Memory Architecture)。
  • NUMA架构:内存不再是一个整体,而是被分割成相互独立的几块,被不同的CPU私有化。CPU优先访问离自己近的内存,如果要访问其他CPU控制的内存,需要通过互联通道访问,这会相对慢一些。这种架构可以使CPU扩展到几百个而不会导致性能严重下降。
    • 这种架构由多个Node组成,一个Node由一个或多个Socket组成,一个Socket由多个Core组成。Node之间通过Intel QuickPath Interconnect技术形成点到点的全互联系统。
    • 无法像SMP架构那样使用嗅探总线的方式来实现Cache的一致性。Intel引入了MESI协议的扩展协议——MESIF来实现一致性。此协议没有公开文档,暂不深究了。
  • 对于NUMA架构的使用情况:
    • 编程语言方面,Java在支持NUAM的系统里,可以开启基于NUAM的内存分配方案,使得当前线程优先在自己所在的Node对应的内存上分配内存,大大加快性能。
    • 大数据方面:SAP的HANA平台已经开始应用。
    • 云计算和虚拟化方面:OpenStack和VMware已经支持基于NUAM技术的虚机分配能力,使得不同的虚机运行在不同的Node上,虚机内存不会跨越多个Node。
    • 在基于多进程的高性能单机分布式系统上很有前景,既享受优先访问本地内存的好处,也享受进程间高性能通信带来的优势。进程间通信使用Intel QuickPath Interconnect等技术比基于网络的分布式系统速度快很多。

二、内存计算技术

超高性能一体机的内存数据库
  • Oracle的Exalytics一体机,单核支持8个线程(我们知道Intel的超线程也就是2个线程),单机支持512个CPU内核,每秒265G的IO,4TB主内存、3.2T闪存、7.2T硬盘。太强大了!一般人买不起。
内存数据库
  • SAP HANA平台:

    • 把数据全部放在内存中,定期回写到磁盘
    • 利用NUAM架构和并行编程技术
    • 最小化数据传输:数据压缩技术(基于数据字典),计算逻辑下推到数据存储层。
    • 同时支持OLTP和OLAP
    • 同时支持基于行的数据存储和基于列的数据存储
    • 支持分布式集群,可以水平扩展。目前最大的HANA集群有100个节点和250T内存。
内存数据网格/内存计算网格(IMDG/IMCG)

IMDG/IMCG是一个完全分布式的内存存取系统,可以将便宜的X86服务器的内存整合成一个超大的内存。存放的是序列化数据,且支持动态扩容缩容。主要代表产品如下:

  • Hazelcast:java实现的开源框架

    • 使用简单,只有一个jar包,方便集成
    • 功能全面
    • 当需要一个分布式的超大的map时,可以考虑Hazelcast。
    • tomcat集群的session管理
  • BigMemory (Terracotta) :java实现的开源框架。收购Ehcache后,推出了Ehcache+BigMemory组合产品。
  • Gemfire (VMware Pivotal ):铁道部的12306售票系统采用此方案,解决了售票系统瘫痪问题
  • Ignite(Apache)
  • Infinispan(JBoss):Java实现的开源框架,可以对接Hadoop和Spark
分布式数据库
  • VoltDB:支持在内存中执行SQL,支持ACID,支持定期将数据持久化到磁盘中。
实时流处理系统

Storm/Spark/Flink

新型的数据仓库系统

Hive
Impala:Cloudera公司开发,提供SQL功能,能查询在Hadoop中的HDFS和Hbase中PB级数据

三、内存缓存技术

  • 堆内缓存:Guava工具包、Ehcache
  • 堆外缓存:BigMemory
  • 单机版缓存:早期的Memcache和Redis
  • 分布式缓存:Redis
    • 丰富的缓存失效策略
    • 支持超大对象
    • 丰富的数据类型
    • 持久化和主从复制,可以当做数据库使用
    • HyperLogLog:通过固定的空间统计较大数据集的不相等数据总数。
    • Bloom Filter:大数据集的黑名单
    • Bitmap:存储用户画像数据
    • GeoHash:地理相关API

CPU、内存与分布式相关推荐

  1. 《SPARK/TACHYON:基于内存的分布式存储系统》-史鸣飞(英特尔亚太研发有限公司大数据软件部工程师)...

    史鸣飞:大家好,我是叫史鸣飞,来自英特尔公司,接下来我向大家介绍一下Tachyon.我事先想了解一下大家有没有听说过Tachyon,或者是对Tachyon有没有一些了解?对Spark呢? 首先做一个介 ...

  2. KVM - 调整cpu内存、网卡

    1.查看母机里面的子机情况 [root@bogon ~]# virsh list --all Id    Name                           State ---------- ...

  3. 高cpu_实用脚本:检查高 CPU / 内存消耗进程 | Linux 中国

    本教程中包含两个脚本,它们可以帮助你确定 Linux 上高 CPU/内存消耗进程的运行时间. • 来源:linux.cn • 作者:Magesh Maruthamuthu • 译者:geekpi • ...

  4. 处理器仿存带宽_linux服务器CPU内存硬盘读写带宽等性能测试方法

    如何对一个VPS主机进行CPU内存,硬盘IO读写,带宽速度等项目测试,像UnixBench和压力测试则可以综合反映一个VPS的性能水平,方便大家对照参考. VPS性能测试:CPU内存,硬盘IO读写,带 ...

  5. 一个用了统计CPU 内存 硬盘 使用率的shell脚本

    一个用了统计CPU 内存 硬盘 使用率的shell脚本 一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 代码如下: #!/bin/bash #This script is use ...

  6. Intel CPU内存屏障

    CPU内存屏障用于保障有序性. volatile禁止指令重排序,可以保证有序. CPU内存屏障,Intel设计得比较简单,总共只有3条指令: ①sfence:也就是save fence,写屏障指令.在 ...

  7. Ubuntu查看系统任务管理器(cpu+内存资源占用)+查看虚拟机分配核心数

    Ubuntu查看系统任务管理器(cpu+内存资源占用) 命令: gnome-system-monitor 打开ubuntu下的任务管理器,启动桌面管理,显示系统cpu,内存占用情况. 参考:https ...

  8. Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05

    文章目录 找出占用CPU/内存过高的进程 1. 脚本 2. 运行脚本 3. 效果图 找出占用CPU/内存过高的进程 1. CPU 过高的进程2. 内存 过高的进程 1. 脚本 #/bin/bash e ...

  9. (FortiGate)飞塔防火墙查看CPU内存使用情况

    查看CPU内存使用情况(以下两个命令实现的效果一致) get system performance top diagnose sys top 也可以在后面加上刷新时间及显示行数的参数: diagnos ...

  10. 阿里云电脑无影云桌面收费标准(CPU内存/云盘/互联网访问带宽)

    阿里云电脑无影云桌面1元/月起,4核8G配置一年优惠价199元.8核16G配置一年899元,阿里云百科先分享无影云桌面活动报价,再来说说阿里云电脑无影云桌面官方定价标准,包括云桌面配置.云盘.AD C ...

最新文章

  1. nefu 628 Garden visiting
  2. wap问答系统工作总结
  3. LeetCode String Compression
  4. arcgis在线地图插件安装
  5. 黑客攻防技术宝典Web实战篇第2版—第6章 攻击验证机制
  6. SQL server 2012序列号 注册码 z
  7. antd权限管理_Ant Design Pro开发后台管理系统(权限)-阿里云开发者社区
  8. 【主成分分析法】NLPer的断舍离(上篇)
  9. 计算机网络第七版答案
  10. 可编程逻辑器件FPGA学习-VHDL
  11. 深度学习之tensorflow:tensorflow-cpu;win10+gtx1050ti+tensorflow-gpu搭建过程以及问题解决
  12. 【Educational Codeforces Round 61 (Rated for Div. 2) D.Stressful Training】二分
  13. 震撼您心灵的四川雪山
  14. java实现生成水印照片
  15. 触龙——可解释推荐系统
  16. JAVAweb开发学习
  17. 开源正弦波20kHz信号发生器 V2
  18. java 校验网站域名格式是否为(xxx.xxx.xxx/xxx/xxx..)正则
  19. 便宜自动驾驶定位方案
  20. win10录屏_自称最好用的电脑录屏软件,用了之后是真的香~

热门文章

  1. squeezenet代码解读
  2. 连接coding以及恢复之前的版本
  3. imfilter函数详解
  4. JS清理Word格式
  5. 在busybox中挂载nfs
  6. JS中的offsetLeft和clientLeft和scrollLeft的一些区别
  7. Codeup墓地-2159
  8. 【react】解决在外部设置react组件input的value问题
  9. python毕业设计之django+vue企业员工在线办公OA系统
  10. 社交新零售(社交电商),是今后的重要商业模式!