壹剑 發表於 2026-1-12 11:07:00

如何在 Fedora 34 上优化系统内核与 I/O 调度器配置,提升大数据应用的磁盘读写性能与延迟控制

<p>在大数据应用(如 Hadoop、Spark、ClickHouse、Elasticsearch)场景下,磁盘 I/O 性能往往是整体性能瓶颈。Fedora&nbsp;34 默认内核与 I/O 调度器配置针对通用桌面/服务器场景,但未必适合高吞吐、大并发随机 I/O 模式。因此,我们需要针对 I/O 调度器、内核参数、文件系统和硬件队列进行系统化优化。</p>
<p>A5数据基于 Fedora&nbsp;34(默认使用 Linux Kernel&nbsp;5.11 系列)、NVMe/SATA SSD 和大容量内存平台,通过参数调整、调度器替换、队列深度优化、文件系统选项等手段,给出实践可执行方案,并配合性能评测数据验证优化效果。</p>
<hr>
<h2 id="一实验平台与测试工具">一、实验平台与测试工具</h2>
<h3 id="11-香港服务器wwwa5idccom硬件环境">1.1 香港服务器www.a5idc.com硬件环境</h3>
<table>
<thead>
<tr>
<th>项目</th>
<th>参数</th>
</tr>
</thead>
<tbody>
<tr>
<td>主板</td>
<td>Supermicro X11SPM‑F</td>
</tr>
<tr>
<td>CPU</td>
<td>Intel Xeon Silver&nbsp;4214R(12C/24T @ 3.2 GHz)</td>
</tr>
<tr>
<td>内存</td>
<td>128 GB DDR4‑2666 ECC</td>
</tr>
<tr>
<td>存储1</td>
<td>Samsung PM1735 NVMe&nbsp;3.84 TB</td>
</tr>
<tr>
<td>存储2</td>
<td>Intel SSD&nbsp;S4510 SATA&nbsp;1.6 TB</td>
</tr>
<tr>
<td>网络</td>
<td>Mellanox ConnectX‑4 25 GbE</td>
</tr>
<tr>
<td>RAID</td>
<td>无(直连 NVMe)</td>
</tr>
</tbody>
</table>
<h3 id="12-软件环境">1.2 软件环境</h3>
<table>
<thead>
<tr>
<th>项目</th>
<th>版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>操作系统</td>
<td>Fedora&nbsp;34 x86_64</td>
</tr>
<tr>
<td>内核</td>
<td>5.11.x(默认 Fedora 34 内核)</td>
</tr>
<tr>
<td>文件系统</td>
<td>XFS、EXT4</td>
</tr>
<tr>
<td>测试工具</td>
<td>fio&nbsp;3.28, blktrace, iostat (sysstat), tuned</td>
</tr>
</tbody>
</table>
<h3 id="13-测试目标">1.3 测试目标</h3>
<ul>
<li>提升磁盘<strong>随机读写吞吐</strong>(IOPS / MB/s)</li>
<li>降低<strong>平均延迟</strong>(latency)</li>
<li>优化大数据读写模式下的<strong>稳定性与整体性能</strong></li>
</ul>
<p>测试数据采用 fio 运行真实负载样本模拟(混合随机读写、多队列)。</p>
<hr>
<h2 id="二内核-io-调度基础">二、内核 I/O 调度基础</h2>
<p>Linux 内核通过 <strong>I/O 调度器(I/O Scheduler)</strong> 管理请求排序、合并与发出策略。主流调度器如下:</p>
<table>
<thead>
<tr>
<th>调度器</th>
<th>适合场景</th>
<th>特点</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>mq-deadline</code></td>
<td>NVMe/SSD 通用</td>
<td>基于多队列,延迟可控</td>
</tr>
<tr>
<td><code>bfq</code></td>
<td>桌面/混合负载</td>
<td>关注公平性,延迟稳定</td>
</tr>
<tr>
<td><code>none</code> / <code>noop</code></td>
<td>纯硬件队列设备</td>
<td>最小调度,仅适合 NVMe</td>
</tr>
<tr>
<td><code>kyber</code></td>
<td>新一代通用调度</td>
<td>低延迟,适合大数据</td>
</tr>
</tbody>
</table>
<p>其中,Fedora&nbsp;34 内核默认基于 blk‑mq 框架,推荐使用 <code>mq-deadline</code> 或 <code>kyber</code>。对于 NVMe 高性能设备,也可用 <code>none</code> / <code>noop</code>。</p>
<hr>
<h2 id="三硬件与文件系统调优">三、硬件与文件系统调优</h2>
<h3 id="31-nvme-队列深度与中断">3.1 NVMe 队列深度与中断</h3>
<p>NVMe 设备具备深度调度队列,可通过 sysfs 查看与设置:</p>
<pre><code class="language-bash"># 查看当前队列深度
cat /sys/block/nvme0n1/queue/nr_requests

# 调整队列深度到 1024
echo 1024 &gt; /sys/block/nvme0n1/queue/nr_requests

# 查看 I/O 调度器列表
cat /sys/block/nvme0n1/queue/scheduler
</code></pre>
<p>建议设置:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>推荐值</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nr_requests</code></td>
<td>1024–2048</td>
<td>提高并发 I/O 能力</td>
</tr>
<tr>
<td><code>nomerges</code></td>
<td><code>0</code></td>
<td>允许合并 I/O</td>
</tr>
</tbody>
</table>
<h3 id="32-文件系统挂载选项">3.2 文件系统挂载选项</h3>
<p>XFS 和 EXT4 是大数据场景常用文件系统。建议挂载参数如下:</p>
<p><strong>XFS</strong></p>
<pre><code class="language-bash">mount -o noatime,nodiratime,allocsize=8m /dev/nvme0n1p1 /data
</code></pre>
<p><strong>EXT4</strong></p>
<pre><code class="language-bash">mount -o noatime,nodiratime,barrier=0 /dev/nvme0n1p1 /data
</code></pre>
<table>
<thead>
<tr>
<th>选项</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>noatime</code>/<code>nodiratime</code></td>
<td>减少不必要元数据更新</td>
</tr>
<tr>
<td><code>allocsize=8m</code> (XFS)</td>
<td>提高大文件连续空间分配效率</td>
</tr>
<tr>
<td><code>barrier=0</code> (EXT4)</td>
<td>减少写入延迟(注意风险)</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="四选择与设置-io-调度器">四、选择与设置 I/O 调度器</h2>
<h3 id="41-查看与切换调度器">4.1 查看与切换调度器</h3>
<pre><code class="language-bash"># 查看可用调度器
cat /sys/block/nvme0n1/queue/scheduler

# 设置为 mq-deadline
echo mq-deadline &gt; /sys/block/nvme0n1/queue/scheduler
</code></pre>
<p>对于 NVMe 高性能设备,建议调度器选择:</p>
<table>
<thead>
<tr>
<th>设备类型</th>
<th>推荐调度器</th>
</tr>
</thead>
<tbody>
<tr>
<td>NVMe 企业级</td>
<td><code>none</code> / <code>noop</code></td>
</tr>
<tr>
<td>NVMe 大数据</td>
<td><code>mq-deadline</code> / <code>kyber</code></td>
</tr>
<tr>
<td>SATA SSD</td>
<td><code>mq-deadline</code></td>
</tr>
</tbody>
</table>
<h3 id="42-永久生效配置grub-内核参数">4.2 永久生效配置(Grub 内核参数)</h3>
<p>编辑 <code>/etc/default/grub</code>:</p>
<pre><code class="language-bash">GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y elevator=mq-deadline"
</code></pre>
<p>更新 grub 并重启:</p>
<pre><code class="language-bash">grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
</code></pre>
<hr>
<h2 id="五内核参数优化">五、内核参数优化</h2>
<p>Fedora 34 内核参数涉及 I/O 调度、内存回写、页缓存策略等。</p>
<h3 id="51-etcsysctlconf-核心配置">5.1 <code>/etc/sysctl.conf</code> 核心配置</h3>
<pre><code class="language-bash">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
</code></pre>
<p>参数含义:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>意义</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>vm.swappiness</code></td>
<td>控制 swap 使用倾向</td>
</tr>
<tr>
<td><code>vm.dirty_*</code></td>
<td>控制内核刷新脏页行为</td>
</tr>
<tr>
<td><code>vfs_cache_pressure</code></td>
<td>控制 inode/dentry 缓存倾向</td>
</tr>
</tbody>
</table>
<p>使配置生效:</p>
<pre><code class="language-bash">sysctl -p
</code></pre>
<hr>
<h2 id="六tuned-配置文件定制">六、Tuned 配置文件定制</h2>
<p>Fedora 默认内置 <code>tuned</code> 管理性能策略,可自定义适合大数据的 profile。</p>
<h3 id="61-新建-profile">6.1 新建 Profile</h3>
<pre><code class="language-bash">tuned-adm profile throughput-performance

# 拷贝并定制
cp -r /usr/lib/tuned/throughput-performance /etc/tuned/bigdata
vim /etc/tuned/bigdata/tuned.conf
</code></pre>
<p><code>tuned.conf</code> 样例:</p>
<pre><code>
include=throughput-performance


swappiness=10
dirty_ratio=15
dirty_background_ratio=5


readahead=4096
</code></pre>
<p>启用:</p>
<pre><code class="language-bash">tuned-adm profile bigdata
</code></pre>
<hr>
<h2 id="七性能测试与对比">七、性能测试与对比</h2>
<p>使用 fio 测试随机读写 I/O 性能:</p>
<h3 id="71-fio-配置文件">7.1 fio 配置文件</h3>
<p><code>bigdata.fio</code>:</p>
<pre><code>
ioengine=libaio
direct=1
iodepth=64
numjobs=8
bs=4k
runtime=120
time_based


filename=/data/testfile
rw=randrw
rwmixread=70
</code></pre>
<h3 id="72-测试结果汇总">7.2 测试结果汇总</h3>
<table>
<thead>
<tr>
<th>配置</th>
<th>IOPS</th>
<th>带宽 (MB/s)</th>
<th>平均延迟 (ms)</th>
</tr>
</thead>
<tbody>
<tr>
<td>默认</td>
<td>210k</td>
<td>820</td>
<td>2.1</td>
</tr>
<tr>
<td>+ mq-deadline</td>
<td>240k</td>
<td>940</td>
<td>1.8</td>
</tr>
<tr>
<td>+ sysctl 调优</td>
<td>260k</td>
<td>1020</td>
<td>1.5</td>
</tr>
<tr>
<td>+ tuned bigdata</td>
<td>275k</td>
<td>1080</td>
<td>1.4</td>
</tr>
</tbody>
</table>
<p>结论:</p>
<ul>
<li>切换调度器带来 <strong>约 14%</strong> 的吞吐提升。</li>
<li>系统参数调整与 tuned 配置进一步提升整体性能并降低延迟。</li>
</ul>
<hr>
<h2 id="八监控与持续调优">八、监控与持续调优</h2>
<h3 id="实时监控命令">实时监控命令</h3>
<pre><code class="language-bash">iostat -x 5
blktrace -d /dev/nvme0n1 -o - | blkparse -i -
</code></pre>
<h3 id="性能监控建议">性能监控建议</h3>
<ul>
<li>监控 <strong>await、svctm、%util</strong></li>
<li>监控队列深度变化,避免过度堆积导致延迟攀升</li>
<li>对比不同调度器下的平均延迟分布</li>
</ul>
<hr>
<h2 id="九总结">九、总结</h2>
<p>A5数据针对 Fedora&nbsp;34 上大数据磁盘 I/O 场景的优化需要:</p>
<ol>
<li><strong>选择合适的 I/O 调度器</strong>(如 <code>mq-deadline</code>、<code>kyber</code>)</li>
<li><strong>调整内核参数</strong> 控制脏页与内存策略</li>
<li><strong>利用 tuned</strong> 统一管理性能参数</li>
<li><strong>结合文件系统选项</strong> 消除不必要开销</li>
<li><strong>硬件队列深度优化</strong> 充分利用 NVMe 能力</li>
<li><strong>持续监控测试</strong> 反馈调优参数</li>
</ol>
<p>A5数据通过本文的系统方法与实测数据,可以显著提升磁盘吞吐和降低延迟,为大数据平台提供稳定高性能的底层支撑。对于不同应用场景(如 OLTP、大规模 MapReduce、流处理),还可进一步细化参数以匹配特定特征负载。</p><br><br>
来源:https://www.cnblogs.com/a5idc/p/19470737
頁: [1]
查看完整版本: 如何在 Fedora 34 上优化系统内核与 I/O 调度器配置,提升大数据应用的磁盘读写性能与延迟控制