百科问答小站 logo
百科问答小站 font logo



内存(DRAM)的连续读写速度和随机读写速度是一样的吗? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

先说结论吧:DRAM的随机读写速度必然慢于连续读写。

主要原因是CPU存在着多层次的cache,随机读写会造成大量的cache miss,必然引发速度下降。除非是完全没有cache的CPU,比如Intel第一代的8086 CPU。

因为不存在cache,所以随机读写速度基本上跟连续读写是一样的,但8086的随机跳转性能会差一些,因为8086上还是有几个字节的指令预取缓存的。

回到题主的问题,段页式转化是必然要产生性能损失的,极端的例子是虚拟化,虚拟化是两次翻译,先从虚拟机的虚地址转换成虚拟机的物理地址,再转换成实际物理地址,所以虚拟机的内存访问性能要慢于非虚拟机,但这个浪费并不是“很大”,Intel号称虚拟机的内存访问性能比非虚拟化模式慢10%~30%左右,这是过去的数据,不知道现在什么样了,所以算不上“浪费很大”。

实际CPU在翻译段页地址的时候,页面内的地址翻译是有缓存的,比如对于指令来说,只要不踩到页边界,是不会触发新的地址翻译(这里特别说明一下:操作系统从实模式切换到保护模式的时候,也用了这种技巧:不跨页,不触发地址翻译)。而跨页的话,也并非到RAM里拿页表,那样开销太大了,有TLB的存在可以提高地址翻译速度。

BIOS层面上的物理地址到实际物理设备的地址翻译是在内存控制器里做的,这方面可以认为是没有性能损耗的,因为翻译的过程是可以认为是静态的,就算是有开销,也远远低于虚地址的翻译——这个是动态的,因为页表是可调整的。

不管地址翻译的开销有多大,也比不上cache miss,这个会严重影响性能。

有一些特殊的应用场合,会为了保证性能或者实时性,会关掉页表,或者做大页一一映射,这就是为了尽量让地址翻译的影响降到最低。

-------------------------------

再说SSD的问题,SSD是不需要寻道,但SSD也是有cache的,SSD内部有一张表,保存着逻辑扇区到物理扇区的映射,为了保证性能,这个映射表运行时是被SSD放到主控的cache里的,但基于成本的考虑不会是全cache的,那么这里就会有cache miss的可能,cache miss的开销可能是微秒甚至毫秒级,这样延迟就很大了。

随机写就更复杂一点,除了SSD本身的cache miss之外,SSD写操作的最小单元要大于读,SSD读的最小单位一般是一个扇区(512B/4K),擦除的最小单位是一个block,可能是128KB甚至更大,擦除一个block的开销是毫秒级的延迟,如果连续写128KB,可能是只需要擦除一个block,但如果是随机写,那可能是擦除非常多的block,其开销是完全不一样的。

所以即使SSD不需要寻道,其随机读写的性能也慢于连续读写。




  

相关话题

  linux 操作系统和 windows 操作系统哪个对科研更有效,有前辈能详细讲讲吗? 
  如何看待余承东回应今年先不发布手机鸿蒙OS,明年有可能? 
  mmap 内存映射,是越过了操作系统,直接通过内存访问文件吗? 
  为什么桌面领域没有一款 Linux 或 UNIX 能与 Windows 鼎足而立? 
  如何看待华为开发自有操作系统? 
  如何在 Surface 中安装 XP 系统? 
  怎样自己写一个简单的操作系统? 
  华为鸿蒙OS是否影响到他人利益? 
  计算机掉电的时候 CPU 真的会中断吗?操作系统会进行那些动作? 
  64位操作系统,64位CPU,加SSD硬盘,是不是就可以省去内存,让CPU直接读取硬盘里的数据? 

前一个讨论
室友想抄我的代码,给还是不给?
下一个讨论
操作系统虚拟地址转换为物理地址是如何避免冲突的?





© 2025-01-31 - tinynew.org. All Rights Reserved.
© 2025-01-31 - tinynew.org. 保留所有权利