readahead

Linux内核的一个系统调用功能

readahead英語,意思就是提前讀入)是Linux內核的一個系統呼叫功能,透過把所需要的系統檔案預先讀入檔案緩存page cache)裡,解決磁碟存取速度的瓶頸問題[1],從而加快啟動時的速度。因為系統所需檔案已從硬碟提早讀進了主記憶,而主記憶的管線頻寬比週邊系統的管線頻寬為高,令系統耗費在存取週邊設備的時間減少了[2][3]

很多的Linux發行版都透過readahead程式來加速系統啟動。在這種設定裡,系統的內核在啟動時在提供相關的啟動參數之下,會記錄啟動時需要啟用的檔案。這個檔案列表會用來製作新的readahead壓縮包,令額外安裝的服務得以較快啟動,即使最初系統安裝時,這些服務並未列於readahead的列表內[4]。部份實驗性的系統會透過記憶分頁預先提取高速緩存置換機制再令系統表現提升[5]

隨着電腦硬件及軟件的進步,readahead的做法亦跟隨轉變。在使用systemd的Linux發行版(例如:FedoraOpenSUSE等),readahead的功能與systemd結合了成為一個叫作「systemd-readahead」的執行檔[6][7]。而在以debian為基礎的平台(例如:Ubuntu),在釋出官方版本時,會內建一組預先較調的檔案列表,再把相關檔案壓縮到一個壓縮包,到系統啟動時從啟動磁碟載入[1]。這個以debian為基礎的Linux版本的readahead經歷過下列的轉變:

  • 原來的readahead功能在Ubuntu 9.10推出時被取代;
  • sreadahead取代了原來的readahead,但後來亦被取代;
  • ureadahead:全稱為über-readahead,源自德語,意思就是「超越readahead」的意思。現時的版本號碼是0.100.0-17[8]

參看

參考資料

  1. ^ 1.0 1.1 Rex Tsai. readahead 加速 Linux 開機速度 ?. 2008-09-09 [2014-11-27]. (原始內容存檔於2014-12-04) (中文(繁體)). 
  2. ^ Jonathan Corbet. Adaptive file readahead. LWN.net. 2005-10-12 [2014-08-20]. (原始內容存檔於2014-08-01) (英語). 
  3. ^ readahead(2) - Linux manual page. man7.org. [2014-04-09]. (原始內容存檔於2014-05-25) (英語). 
  4. ^ Michael Opdenacker. Readahead: time-travel techniques for desktop and embedded systems (PDF). free-electrons.com: 5–6. 2007-06-15 [2014-05-01]. (原始內容存檔 (PDF)於2013-09-20) (英語). 
  5. ^ Krzysztof Lichota. Linux solution for prefetching necessary data during application and system startup (PDF). code.google.com. 2008 [2014-07-28]. (原始內容 (PDF)存檔於2009-12-11) (英語). 
  6. ^ Readahead. fedorahosted.org. [2014-04-09]. (原始內容存檔於2014-04-09) (英語). 
  7. ^ systemd-readahead-replay.service. freedesktop.org. 2014-03-26 [2014-04-09]. (原始內容存檔於2014-04-09) (英語). 
  8. ^ über-readahead. Launchpad]. 

外部連結