我在 Debian 上有一个外部 USB 3 硬盘 USB 3 端口,我想在该驱动器上创建一个交换分区,该驱动器还包含数据库和其他大容量内容的分区。
我的系统是 Debian 7.7.0,安装在 TS140 机箱上,16 GB RAM、2x120 SSD 和 2x750 HDD,通过 Intel BIOS RAID 1。如果 USB 硬盘不是一个好主意,我应该把交换分区放在哪里?一段时间以来,我一直在同一个机箱上使用 Debian 7.6,只有一个 HDD,而且我使用它的方式从来不需要交换分区,所以我甚至不确定我是否需要交换分区。我也希望很快将 RAM 升级到 32 GB。
由于存储升级,服务器上的负载会更大(更多 VirtualBox 客户端),因此我想在安装期间准备一个或多个永久位置用于交换。如果我也可以为 Windows vbox 客户端使用相同的位置将交换从 C: 移到那里,那将是一个很好的解决方案!
到目前为止,我还不知道要安装多少个 VirtualBox 客户端,以及需要同时运行多少个。我只知道我至少需要一台 Windows 服务器、一台 Windows 7 工作站和一台 Linux 工作站。
编辑:2014/11/15 16:20
JPvRiel
您所写的内容是信息金矿,非常感谢您花时间阅读!!我甚至不会质疑您所写的任何内容,到目前为止,至少其中 99% 的内容对我来说都是有意义的 - 到目前为止,我只读过两遍,部分内容我读了两遍以上。
我想我正在尝试进行的配置(到目前为止,没有优化问题或类似问题,只是为了让它工作)几乎完美地反映了您的建议。到目前为止……
- 是的,40-60 美元的顶级 SDD 驱动器在用作 SWAP 时,无需担心它们会如何、何时以及为何磨损。我认为我已经非常非常非常了解这一点,并且从未困扰过我,所以谢谢你!我永远不会考虑将我的小盒子的 32GB RAM 限制提升到这些 RAID0 120 GB 商品驱动器可以承受的水平 - 当,再次 - 当需要出现时。考虑到它永远不会磨损,或者可能偶尔会磨损几秒钟,SDD 永远不会磨损 - 但在那些罕见的 WHEN 中,SDD 上的一些 240GB 额外 SWAP 会产生巨大的差异!你 100% 正确!阅读本文后,我的系统设计再也不会看起来一样了。SSD 上的 RAID0 作为 RAM - 你真是无价之宝!您女士或先生不仅给了我一个解决方案,还给了我一个前景!
我仍在阅读并尝试理解您的帖子中的大部分内容,再次感谢您!
我主要是为了我的老板而做这件事的,他最近购买并投入使用了许多当时最新的技术,我们的使用证明这些技术是世界上最好的技术,但包括我在内的工厂里没有人知道如何处理这些机器在运行时每分每秒产生的数据的性质和数量。到目前为止,该技术的系统和硬件运行良好,产量很高,我们只是无法让它们报告,我不知道我应该建造什么来让它们这样做——并保留它!我对这个项目(仍然)非常困惑。
虽然这里的大多数海报都担心一个数据库中的数百万条记录,但我担心每天每小时由自动光学检测机创建和填充的成百上千个数据库,并且我需要找到一种方法来读取和保留对我的雇主来说重要的东西,在数据库被删除和检查周期重新开始之前。
是的,我的工程师们真的只是一群沮丧的人。再次真诚地感谢你的帮助!Sandor
地址:2014-12-03
我的挫败感不断增加,直到我最终决定直奔主题,专注于基本要素。下面就是这些,我希望你们都能从中受益:如果您买不起带有“无限”RAM 的盒子,请选择一些便宜的 SSD 来存储 Linux/UNIX 交换和 Windows 页面文件。预算足以让这些 SSD 在发生故障时磨损,因此请购买相同数量的 SSD,并且不要关注您选择的 SSD 的评论,除非您的计划是疯狂的。无论您购买什么,事实是,SSD 产品总是存在一些固有问题,此时保持理智应该是首要任务,对吗?
一旦您做出一些艰难的决定,剩下的就很容易了……这最适合实验 - 如果您正在围绕它构建真正的生产负载,或者如果您正在考虑将它用于高工作量工作站 - 那么您是独立的,不要引用我的话。切勿考虑将启动 MBR 或 /boot 放在 SSD 或任何 RAID 上。不要将 /home 放在与交换相同的 SSD 上 - 哦,天哪!使用它们,让这些 SSD 磨损,这样你就能物有所值!C:驱动器、SSD 上的 /boot 和 /home - 启动速度更快,是的,但对于任何直接来自 Twilight Zone 的实验服务器来说!我有 USB3 HDD 复制器、Linux 启动医生、来自 az 的软件,所有工作和信任都可以与“旋转锈蚀”一起工作。我承认它们是“生锈的信任”,但……保护好你的 C 和 /home。把它们放在旋转锈蚀上。不要让新技术欺骗你。请至少考虑再信任一次旋转锈蚀!没有太多可说的了,但祝大家好运!我认为这个帖子已经关闭了。- Sandor
答案1
有许多事情需要考虑,并且可能需要根据您的设置和使用情况进行测试。
建议的 SWAP 分区位置
如果 USB HDD 不是一个好主意,我应该把一些交换设备放在哪里?
简短的回答,是的,您可以在 USB3 HDD 上创建交换分区,但 2x750GB HDD 可能是放置交换分区最安全的地方。
但是,您也可以将交换分区分散到所有磁盘上,并以不同的优先级进行优先排序,以尝试最大性能和交换容量。如果您像我一样喜欢过度优化,我建议您尝试以下操作(这需要修改 fstab 等):
- 在 2x SSD 阵列上分配少量交换分区空间,例如 4GB,并设置高优先级(有限的 SSD 空间和对 SSD 使用寿命的担忧是其他人不这样做的原因)。
- 在 2x HDD 阵列上分配更多的交换分区空间,例如 8GB,并具有中等优先级。
- 在 USB3 HDD 上的交换文件中分配更多的交换空间,例如低优先级的 16GB。
这样,如果系统 RAM 因大量进程请求 RAM 并被交换而耗尽,负载就会分散到所有磁盘设备上。另请注意,交换优先级取决于底层磁盘系统的性能。
接下来我将尝试讲解一些详细的推理。
存储速度可能更为重要
您可能已经阅读了将交换放在不太繁忙或专用的驱动器上的建议,但它仅适用于苹果与苹果类型的比较,对于混合不同存储介质(例如 SSD 与 HDD 和 SATA 与 USB3 接口)的更复杂系统来说,这并不是一个准确的规则。对于您的情况,指导原则应该是平衡 I/O 负载类型,并将 SWAP 分配到您期望具有最佳备用/可用随机 I/O 吞吐量的存储接口类型和驱动器的位置。这可能是 SSD,但有一个警告...
用于 SWAP 的 USB3 HDD
您在评论中提到 USB3 选项的表现不太好,事实上,原因可能是:
- 您的 USB3 驱动器可能是单磁盘系统,而带有 RAID 的 2x SSD 和 2x HDD 应该具有更好的性能,如下所示:
- RAID 0 几乎使读写性能翻倍。
- RAID 1 几乎使读取性能翻倍,并且会稍微降低写入性能。
- 因此,假设单个驱动器性能相似,只有当 2x HDD SATA 阵列平均有 50% 的时间处于繁忙状态且 USB3 1x HDD 的繁忙率为 0% 时,USB3 HDD 才会更好。
- 更重要的是,如果你将一个 HDD 与 2 个 SSD 进行比较,那么它的表现不会有太大的竞争/机会。SATA SSD 必须达到 95% 以上的繁忙程度,单个休眠 USB HDD 才有可能开始进行比较……
- USB3 的延迟会比 SATA 更大。而低延迟是内存访问性能和响应能力的关键因素。
用于交换的内部 HDD 阵列
如上所述,用于交换的 2 个 HDD 应该比仅仅挂在 USB3 上的 1 个 HDD 更好,并且正如将要解释的那样,应该可以安全地用作 SWAP。
- 2x HDD 最适合具有顺序访问模式的大型数据集,例如媒体文件(音乐/视频/图像)。
- 我不确定英特尔 RAID 设置,但使用 Linux RAID(mdadm),我知道您有选项,例如:
- 你可以共享相同的磁盘,但为交换创建 RAID 0,为虚拟机映像/数据创建 RAID 1
- 您可以避免 raid 开销,并直接在每个驱动器的启动时配置第一个交换分区,同时配置 mdadm 以在每个驱动器上的第二个分区中创建阵列
- 与 SSD 相比,HDD 磁性介质应该具有更好的写入寿命(如果它们不会遭受其他类型的过早故障......)
- 如果系统进行大量 SWAP,则意味着进行大量写入。
用于交换的 SSD
2x SSD 120GB 对于交换性能来说非常棒,但 SSD 寿命是一个需要注意的因素。
- 与旋转磁盘相比,SSD 更像 RAM,并且具有更好的随机 I/O 支持。
- 如果有大量虚拟机和进程正在运行,并且 RAM 利用率很高,则交换分区/文件的页面错误(读取)访问模式将变得随机。
- 内存页面分配单位较小,即4KB
- 我认为 Linux 内核对于“swapout”(通过取出页面并将其放在磁盘上来释放一些内存)很智能,并且分批执行以优化对磁盘的更连续的写入。
- 对于“swapin”(当一个进程需要 RAM 中的数据,但该数据并不在那里,但实际上在交换/页面错误中)来说,这可能是相当随机的,而这正是 SSD 可以胜任的地方。
- Windows 7 工程 MDSN 博客建议使用 SSD,因为其读取次数比写入次数大约为 40 比 1(希望 Linux 原则上也类似),从而减轻了对 SSD 写入次数过多的担忧
- 即使您的 SSD 用于存储主操作系统和一些 VM 映像,也可能有足够的空间用于 SWAP 文件操作。我在 RAID0 中拥有 2 个 128GB Crucial M4,它们具有出色的连续 IO(几乎 1000MB/s)以及相当不错的随机读/写性能(我在随机读取的糟糕组合中测量了接近 5000 IOP 和 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 在技术上对写入寿命的影响是 RAID0 的两倍(因为每次写入都会加倍)。所以也许应该避开 RAID1...
其他调整
考虑到支持多台虚拟机等问题,您还应该考虑一些其他的调整和选项。
Linux 喜欢用更多的 RAM 来缓存 I/O,而虚拟化讨厌磁盘 I/O
潜在的陷阱:
- 不要将所有 RAM 分配给客户操作系统,以便节省一些用于缓存 I/O
- 找到“交换”的最佳点。交换应该在 RAM 中留出一些空间来缓存磁盘 I/O,但过多的交换会导致进程过早交换出去,并损害一般的多任务处理。
现代 CPU 对虚拟化 CPU 和内存资源具有良好的硬件支持,但在共享磁盘存储方面,虚拟化工作负载通常会成为瓶颈。Linux(和 Windows)可以通过使用 RAM 来缓存 I/O 操作,而 SSD 或 HDD 磁盘设备仍在忙于“追赶”,从而提高 I/O 性能。因此,您的额外 RAM 可能不仅可用于运行多个操作系统,还可用于缓存虚拟机 I/O。
虚拟客户页面文件位置
如果我也可以使用相同的位置将 Windows vbox 客户端的交换从 C: 移动到那里,那将是一个很好的解决方案!
我对此不太确定,但我的直觉是:
- 而是为每个虚拟机分配足够/更多的 RAM,并
让 Linux 在需要时交换主机上的虚拟盒进程的页面,看看使用 VirtualBox内存膨胀控制- 经过仔细检查,听起来 VirtualBox 锁定并占用了 RAM,而主机操作系统无法对其进行分页
- 所以你仍然需要为虚拟客人交换一些
- 为每个客户机配备足够的 RAM 并使用内存膨胀应该比每个单独的 VM 客户机通过虚拟 I/O 进行自己的交换(这会降低性能)更快/更好
- 还可以探索安装适用于 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 倍左右,
- 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
由于 MSDN 博客文章文本仅简要提到了一些统计数据,因此我对块大小以及这些大小的 IO 比例进行了一些有根据的猜测。我使用 bssplit 选项对不同的块大小进行加权。希望我的猜测不会太糟糕,因为我得到的随机读取与写入 IO 的最终比率是 38.5:1,这非常接近博客文章中提到的 40:1。
我在基于 AMD SB850 的存储芯片组上运行了基准测试,并将它们与 RAM 驱动器的性能进行了比较。
- DDR3 双通道 @ 1600MHz,配备 2G RAMDisk(使用 DataRAM RAMDisk 产品)
- SSDx2 RAID 0(Crucial M4 128GB),NTFS
- HDDx4 RAID 10(希捷 7200.14 3TB),NTFS
- ADATA 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
基准测试结果
运行基准测试后,它们证实了我的猜测:USB3 闪存驱动器(注意,不是 USB3 上的硬盘)在小型随机 I/O 方面表现相当不错。但事实证明,它在较大的随机写入块方面表现不佳,延迟时间非常不稳定。
下图显示了在 2G 交换空间中使用代表性/估计随机 I/O 模式进行分页时页面调出和页面返回所花费的时间
我还查看了平均吞吐量,并将其与 RAM 的吞吐量进行了比较 - 它给出了当系统必须使用交换时情况会变得多么糟糕的概念 ;-)
进一步观察
- 由于块大小较小且 IO 数量较大,因此随机读取 I/O 比随机写入更重要。按比例而言,pagein 比 pageout 更麻烦...
- SSDx2 RAID 0 比 RAM 慢 10 倍
- HDDx4 RAID10 在页入方面看起来很糟糕 - 比 RAM 慢 300 倍,比 SSD 慢 30 倍。
- 然而,HDDx4 RAID10 在页面输出方面表现相对较好 - 比 RAM 慢 40 倍,仅比 SSD 慢 4 倍
- USB3 闪存盘在小型随机读取方面比 HDD RAID 好得多(快约 9 倍),以至于弥补了随机写入方面的不足(慢约 7 倍)。即使插入 USB 2 端口,总体而言,它也胜过 HDD RAID。
警告- 不建议将交换文件/页面文件放在 USB 闪存驱动器上
- USB 闪存驱动器的 NAND 和控制器可能缺乏强大的磨损均衡和垃圾收集实现(例如,无法从 SSD ATA TRIM 命令中受益),因此,如果将其用于交换空间/页面文件,则更有可能出现使用寿命缩短和性能下降的情况。我的测试是在全新的闪存驱动器上进行的。也许在 6 个月的交换之后,它就无法保持性能并过早报废了。
最后几点说明
- 我的 SSD 和 HDD 具有相当大的缓存。每个设备分别有 256MB 和 64GB,所以这大概会给它们带来提升,而 USB 闪存驱动器可能缺乏这一点。
- 我不确定 M$ 对 Windows 页面文件使用情况的观察是否适用于 Linux 交换分区或文件,但我敢打赌差别不会太大……
参考
更多阅读(抱歉,本来想发布更多链接,但我刚刚注册,超级用户还不信任我)