如何在Linux中为不同的交换文件分配不同的分配比例?

如何在Linux中为不同的交换文件分配不同的分配比例?

我需要两个交换文件,一个位于我的 SSD 驱动器上(SSD 交换文件),另一个位于我的 HDD 驱动器上(HDD 交换文件)。由于我的 SSD 上的读/写速度大约是 HDD 的 4 倍,因此我需要系统在 SSD-SWAP 上分配的数据量是 HDD-SWAP 上的 4 倍,以获得最大速度两个交换文件。例如,如果系统需要 5GB 交换空间,我希望它使用 ssd-swap 中的 4GB,以及 hdd-swap 中的 1GB。但正如我的实验所示,两个交换文件的写入日期量是相同的(示例中提到的每个交换文件为 2.5GB)。

我知道一种解决方案是在 SSD 上创建 4 个交换文件,在 HDD 驱动器上创建 1 个交换文件(以便系统将 1GB 数据写入上例中的每个交换文件,从而导致 4GB 写入 SSD,而 1GB 写入 HDD )。但我更喜欢只使用两个交换文件,只是因为我更喜欢填充较少的文件系统。

Linux交换文件配置中有什么方法可以实现这样的结果吗?

答案1

首先,值得指出的是,有些人会试图声称更换为 SSD 是一个坏主意。过去,SSD 的写入受到严重限制时就会出现这种情况,但现在情况并非如此(大多数 SSD 的写入耐久性额定值为其容量的一千倍以上,而交换文件通常只占容量的一小部分) ),如果您不定期交换并且您不应该在任何现代系统上定期交换,则情况更糟)。举一个具体的例子,如今典型的 250GB SSD 的额定写入量远远超过 100TB。通过正确配置的系统上的默认交换行为和典型桌面或服务器使用情况,您一天内的平均交换使用量将达到几 MB,这意味着不到设备额定值的 1/100000。此外,大多数问题可以通过在交换区域的条目discard中指定选项(或添加到命令中)来缓解。/etc/fstab-dswapon

其次,从技术上来说,通过像这样的交错交换设备来提高感知性能是不可能的(根据您对此答案的回复,这似乎是您想要做的)。这是最容易用一个类比来说明的:假设你有两个人为你储存东西,一个可以很快地储存很多东西,也很快地把它们还给你,而另一个人只能储存一些东西,并且速度要慢得多。如果您只需要一次存储一大堆东西,并且只需要一次将其全部取回,则最佳方法是为每个东西分配成比例数量的物品,以便它们花费相同的时间存储他们所得到的东西。但是,如果您需要存储和检索单个项目,则此策略会失效,因为有时您最终会在速度慢的人身上浪费时间。在这种情况下,最佳方法是为速度快的人提供您需要经常存储和检索的东西,而为速度慢的人提供您不经常需要的东西。

交换到磁盘就像第二种情况,增加了两个约束,你不知道什么是你会经常需要的,什么是你不会的(你可以从实际的系统使用情况中得到一些想法,但这样做是非常困难的,并且结果,没有任何作用),并且您不知道需要存储多少。在这种情况下,只要有空间,就将所有东西都存放在速度快的人那里,而将多余的东西存放在速度慢的人那里,这是最有效的。

鉴于此,在几乎所有情况下,最好优先交换到 SSD,而不是硬盘驱动器。值得庆幸的是,使用 Linux 实现这一点实际上非常容易。交换空间(文件和分区)可以具有相当任意的优先级,这些优先级决定了首选的使用顺序。这些是-p使用选项swaponprio=中的选项设置的/etc/fstab。默认情况下,所有内容的优先级均为 -1,这意味着它们按照启用的顺序使用。通过设置高于负值的优先级,您可以控制事物的使用顺序。优先级较高的交换区域(最大 32767)将在优先级较低的交换区域之前使用,而优先级相同的区域将在优先级较低的区域中使用。循环方式(有点像 RAID0 设置,但具有更大的块粒度,并且没有并行化)。

假设您仍然确定要将一些数据放在较慢的设备上,即使较快的设备上有空间,您也可以通过将所有区域设置为高于 -1 的相同优先级来实现这一点,但不幸的是,您将需要多个文件来执行此操作(理论上,您可以通过循环设备或设备映射器目标获得真正的创意,但这确实比它的价值更麻烦)。

有点偏离主题,但请确保您的交换文件由 root 用户和组拥有,并且只能由 root 读取和写入,否则任意用户可能会轻易地使您的系统崩溃(或访问他们不应该访问的数据) 。

相关内容