块大小乘并发就是吞吐上限
读写块大小决定单次请求能承载多少数据,吞吐大致等于单次传输量乘以在途请求数。把块大小调大通常能提升大块顺序读写效率,但前提是网络与服务端都能承接:客户端与服务器会就块大小协商,写进参数的值不一定生效。小 I/O 与元数据密集型负载几乎不受块大小影响,盲目调大反而增加延迟与重传成本,因此调整前要先确认负载特征与当前生效值。
基本信息
| 参数含义 | 读块大小与写块大小,单位字节 |
|---|---|
| 生效方式 | 由客户端与服务器协商,写入值可能被下调 |
| 相关因素 | 网络传输单元、并发通道数、服务端处理能力 |
| 确认方法 | 查看挂载详情中的实际取值 |
| 权限要求 | 主机 root/管理员 |
典型使用场景
- 大块顺序读写吞吐不达预期的调优
- 备份与数据迁移窗口内提升单流吞吐
- 确认挂载参数写大的值是否真正生效
- 评估并发通道数与块大小组合的效果
- 排查调整块大小后延迟反而上升的原因
调整与验证
调整与验证
# 1) 指定较大块大小并配合并发通道挂载
mount -t nfs -o vers=4.2,rsize=1048576,wsize=1048576,nconnect=4 server:/export /mnt/data
# 2) 确认实际生效的取值(写入值可能被下调)
nfsstat -m
# 3) 用顺序读写对比不同块大小的效果(直连 I/O 避免缓存干扰)
fio --name=seq --filename=/mnt/data/testfile --direct=1 --rw=read --bs=1M --iodepth=16 --runtime=60 --time_based
# 4) 小 I/O 场景单独验证,避免只测大块得出片面结论
fio --name=rnd --filename=/mnt/data/testfile --direct=1 --rw=randread --bs=4k --iodepth=32 --runtime=60 --time_based取值与适用场景
| 取值方向 | 收益 | 代价 |
|---|---|---|
| 块大小调大 | 大块顺序吞吐提升 | 小 I/O 延迟与重传成本可能上升 |
| 块大小保持默认 | 兼容性最好 | 大块场景可能跑不满链路 |
| 配合并发通道 | 单挂载点吞吐提升 | 连接与资源占用增加 |
| 只换网络不调参数 | 解决链路带宽瓶颈 | 服务器或客户端仍是瓶颈时无效 |
块大小的可取值上限与协商行为随协议版本和两端实现变化,具体上限以客户端与服务器对应版本的官方文档为准。
只测大块顺序读写就给出调优结论,会掩盖小 I/O 场景的退化;生产调优应在贴近业务负载的模型下对比,且一次只改一个变量。