`posix_fadvise()` 允許應用程式向核心宣告對檔案區塊的預期存取模式,核心據此優化頁面快取策略,提升 I/O 效能。本文整理自 Yufeng 的技術部落格,提供核心參數與使用場景速查。
#include
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
| 常數 | 語義 | 典型場景 |
|---|---|---|
POSIX_FADV_NORMAL | 無特殊提示,預設行為 | 通用讀寫 |
POSIX_FADV_SEQUENTIAL | 循序讀取,核心積極預讀、釋放已讀頁面 | 影片播放、日誌掃描、資料庫全表掃描 |
POSIX_FADV_RANDOM | 隨機存取,核心減少預讀、保留熱點頁面 | 資料庫索引查詢、Key-Value 存儲 |
POSIX_FADV_NOREUSE | 資料僅讀一次,讀完即可丟棄 | 備份、壓縮、一次性 ETL |
POSIX_FADV_WILLNEED | 即將需要,核心提前載入頁面(同步) | 預熱熱點檔案、遊戲關卡載入 |
POSIX_FADV_DONTNEED | 不再需要,核心釋放相關頁面快取 | 大檔案處理完畢、釋放記憶體壓力 |
int fd = open("huge.log", O_RDONLY);
posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL); /* 整檔案循序讀取 */
while (read(fd, buf, sizeof(buf)) > 0) {
process(buf);
}
close(fd);