测试准备:内存分配

    我们要测试内存子系统的性能,自然要进行内存分配。在实际测试中我们是用的VirtualAlloc函数进行内存分配的。用这个函数分配的内存可以保证对齐到页边界。不过这里有一个很难解决的问题就是虚拟内存。我们的内存分配函数都是在虚拟内存的线性地址空间上工作的,其分配的内存是线性地址连续的,经过页表的转换,有可能变成不连续的物理地址。而缓存(L1、L2)是工作在物理地址空间的。根据缓存的工作原理,不连续的物理内存访问,特别是象这种以页为单位对齐的不连续物理内存访问,必将会影响缓存的速度,从而导致测量出错误的性能指标。理论上,驱动程序是可以分配连续的物理内存的(不然DMA就要出问题了)。但是写一个驱动程序是很麻烦的,而且与系统的关系密切,必须为不同的系统写不同的驱动程序。在找不到简单的解决方案的情况下,我们只能暂时忽略这个问题。后面的分析也不考虑这个问题(实际上,在数据集比较大的情况下,这个问题还是有一定影响的)。

    我们在忽略虚拟地址和线性地址的差异的情况下进行测试,发现当系统加载的程序较少、空闲内存较多的情况下,各种测试都还能够真实反映出实际情况,各种测试数据基本上符合理论预期。所以,这里的鸵鸟政策也还问题不大。不过我们还是采取了一些措施,就是在测试开始的时候列出系统中所有的进程和其大小,如果发现某个进程“太大”,将给出警告。目前这个功能只在NT系统上实现。在9x系统上没有简单的方法可以知道一个进程的大小,即使列出所有进程也意义不大。下面是一个进程列表的例子:

PreBench_Mem_01.gif (10293 bytes)

如果有谁知道简单的分配连续物理内存的方法,请告诉我!


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.