从 Linux 内核的文档来看,建议 POSIX_FADV_RANDOM 似乎禁用了预读。但是,当我使用 (sudo hdparm -A 0 /dev/sdb) 禁用 Readhead 时,性能会大幅下降;还注意到 read(2) 似乎每 512k 被分割一次并充当单独的调用(不确定原因,可能是每个请求的最大扇区)。
那么哪个选项真正禁用预读呢? POSIX_FADV_RANDOM 是否也会禁用操作系统缓存,或者我应该添加 POSIX_FADV_DONTNEED。
答案1
POSIX_FADV_RANDOM
禁用内核文件系统驱动程序执行的预读。它建议文件系统层不要读取超出要求的内容。预读是在文件级别完成的:文件系统层可能会从同一文件中获取额外的数据,但如果您指定POSIX_FADV_RANDOM
.
hdparm -A 0
禁用磁盘本身执行的预读。它建议磁盘,当您读取一个扇区时,它不应将接下来的几个扇区存储在其内部缓存中。
两者都禁用预读,但位于系统的不同层。
POSIX_FADV_RANDOM
仅禁用预取。POSIX_FADV_DONTNEED
如果您不希望缓存该区域(或者希望将其从缓存中删除),请将区域设置为。