Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 8 章 存储和文件系统

本章概述了在 Red Hat Enterprise Linux 7 中影响应用程序性能的文件系统和配置选项。第 8.1 节 “注意事项” 讨论影响性能的 I/O 和文件系统相关因素。第 8.2 节 “监控和诊断性能问题” 教您如何使用红帽企业 Linux 7 工具诊断与 I/O 或文件系统配置详细信息相关的性能问题。第 8.4 节 “配置工具” 讨论可用于解决 Red Hat Enterprise Linux 7 中的 I/O 和文件系统相关性能问题的工具和策略。

8.1. 注意事项

存储和文件系统性能的相应设置高度依赖于存储的用途。I/O 和文件系统性能可能会受到以下任何因素的影响:
  • 数据写入或读取模式
  • 与底层几metry 的数据一致
  • 块大小
  • 文件系统大小
  • 日志大小和位置
  • 记录访问时间
  • 确保数据可靠性
  • 预获取数据
  • 预分配磁盘空间
  • 文件碎片
  • 资源争用
阅读本章,以了解影响文件系统吞吐量、可扩展性、响应性、资源使用情况和可用性的格式和挂载选项。

8.1.1. I/O 调度程序

I/O 调度程序决定 I/O 操作在存储设备上运行的时间和时长。它也称为 I/O 电梯。
红帽企业 Linux 7 提供了三个 I/O 调度程序:
deadline
所有块设备的默认 I/O 调度程序,SATA 磁盘除外。截止时间 尝试为请求到达 I/O 调度程序的点提供有保证的延迟。这个调度程序适合大多数用例,特别是那些读取操作的频率比写操作多。
排队的 I/O 请求被分类为读或写批处理,然后计划以增加 LBA 顺序来执行。默认情况下,读取批处理优先于写入批处理,因为应用更有可能阻止读取 I/O。处理批处理后,截止时间 检查写操作在处理器时间不足,并根据情况调度下一个读取或写入批处理。每个批处理处理的请求数量、每个写入批处理要发布的读取批处理数以及请求过期前的时间数量都是可配置的;有关详细信息,请参阅 第 8.4.4 节 “调整截止调度程序”
cfq
仅识别为 SATA 磁盘的设备的默认调度程序。完全公平队列调度程序 cfq 将进程划分为三个单独的类:实时时间、尽力和空闲。实时类中的进程始终在最佳工作类进程之前执行,这些进程始终在空闲类中的进程之前执行。这意味着实时类中的进程可以缺少最佳工作量和空闲处理器时间的进程。默认情况下,进程分配到最佳工作类。
cfq 使用历史数据来预测应用程序是否在近期发出更多 I/O 请求。如果预期有更多 I/O,cfq 会闲置等待新的 I/O,即使等待处理其他进程的 I/O。
因此,除非调整 cfq 调度程序,否则不应将 cfq 调度程序与不会产生大量追求罚款的硬件一起使用。它不应该与其他非工作服务的调度程序(如基于主机的硬件 RAID 控制器)一起使用,因为堆栈这些调度程序会导致大量延迟。
cfq 行为高度可配置;详情请参阅 第 8.4.5 节 “调优 CFQ 调度程序”
noop
noop I/O 调度程序实施一个简单的 FIFO (第一出)调度算法。请求通过简单的最后一个缓存合并到通用块层。这可以是使用快速存储的 CPU 绑定系统的最佳调度程序。
有关设置不同默认 I/O 调度程序或为特定设备指定不同调度程序的详情,请参考 第 8.4 节 “配置工具”

8.1.2. 文件系统

阅读本节,以了解 Red Hat Enterprise Linux 7 中支持的文件系统及其推荐用例以及文件系统可使用的格式和挂载选项的详细信息。有关这些文件系统的详细调整建议,请参考 第 8.4.7 节 “为性能配置文件系统”

8.1.2.1. XFS

XFS 是可靠、高度可扩展的 64 位文件系统。它是 Red Hat Enterprise Linux 7 中的默认文件系统。XFS 使用基于扩展的分配,具有许多分配方案,包括预分配和延迟分配,二者均减少了碎片和辅助性能。它还支持元数据日志,这可促进崩溃恢复。XFS 可以在挂载和激活时进行碎片整理和扩展,Red Hat Enterprise Linux 7 支持几个特定于 XFS 的备份和恢复实用程序。
从红帽企业 Linux 7.0 GA 开始,支持 XFS 的最大文件系统大小为 500 TB,最大文件偏移为 8 EB(稀疏文件)。有关管理 XFS 的详情,请查看红帽企业 Linux 7 存储管理指南。有关针对特定目的调优 XFS 的帮助信息,请参阅 第 8.4.7.1 节 “调优 XFS”

8.1.2.2.  ext4

Ext4 是 ext3 文件系统的可扩展扩展。它的默认行为是大部分工作负载的最佳方式。但是,它只支持的最大文件系统大小为 50 TB,最大文件大小为 16 TB。有关管理 ext4 的详情,请查看红帽企业 Linux 7 存储管理指南。有关针对特定目的调整 ext4 的帮助信息,请参阅 第 8.4.7.2 节 “调优 ext4”

8.1.2.3. Btrfs(技术预览)

Red Hat Enterprise Linux 7 的默认文件系统是 XFS。Btrfs(B-tree 文件系统)是相对较新的写时复制(COW) 文件系统,作为技术预览提供。些独特的 Btrfs 功能包括:
  • 能够对特定文件、卷或子卷拍摄快照,而不是整个文件系统;
  • 支持多种版本的冗余磁盘阵列(RAID);
  • 将映射 I/O 错误回引用文件系统对象;
  • 透明压缩(分区上的所有文件会自动压缩)
  • 数据和元数据的校验和.
虽然 Btrfs 被视为稳定的文件系统,但它仍在持续开发中,因此与更成熟的文件系统相比,某些功能(如修复工具)是基本的。
目前,当需要高级功能(如快照、压缩和文件数据校验和)时,选择 Btrfs 非常适合,但性能相对不重要。如果不需要高级功能,则随着时间推移,失败的风险和性能相对较差,这让其他文件系统更可取。与其他文件系统相比,另一个缺点是最大支持 50 TB 的文件系统大小。

8.1.2.4. GFS2

全局文件系统 2(GFS2)是高可用性附加组件的一部分,为红帽企业 Linux 7 提供集群文件系统支持。GFS2 在集群中的所有服务器中提供一个一致的文件系统镜像,允许服务器从单一共享文件系统读取和写入。
GFS2 支持的最大文件系统大小为 100 TB。

8.1.3. 文件系统的通用调整注意事项

本节介绍所有文件系统常见的调优注意事项。有关特定于您的文件系统的建议,请参考 第 8.4.7 节 “为性能配置文件系统”

8.1.3.1. 格式时的注意事项

在设备格式化后,无法更改一些文件系统配置决策。本节介绍了在格式化存储设备前必须做出的决策的选项。
Size
为您的工作负载创建适当大小的文件系统。较小的文件系统备份时间按比例缩短,需要较少的时间和内存进行文件系统检查。但是,如果您的文件系统太小,其性能将会高碎片。
块大小
块是文件系统的工作单元。块大小决定了单个块中可以存储多少数据,因此一次写入或读取的最小数据量。
默认块大小适用于大多数用例。但是,如果块大小(或多个块的大小)与通常一次读取或写入的数据量相同,那么文件系统的性能将会更好,并且存储数据效率更高。个小文件仍将使用整个 块。文件可以分散到多个块中,但这会产生额外的运行时开销。此外,某些文件系统仅限于特定数量的块,进而限制文件系统的最大大小。
使用 mkfs 命令格式化设备时,将块大小指定为文件系统选项的一部分。指定块大小的参数因文件系统而异;有关您的文件系统的详情,请查看 mkfs 手册页。例如,若要查看在格式化 XFS 文件系统时可用的选项,请执行以下命令:
$ man mkfs.xfs
geometry
文件系统 geometry 涉及文件系统中数据的分布。如果您的系统使用分条存储(如 RAID),您可以在格式化该设备时将数据和元数据与底层存储几兆对齐来提高性能。
许多设备会导出建议的 geometry,然后在设备使用特定文件系统格式化时自动设置。如果您的设备没有导出这些建议,或者要更改推荐的设置,您必须在使用 mkfs 格式化设备时手动指定 geometry。
指定文件系统 geometry 的参数因文件系统而异;详情请参阅 mkfs man page。例如,若要查看在格式化 ext4 文件系统时可用的选项,请执行以下命令:
$ man mkfs.ext4
外部日志
日志文件系统记录了在执行操作之前,日志文件中写入操作期间将要进行的更改。这降低了存储设备在系统崩溃或电源故障时损坏的可能性,并加快恢复过程。
元数据密集型工作负载涉及非常频繁的日志更新。较大的日志使用更多的内存,但会降低写入操作的频率。此外,您可以通过将其日志放在专用存储中,使其与主存储快或快于主存储,从而缩短具有元数据密集型工作负载的设备的搜索时间。
警告
确保外部日志可靠。丢失外部日志设备将导致文件系统损坏。
必须在格式时创建外部日志,并在挂载时指定日志设备。详情请查看 mkfsmount man page。
$ man mkfs
$ man mount

8.1.3.2. 挂载时间注意事项

本节论述了适用于大多数文件系统的调优决策,可以在挂载设备时指定。
障碍
文件系统障碍可确保在持久性存储中正确写入和排序文件系统元数据,且使用 fsync 传输的数据在断电后保留。在以前的 Red Hat Enterprise Linux 版本中,启用文件系统障碍可能会明显减慢大量依赖 fsync 的应用程序,或者创建和删除很多小文件。
在红帽企业 Linux 7 中,文件系统障碍性能得到了改进,从而禁用文件系统障碍的性能影响可忽略不计(少于 3%)。
访问时间
每次读取文件时,都会使用哪个时间(time )更新其元数据。这涉及额外的写入 I/O。在大多数情况下,这个开销最小,因为默认情况下,Red Hat Enterprise Linux 7 只有在以前的访问时间早于上次修改时间(mtime)或状态更改(ctime)时,才会更新 atime 字段。
但是,如果更新此元数据非常耗时,并且不需要准确的访问时间数据,您可以使用 noatime 挂载选项挂载文件系统。这会在文件读取时禁用对元数据的更新。它还启用 nodiratime 行为,这可在读取目录时禁用对元数据的更新。
read-ahead
读出行为可加快文件访问的速度,方法是:快速获取可能需要的数据并将其加载到页面缓存中,其中的检索速度比磁盘上快。读-ad-head 值越大,系统预填充数据前面是另一个。
Red Hat Enterprise Linux 尝试根据它检测到的文件系统设置适当的读号值。但是,准确检测并不总是被允许。例如,如果存储阵列作为单个 LUN 向系统显示自己,则系统会检测到单个 LUN,且不会为阵列设置适当的读-ahead 值。
涉及大量流传输顺序 I/O 的工作负载通常得益于高读头值。红帽企业 Linux 7 提供的与存储相关的调优配置集提高了读头值,与使用 LVM 条带一样,这些调整并非始终足以满足所有工作负载的需要。
定义读取行为的参数因文件系统而异;有关详细信息,请参阅 mount man page。
$ man mount

8.1.3.3. 维护

对于固态磁盘和精简置备的存储,建议定期丢弃文件系统未使用的块。丢弃未使用块有两种方法:批量丢弃和在线丢弃。
批量丢弃
这种丢弃是 fstrim 命令的一部分。它丢弃文件系统中的所有未使用块,这些块符合管理员指定的标准。
Red Hat Enterprise Linux 7 支持在支持物理丢弃操作的 XFS 和 ext4 格式的设备上批量丢弃(即,在 /sys/block/devname/queue/discard_max_bytes 的值不是 0)的 HDD 设备,其中 /sys/block/devname/queue/discard_granularity 的值不是 0的 SSD 设备。
在线丢弃
这种丢弃操作在挂载时通过 discard 选项进行配置,并在用户不干预的情况下实时运行。但是,在线丢弃仅丢弃从已使用到空闲的块。Red Hat Enterprise Linux 7 支持在 XFS 和 ext4 格式的设备上进行在线丢弃。
红帽建议批量丢弃,除非需要在线丢弃才能保持性能,或者在系统工作负载无法使用批量丢弃的情况下。
预分配
预分配将磁盘空间标记为分配给文件,而不将任何数据写入该空间。这可用于限制数据碎片和读性能差。Red Hat Enterprise Linux 7 支持挂载时在 XFS、ext4 和 GFS2 设备上预先分配空间 ; 有关您的文件系统的适当参数的 mount man page。应用程序也可以使用 fallocate(2) glibc 调用从预先分配空间中受益。