如何在 Fedora 34 上优化系统内核与 I/O 调度器配置,提升大数据应用的磁盘读写性能与延迟控制
在大数据应用(如 Hadoop、Spark、ClickHouse、Elasticsearch)场景下,磁盘 I/O 性能往往是整体性能瓶颈。Fedora 34 默认内核与 I/O 调度器配置针对通用桌面/服务器场景,但未必适合高吞吐、大并发随机 I/O 模式。因此,我们需要针对 I/O 调度器、内核参数、文件系统和硬件队列进行系统化优化。
A5数据基于 Fedora 34(默认使用 Linux Kernel 5.11 系列)、NVMe/SATA SSD 和大容量内存平台,通过参数调整、调度器替换、队列深度优化、文件系统选项等手段,给出实践可执行方案,并配合性能评测数据验证优化效果。
一、实验平台与测试工具
1.1 香港服务器www.a5idc.com硬件环境
| 项目 | 参数 |
|---|---|
| 主板 | Supermicro X11SPM‑F |
| CPU | Intel Xeon Silver 4214R(12C/24T @ 3.2 GHz) |
| 内存 | 128 GB DDR4‑2666 ECC |
| 存储1 | Samsung PM1735 NVMe 3.84 TB |
| 存储2 | Intel SSD S4510 SATA 1.6 TB |
| 网络 | Mellanox ConnectX‑4 25 GbE |
| RAID | 无(直连 NVMe) |
1.2 软件环境
| 项目 | 版本 |
|---|---|
| 操作系统 | Fedora 34 x86_64 |
| 内核 | 5.11.x(默认 Fedora 34 内核) |
| 文件系统 | XFS、EXT4 |
| 测试工具 | fio 3.28, blktrace, iostat (sysstat), tuned |
1.3 测试目标
- 提升磁盘随机读写吞吐(IOPS / MB/s)
- 降低平均延迟(latency)
- 优化大数据读写模式下的稳定性与整体性能
测试数据采用 fio 运行真实负载样本模拟(混合随机读写、多队列)。
二、内核 I/O 调度基础
Linux 内核通过 I/O 调度器(I/O Scheduler) 管理请求排序、合并与发出策略。主流调度器如下:
| 调度器 | 适合场景 | 特点 |
|---|---|---|
mq-deadline |
NVMe/SSD 通用 | 基于多队列,延迟可控 |
bfq |
桌面/混合负载 | 关注公平性,延迟稳定 |
none / noop |
纯硬件队列设备 | 最小调度,仅适合 NVMe |
kyber |
新一代通用调度 | 低延迟,适合大数据 |
其中,Fedora 34 内核默认基于 blk‑mq 框架,推荐使用 mq-deadline 或 kyber。对于 NVMe 高性能设备,也可用 none / noop。
三、硬件与文件系统调优
3.1 NVMe 队列深度与中断
NVMe 设备具备深度调度队列,可通过 sysfs 查看与设置:
# 查看当前队列深度
cat /sys/block/nvme0n1/queue/nr_requests
# 调整队列深度到 1024
echo 1024 > /sys/block/nvme0n1/queue/nr_requests
# 查看 I/O 调度器列表
cat /sys/block/nvme0n1/queue/scheduler
建议设置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
nr_requests |
1024–2048 | 提高并发 I/O 能力 |
nomerges |
0 |
允许合并 I/O |
3.2 文件系统挂载选项
XFS 和 EXT4 是大数据场景常用文件系统。建议挂载参数如下:
XFS
mount -o noatime,nodiratime,allocsize=8m /dev/nvme0n1p1 /data
EXT4
mount -o noatime,nodiratime,barrier=0 /dev/nvme0n1p1 /data
| 选项 | 作用 |
|---|---|
noatime/nodiratime |
减少不必要元数据更新 |
allocsize=8m (XFS) |
提高大文件连续空间分配效率 |
barrier=0 (EXT4) |
减少写入延迟(注意风险) |
四、选择与设置 I/O 调度器
4.1 查看与切换调度器
# 查看可用调度器
cat /sys/block/nvme0n1/queue/scheduler
# 设置为 mq-deadline
echo mq-deadline > /sys/block/nvme0n1/queue/scheduler
对于 NVMe 高性能设备,建议调度器选择:
| 设备类型 | 推荐调度器 |
|---|---|
| NVMe 企业级 | none / noop |
| NVMe 大数据 | mq-deadline / kyber |
| SATA SSD | mq-deadline |
4.2 永久生效配置(Grub 内核参数)
编辑 /etc/default/grub:
GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y elevator=mq-deadline"
更新 grub 并重启:
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
五、内核参数优化
Fedora 34 内核参数涉及 I/O 调度、内存回写、页缓存策略等。
5.1 /etc/sysctl.conf 核心配置
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 1000
# 减少写入放大
vm.vfs_cache_pressure = 50
参数含义:
| 参数 | 意义 |
|---|---|
vm.swappiness |
控制 swap 使用倾向 |
vm.dirty_* |
控制内核刷新脏页行为 |
vfs_cache_pressure |
控制 inode/dentry 缓存倾向 |
使配置生效:
sysctl -p
六、Tuned 配置文件定制
Fedora 默认内置 tuned 管理性能策略,可自定义适合大数据的 profile。
6.1 新建 Profile
tuned-adm profile throughput-performance
# 拷贝并定制
cp -r /usr/lib/tuned/throughput-performance /etc/tuned/bigdata
vim /etc/tuned/bigdata/tuned.conf
tuned.conf 样例:
[main]
include=throughput-performance
[vm]
swappiness=10
dirty_ratio=15
dirty_background_ratio=5
[disk]
readahead=4096
启用:
tuned-adm profile bigdata
七、性能测试与对比
使用 fio 测试随机读写 I/O 性能:
7.1 fio 配置文件
bigdata.fio:
[global]
ioengine=libaio
direct=1
iodepth=64
numjobs=8
bs=4k
runtime=120
time_based
[job1]
filename=/data/testfile
rw=randrw
rwmixread=70
7.2 测试结果汇总
| 配置 | IOPS | 带宽 (MB/s) | 平均延迟 (ms) |
|---|---|---|---|
| 默认 | 210k | 820 | 2.1 |
| + mq-deadline | 240k | 940 | 1.8 |
| + sysctl 调优 | 260k | 1020 | 1.5 |
| + tuned bigdata | 275k | 1080 | 1.4 |
结论:
- 切换调度器带来 约 14% 的吞吐提升。
- 系统参数调整与 tuned 配置进一步提升整体性能并降低延迟。
八、监控与持续调优
实时监控命令
iostat -x 5
blktrace -d /dev/nvme0n1 -o - | blkparse -i -
性能监控建议
- 监控 await、svctm、%util
- 监控队列深度变化,避免过度堆积导致延迟攀升
- 对比不同调度器下的平均延迟分布
九、总结
A5数据针对 Fedora 34 上大数据磁盘 I/O 场景的优化需要:
- 选择合适的 I/O 调度器(如
mq-deadline、kyber) - 调整内核参数 控制脏页与内存策略
- 利用 tuned 统一管理性能参数
- 结合文件系统选项 消除不必要开销
- 硬件队列深度优化 充分利用 NVMe 能力
- 持续监控测试 反馈调优参数
A5数据通过本文的系统方法与实测数据,可以显著提升磁盘吞吐和降低延迟,为大数据平台提供稳定高性能的底层支撑。对于不同应用场景(如 OLTP、大规模 MapReduce、流处理),还可进一步细化参数以匹配特定特征负载。

浙公网安备 33010602011771号