我正在尝试在linux上的2个压缩库之间进行性能比较。 它们都接受文件,进行压缩然后写入输出文件。
由于我只对压缩感兴趣,我想在比较中删除文件i / o开销。
我可以这样做吗
cat <source file> > my_compression_program /dev/null?
我只是在start和and中的比较程序中添加时间戳。由于cat会将文件读入内存,因此我没有IO开销。
我的理解是否正确?
谢谢。
答案 0 :(得分:1)
都能跟得上!
发出任何内容之前, cat
不会将整个文件内容缓冲在内存中。相反,它以内部缓冲区大小确定的块的形式读取和写入内容。
如果您希望从性能基准测试中删除I / O磁盘开销,我建议您在启动之前有足够的ram然后cat
文件到/dev/null
基准:
cat source_file > /dev/null; my_compression_program < source_file > /dev/null
这将导致在程序运行之前首先将文件插入到内核的文件系统缓存中。然后它将从内存中流出。
答案 1 :(得分:0)
如果你的lib确实需要文件句柄,你可以使用tmpfs(在像操作系统一样的* nix上)。如果没有,你的测试程序应该只是初始化一些内存,可能是通过读取文件,并压缩它。在这两种情况下,您都应该考虑关闭交换测试。
答案 2 :(得分:0)
如果您没有足够的内存将文件保存在内存中,则必须执行I / O.
如果你确实有足够的内存,那么只需运行两次基准测试,linux会将文件保留在页面缓存中,参见