我的java程序通过阅读一些文件花费大部分时间,我想优化它,例如,通过使用并发性,预取, 内存映射文件 ,或什么的。
没有标杆优化是非感,所以我的标杆。 然而,基准在整个文件内容被缓存在内存中,与实际运行。 因此,基准的运行时间要小得多,最有可能无关的现实。
我需要以某种方式告诉操作系统(Linux)的不缓存文件内容,或者更好的每个基准运行前全歼缓存。 或者,也许消耗大部分的可用RAM(32 GB)的,因此,只有文件内容的一小部分结合使用。怎么办呢?
我用卡尺为标杆,但在这种情况下,我不认为它需要(这绝不是一个微基准),我不知道这是一个好主意。
清除Linux文件缓存
sync && echo 1 > /proc/sys/vm/drop_caches
创建使用所有的RAM一个大文件
dd if=/dev/zero of=dummyfile bs=1024 count=LARGE_NUMBER
(不要忘记删除dummyfile
完成时)。
您可以创建一个非常大的文件,然后将其删除。 这将清除磁盘高速缓存。
测试性能的另一种方法是读取文件(S),这是比你的主内存大。
无论哪种方式,你正在测试的是你硬件的性能。 为了改善这一点,你需要提高你的硬件,就只有这么多,你可以在软件中做。 例如,多个线程不会让你的磁盘转得更快。 ;)
Windows NT的http://research.microsoft.com/pubs/68479/seqio.doc
当进行顺序扫描,NT使得64KB预取请求
从Linux的http://www.ece.eng.wayne.edu/~sjiang/Tsinghua-2010/linux-readahead.pdf
顺序预取,也被称为预读在Linux中,是一种广泛部署的技术来弥补存储设备的特性和应用它们的使用效率低下的方式之间的巨大差距