在外部 USB 3 硬盘驱动器上创建 Linux 交换

arc*_*bit 7 linux usb virtualbox swap external-hard-drive

我在 Debian 上有一个外部 USB 3 硬盘驱动器 USB 3 端口,我想在该驱动器上创建一个交换分区,该驱动器还包含数据库和其他高容量内容的分区。

我的系统是 Debian 7.7.0,在 TS140 盒 16 GB RAM、2x120 SSD 和 2x750 HDD 上通过 Intel BIOS RAID 1。如果 USB 硬盘驱动器不是一个好主意,我应该在哪里放置一些交换?我一直在使用带有单个 HDD 的 Debian 7.6 的同一个盒子一段时间,而且我使用它的方式从不需要交换,所以我什至不确定我是否需要交换分区。我也希望尽快将 RAM 升级到 32 GB。

由于存储升级,服务器上的负载会增加(更多 VirtualBox 客户端),因此我想在安装期间准备一个或多个永久位置以进行交换。如果我也可以为 Windows vbox 客户端使用相同的位置将交换从 C: 移动到那里,那将是一个很好的解决方案!

到目前为止,我不知道要安装多少个 VirtualBox 客户端,以及需要同时运行多少个客户端。我只知道我至少需要一台 Windows 服务器、一台 Windows 7 工作站和一台 Linux 工作站。

编辑:11/15/2014 16:20

瑞尔

你写的是信息的金矿,非常感谢你抽出时间来!!我什至不会质疑你写的任何东西,到目前为止至少有 99% 的内容对我来说是有意义的——到目前为止我只通读了两次,其中部分内容超过了两次。

我想我正在尝试进行的配置(没有优化问题或到目前为止只是为了使其工作)几乎完美地反映了您的建议。迄今为止..

  • 是的,40-60 美元的顶点 SDD 驱动器在用作 SWAP 时不会为它们如何、何时以及为什么会磨损而烦恼。我虽然这已经被我非常非常非常好地理解了并且从来没有打扰过我,所以谢谢你!我永远不会考虑将我的小盒子的 32GB RAM 限制提高到这些 RAID0 120 GB 商用驱动器可以承受的范围 - 何时,再次 - 当需求出现时。考虑到它永远不会,或者可能会在这里和那里停留几秒钟,SDD 永远不会磨损 - 但是 SDD 上大约 240GB 的额外 SWAP 将在那些罕见的 WHEN 中产生 HUUUUGE 差异!你是 100% 正确的!读完这篇文章后,我的系统设计再也不会像以前一样了。SSD 上的 RAID0 作为 RAM - 您是无价的!你们女士或先生不仅给了我一个解决方案,而且给了我一个前景!

我仍在阅读并试图从您的帖子中获得最大收益,再次 - 谢谢!

我主要是为我的雇主工作,他到今天为止还没有购买并投入使用一些当时最新的产品,并且通过我们的使用证明是地球上最好的技术,但工厂中没有人包括我自己对如何处理这些机器在运行中每(分)秒生成的数据的性质和数量有一点线索。到目前为止,该技术的系统和硬件运行良好并产生膨胀,我们只是无法让他们报告,而且我不知道我应该构建什么来让他们这样做 - 并保持它!我(仍然)对这个项目感到非常困惑。

虽然这里的大多数海报都担心一个数据库中的数百万条记录,但我担心每天每小时由自动光学检测机创建和填充成百上千的数据库,我需要找到一种方法来阅读和保留重要的内容在数据库被删除和检查周期重新开始之前给我的雇主。

是的,我的工程师真的只是一群沮丧的人..再次,真的,感谢您的帮助!桑多

添加:12-03-2014

我的沮丧程度不断上升,直到我最终决定切入正题,专注于必需品。在这里,我希望你们都能受益:如果您买不起一个带有“无限”RAM 的盒子来满足您的需求 - 选择一些便宜的 SSD 来存储 Linux/UNIX 交换和 Windows 页面文件。预算在这些 SSD 出现故障时磨损它们,因此以相同的质量购买它们,并且不要注意您选择的 SSD 的评论,除非您的计划是绝对疯狂。不管你买什么,事实是,SSD 产品总是有一些固有的问题,在这一点上,保持你的理智应该是首要的,是不是?
一旦你沿着这些方向做出了一些艰难的决定,剩下的就很容易了......这最适合实验 - 如果你正在围绕它构建一个真正的生产负载,或者如果你正在考虑将它与高工作负载工作站一起使用 - 你的 ARE 在你的自己的,不要引用我。永远不要考虑将启动 MBR 或 /boot 放在 SSD 或任何 RAID 上。不要将 /home 与 swap 放在同一个 SSD 上 - 哦,天哪!使用它们,磨损它们的 SSD,这样您的钱就物有所值!C: SSD 上的驱动器、/boot 和 /home - 更快的启动是的,但对于任何直接脱离 Twilight Zone 的实验服务器!我有 USB3 HDD 复制器、Linux 引导医生、从 az 覆盖的软件和所有工作,并被信任与“旋转锈”一起工作。我承认他们正在“生锈的信任”,但是……保护您的 C 和 /home。把它们放在旋转铁锈上。不要让新技术愚弄你。请至少考虑再相信一次旋转锈!没什么好说的,祝大家好运!我认为此线程已关闭。- 桑多

JPv*_*iel 5

有很多事情需要考虑,也许要考虑到您的设置和用例进行测试。

建议的 SWAP 分区位置

如果 USB HDD 不是一个好主意,我应该在哪里放置一些交换?

简短的回答,是的,您可以在 USB3 硬盘上创建交换分区,但 2x750GB 硬盘可能是放置交换的最安全的地方。

但是,您也可以将交换分区分布在具有不同优先级的所有磁盘上并确定其优先级,以尝试获得最大性能和交换容量。如果您像我一样喜欢过度优化,我建议您尝试以下操作(需要修改 fstab 等):

  • 在 2x SSD 阵列上分配一点交换分区空间,例如 4GB,具有高优先级(有限的 SSD 空间和对 SSD 生命周期的偏执是其他人不这样做的原因)。
  • 在 2x HDD 阵列上分配更多的交换分区空间,例如 8GB,具有中等优先级。
  • 在 USB3 HDD 上的交换文件中分配更多交换空间,例如低优先级的 16GB。

这样,如果系统 RAM 因大量进程请求 RAM 并被换出而崩溃,则负载会分布在所有磁盘设备上。另请注意,交换优先级基于底层磁盘系统的性能。

接下来我会尝试复习一些详细的推理。

存储速度可能更重要

您可能已经阅读了将交换放置在不太繁忙或专用的驱动器上的建议,但它仅适用于苹果与苹果类型的比较,对于混合不同存储介质(如 SSD)的更复杂系统来说,这不是一个准确的规则与 HDD 和接口 SATA 与 USB3。对于您的情况,指导原则应该是平衡 I/O 负载类型并在您期望具有最佳备用/空闲随机 I/O 吞吐量的存储接口类型和驱动器的位置分配 SWAP。那可能是 SSD,但有一个警告......

用于交换的 USB3 硬盘

您在评论中提到 USB3 选项表现不佳,实际上,原因可能是:

  • 你的 USB3 驱动器可能是一个单磁盘系统,而你的 2x SSD 和 2x HDD 应该有更好的性能,因为:
    • RAID 0 几乎使读取和写入性能翻倍。
    • RAID 1 几乎可以将读取性能提高一倍,并且可以略微降低写入性能。
    • 因此,假设类似的单个驱动器性能,如果 2x HDD SATA 阵列平均有 50% 的时间处于忙碌状态,而 USB3 1x HDD 处于 0% 的忙碌状态,则 USB3 HDD 只会更好。
  • 更重要的是,如果您将交换一个 HDD 与 2 个 SSD 进行比较,那么它的表现也没有任何竞争/机会。在单个休眠 USB HDD 可能开始比较之前,SATA SSD 必须像 95%+ 一样忙碌......
  • USB3 会比 SATA 有更多的延迟。低延迟是内存访问性能和响应能力的关键因素。

用于交换的内部 HDD 阵列

如上所述,用于交换的 2 个 HDD 应该比挂在 USB3 上的 1 个 HDD 更好,并且正如将要解释的那样,作为交换使用应该是安全的。

  • 2x HDD 最适合具有顺序访问模式的大型数据集,例如媒体文件(音乐/视频/图像)。
  • 我不确定英特尔 RAID 设置,但使用 Linux RAID (mdadm) 我知道你有选择,例如:
    • 您可以共享相同的磁盘,但为交换创建 RAID 0,为 VM 映像/数据创建 RAID 1
    • 您可以避免突袭开销并直接在每个单独驱动器的开头配置第一个交换分区,同时配置 mdadm 以在每个驱动器上的第二个分区中创建阵列
  • 与 SSD 相比,HDD 磁性介质应该具有更好的写入寿命(如果它们不遭受其他类型的过早故障......)
  • 如果系统 SWAP 很多,则意味着写入很多。

用于交换的 SSD

2x SSD 120GB 对交换性能非常有用,但 SSD 寿命是一个需要注意的因素。

  • 与旋转磁盘相比,SSD 更像是 RAM,并且具有更好的随机 I/O 支持。
  • 如果大量 VM 和进程正在运行并且您的 RAM 被大量使用,则对交换分区/文件的页面错误(读取)访问模式将以随机结束。
    • 内存页分配单位很小,即4KB
    • 我认为 Linux 内核对“交换”(通过取出页面并将它们放在磁盘上来释放一些内存)很聪明,并且分批执行以优化对磁盘的更连续写入。
    • 对于“交换”(当一个进程需要来自 RAM 的数据时,这些数据并不存在,但实际上在交换/页面错误中),这可能是非常随机的,而这正是 SSD 的优势所在。
    • Windows 7 Engineering MDSN 博客推荐 SSD,因为读取数量比写入数量大约 40 比 1(希望 Linux 原则上类似),从而减轻了对写入 SSD 过多的担忧
  • 即使您的 SSD 用于存储您的主操作系统和一些 VM 映像,也可能有足够的空间用于 SWAP 文件操作。我在 RAID0 中有 2 个 128GB Crucial M4,它们获得了很棒的顺序 IO(几乎 1000MB/s)以及相当不错的随机读/写性能(我测量了接近 5000 IOPS 和 50MB/s 的随机读取和混合大小的令人讨厌的混合主要在 4K 和 16K 块中,但最高可达 256K)。
  • 企业级 SSD,即基于更强大的 SLC 技术,可以处理更多的擦除-写入周期,应该可以进行交换。
  • 基于消费者的 SSD,即基于更便宜的高密度 MLC,如果交换使用量非常频繁,则可能会比预期的寿命更糟(鉴于您所做的预算评论,我假设您拥有基于消费者的 SSD)。但是,至少在正常的桌面工作负载场景中,我听起来好像 SSD 上的交换不是问题。
  • 当 SSD 得到充分利用时,写入性能会下降,写入磨损问题和寿命问题会变得更糟。
  • 您可以通过配置不足为 SSD 垃圾收集留出更多空间来释放连续写入块以获得更好的写入性能和寿命,从而潜在地减轻 SSD 阵列的擦除-写入限制和写入性能问题。
    • 假设您之前将 SSD 用于满容量,ATA 安全擦除操作可能有助于刷新它们,以便磨损均衡算法将整个 SSD 视为未分配。
    • 只需将容量的 80% 至 90% 进行分区,并让 SSD 空间的末端空闲。
  • RAID类型?如果您对 SSD 的可靠性更有信心并且有时间从备份中恢复,我推荐 RAID0。注意 与 RAID0 相比,2 个 SSD 上的 RAID 1 在技术上对写入寿命的影响加倍(因为每次写入都会加倍)。所以也许要避开 RAID1...

其他调整

考虑到支持多个 VM 等问题,您还应该考虑其他一些调整和选项。

Linux 喜欢使用更多 RAM 来缓存 I/O,而虚拟化讨厌磁盘 I/O

潜在的陷阱:

  • 不要将所有 RAM 过度分配给客户操作系统,以便您可以节省一些用于缓存 I/O
  • 找到“交换”的最佳点。交换应该在 RAM 中留出一些空间来缓存磁盘 I/O,但是过多的交换会导致进程过快被换出并损害一般的多任务处理。

现代 CPU 对虚拟化 CPU 和内存资源具有良好的硬件支持,但在共享磁盘存储方面,虚拟化工作负载通常会成为瓶颈。Linux(和 Windows)可以通过在 SSD 或 HDD 磁盘设备仍然忙于“追赶”时使用 RAM 来缓存 I/O 操作来提高 I/O 性能。因此,额外的 RAM 不仅可用于运行多个操作系统,还可用于缓存虚拟机 I/O。

虚拟访客页面文件位置

如果我也可以为 Windows vbox 客户端使用相同的位置将交换从 C: 移动到那里,那将是一个很好的解决方案!

我不确定这一点,但我的预感是:

  • 而是为每个 VM 分配足够/更多的 RAM,让 linux 换出并在页面中形成主机上的虚拟框进程,并在需要时查看使用 VirtualBox内存膨胀控制
    • 仔细检查后,听起来像 VirtualBox 锁定并占用 RAM 并且主机操作系统无法将其分页进出
    • 所以你仍然需要一些虚拟客人的交换
  • 与每个单独的 VM 来宾通过虚拟 I/O 进行自己的交换相比,为每个来宾拥有足够的 RAM 并使用内存膨胀应该更快/更好,这会降低性能
  • 还探索了为 Windows 安装 virtio 驱动程序的选项(VirtualBox 现在支持这个,RedHat 有这些驱动程序)

压缩交换存储

如果您的虚拟主机有相当数量的空闲 CPU 内核,那么像 zswap 这样的东西可以很好地工作:

  • 如果将 2x HDD 用于交换空间,可能会获得良好的性能提升。
  • 交换到 2x SSD 可能对性能没有太大帮助,但压缩意味着更少的写入周期。
  • 并意味着从更少的存储中获得更多的虚拟内存容量

无论如何,这可能不值得付出努力,因为它需要更新的内核,而 Debian 因坚持使用较旧的经过测试和测试的内核而臭名昭著,因此除非您向后移植内核或查看不同的发行版,否则这不是一个简单的选择:例如 Ubuntu 14.04 或CentOS 7 应该提供更新的内核。

标杆经验

在我自己的工作站(Windows 7)上,我使用 fio ( http://www.bluestop.org/fio/ ) 来模拟 MSDN 博客中提到的随机读取和随机写入 I/O 趋势。其他任何想要测试在交换/页面文件工作负载下可以提供哪些不同存储选项的人都可以尝试类似的方法。

在查看来自数千条跟踪的遥测数据并关注页面文件读写时,我们发现

  • Pagefile.sys 读取的数量比 pagefile.sys 写入的数量大约为 40 比 1,
  • Pagefile.sys 读取大小通常非常小,67% 小于或等于 4 KB,88% 小于或等于 16 KB。Pagefile.sys 写入相对较大,其中 62% 大于或等于 128 KB,45% 正好为 1 MB。

基准设置

这是我使用的 fio 作业文件:

[global]
description="test random read and write to estimate suitability for page file use"
filename=fakeswap
numjobs=1
iodepth=1
direct=1
sync=1
filesize=2048m

[pageout]
rw=randwrite
bssplit=64k/38:256K/15:1024K/45:4096k/2

[pagein]
rw=randread
bssplit=4K/67:16K/21:64K/10:256K/2
Run Code Online (Sandbox Code Playgroud)

由于 MSDN 博客文章仅简要提及了一些统计数据,因此我对块大小和这些大小的 IO 比例进行了一些有根据的猜测。我使用 bssplit 选项来加权不同的块大小。考虑到我得到的随机读取与写入 IO 的最终比率是 38.5:1,这与博客文章中提到的 40:1 非常接近,我的猜测希望不会太糟糕。

我在基于 AMD SB850 的存储芯片组上运行基准测试,并将它们与 RAM 驱动器的性能进行比较。

  • DDR3 Dual Channel @ 1600MHz with 2G RAMDisk (使用DataRAM RAMDisk产品)
  • SSDx2 RAID 0(Crucial M4 128GB)、NTFS
  • HDDx4 RAID 10(希捷 7200.14 3TB)、NTFS
  • 威刚 UV150 USB3 闪存盘 32GB,FAT32

请注意,我独立执行随机读取和随机写入基准测试(不是混合,但真实系统可能会看到混合模式 - 我有兴趣比较读取/分页与写入/分页,因此我将其分开)。例如我使用的命令是:

fio --section=pageout --output raid10_hdd4_pageout_2G.txt page2g.fio
fio --section=pagein --output raid10_hdd4_pagein_2G.txt page2g.fio
Run Code Online (Sandbox Code Playgroud)

基准测试结果

运行基准测试后,他们证实了我自己的怀疑,即 USB3 闪存驱动器(注意,不是 USB3 上的硬盘)可以在小随机 I/O 下表现得相当好。然而,事实证明,对于延迟时间非常不稳定的较大随机写入块,它并不是那么好。

下图显示了在 2G 交换空间中换页和换页所需的时间以及用于分页的代表性/估计随机 I/O 模式

基准测试结果 - 在具有代表性随机 I/O 模式的 2G 交换空间中调出和调回所用的时间

我还查看了平均吞吐量并将其与 RAM 的吞吐量进行了比较 - 它给出了系统何时必须使用交换的情况有多糟糕的想法;-)

交换空间和页面文件的存储选项比较表

进一步观察

  • 随机读取 I/O 比随机写入更重要,因为块大小更小,IO 数量更多。按比例,pagein 比 pageout 更痛苦......
  • SSDx2 RAID 0 比 RAM 慢约 10 倍
  • HDDx4 RAID10 在分页时看起来很糟糕 - 比 RAM 慢 300 倍,比 SSD 慢 30 倍。
  • 但是,HDDx4 RAID10 看起来在 pageout 时会做得相对更好 - 比 RAM 慢约 40 倍,仅比 SSD 慢约 4 倍
  • 与 HDD RAID 相比,USB3 闪存驱动器在小随机读取方面要好得多(快 9 倍),如此之多,弥补了它在随机写入方面的不足(慢了 7 倍)。即使插入 USB 2 端口,总体而言,它也胜过 HDD RAID。

警告- 不建议将交换/页面文件放在 USB 闪存驱动器上

  • USB 闪存驱动器的 NAND 和控制器可能缺乏稳健的磨损均衡和垃圾收集实现(例如无法从 SSD ATA TRIM 命令中受益),这使得它更有可能在用于交换空间/页面文件时寿命很短和性能随着时间的推移而下降。我的测试是在新的/新的闪存驱动器上进行的。也许经过 6 个月的交换后,它会跟不上性能并过早死亡。

最后几个笔记

  • 我的 SSD 和 HDD 有相当大的缓存。每个设备上分别有 256MB 和 64GB,所以这可能会给它们一个提升,而 USB 闪存驱动器可能没有这个。
  • 我不确定 M$ 对 Windows 页面文件使用的观察如何适用于 Linux 交换分区或文件,但我敢打赌它不会太远......

参考

更多阅读(抱歉,我会发布更多链接,但我刚刚注册,超级用户还不信任我)