我一直注意到,如果我将文件复制到某个存储设备(系统的 HDD、SSD 或拇指驱动器),则会将少量数据(20 - 30 MB)写入交换空间 - 并且数量会增加。是的,即使系统也有可用的 RAM。
写入交换空间会使设备变得非常慢。颠簸是明显的例子。
如果我在复制之前关闭交换,文件就会被复制得很好!
这是一个屏幕截图:
我正在将一个大文件复制到 /dev/sda2。我有可用的 RAM,但总是将一些数据写入交换。这种行为在我拥有的所有设备以及我有时间玩的设备上都是相同的。
我尝试使用此命令命令更改 swappiness:
sysctl vm.swappiness=n # n for a value from 0..100
尝试将swappiness变为0,并尝试将swappiness变为100。行为没有改变。任何系统监视器都说我有大量可用 RAM。它仍然将数据写入交换。
通常,该行为取决于应用程序,复制应用程序是否向内核提供了有关它将如何读取将要复制的文件的正确指示。
在您的情况下,我看到您的文件仅比您的整体内存略大,因此可能是您的 GUI 的文件管理器要求
mmap
对文件进行完整的通用,而不是分块复制它。尝试
cp
从终端窗口复制它。该cp
命令认真地向内核提供指示,并将文件复制到它检测到最适合系统的任何块中。您可能仍会看到缓存填充内存,但不应触发交换,即使由于内存压力激增而不仅仅是一堆字节。可能发生的事情是 ram 被用于磁盘缓存。磁盘缓存未显示在您显示的监视器上。然后内核可能决定交换非活动内存,而不是丢弃缓存。
如果存在性能问题(不仅仅是潜在问题),那么有一些方法可以告诉系统在不写入磁盘缓存的情况下执行某些操作(例如复制文件)。这不会减慢写入速度,但会减慢任何将来读取文件的速度(即,如果您复制文件,然后读取它)。