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