TLB项数和相关路数、层数的测试

    TLB在CPU中隐藏得很深,在一般的程序中都不会有什么明显的反映。但是我们这里的程序显然不是“一般”的程序,所以有办法让TLB的影响表现出来。

    测试TLB的最大障碍是缓存。我们知道数据在不同的缓存中时访问的速度差别巨大,要反映TLB的影响,就要在测试时把所有数据放在同一个缓存(应该说是L1数据缓存)中。这看起来似乎不可能:Intel在PIII系列CPU中做64项数据TLB,而每页是4KB,则数据大小64×4=256KB。即使Athlon系列的L1数据缓存也只有64KB。但仔细推敲,其实不完全是这样:虽然每页4KB,缓存却是以块来组织的,PIII的块大小为32,则L1共有块16K÷32=512个,对其64项的TLB是应该足够了。所以,TLB的测试关键是从每个页中取且仅取出一块来放到缓存中,在测试循环中反复访问这些块就可以反映出性能差异。

    这里要指出的是并不是把每页的第一块取出来就可以了的。根据缓存工作原理,这样取出来的块很可能导致冲突,从而使缓存的某些集空闲,而某些集冲突。一旦发生缓存冲突,缓存不命中的影响将完全掩盖TLB的影响。所以,这里的跳跃步长不是一个常数。下面首先解决跳跃方式的问题。

    根据缓存工作原理,一般来说,页的边界总是对齐到缓存块边界的,而且每页总是可以分解成整数块。这样,我们可以有简单的跳跃策略:先访问第一页的第一快,再访问第二页的第二块......这样的跳跃策略比较简单,跳跃步长还是常数(页大小+块大小)。不过跳啊跳啊的就跳出问题了:当访问到某页的最后一块时,如再往下跳(页大小+块大小),则中间正好有一页被跳过,没有访问。所以,此时又要回到这一页的第一块访问(此时步长为块大小)。所以跳跃步长还是一个变量。

    由于跳跃步长是变量,为减少循环附加开销,我们在循环体内把所有这些访问内存的指令都列出来(也就是说:有多少页,就有多少条指令)。由于这里的跳跃间隔不可能控制在256字节以内,我们采用有32位偏移的间接寻址方式:

        mov eax, [esi+12345678h]

其中的偏移量要在连接时修改。循环核心语句就是一系列这样的指令组成的指令序列。另外,因为这里的循环初始化、循环结束、循环展开以及连接控制等都与其它测试不同,所以专门为这个测试准备了这些。具体情况,请参考源代码。

    应该说上面的测试原理还是比较简单的。下面就看一下具体的测试数据:

TLB_Tb01.gif (15323 bytes)

表中第一行是循环展开因子,第一列是所用的内存页数(TLB入口数),测试值是每次内存访问的平均时间。这里要指出,虽然PIII有512块的L1,但是除了我们的测试数据外,好象页表也要占据一些缓存空间(有一点难以理解:TLB就是页表的缓存,为何还要把页表放到L1??不过实际情况好象就是这样的)。在其它的测试中这并不会有很大的反映,因为TLB未命中的情况很少。在这里,由于我们是故意“制造”TLB未命中事件,必须考虑这个问题。所以我们预留1/4的L1空间不用,为页表让出空间。

    首先看第一部分测试数据。由于循环展开的影响很小,不失一般性,我们取循环展开因子为0的数据画成曲线图如下:

TLB_01.gif (2835 bytes)

小学生都可以看出其中的规律:系统至少有一级数据TLB,入口数在64~128之间。这里不能确定入口数的原因是Athlon的TLB入口数不是2的指数,所以下面还要补充测试。另外,上面的测试由于只进行到384页的数据集大小,所以对超过256项的二级数据TLB(一级不会有这么大吧??二级有达到256的:Athlon)无能为力,所以前面说“至少”。不过,好象还没有哪个公司做超过256项的二级数据TLB。

    由于上面没有检测到二级数据TLB,下面的测试仅对一级数据TLB进行测试。数据的规律性都很强,就不再画曲线图了。第二个测试是确认一级数据TLB的项数,第三个测试是确定一级数据TLB的相关路数(原理与缓存的相关路数测试类似)。

    由于物理内存不连续的影响,在Athlon上不一定能够正确测试出结果。在PIII/P4上,根据缓存原理和其缓存/TLB参数,可以知道测试不受物理内存不连续的影响。具体情况,由于我没有Athlon,就不得而知了。


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.