基本情况:
我在openSUSE中复制一些 NTFS 磁盘。每个是 2 TB。当我这样做时,系统运行缓慢。
我的猜测:
我相信这可能是由于缓存。Linux 决定丢弃有用的缓存(例如,KDE 4膨胀、虚拟机磁盘、LibreOffice二进制文件、Thunderbird 二进制文件等),而是用复制磁盘中的内容填充所有可用内存(总共 24 GB),这些内容将是只读的一次,然后写下来,再也没有使用过。因此,每当我使用这些应用程序(或 KDE 4)时,都需要再次读取磁盘,并且再次从磁盘读取膨胀会使事情冻结/打嗝。
由于缓存消失了,而且这些臃肿的应用程序需要大量缓存,这使得系统非常缓慢。
既然是USB,磁盘和磁盘控制器不是瓶颈,所以使用ionice并不能让它更快。
我相信这是缓存,而不仅仅是主板速度太慢,因为如果我停止复制所有内容,它仍然会运行一段时间不稳定,直到重新缓存所有内容。
如果我重新开始复制,它需要一分钟才能再次波涛汹涌。而且,我可以将它限制在 40 MB/s 左右,它再次运行得更快(不是因为它缓存了正确的东西,而是因为主板总线为系统磁盘提供了很多额外的带宽)。我可以完全接受主板的 I/O 能力被完全消耗(这是 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 上尝试过同样的事情,这会导致整个系统挂起。;)
澄清一下,我不是在问如何为“系统”腾出内存,而是为“缓存”腾出内存。我知道缓存内存会在需要时自动返回给系统,但我的问题是它不是为缓存特定事物而保留的。
有没有办法告诉这些复制操作来限制内存使用,所以一些重要的东西仍然被缓存,因此任何减速都是正常磁盘使用的结果,而不是重新读取相同的常用文件?例如,是否有允许将每个进程/用户/文件系统用作缓存/缓冲区的最大内存设置?