Linux

Linux下刷新文件訪問時間/丟棄磁碟讀記憶體

  • April 7, 2010

我正在利用訪問時間來分析一些建構過程,但它並沒有按照我想要的方式工作:訪問時間在我第一次讀取文件時更新,然後它會長時間保持不變,或者直到下次重啟。例如:

$ ll -u some_file
-rw-r--r-- 1 root root 1.3M 2010-04-07 10:03 some_file
$ grep abcdef some_file
$ ll -u some_file
-rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file
# The access time is updated

# waiting a few minutes...
$ grep abcdef some_file
$ ll -u some_file
-rw-r--r-- 1 root root 1.3M 2010-04-07 11:24 some_file
# The access time has not been updated :(

我想該文件是由 Linux 緩沖在空閒記憶體中的,出於速度原因,只有這個副本在隨後的時間裡被訪問。一種解決方案是丟棄記憶體中的緩衝區。在搜尋了一些論壇後,我發現:

sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

但它不起作用,它似乎只同步寫入緩衝區,而不​​是讀取緩衝區。可能是由於我的發行版(fedora 9)上的一些自定義核心配置?

或者我在這裡遺漏了什麼?有沒有辦法實現這種訪問時間刷新?

另請注意,我不想在整個文件樹上模擬一些寫入。因為我正在使用一些基於 makefile 的建構系統,這將導致整個項目再次被建構。

編輯:

我使用的是標準 ext3 文件系統,沒有特殊選項。

/dev/sda1 on / type ext3 (rw)

我嘗試使用strictatime(未辨識)和atime(沒有區別,我猜這是預設值)重新安裝它。

好的,這種行為實際上是由於特定的 Fedora 9 核心出於優化原因禁用了標準訪問時間更新(每次讀取寫入磁碟非常耗時)。

設置了該選項DEFAULT_RELATIME(在我的情況下為核心 2.6.27.25),如果最後一次刷新發生在不到一天前,則禁用訪問時間刷新。

核心編譯選項文件提供了norelatime 禁用此功能的核心引導選項……但它不起作用!

為了成功修改這種行為,我實際上做了:

echo 60 > /proc/sys/fs/relatime_interval

這將這個間隔減少到 1 分鐘。

感謝您幫助我找到這個解決方案。

您使用的是 noatime 還是 relatime 掛載選項?您可以查看您是否使用以下mount命令:

[kbrandt@kbrandt-opadmin: ~] mount
/dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro)

如果是這樣,請在沒有這些選項的情況下重新安裝文件系統(或者在這種情況下可能更好的是編輯選項/etc/fstab並重新啟動)。這些選項與文件系統無關。這些選項的描述在“FILESYSTEM INDEPENDENT MOUNT OPTIONS”中man mount,但基本上它們阻止或限制atime被更新以提高性能。

我不確定這是否是您問題的解決方案,但由於您取決於訪問時間,我建議您無論如何都這樣做。


順便說一句,您可能想在此處或在 stackoverflow 上詢問有關分析您的特定建構過程的問題,以確保 atime 是正確的選擇。


更新:

是否stat -c "%x" filename顯示相同的內容?(忽略我上次的更新,沒有註意到該-u選項…),但也許您的ll別名有問題,所以我會檢查 stat 以確保。

另外,您說 / 沒有 noatime,但是您是在根系統上而不是在另一個文件系統上進行這些測試,例如 nfs 掛載或其他什麼?

是否touch -a -t 199812130530設法更改訪問時間?

引用自:https://serverfault.com/questions/130046