pcm和flash的均衡算法-爱代码爱编程
前面的几篇文章已经说明了PCM的特性,它可以和传统的DRAM构成混合内存提高计算机系统的性能的同时降低内存功耗。然而仍然有人提出将PCM用于外存,这种非易失的新型储存器用于外存必将大幅提高计算机的速度。但是鉴于PCM的价格较高,所以可以使用PCM和flash的混合外存。
首先介绍flash,闪存是一种读写速度快、低功耗、耐高温且无噪声的新型储存设备。闪存分为NOR型和NAND型,不同类型的闪存具有不同的特点,NOR型随机性比较好,但是读和擦除的速度慢,NAND型的优点是写速度快,但是随机性差。另外闪存具有读写次数的限制,一般为10的4-5次方左右。闪存必须有擦除步骤,其擦除的过程就是将所有的空闲块全部置“1”,因为闪存的特点是只能写“0”,因此写数据的过程也就是写“0”的过程。为了延长闪存的寿命,需要一种负载均衡策略。
均衡算法主要包括了两种策略,动态和静态均衡算法。动态算法是储存有数据的块可能会不断进行更新,当该块到达一定的阈值的时候就将该快重新定位到另一个数据块,拷贝相应的数据信息并改变各个链表信息。这种动态的策略保证了同一个数据块不会被频繁的访问。但是还有一个问题,有些数据块是很少更新甚至不会更新的(比如代码段),对于这些数据占用的段不会被多次写。为了更进一步的平衡写次数,还需要一种静态分配策略。最简单的静态分配策略就是记录每个块发生更新的次数,当这些块更新的总次数到达一定的阈值的时候就将”冷数据块“(写次数少的块)和“热数据”块进行互换;从而到达负载均衡的目的。还有一种策略是建立起两个空闲数据块链表,一个是较少更新空闲表,一个是较频更新空闲表。当发生数据更新的时候,物理块也会发生变化,这样就会使冷的数据热起来,热的数据块冷下去。
PCM作为储存器也可以使用与flash同样的方式。另外由于PCM的写不是以块为单位的,同时PCM在写的时候也没必要先擦除(全部置1)。为了降低PCM写的数量,在写盘的时候,先执行读操作,将读出的数据与将要写入的数据进行比较,修改不同的位。为了进一步减少写的数量,可以设置一个标志位代表数据是否相反。比如读出的数据与将要写入的数据的海明距离大于n/2,则将该标志位置1,以保证修改的数据永远小于n/2。