我有两个大型交换文件,每个大小约为 500 GB,并且一个程序使用了总共 1 TB 交换空间中的大约 900 GB。这个占用大量内存的程序需要几天时间才能完成。但是,我刚刚意识到交换文件优先级不正确。swapon
说:
NAME TYPE SIZE USED PRIO
/dev/sda partition 465,8G 465,8G -1
/home/alex/swapfile file 502,9G 384,5G -2
/home/alex/swapfile
M.2 磁盘的速度为 3.5 GB/s,而/dev/sda
SATA 磁盘的速度仅为 540 MB/s。所以,我想要/home/alex/swapfile
拥有优先权-1
并且/dev/sda
拥有优先权-2
,但我真的不想中断长时间运行的进程。有没有办法在不先禁用交换文件的情况下更改交换文件优先级swapoff
?
答案1
我认为没有办法用现有的交换文件来做到这一点——但是,您可以在快速磁盘上创建另一个具有更高优先级 0 或 1 的交换文件(假设 /home/alex 上有空间)仍然)。
创建它与dd if=/dev/zero of=swapfile2 bs=1M count=$SIZE_IN_MEGS
. (顺便说一句,你的 500 gig 交换文件很大。)
然后,您可以交换第一个 /home/alex/swapfile,但是没有意义,因为它与新的 /home/alex/swapfile2 位于同一磁盘上 - 它只会用于换入(而不是换出),直到 swapfile2 (和 /dev/sda) 已满。你也可以交换/dev/sda,但是你会遭受速度损失,直到它全部读回——如果你的内存不足,则交换回swapfile2。
如果您继续使用低内存运行,并且可以在某些时候执行此操作,则这可能对您有用,因为在换入和换出所需的时间内不需要性能,然后稍后在 swapfile2 中使用交换的内存返回,从那时起,它将运行得更快。
答案2
无需重新创建交换文件。您可以简单地在/etc/fstab中指定优先级,例如:
/mnt/ssd/swapfile 无交换 sw,pri=5 0 0