Vea*_*zer 20 kernel cache memory-usage
添加preload包后,我的应用程序似乎加快了速度,但如果我复制一个大文件,文件缓存会增长两倍以上的文件大小。
通过将单个 3-4 GB 的虚拟机图像或视频文件传输到外部驱动器,这个巨大的缓存似乎从内存中删除了所有预加载的应用程序,导致加载时间增加和总体性能下降。
有没有办法复制大的、多千兆字节的文件而不缓存它们(即绕过文件缓存)?或者一种将特定文件夹列入白名单或黑名单以防止缓存的方法?
小智 24
有一个nocache实用程序,它可以添加到像ioniceand 之类的命令之前nice。它通过预加载它增加了一个图书馆posix_fadvise与POSIX_FADV_DONTNEED标志所有打开的呼叫。
简单来说,它告诉内核该特定文件不需要缓存;内核通常不会缓存文件。有关技术细节,请参见此处。
它对任何大型复制作业都有奇效,例如,如果您想在后台备份一个多 TB 的磁盘,同时对您正在运行的系统的影响最小,您可以做一些事情nice -n19 ionice -c3 nocache cp -a /vol /vol2。
Ubuntu 13.10 及更高版本将提供一个软件包。如果您使用的是以前的版本,您可以安装13.10 软件包或选择François Marier 的12.04 backport。
ish*_*ish 12
dd带有直接I / O,以绕过文件缓存:如果您想传输一个(或几个)多 GB 的大文件,使用以下方法很容易dd:
dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=direct
Run Code Online (Sandbox Code Playgroud)
direct标志告诉在读写时dd使用内核的直接 I/O 选项 ( O_DIRECT),从而完全绕过文件缓存。bs块大小选项必须设置为一个相当大的值,因为,以尽量减少物理磁盘操作的数量dd必须执行,因为读/写操作都不再缓存,并可能导致严重的经济放缓太多的小的直接操作。
4M)。不幸的是,对于多/递归目录副本,没有容易使用的工具;通常的cp等不支持直接 I/O。
/e iflags & oflags 更改为正确的 iflag & oflag
| 归档时间: |
|
| 查看次数: |
19556 次 |
| 最近记录: |