在添加preload包之后,我的应用程序似乎会加快速度,但是如果我复制一个大文件,那么文件缓存就会增长一倍以上。
通过将单个3-4 GB的virtualbox图像或视频文件传输到外部驱动器,这个巨大的缓存似乎会从内存中删除所有预加载的应用程序,从而导致加载时间的增加和一般性能的下降。
有没有一种方法可以复制大的、多千兆字节的文件而不缓存它们(即绕过文件缓存)?还是从缓存中用白名单或黑名单列出特定文件夹的方法?
发布于 2012-07-03 08:55:52
有一个nocache实用程序,它可以添加到命令(如ionice和nice )中。它的工作方式是预装一个库,它将带有posix_fadvise标志的POSIX_FADV_DONTNEED添加到任何打开的调用中。
简单地说,它建议内核不需要对特定文件进行缓存;然后内核通常不会缓存该文件。有关技术细节,请参见这里。
它对于任何大型复制作业都会产生奇迹,例如,如果您想在后台备份一个对运行系统的影响最小的数百兆字节磁盘,您可以沿着nice -n19 ionice -c3 nocache cp -a /vol /vol2执行一些操作。
Ubuntu 13.10及以上版本将提供一个软件包。如果您是在上一个版本中,您可以安装13.10包,也可以选择使用Fran ois Marier的这个12.04的后台。
发布于 2012-06-26 00:45:56
dd和直接I/O绕过文件缓存:如果您想要传输一个(或几个)大的多千兆字节文件,那么使用dd很容易:
dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=directdirect标志告诉dd在读写时使用内核的直接I/O选项(O_DIRECT),从而完全绕过文件缓存。bs块大小选项必须设置为相当大的值,因为为了最小化dd必须执行的物理磁盘操作的数量,因为读/写不再缓存,过多的小的直接操作可能导致严重的减速。4M)。不幸的是,对于多个/递归目录副本,没有容易获得的工具;通常的cp等不支持直接I/O。
/e标志和标志更改为正确的时差和标志
https://askubuntu.com/questions/122857
复制相似问题