写策略

    对缓存来说,写操作总是有多种可选的策略。一般来说,普通内存空间的写操作可以有写通和写回2种。写回的效率会高一些,而写通一般会低一些。对传统意义的写通来说,可以认为缓存对写操作是“透明”的,不起作用。我们试图通过测试发现CPU的缓存所采取的写策略。在这里我们希望测量“写未命中(Write Miss,WM)”和“写命中(Write Hit,WH)”两种操作的速度差异来区分写策略。对写通来说,WM和WH不会有太大的性能差异(很简单的原理,就不说了)。而对写回,WM和WH将有巨大的性能差异:当WH发生的时候,CPU只需要把数据写到缓存中就可以完成操作了;而WM发生的时候,CPU需要:(1)找到一空的缓存块,或淘汰一老的缓存块;(2)从下一级存储器调入一缓存块;(3)完成写命令。可见,WM要耗费大量时间于步骤(2),将使操作速度显著下降。

    下面就是如何测试这些WM和WH的操作速度了。在这里我们必须同时“制造”大量的WM和WH事件用于测试。原理也很简单:“制造”WM事件就是首先向缓存装入其它的数据,再执行写操作;“制造”WH事件就是首先向缓存装入要写入的地址空间的数据,再执行写操作。这里要注意的是WM事件过程中,必须满足1个条件才能保证所有的写操作都是WM:每个缓存块只能执行一个写操作。有鉴于此,我们测试WH和WM的操作速度的时候都只对每个缓存块写一次。由于我们用的时间测量手段精度很高,可以保证在这样少的循环次数中得到准确的测试数据。

    测试时我们首先分配2倍于缓存大小的内存,如下图:

WritePolicy_01.gif (2564 bytes)

然后,为了“制造”WM事件,我们进行2个步骤:(1)反复读内存块1多次(测试中是5次),则缓存将不太可能有内存块2中的数据(如果是LRU类的替换策略,缓存应该被内存块1填满);(2)向内存块2写,每个缓存块只写一次。则步骤(2)的写操作基本上都是WM事件。只要测量步骤(2)的时间,再与缓存块数平均,就是结果。在后面我们把这种操作叫做“W-M”

    为了“制造”WH事件,我们也进行2个步骤:(1)反复读内存块2多次(测试中是5次),则内存块2中的大部分都会在缓存中(如果是LRU类的替换策略,内存块2应该全部在缓存中);(2)向内存块2写,每个缓存块只写一次。则步骤(2)的写操作基本上都是WH事件,与前面类似。在后面我们把这种操作叫做“W-H”

    在测试中我们同时还测量了先向内存块1反复写再从内存块2读(R-CH,读-交换:需要把缓存中已经修改的数据写回到内存),和其对称的操作(先向内存块2反复写再从内存块2读:R-H-D,读命中修改过的数据,D表示Dirty),以及读未命中(R-M:先从内存块1反复读再从内存块2读)和普通读命中(R-H:先从内存块2反复读再从内存块2读)等操作的速度。

    由于上面这些操作和我们的其它测试的操作差异很大,所以我们为这个测试专门准备了测试函数。在这里就没有为循环展开作任何处理了(事实上没有多少必要,而且要实现可控制的循环展开需要很多代码的),下面的测试只是遍历了不同的函数起始偏移来得到最佳性能。

    下面是测试结果,分L1和L2两部分:

WritePolicy_Tb01.gif (21314 bytes)

表中最左面一列是函数的起始地址。不用画曲线,可以明显看出,W-M比W-H慢了不是一点点。而且,R-CH由于要把数据写回到内存,同样比R-H-D慢了很多。而R-M和R-H相比,虽然速度也是慢很多,但程度比前2个要小的多了。这些数据应该是非常有说服力的了。

    在上面的测试数据中还有一个有趣的现象。我们把L1部分的最后2列R-M和R-H的数据画成曲线图如下:

WritePolicy_02.gif (3781 bytes)

我们进行这2个测试的时候有一个特点,就是这2个测试是有同一个函数完成的,只是所用的数据不同(确实的同一个函数,不是同一功能不同循环展开次数的函数)。而这2条曲线最有意思的特点是同时(13)达到极值:一个极大值,一个极小值。而根据前面所说,曲线图中水平坐标表示的是函数的首地址偏移。这非常具有讽刺意义:Intel总是劝说程序员把函数或循环入口对齐到xxxx,可是你是想得到最佳性能还是想得到最差性能(这里测量值越大越好还是越小越好已经没有影响了:2个情况总是反的)!!??:)

    所以,如果以后Intel的工程师再劝你把函数和循环入口对齐到xxxx,你可以向他说:狗屎+sh*t+TMD+nuts!


Leading Cloud Surveillance, Recording and Storage service; IP camera live viewing

Leading Enterprise Cloud IT Service; cloud file server, FTP Hosting, Online Storage, Backup and Sharing

Powered by FirstCloudIT.com, a division of DriveHQ, the leading Cloud IT and Cloud Surveillance Service provider since 2003.