在 Linux 系统中,"prefetch" 通常指 预读(readahead)优化,用于提升磁盘 I/O 性能。以下是开启和配置预读的方法:
使用以下命令查看当前设备的预读值(单位为 KB):
sudo blockdev --getra /dev/sdX
(将 /dev/sdX 替换为你的实际设备,如 /dev/sda)
通过以下命令临时调整预读值(重启后失效):
sudo blockdev --setra 8192 /dev/sdX
2048~8192256~1024(过大的预读可能浪费内存)创建 /etc/udev/rules.d/60-readahead.rules 文件,添加以下内容:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="8192"
生效规则:
sudo udevadm control --reload-rules
sudo udevadm trigger
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 中添加:
elevator=deadline usbcore.autosuspend=-1 scsi_mod.use_blk_mq=1
更新 GRUB:
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS
cat /sys/block/sdX/bdi/read_ahead_kb
(确认输出值为你设置的值)
iostat -x 1 观察 %util 和 r/s/w/s 变化。如需更精细的 I/O 调度优化,可结合 deadline/kyber 调度器(通过 echo deadline > /sys/block/sdX/queue/scheduler 设置)。