内存究竟有多快
2016-06-25 23:37
183 查看
一般来说。CPU需要0个周期来访问其寄存器,1-30个周期来访问高速缓存,50-200个周期来访问主存。
对于Intel Core i7来说。这个值可以很具体。Intel Core i7的主频约在2-3GHz。可以计算出。
也就是说,访问内存的时间是ns级别的。
再来看看磁盘。
磁盘的访问时间=寻道时间+旋转延迟+数据传输时间。对于普通的7200转SATA磁盘。这个值是:9ms+4ms+0.02ms=13.02ms。
也就是说,如果从磁盘随机访问一个字节,需要13.02ms,比从内存获取的时间24-93ns,至少要多14万倍。相差5个数据级,何其巨大的差距。
顺序读写磁盘会快一些。 假设一个盘片有1000个扇区,每个扇区512字节,7200转。顺序读可以忽略掉寻道的时间。所以吞吐量是 扇区数×扇区大小×转速=1000*512/(60/7200)=58MB/s。这个数据似乎不咋样。如果使用多盘系统。SATA II的接口,吞吐量可以达到300MB/s。追求极限性能可以mount裸盘直接操作多盘。
存储器山
《深入理解计算机系统》一书中提到了一个存储器山的概念。教授先生别出心裁的将存储器的吞吐量,画成了一座山。
存储器山的测试程序是这样的:
X轴表示的是读取步长,Y轴是吞吐量,Z轴是数据总量的大小。
可以看出来步长越小,数据数据总量越小。性能越好。
很明显,山是不是平滑的,是成阶梯状。红色部分为L1缓存,绿色为L2缓存,浅蓝是L3缓存,深蓝是内存。我们可以得一些数据。
也就是说,去除高速缓存的内存,吞吐量性能只有800MB/s而已。比起磁盘的300MB/s,网络的100MB/s。也只是快了几倍。平时说内存比磁盘快许多,其实没有那么多,如果不好好操作内存,内存的频繁读写,也可以成为系统瓶颈。
总结
现在处理器的主频已经停止了增长。但是高速缓存仍然以摩尔定律的速度增长的。长久的看,高速缓存频率逐渐会追上处理器的性能,容量也会越来越大。但是内存则不容乐观,虽然容量增加了许多,但是性能确没有大的提升,磁盘的状况也是类似;SSD刚刚开始普及,趋势不明显。
但可以看到,SSD的吞吐量和内存的吞吐量相去并不大。也就是说在未来,当SSD完全替代了磁盘。我们要像现在操作磁盘一样小心翼翼地操作内存,才有可能写出符合那个时代计算机性能的程序。相比之下,SSD的使用比磁盘要轻松一些,毕竟随机读写的速度在一两个数量级上。
对于Intel Core i7来说。这个值可以很具体。Intel Core i7的主频约在2-3GHz。可以计算出。
L1—指令缓存 | L1-数据缓存 | L2-缓存 | L3-缓存 | 内存 | |
访问周期 | 4 | 4 | 11 | 30-40 | 50-200 |
缓存大小 | 32KB | 32KB | 256KB | 8MB | 若干GB |
访问时间 | 2ns | 2ns | 5ns | 14-18ns | 24-93ns |
再来看看磁盘。
磁盘的访问时间=寻道时间+旋转延迟+数据传输时间。对于普通的7200转SATA磁盘。这个值是:9ms+4ms+0.02ms=13.02ms。
也就是说,如果从磁盘随机访问一个字节,需要13.02ms,比从内存获取的时间24-93ns,至少要多14万倍。相差5个数据级,何其巨大的差距。
顺序读写磁盘会快一些。 假设一个盘片有1000个扇区,每个扇区512字节,7200转。顺序读可以忽略掉寻道的时间。所以吞吐量是 扇区数×扇区大小×转速=1000*512/(60/7200)=58MB/s。这个数据似乎不咋样。如果使用多盘系统。SATA II的接口,吞吐量可以达到300MB/s。追求极限性能可以mount裸盘直接操作多盘。
存储器山
《深入理解计算机系统》一书中提到了一个存储器山的概念。教授先生别出心裁的将存储器的吞吐量,画成了一座山。
存储器山的测试程序是这样的:
1 2 3 | <strong>Kernel_loop(elems, stride):</strong> for (i = 0; i < elems; i += stride) result = data[i]; |
可以看出来步长越小,数据数据总量越小。性能越好。
很明显,山是不是平滑的,是成阶梯状。红色部分为L1缓存,绿色为L2缓存,浅蓝是L3缓存,深蓝是内存。我们可以得一些数据。
L1-数据缓存 | L2-缓存 | L3-缓存 | 内存 | 磁盘 | SSD | |
缓存大小 | 32KB | 256KB | 8MB | 十几GB | 几TB | 几百GB |
访问时间 | 2ns | 5ns | 14-18ns | 24-93ns | 13.0ms | 30-300us |
吞吐量 | 6500MB/s | 3300MB/s | 2200MB/s | 800MB/s | 60MB/s | 250MB/s |
总结
现在处理器的主频已经停止了增长。但是高速缓存仍然以摩尔定律的速度增长的。长久的看,高速缓存频率逐渐会追上处理器的性能,容量也会越来越大。但是内存则不容乐观,虽然容量增加了许多,但是性能确没有大的提升,磁盘的状况也是类似;SSD刚刚开始普及,趋势不明显。
但可以看到,SSD的吞吐量和内存的吞吐量相去并不大。也就是说在未来,当SSD完全替代了磁盘。我们要像现在操作磁盘一样小心翼翼地操作内存,才有可能写出符合那个时代计算机性能的程序。相比之下,SSD的使用比磁盘要轻松一些,毕竟随机读写的速度在一两个数量级上。
相关文章推荐
- Java虚拟机:垃圾收集
- JVM——垃圾收集算法
- Write Through 和 Write Back
- 用内存做缓存
- UVA - 10820 - Send a Table
- 自动获取win10锁屏壁纸脚本
- Google hosts
- 【笔记】VMware Workstation可移动设备不能看到U盘
- 表单标签
- UART Explained(转载)
- android sdk里的各目录作用
- C# MP3播放帮助类
- 【ModelMap】jsp中显示springmvc modelmap传递的对象
- Python快速入门学习笔记(二)
- Python快速入门学习笔记(二)
- Struts2学习(六)—国际化
- 【06-23】js动画学习笔记01
- 问题解决记录
- Yixiaohan---001及002题个人作业代码,仅供参考
- ava web项目防止多用户重复登录解决方案