内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
风哥提示:
本文档介绍存储性能调优的方法和技巧。
Part01-I/O调度器优化
1.1 查看和设置I/O调度器
[root@server ~]# cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
# 查看所有磁盘调度器
[root@server ~]# for disk in /sys/block/sd*/queue/scheduler; do
echo “$(basename $(dirname $(dirname $disk))): $(cat $disk)”
done
sda: [mq-deadline] kyber bfq none
sdb: [mq-deadline] kyber bfq none
# 设置调度器
[root@server ~]# echo “none” > /sys/block/sda/queue/scheduler
[root@server ~]# cat /sys/block/sda/queue/scheduler
[none] mq-deadline kyber bfq
# 永久设置
[root@server ~]# cat > /etc/udev/rules.d/60-scheduler.rules << 'EOF'
# SSD磁盘使用none调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
# HDD磁盘使用mq-deadline调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline"
EOF
# 重新加载规则
[root@server ~]# udevadm control --reload-rules
[root@server ~]# udevadm trigger
# 调度器说明
[root@server ~]# cat > /root/scheduler-info.txt << 'EOF'
I/O调度器说明
=============
1. none (noop)
- 最简单的调度器
- 适合SSD和NVMe设备
- 无排序,直接发送请求
2. mq-deadline
- 默认调度器
- 适合大多数场景
- 保证请求公平性
3.学习交流加群风哥QQ113257174 kyber
- 新一代调度器
- 适合高性能存储
- 低延迟设计
4. bfq (Budget Fair Queueing)
- 公平调度
- 适合桌面系统
- 保证交互响应
EOF
1.2 调整队列参数
[root@server ~]# cat /sys/block/sda/queue/nr_requests
256
# 设置队列深度
[root@server ~]# echo 512 > /sys/block/sda/queue/nr_requests
# 查看读取预读
[root@server ~]# cat /sys/block/sda/queue/read_ahead_kb
128
# 设置读取预读
[root@server ~]# echo 256 > /sys/block/sda/queue/read_ahead_kb
# 查看最大扇区数
[root@server ~]# cat /sys/block/sda/queue/max_sectors_kb
1280
# 设置最大扇区数
[root@server ~]# echo 2048 > /sys/block/sda/queue/max_sectors_kb
# 查看块大小
[root@server ~]# cat /sys/block/sda/queue/logical_block_size
512
[root@server ~]# cat /sys/block/sda/queue/physical_block_size
512
# 查看 rotational 标志
[root@server ~]# cat /sys/block/sda/queue/rotational
1
# 设置为SSD
[root@server ~]# echo 0 > /sys/block/sda/queue/rotational
# 查看随机性标志
[root@server ~]# cat /sys/block/sda/queue/add_random
1
# 禁用随机性
[root@server ~]# echo 0 > /sys/block/sda/queue/add_random
Part02-文件系统优化
2.1 XFS文件系统优化
[root@server ~]# mkfs.xfs -f -b size=4096 -d su=64k,sw=4 -l size=256m,version=2 /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=16 swidth=64 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=65536, version=2
= sectsz=512 sunit=16 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 挂载选项优化
[root@server ~]# mount -o noatime,nodiratime,logbufs=8,logbsize=256k /dev/sdb1 /data
# 查看XFS信息
[root@server ~]# xfs_info /data
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=16 swidth=64 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=65536, version=2
= sectsz=512 sunit=16 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# XFS挂载选项说明
[root@server ~]# cat > /root/xfs-mount-options.txt << 'EOF'
XFS挂载选项说明
===============
性能相关:
- noatime:不更新访问时间
- nodiratime:不更新目录访问时间
- logbufs=8:日志缓冲区数量
- logbsize=256k:日志缓冲区大小
- allocsize=64k:预分配大小
延迟相关:
- delaylog:延迟日志写入
- nodelaylog:立即日志写入
其他选项:
- inode64:使用64位inode
- largeio:大I/O优化
- swalloc:条带宽度分配
EOF
# 配置自动挂载
[root@server ~]# cat >> /etc/fstab << 'EOF'
/dev/sdb1 /data xfs noatime,nodiratime,学习交流加群风哥微信: itpux-comlogbufs=8,logbsize=256k 0 0
EOF
2.2 Ext4文件系统优化
[root@server ~]# mkfs.ext4 -b 4096 -E stride=16,stripe-width=64 /dev/sdc1
mke2fs 1.46.更多视频教程www.fgedu.net.cn5 (30-Dec-2021)
Creating filesystem with 26214400 4k blocks and 6553600 inodes
Filesystem UUID: 12345678-90ab-cdef-1234-567890abcdef
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
# 挂载选项优化
[root@server ~]# mount -o noatime,nodiratime,data=writeback,barrier=0 /dev/sdc1 /data2
# 查看Ext4信息
[root@server ~]# tune2fs -l /dev/sdc1
tune2fs 1.46.5 (30-Dec-2021)
Filesystem volume name:
Last mounted on:
Filesystem UUID: 12345678-90ab-cdef-1234-567890abcdef
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 6553600
Block count: 26214400
Reserved block count: 1310720
Free blocks: 25927632
Free inodes: 6553589
First block: 0
Block size: 4096
# Ext4挂载选项说明
[root@server ~]# cat > /root/ext4-mount-options.txt << 'EOF'
Ext4挂载选项说明
===============
性能相关:
- noatime:不更新访问时间
- nodiratime:不更新目录访问时间
- data=writeback:写回模式
- data=ordered:顺序模式(默认)
- data=journal:日志模式
日志相关:
- journal_async_commit:异步提交
- barrier=0:禁用屏障
- barrier=1:启用屏障(默认)
其他选项:
- nobh:禁用buffer head
- delalloc:延迟分配
- nodelalloc:禁用延迟分配
EOF
- 根据存储类型选择调度器
- 禁用不必要的访问时间更新
- 调整队列深度和预读
- 使用合适的文件系统参数
- 定期进行性能测试
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
