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]. 

外部链接