当前位置:首页 > 内存 > 正文

内存复用技术介绍

  • 内存
  • 2024-06-26 21:26:24
  • 8702

一、redis为什么那么快

Redis使用基于内存的KV数据库,采用单进程、单线程模型,由C语言编写。官方数据称可以达到100,000+qps。这个数据并不比Memcached差,同样是采用单进程多线程的基于内存的KV数据库。
Redis速度快的主要原因是:
1.完全基于内存。
2。数据结构简单,数据操作也简单。
3多路复用模型
章节第一点和第二点不详细讨论,主要关注第三点使用多路I/O-Multiplexing技术。
多路I/O复用模型使用Select、Poll和Epoll同时监听多个流的I/O事件。如果一个或多个流空闲,则当前线程将被阻塞,当流发生I/O事件时,它将从阻塞状态中唤醒,因此程序将轮询所有流(epoll只轮询实际发出的流)。events)并且仅按顺序处理可用的流。这种方法避免了很多无意义的操作。这里,“多个”是指多个网络连接,“重用”是指重用同一个线程。通过使用多通道I/O复用技术,单个线程可以高效处理多个连接请求(最大限度地减少网络I/O花费的时间),并且Redis处理内存中的数据非常快(内存中的操作将不再是一个简单的操作)。问题在这里)。)性能瓶颈),以上两点主要促成了Redis的高吞吐量。
与Memcached不同,Redis直接使用Libevent,而是对select、epoll、evport和kqueue等常用接口进行非常轻量级的实现。为不同的系统调用选择合适的接口。Linux上的默认设置是epoll。由于Libevent比较重,比较通用,所以代码量非常大,而且有很多Redis无法使用的功能。为了实现“轻量”、消除依赖,Redis选择了对其自身进行封装。
单进程单线程的优点
1.代码更清晰,处理逻辑更简单。
2。无需考虑各种锁定问题。没有锁定和释放操作,也没有可能出现的死锁带来的性能消耗。
3。不存在因多进程或多线程引起的切换而导致的CPU消耗。


二、mfc内存复用技术有哪些内存共享、内存替换、内存泡沫。
1.内存共享:读取时从主卷读取,编辑时写入差异卷。这就是内存共享技术。
2。内存更换:当内存比较小时,会在磁盘上开辟空间进行内存更换。当内存不够的时候,磁盘上一段时间的一些冷数据就会被替换掉。时间越长,未使用的数据就会越冷。
3。内存泡沫:通过压缩其他虚拟机的内存,将内存释放给其他内存使用率较高的虚拟机。


三、【DDR3】快速扫盲

DDR3SDRAM:突破性的同步动态内存技术


DDR3(双数据速率3)是革命性的RAM,具有同步读、写和新数据显着的改进。其核心技术Prefetch通过并串转换实现了数据传输速度的飞跃。8-bitPrefetch或8nPrefetch(n等于芯片的位宽,意味着核心频率可以提高8倍)是其主要特点。其中,Burst模式允许连续数据传输。例如,型号MT41K256M16xx-125的IO频率高达800MHz,而DDR3-1600则表现出每秒1600MT/s的数据速率,但选择时需要考虑。内存控制器的限制。


内存结构及扩展


MT41J256M16内存模块有18条地址线和16条数据线,提供容量4GB的存储。DDR3内存由8个逻辑Bank组成,每个Bank通过行地址和列地址来定位。该银行的时分复用技术扩大了整体容量,但引入了物理银行的概念(即排名),这是DDR4时代的新特征。


银行与评级的合作


在DDR3中,评级与系统交互时,内存传输需要提供64位宽的上传数据一次。由于DDR3具有128位地址流,这意味着它支持2个级别。每个存储体的容量计算基于15行地址乘以10列地址,每列16位或32MB。列地址与簇传输密切相关。突发长度为8列,因此每次传输的数据量是固定的。


操作命令和控制信号


操作期间,ACT信号在64个周期内完成Bank校准和Bank激活行,并保持活动状态直到下一个周期预充电命令。PRECHARGE禁用或刷新所有存储体,并且只有在tRP(预充电周期)之后才能访问下一行。银行存入资金后,通过ACT或WR命令进行读写操作。


READ命令执行连续读取并自动确定预充电时间,而WRITE命令选择写入数据的bank和地址。REFRESH负责自动刷新,每7.8us执行一次,最多允许8个周期。当没有时钟数据请求并保持存储器状态时,SELFREFRESH被启用。


Writeleveling:动态优化


Writeleveling是一种智能机制,通过DDR3的反馈自动调整DQS(数据时钟信号)和CK(时钟信号))以优化数据传输性能。


系统状态机:精确控制


最后,系统状态机精细管理信号DQS、DQS#和CK的调整,以及终止,保证整个系统稳定有效运行。