cache的性能
hit rate(命中率)定义为在指定的时间内cache命中数除以总的内存请求数,通常是以百分比的形式表示。
同样,miss rate是未命中数除以总的请求数。
1-hit rate= miss rate
针对特定的读或者写,可以计算出相应的读hit rate/读miss rate,以及写hit rate/写miss rate。
非常确定的是,高hit率意味着高性能。
没有办法对所有用户软件场景计算出hit率和miss率,只能针对典型场景(benchmark)计算出hit率和miss率。
hit率很大程度取决于软件业务场景操作的代码/数据占据的大小和地址空间,以及cache的规格。
cache的性能和数组的组织形式有很大的关系,如果内存访问是顺序数组的,后续的很多内存访问都在同一个cacheline,cache的存在就能够大幅提高程序的性能;否则(例如数据的组织形式是无序的链表),cache的存在并不会对程序的性能有多大的增益。
write buffer
write buffer
write buffer是处理器内核中的一个硬件模块,当内核执行store指令时,需要将相关细节(例如要写入的位置、要写入的数据以及事务大小)放入buffer。
处理器内核不必等待对主存的写入完成,就可以继续执行下一条指令。write buffer本身会将从处理器内核接收到的写数据写到主存中。
实际上,只要write buffer中有空间,write buffer就能够隐藏处理器内核写数据的延迟。
如果写入次数较少或时间间隔较长,则write buffer就不会变满。如果内核写入数据的速度快于write buffer数据写到内存的速度,那么write buffer可能已经被填满,这种场景是没有性能优势的,并且会浪费多余的功耗。
一些write buffer支持写合并,即可以将多次相邻地址的写请求合并成一个突发(burst)。这可以减少对外部存储器的相关操作,从而提高性能。
write buffer的行为不是我们在访问外围设备时想要的,因为我们可能希望内核等待写入完成,再执行下一条指令。又或者我们希望写入连续的字节流,而不希望对多个写入操作进行合并。
总之,write buffer自以为的优化行为,很多时候是不期望的,需要使用memory type进行避免。
fetch buffer
还有一个类似write buffer的硬件,fetch buffers。针对系统中的读数据请求,例如处理器内核中的一些prefetch buffers,在流水线实际需要这些数据之前就完成了相关数据的读取操作。
通常,这两类buffer对程序员都是透明的。但是在某些特殊场景下,我们可能需要仔细分析这些场景,并进行良好的软硬件配合,避免发生严重的功能问题。
作者:验证哥布林
来源:芯片验证工程师
https://mp.weixin.qq.com/s/0O9EJvlXw-iTDkODXFAwoQ
https://mp.weixin.qq.com/s/j1i66TSiuJn6e1HAyG1lEQ
推荐阅读
更多数字IC设计技术干货等请关注数字芯片实验室专栏。添加极术小姐姐(微信:aijishu20)微信可申请加入IC设计交流群。