基本情况:
我在复制一些openSUSE的NTFS磁盘。 每一个2TB。 当我这样做,系统运行缓慢。
我的猜测:
我相信这可能是由于高速缓存。 Linux的决定丢弃有用的高速缓存(如KDE4膨胀,虚拟机磁盘,LibreOffice的二进制代码,二进制文件雷鸟等),而不是从复制的磁盘,这将是一次阅读的东西填满所有可用的内存(24 GB的总数)然后写入永不再使用。 于是我使用这些应用程序(或KDE4)任何时候,磁盘需要重新阅读,阅读膨胀关闭磁盘再次使事情冻结/打嗝。
由于正在消失缓存,事实上,这些臃肿的应用程序需要大量的缓存,这使得系统异常缓慢。
既然是USB接口,磁盘和磁盘控制器是不是瓶颈,因此使用ionice不使其更快。
我相信这是高速缓存,而不是仅仅在主板去太慢,因为如果我停止一切复制,它仍然运行震荡一段时间,直到它recaches一切。 如果我重新启动复制,它需要一分钟之前,它是波涛汹涌的一次。 而且,我可以把它限制在大约40 MB /秒,并再次将其运行速度更快(不是因为它具有高速缓存正确的事情,但因为主板总线有很多额外的带宽为系统盘)。 我完全可以接受我的主板的IO能力的性能损失被完全消耗(这是使用了100%,这意味着0%电力浪费这让我开心的),但我不能接受这个缓存机制在这个特定的使用进行如此可怕案件。
# free
total used free shared buffers cached
Mem: 24731556 24531876 199680 0 8834056 12998916
-/+ buffers/cache: 2698904 22032652
Swap: 4194300 24764 4169536
我也试过在Ubuntu同样的事情,这会导致整个系统挂起代替。 ;)
并澄清,我不是问怎么离开可用内存的“系统”,但对于“缓存”。 我知道,高速缓存会自动返还给系统需要的时候,但我的问题是,它是不是保留给具体的事情缓存。
题:
是否有某种方式来告诉这些复制操作,以限制使用内存使一些重要的事情保持高速缓存,因此任何放缓是正常的磁盘使用情况的结果,而不是重读同一常用的文件? 例如,有每个进程/用户/文件系统最大存储器的允许被用作高速缓冲存储器/缓冲器设置?
在非缓存的命令是最普遍的回答这个问题! 见https://github.com/Feh/nocache或发现它在Debian和Ubuntu 13.10(无礼)。
谢谢你,彼得,提醒我们的--drop缓存”选项中的rsync但那是上游拒绝( 错误9560 -降-cache选项 ),赞成这一更广泛的解决方案:新的‘非缓存’命令基于与fadvise rsync的工作。
你只是在前面加上“非缓存”,以任何你想要的命令。 它也有描述和修改文件的缓存状态不错的工具。 例如,这里有有和没有非缓存的影响:
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%) [filesize=7776.2K, pagesize=4K]
$ ./nocache cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 154/1945 (7.9%) [filesize=7776.2K, pagesize=4K]\
$ cp ~/file.mp3 /tmp
$ ./cachestats ~/file.mp3
pages in cache: 1945/1945 (100.0%) [filesize=7776.2K, pagesize=4K]
因此,希望这将对于你不想诋毁你的缓存中的其他备份程序(rsnapshot,口是心非,rdiff进行备份,阿曼达,s3sync,s3ql,焦油等)和其他命令的工作。
克里斯托夫教务长是非常接近,但在我的情况,我不想用dd或写我自己的软件,因此该解决方案是使用的rsync中的“--drop缓存”选项。
因为创建了这个问题我已经使用过很多次,它似乎彻底解决这一问题。 当我使用rsync从FreeBSD机器,不支持“--drop缓存”复制一个例外了。 所以我写了一个包装,以取代在/ usr / local / bin目录/ rsync命令,并删除选项,而现在它的作品从那里过复制。
它仍然采用了缓冲区的内存量巨大,而且似乎保持几乎没有缓存,但无论如何顺利工作。
$ free
total used free shared buffers cached
Mem: 24731544 24531576 199968 0 15349680 850624
-/+ buffers/cache: 8331272 16400272
Swap: 4194300 602648 3591652
这是不可能的,如果你使用普通的旧cp
,但如果你愿意重新实现或修补它自己设定posix_fadvise(fd, 0, 0, POSIX_FADV_NOREUSE)
在输入和输出文件可能会有所帮助。
posix_fadvise()
讲述你的预期访问模式的内核。 在这种情况下,你只所以没有点在其高速缓存使用数据一次。 Linux内核表彰这些标志,所以不应该被任何更多的缓存中的数据。
尝试使用dd
,而不是cp
。
或者mount
与文件系统sync
标志。
我不能完全肯定,如果这些方法绕过交换,但它可能是值得给予一试。
只是我2C。
内核可以不知道,你不会抄袭agains使用缓存的数据。 这是你的信息优势。
但是你可以设置swapiness以0:须藤的sysctl vm.swappiness = 0。 这将导致库等被写入到交换之前的Linux下降缓存。
作品对我来说也不错,特别是在休RAM(16-32 GB)的组合非常高性能的。
我复制了一些NTFS磁盘[...]系统运行缓慢。 [...]既然是USB [...]
经济放缓是一个已知的内存管理的问题 。
使用较新的Linux内核。 大一点的孩子有USB数据和“透明大内存页”的问题。 看到这个LWN文章 。 就在最近这个问题解决了,请参阅“内存管理” LinuxChanges 。
好了,现在我知道你用rsync
,我可以挖掘更多一些:
看来, 在同一时间与吨文件的使用时,Rsync是无效的,有一个条目中的他们的常见问题 ,它不是一个Linux /缓存问题,这是一个rsync的问题,吃太多RAM。
谷歌搜索周围有人建议将拆分倍数同步rsync
调用
希望能帮助到你。
文章来源: How can I limit the cache used by copying so there is still memory available for other cache?