Linux I / O缓冲参考

有人能指出我对Linux I / O系统的一个相当完整的参考,主要是如何处理和刷新所有的缓冲区和caching?

我的理解到目前为止是有的

  • 应用程序缓冲区(包括由libc分配的fread / fwrite缓冲区)
  • 读取和写入的VFS缓冲区起作用
  • mmaped页面(与VFS缓冲区相同?)
  • 特定于文件系统的缓冲区(与VFS缓冲区相同?文件系统至less提供了一些策略,例如,XFS对写入caching更加积极)
  • 磁盘驱动器可能有一些缓冲区,然后转换为SCSI / ATA命令并传递给…
  • 磁盘控制器可能具有易失性,电池支持或无caching。 什么是冲洗易失性高速caching的机制? 障碍是如何影响的?
  • 磁盘本身可以有一些caching,与控制器相同的冲洗问题。

显然这是一个相当混乱的帐户,但希望它显示了我正在寻找的信息。 我发现Linux的内部文件相当稀less; 也许有一本好书可以涵盖所有这些? 讨论缓冲区复制与传输的地方也是很好的。

哇。 很明显,你是在解决特定问题的非常特殊的部分和部分。 否则你不会意识到你刚刚签署了你生命中的下一周进行研究。 通过所有的内核内容为您的主题将是痛苦的,所以这里是你需要做的:问一个 简单的问题,并开始追踪。 鉴于一个简单的,非融合的问题需要关注, Linux内核邮件列表上的许多开发人员都是专家解释为什么内部人员在您的情况下的行为。 这可能需要几轮,但他们可以帮助。

另一种可以使用的方法是给一个单一目的的问题提供一个可疑的活动,然后学习它所涉及到的各个部分,而不是单纯地理解它。 幸运的是,有一个名为ftrace的命令,甚至是SystemTap( stap )命令,可以让你开始冒险。 许多内核开发人员希望更多的人提出有关其内核的重要问题,这些工具将帮助他们做到这一点。 Linux Weekly News最近在ftrace上运行了几篇文章: 追踪:不缺选项 (2008年7月), ftrace (2009年3月),使用ftracedebugging内核 – 第1部分 (2009年12月)和第2部分 (2009年12月) , Ftrace函数的秘密 (2010年1月),最后是随内核提供的好的旧文档 (2008)。

通过使用跟踪实用程序,您可以了解内核如何进行缓冲以及内核,硬件(控制器,芯片组,CPU,磁盘技术),文件系统,IO调度程序等独特的其他function。 每个分配在这方面是不同的。 如果您有复杂的存储设备(群集FS,带有企业arrays的SSD,SSD),请准备好弄清楚自己的怪癖。 关于集群文件系统的一个警告:他们经常涉及一个用户空间组件,可能会导致大量的意外延迟,我们大多数人认为是内核,但比这更复杂。

到目前为止,迄今为止我所能find的最好的文本是Neil Brown于2009年撰写的题为“ Linux内核devise模式 ”的文章。 尼尔打了很多你提出的话题,还有更多。

我所知道的一件事是,这个景观不断变化,特别是在调度舞台上。 试着去了解你的angular落里发生了什么事情,并计算你没有编码到这些组件之一的祝福。