基本情况:
我在openSUSE上复制一些NTFS磁盘。每个磁盘大小为2TB。当我这样做时,系统运行缓慢。
我的猜测:
我认为这很可能是由于缓存。Linux决定丢弃有用的缓存(例如KDE 4膨胀、虚拟机磁盘、LibreOffice二进制文件、Thunderbird二进制文件等),并填充所有可用内存(总共24GB)以来自复制磁盘的内容,这些内容只会被读取一次,然后被写入并且永远不会再次使用。因此,每当我使用这些应用程序(或KDE 4)时,需要重新读取磁盘,重新从磁盘中读取膨胀的内容会导致系统卡顿。
由于缓存已经消失,而这些膨胀的应用程序需要大量的缓存,所以这使得系统非常缓慢。
由于它是USB接口,因此磁盘和磁盘控制器不是瓶颈,因此使用ionice并不能使它更快。我认为这是缓存问题,而不仅仅是主板速度过慢,因为如果我停止所有复制,它仍然会在一段时间内运行得很卡,直到重新缓存所有内容。
如果我重新开始复制,需要大约一分钟才会再次卡顿。但也可以将其限制在约40 MB/s左右,然后它会再次运行得更快(不是因为有正确的缓存内容,而是因为主板总线对系统磁盘具有很多额外的带宽)。我完全可以接受来自我的主板I/O能力完全被消耗的性能损失(即已使用100%,这意味着没有浪费的电力,这让我感到高兴),但我无法接受这种缓存机制在这种特定用例中表现如此糟糕。
# free
total used free shared buffers cached
Mem: 24731556 24531876 199680 0 8834056 12998916
-/+ buffers/cache: 2698904 22032652
Swap: 4194300 24764 4169536
我也在Ubuntu上尝试了同样的操作,结果导致整个系统挂起。 ;)
为了澄清,我不是在问如何为“系统”留出可用内存,而是为“缓存”留出。我知道缓存内存会在需要时自动归还给系统,但我的问题是它没有被保留用于特定内容的缓存。
有没有办法告诉这些复制操作限制内存使用,以便一些重要内容仍然可以被缓存,因此任何减速都是由于正常磁盘使用而不是重新读取相同经常使用的文件造成的?例如,是否有一个最大内存使用量的设置,每个进程/用户/文件系统允许用作高速缓存/缓冲区?
free
总量 已用 空闲 共享 缓存区 缓存 内存: 24731556 24474096 257460 0 16478072 6342668 -/+ 缓存区: 1653356 23078200 交换空间: 4194300 22564 4171736
缓存区似乎存在内存泄漏问题。 - Peter