在 Linux 系统中,"prefetch" 通常指 预读(readahead)优化,用于提升磁盘 I/O 性能。以下是开启和配置预读的方法:
使用以下命令查看当前设备的预读值(单位为 KB):
sudo blockdev --getra /dev/sdX
(将 /dev/sdX
替换为你的实际设备,如 /dev/sda
)
通过以下命令临时调整预读值(重启后失效):
sudo blockdev --setra 8192 /dev/sdX
2048
~8192
256
~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
设置)。