Linux I/O 缓冲参考

Linux I/O 缓冲参考

有人可以指出我关于 Linux I/O 系统的相当完整的参考资料吗,主要是如何处理和刷新所有缓冲区和缓存?

到目前为止,我的理解是

  • 应用程序缓冲区(包括 libc 分配的 fread/fwrite 缓冲区)
  • 读写操作的 VFS 缓冲区
  • 已映射的页面(与 VFS 缓冲区相同?)
  • 文件系统特定的缓冲区(与 VFS 缓冲区相同?文件系统至少提供了一些策略,例如 XFS 对写入缓存更积极)
  • 在转换为 SCSI/ATA 命令并传递给...之前,磁盘驱动程序可能有一些缓冲区。
  • 磁盘控制器可以有易失性、电池供电或没有缓存。刷新易失性缓存的机制是什么?屏障如何影响缓存?
  • 磁盘本身可以有一些缓存,具有与控制器相同的刷新问题。

显然这是一个相当混乱的描述,但希望它能显示我正在寻找的信息。我发现 Linux 内部文档非常稀疏;也许有一本好书涵盖了所有这些内容?讨论缓冲区在哪里复制和传输也很好。

答案1

哇哦。显然,您正在寻找非常特殊的部分和部件来解决特定问题。否则,您没有意识到您刚刚放弃了接下来一周的研究时间。了解您主题的所有内核内部结构将非常痛苦,因此您需要这样做:询问简单的问题并开始追踪。如果要关注一个简​​单、不令人困惑的问题,那么网络上有许多开发人员Linux 内核邮件列表他们是专家,能够解释为什么内部结构在您的情形下会如此运作。这可能需要几轮,但他们可以提供帮助。

如果问题只有一个目的,那么您可以使用的另一种方法是将可疑活动追踪到内核中,并了解它涉及的各个部分,而不是试图全部理解。幸运的是,有一个名为ftraceSystemTap ( stap) 的命令可以帮助您开始您的冒险之旅。许多内核开发人员希望更多人提出有关其内核的重要问题,这些工具将帮助他们做到这一点。Linux Weekly News 最近刊登了几篇文章ftrace追踪:不乏选择(2008 年 7 月),了解 ftrace(2009 年 3 月),使用 ftrace 调试内核 -第1部分(2009 年 12 月)和第2部分(2009 年 12 月),Ftrace 函数的秘密(2010 年 1 月),最后是老内核附带的文档(2008)。

通过使用跟踪实用程序,您可以了解内核如何进行缓冲以及内核、硬件(控制器、芯片组、CPU、磁盘技术)、文件系统、IO 调度程序等一系列其他独有的功能。在这方面,每个发行版都不同。如果您有复杂的存储设备(集群文件系统、带有企业阵列的 SAN、SSD),那么请准备好亲自动手了解它们的怪癖。关于集群文件系统的警告:它们经常涉及用户空间组件,这可能会导致大量意外延迟,我们大多数人将延迟归咎于内核,但实际情况要复杂得多。

到目前为止,我能找到的最好的文本是 Neil Brown 于 2009 年撰写的题为“Linux 内核设计模式“。尼尔谈到了你提出的很多话题以及更多其他话题。

有一件事我可以肯定,那就是这个领域在不断变化,尤其是在调度领域。只需尝试了解您所在的特定领域正在发生什么,并庆幸您不必为其中一个组件编写代码。

相关内容