插件窝 干货文章 linux prefetch如何开启

linux prefetch如何开启

预读 设置 GRUB bash 102    来源:    2025-05-14

在 Linux 系统中,"prefetch" 通常指 预读(readahead)优化,用于提升磁盘 I/O 性能。以下是开启和配置预读的方法:


1. 检查当前预读设置

使用以下命令查看当前设备的预读值(单位为 KB):

sudo blockdev --getra /dev/sdX

(将 /dev/sdX 替换为你的实际设备,如 /dev/sda


2. 临时设置预读值

通过以下命令临时调整预读值(重启后失效):

sudo blockdev --setra 8192 /dev/sdX
  • 推荐值
    • HDD 机械硬盘:2048~8192
    • SSD 固态硬盘:256~1024(过大的预读可能浪费内存)

3. 永久生效配置

方法 1:通过 udev 规则

创建 /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

方法 2:修改 GRUB 启动参数(适用于全系统)

编辑 /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

4. 验证是否生效

cat /sys/block/sdX/bdi/read_ahead_kb

(确认输出值为你设置的值)


5. 其他优化工具

  • e2fsprogs:针对 ext4 文件系统的预读调整。
  • vmtouch:手动控制文件缓存预加载。

注意事项

  1. SSD 谨慎设置:过大的预读会占用内存且收益有限。
  2. 虚拟化环境:在 KVM/Xen 中需同时调整宿主机和客户机设置。
  3. 监控效果:使用 iostat -x 1 观察 %utilr/s/w/s 变化。

如需更精细的 I/O 调度优化,可结合 deadline/kyber 调度器(通过 echo deadline > /sys/block/sdX/queue/scheduler 设置)。