在 Linux 系统中,"prefetch" 通常指内核的 预读(readahead)机制,它通过预加载文件数据到内存来提高性能。以下是关闭或调整该功能的方法:
# 查看当前预读值(单位为扇区,通常 512B/扇区)
cat /sys/block/sdX/queue/read_ahead_kb
# 临时关闭(设置为 0)
echo 0 | sudo tee /sys/block/sdX/queue/read_ahead_kb
# 永久生效(需在 /etc/rc.local 或系统服务中添加命令)
注意:sdX
替换为你的磁盘设备名(如 sda
、nvme0n1
)。
使用 posix_fadvise()
系统调用(需编程实现),或通过工具 vmtouch
手动管理缓存:
# 示例:禁止预读特定文件
vmtouch -e /path/to/file
在 /etc/default/grub
的 GRUB_CMDLINE_LINUX
中添加:
GRUB_CMDLINE_LINUX="elevator=noop"
然后更新 GRUB 并重启:
sudo update-grub && sudo reboot
注意:此操作禁用 I/O 调度器预读,可能影响整体性能。
若指 swap prefetch(如 vm.swappiness
):
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时调整(范围 0-100,0 表示尽量少用 swap)
sudo sysctl vm.swappiness=10
# 永久生效
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
/sys/
下的修改为临时性,重启失效;永久生效需通过脚本或服务。hdparm -tT /dev/sdX
)验证调整效果。如需更具体的场景帮助,请补充说明您的需求(如特定应用、内核版本等)。