Cache的工作原理(3):写数据


cache在CPU读取数据时扮演着重要的角色,同样的,虽然,在CPU写数据时,没有发挥直接作用,但是可以发挥间接作用,比如将数据写的地方离自己近一点,这样有利于下次的读取。

但是,写数据与读数据不太一样,主要有两个方面的问题:

  • hit cache:因为涉及到数据的变化,可能会存在不一致的情况,例如:只写入cache,但是不写入main memory。
  • miss cache,此时如何处理?

当hit cache时

首先要明确一点,hit cache是什么意思?之前在读数据时,如果数据在cache中,称为hit。同样的,在写操作中,hit指的是写入的内存地址在cache中能找到。

在hit的情况下,cache与main memory中对写入内存地址的数据不一致的问题,发生的原因在于只写到了cache中,没有同步到memory中。针对这种情况,最简单的办法是write-through。

write-through(写穿透)

  • 数据同时写入Cache和主存,保证内存和cache数据一致;
  • 但是这种策略效率较低,因为涉及到写到memory中,优点是简单、直接;

针对这种方法的缺点,有一个改进的策略——使用write buffer。

A write buffer as a queue, it stores the data while it is waiting to be written to memory. After writing the data into the cache and into the write buffer, the processor can continue execution.

  • 这种方法的优点在于,处理器不用等待写入memory的操作,而是写入write buffer就可以继续执行别的指令(之前基本的write-through策略需要CPU等待写入内存完成),而写入buffer显然比写入memory要快;

    又是,以空间换时间的策略。

  • 当write buffer中的数据被写入memory后,它就会被清空,以等待下一次使用;
  • 当CPU需要写数据时,而write buffer已满,这时CPU也需要等待有空闲位置;

这种write buffer的策略有个问题:

当CPU发出写操作的速度,大于memory完成写操作的速度,总有时间点,write buffer会被填满,即便buffer再大,CPU也会等待。

Write-back(写回)

对于write-through的替代策略,write-back使用不同的处理策略:

  • 第一次只向cache中写入;
  • 当对应内存地址的cache line中的数据被更新了,才会将数据写回到memory中;

相比于write-through:

  • 这种策略性能好,特别是当CPU生成写操作的速度大于memory执行写入操作的速度时,因为写到内存的次数减少;
  • 可能对同一块cache的区域多次写入,但是只要将最后一次写回到内存即可,减少了内存访问次数;
  • 但是要实现这个目标,要求cache具有复杂的结构;

当miss cache时

此时,写指令中的内存地址在cache中没有对应的cache line。在这种情况下,如果要写入数据,有两种策略:

  • no write allocate;
  • write allocate;

no write allocate

  • 这种策略中,写操作的对象只有main memory,不涉及cache,即数据不会写入cache中。
  • 实现简单、直接,但是性能不好;

write allocate

这种策略下,情况要复杂一点:

  1. 首先,根据写操作指令中的内存地址,将对应的数据从main memory中得到,并将数据写到cache的cache line中的block;
  2. 将写操作中新的数据写到1中对应的block中,完成覆写;

这块我一直不太明白为啥要先从内存中将数据写到cache中,直接将数据写到cache中不就行了,这样先写的数据也会被覆盖,何必呢?

我个人理解,因为是Miss,cache中没有新数据对应的内存地址,因此处理器直接写cache,找不到对应的位置,也就无法完成操作,而先从内存中写cache旧数据的目的是,将对应内存的地址也放到cache中,这样后面写入新数据时就可以找到地址了。

这种策略,

  • 第一次写入时麻烦,但是有利于后续的读取;

策略使用

现代cache的设计和使用中:

  • write through和write Non-allocate搭配使用;
    • 适用于那些性能要求不高但是希望设计简单的系统;
  • Write Back 和Write Allocate搭配使用
    • 适用于性能较好的场景;

总结

总结write policy

参考资料

  1. 703-主存的工作原理 - 第七讲 存储层次结构 | Coursera

  2. Computer Organization and Design - 5.3 - handling writes


文章作者: alex Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex Li !
  目录