我不确定究竟是什么类别。
我尝试在系统Centos 5.5上使用7.7GB的文件执行以下操作
time cp original copy
和
time cp copy copy2
副本的副本大约是原件副本的一半。
我想也许操作系统正在缓存或者其他东西,所以我去了另一个目录并复制了一些小文件和东西,然后又回去制作副本的副本,它仍然更快。
这里有什么想法吗?操作系统是否缓存了文件?
是什么让我注意到这个问题是我有一些处理这个文件的代码。我想在两个文件上测试它,所以我只是制作了一个副本。然后我注意到原始文件的处理时间最长。我可以对此运行什么样的诊断?
答案 0 :(得分:1)
操作系统不会缓存文件,因为它会缓存它读取的磁盘块。
在运行计时测试时,有几种方法可以尝试缓存缓存。您可以尝试通过分配大量内存来刷新操作系统磁盘缓冲区(我通常运行perl -e '"\0"x1024x1024x1024'
来执行此操作); free
之前和之后应该让您了解操作系统缓存了多少数据(在buffers
和cached
列下)。
或者当您计时时,忽略系统时间 - 主要是I / O - 并且只是观察用户时间。当然,不同的运行可能会很好地处理不同数量的数据,因此您可能会有不同的I / O数量。
最可靠的方法是多次运行测试并使用最快的时间作为比较值。
答案 1 :(得分:0)
sync && echo 3 > /proc/sys/vm/drop_caches
time cp original copy
sync && echo 3 > /proc/sys/vm/drop_caches
time cp copy copy2