譯文 關於檔案的最新訪問時間(atime)

2021-06-07 18:03:07 字數 1545 閱讀 2436

原文:

譯註:譯者當然知道 once upon atime 和 once upon a time 是不一樣的,不過,原作者這麼寫不就是讓我們像 once upon a time 這麼念 once upon atime 麼,所以,題目就是這樣了,本文是譯者琢磨怎麼節約點能源的時候考古出來的,下面是譯文。

大多數檔案系統都維護著乙個元資料,用於記錄檔案的最新訪問時間,即「atime」 。這個時間可以說是非常有用的,管理員或管理程式根據這個時間就可以判斷乙個檔案最近一次被使用是什麼時候的事情了。不過,這個功能有個很嚴重的問題:每次檔案被訪問的時候,它都需要寫一次硬碟。即使是那些已經被讀入快取的,可以被方便讀取的檔案的唯讀操作也需要寫一次硬碟,來維護atime值。

最近,乙個關於磁碟寫操作節流(譯註:或稱為占空比調製,類似於cpu在一定時間的時候關閉時鐘來降低功耗的機制)的討論在 ingo molnar 指出 atime 可能 是比其它人何事情都嚴重的乙個效能障礙之後轉而開始討論 atime 了。ingo 提到:

atime的更新是目前影響linux io效能的最為嚴重的因素。如果能不進行 atime 更新將會顯著提高 linux 效能,這個提高會比過去10年裡所有的的關於 pagecache 加速機制加起來都會多。

他還認為 atime 「可能是 unix 的各種時間值設計中最愚蠢的乙個」。

這個討論很快就轉換成了另乙個問題:關於這種情況,我們應該怎麼作呢?乙個差不多所有linux都能採用的方法就是在載入檔案系統的時候使用 noatime 開關,這樣就徹底地關掉了訪問時間的記錄。對於檔案系統敏感的人物,這個改變的效能提高是立竿見影的。世事無完美,關掉 atime 在某些情況下可能會讓那些依賴這個東東的程式沒法正常工作。傳統上說,一寫郵件工具會比較訪問時間和修改時間來判斷郵件是否未讀。tmpwatch工具和一寫備份工具也使用 atime,如果這個時間不正確的話,它們可能會有異常行為。正是基於這個原因,各個發布版都不太敢於將 noatime 作為預設開關。

2.6.20 核心引入了乙個新的方法:relatime 開關。如果在掛載檔案系統的時候使用這個開關,訪問時間只有在它們比變更時間更舊的時候才會更新。這個變化允許工具們看當前檔案似乎否被讀過了,同時很大程度上減少了 atime 的更新次數。這個開關還很少有人使用,可能是因為很少有人聽說過它或是發布版們的mount版本還沒有更新,還不支援relatime。不過,如果有程式想知道某個檔案是否在過去的一段特定長時間(比如乙個星期)裡被訪問過,那它還是可能會被relatime欺騙。

為了解決這個問題,linus 建議調整一下 relatime的工作方式:如果在一段時間裡更新過檔案,比如一天,那就更新它。ingo 很快就寫了乙個補丁來實現這個特性,還增加了兩個新的啟動引數:指定預設更新秒數的 relatime_interval 和在所有檔案系統中預設使用 relatime 的開關 default_relatime。

這個補丁的類似補產品可能會進入 2.6.24。這個補丁建議當乙個inode將要被寫入到硬碟的時候,kernel可以同時更新 atime。不過alan cox反對這個改變,因為這個改動可能會讓整個行為變得不可**。這個補丁到目前位置還沒有更新版本,將來如果這個補丁能進入核心當中的話,也肯定不是當前這個版本。

譯 檔案物件的方法

本文翻譯自python3.4.8官方文件 f open workfile w 第乙個引數filename是檔名,第二個引數是讀寫模式,用來描述檔案的使用方式,如果省略時,預設是 r 常用的模式有 模式作用備註r 讀取檔案 w寫入檔案 同名的檔案將會被刪除 a向檔案末尾追加 r 讀取和寫入檔案 通常情...

關於linux編譯檔案的一些感想

近段時間,博主一直在學習gcc編譯以及make的一些知識,有一些小的感想分享一下。我們在編譯檔案的時候一直採用的是 假設我們有 1.h 1.cpp 2.h 2.cpp main.cpp 我們編譯經常是 g c 1.cpp g c 2.cpp g c main.cpp g o 1.o 2.o main...

Linux的編譯檔案操作

檔案程式設計的內容很多,但是重點在應用,主要關心如何用 操作檔案,實現檔案建立,開啟,編輯等自動化執行。開啟 open 讀寫 write read 游標定位 lseek 關閉 close int close int fd 引數說明 fd 是需要關閉的檔案描述符 標頭檔案 include 原型 ssi...