pdflush,kjournald,swap等如何互操作?


17

最近看到了一个引发这种想法的问题。在这里或通过Google机器无法真正找到答案。基本上,我想知道内核I / O体系结构是如何分层的。例如,kjournald调度到pdflush还是相反?我的假设是pdflush(对于大容量存储I / O更通用)将处于较低级别并触发SCSI / ATA /执行实际执行写入所需的所有命令,并kjournald在写入之前处理较高级别的文件系统数据结构。我也可以用另一种方式查看它,kjournald直接与文件系统数据结构连接并不pdflush时醒来,然后通过将脏的页面缓存页面写入设备kjournald。两者也有可能由于其他原因根本不互动。

基本上:我需要某种方式来可视化(图形或仅作解释)用于将I / O分配到Linux内核中的大容量存储的基本体系结构。


1
这是您要找的东西吗?oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
也有此演示文稿:第7张幻灯片:slideshare.net/LukCzerner/local-file-systems-update
slm

1
SLM

1
我发现了这个交互式内核映射,它有助于显示内核的各个组件如何结合在一起:makelinux.net/kernel_map
slm

1
另一种资源,第19-24页:Linux性能和调优指南。看起来就像您要找的东西。
slm

Answers:


21

在我们讨论有关细节pdflushkjournald, andkswapd`,让我们首先得到究竟我们在Linux内核方面谈论的背景下,一些背景知识。

GNU / Linux架构

GNU / Linux的体系结构可以认为是两个空间:

  • 用户
  • 核心

用户空间内核空间之间是GNU C库(glibc)。这提供了将内核连接到用户空间应用程序的系统调用接口。

内核空间可以进一步细分为3个级别:

  • 系统调用界面
  • 建筑独立内核代码
  • 架构相关代码

顾名思义,系统调用接口glibc和内核之间提供接口。该建筑独立内核代码由逻辑单元,如VFS(虚拟文件系统)和VMM(虚拟内存管理)。该建筑相关代码是那些处理器和平台特有的代码对于给定的硬件体系结构的组件。

GNU / Linux架构图

                                 GNU / Linux架构的ss。

在本文的其余部分,我们将集中精力在内核空间内的VFS和VMM逻辑单元上。

GNU / Linux内核的子系统

                                    ss内核com

VFS子系统

通过对GNU / Linux内核的结构有一个高级概念,我们可以更深入地研究VFS子系统。该组件负责提供对各种块存储设备的访问,这些块存储设备最终映射到物理设备(HDD /等)上的文件系统(ext3 / ext4 /等)。

VFS图

vfs的ss

该图显示write()了用户流程中的a 如何遍历VFS,并最终向下到达设备驱动程序,然后将其写入物理存储介质。这是我们遇到的第一个地方pdflush。这是一个后台驻留程序,负责将脏数据和元数据缓冲区块刷新到后台的存储介质中。该图未显示此内容,但还有一个守护程序,kjournald位于旁边pdflush,执行类似的任务,将脏日志块写入磁盘。注意:日志块是ext4和JFS之类的文件系统在进行更改之前如何跟踪文件中磁盘更改的方式。

上述细节在进一步讨论本文

write()步骤概述

为了提供I / O系统系统操作的简单概述,我们将使用一个示例,其中该函数write()由User Space应用程序调用。

  1. 进程请求通过write()系统调用写入文件。
  2. 内核更新映射到文件的页面缓存。
  3. pdflush内核线程负责将页面缓存刷新到磁盘。
  4. 文件系统层将每个块缓冲区放在一起bio struct请参见第23页的1.4.3,“块层”),然后向块设备层提交写请求。
  5. 块设备层从上层获取请求并执行I / O电梯操作,然后将请求放入I / O请求队列。
  6. 设备驱动程序(例如SCSI或其他设备特定的驱动程序)将负责写操作。
  7. 磁盘设备固件执行硬件操作,例如搜索头,旋转以及将数据传输到磁盘上的扇区。

VMM子系统

继续进行更深入的研究,我们现在可以研究VMM子系统。该组件负责维护主内存(RAM),交换和物理存储介质之间的一致性。保持一致性的主要机制是bdflush。由于内存页被视为脏页,因此需要将其与存储介质上的数据同步。bdflush将与pdflush守护程序协调以将此数据与存储介质同步。

VMM图

                VMM的

交换

当系统内存不足或内核交换计时器到期时,kswapd守护程序将尝试释放页面。只要可用页面数保持在之上free_pages_highkswapd就什么都不做。但是,如果可用页面数降至以下,kswapd则将开始页面回收过程。在kswapd将页面标记为可重定位之后,bdflush将注意通过pdflush守护程序将所有未完成的更改同步到存储介质。

参考资料和进一步阅读


1
我要等待一天,然后我才能接受此答案并授予悬赏,以使它停留在“悬赏”页面上。这样,任何以前看过它的人都有机会注意到它现在有了答案。
布莱奇利2013年

1
再次感谢,顺便说一句。您真的全力以赴地进行了研究。
布莱奇利2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.