64 GB RAM 计算机上的交换分区大小适用于内存密集型工作

64 GB RAM 计算机上的交换分区大小适用于内存密集型工作

我有 64 GB RAM 和 240 GB固态硬盘在我的计算机上,我将使用它来进行内存密集型计算(机器学习、数据挖掘等)。我在互联网上找到的大多数建议都是关于 2-4-8 GB RAM 的计算机,他们建议将 RAM 交换分区的大小增加 2 倍(即 128 GB)。

创建一个 128 GB 的交换分区是否合理?创建一个巨大的交换分区有什么好处?

我是否正确理解,如果我用完了物理 RAM:

  1. 如果我没有交换,我会收到“内存不足”错误
  2. 如果我确实有交换,那么一些 RAM 页面将被复制到交换分区,并且程序将继续运行(尽管速度较慢)。

有些人说在 SSD 上创建交换区是个坏主意,因为它的读写次数有限。使用交换区会多快耗尽 SSD 的读写次数(据我所知,大约是 50000 次写入 IOPS)?

我正在使用 Linux(Ubuntu 14.04(可信赖的塔尔羊))。

现在要设置 16 GB 的交换,因为它肯定足够(例如,RedHat 建议 4 GB),并且 16 GB 的磁盘空间实际上不是什么大问题。

答案1

您可能只需要少量交换空间。当您的计算机具有足够的 RAM 来满足典型工作集需求时(我非常确定您拥有足够的 RAM),您只需要交换空间来做以下两件事:

  1. 您需要交换空间来获取可能永远不会被访问的信息,使其脱离 RAM,从而为磁盘缓存释放更多空间。许多应用程序在系统启动时运行,并且永远不会被再次访问。您不希望它们弄脏的任何页面永远滞留在 RAM 中。因此您需要交换空间来保存它们。

  2. 您需要交换空间来覆盖永远不会被填满的分配空间。这个空间必须可用,即使它不会被使用。如果没有它,系统将不得不拒绝分配内存,即使它有足够的可用物理 RAM,因为它没有足够的后备存储来允许其所有分配空间被同时使用。

这两种方式都不需要大量的交换空间。例如,16GB 就足够了。这样做的目的不是让您以牺牲速度为代价来运行更大的工作集。这样做的目的是让您有效地使用 64GB,而不必用垃圾来堵塞它,也不必将它保留用于永远不会发生的边缘情况。

(我同意 Bert 的观点,4GB 很可能就足够了。)

答案2

红帽建议在具有 64 GB 的计算机上使用 4 GB

但是,确定交换大小更像是一门艺术,而不是一门科学。这取决于机器的用途、磁盘空间和内存大小以及其他因素。请记住,您以后可以随时添加更多交换。

使用 2X 物理内存规则已经过时了,因为如今系统的内存量很大。但是,除非您知道自己在做什么,否则不建议使用零交换运行。建议 4 GB 是一个不错的起点。

答案3

在 Linux 上,您需要足够的交换,以便可用的总虚拟内存(RAM + SWAP)足以满足您想要同时运行的所有进程及其最大虚拟占用空间。

如果您的交换空间小于此值,或者根本没有交换空间,则会发生以下情况:系统在尝试分配页面时耗尽内存。但是,即使没有交换空间,这仍然是软故障,因为系统有大量的“受害”页面可以删除以腾出空间:即所有文件支持的内存映射的页面,例如可执行文件和共享库!

随着您的系统对数据空间的需求越来越大(无法换出),它将越来越多地撤离可执行代码(共享库和可执行文件),导致严重的抖动,因为工作集被修剪成越来越紧密的页面集。

交换空间通过提供匿名(非文件映射)页面的换出位置来缓解此问题:用于内存分配的页面,以便可执行代码可以留在内存中。

即使如此,如果您不经常运行内存密集型任务,您可能大多数时候都可以运行无交换文件,并在需要时手动配置交换文件(而不是专用分区)。要动态创建交换文件,请成为 root 并:

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

当你不再需要它时:

swapoff /path/to/swapfile
rm /path/to/swapfile

笔记:

  1. 您绝对不需要配置至少与 RAM 一样多的交换空间。这条经验法则可以追溯到操作系统,当时由于交换空间的设计方式,这是一项硬性要求。

  2. 有一些方法可以让 Linux 在缺乏可用内存时严重失败,即通过操纵这些 sysctl 条目的值:

    vm.overcommit_memory
    vm.overcommit_ratio
    

答案4

您想要应用于机器的工作负载需要一定数量的内存才能运行(记得在等式中添加足够的内存来处理峰值负载),并且您需要将计算机配置为至少具有该数量的内存。

现代操作系统提供虚拟内存作为物理内存和交换空间的组合,因此如果你需要比机器可用内存更多的内存,那么必须添加足够的交换空间来填补空白。例如,如果您最多需要 80 GB,而机器有 64 GB,则需要 16 GB 交换空间。

通常,操作系统安装程序会要求您创建一个初始交换区域(因为这是最简单的,甚至可以在微型计算机上安装),并且已经发现,典型的 Unix 操作的一个好的经验法则是将虚拟内存的大小设置为物理内存的三倍,因此通常建议这样做。但是,您更了解使用模式,因此您可以根据需要更改它。

如果您的内存压力始终较小,那么不使用交换空间也没什么问题。Linux 将透明地使用任何未使用的内存作为磁盘缓存。

相关内容