Linux 中的“barrier”挂载标志是什么意思?

Linux 中的“barrier”挂载标志是什么意思?

“屏障”安装选项的手册是:

屏障=0 / 屏障=1

这会禁用/启用 jbd 代码中写入屏障的使用。barrier=0 禁用,barrier=1 启用(默认)。这还需要一个可以支持屏障的 IO 堆栈,如果 jbd 在屏障写入时出错,它将再次禁用屏障并发出警告。写屏障强制执行日志提交的正确磁盘排序,使易失性磁盘写入缓存可以安全使用,但会带来一些性能损失。如果您的磁盘以某种方式由电池供电,则禁用屏障可以安全地提高性能。

但我不知道这句话是什么“日志提交的正确磁盘排序“ 方法。

假设正常顺序——日志1,数据1;日志2,数据2。
如果我设置,会出现以下哪种排序结果barrier=0

  1. 日志2,数据2;期刊1,数据1;
  2. 数据1,期刊1;数据2,日志2。

答案1

大多数现代文件系统都是日志文件系统,这意味着它们在称为日志的内部数据结构中跟踪尚未写入磁盘的更改。如果发生崩溃,该日志将被重播,以确保所有写入成功执行,防止文件损坏。

当实际将数据写入磁盘时,写缓存会重新排序写入以尝试最大化吞吐量,但它必须确保实际文件数据先于元数据写入磁盘,以确保如果发生崩溃元数据不会随着数据而过时。

问题是许多磁盘都有自己的缓存,这些缓存也可能会重新排序写入。一些文件系统会假设这种情况将会发生,并会强制磁盘在某些点刷新缓存以防止这种情况发生,这write barriers在 ext4 和 Linux 等系统中通常被称为。

对于现代磁盘来说,这样做的性能牺牲可以忽略不计,除非绝对必要,否则不应禁用写屏障。

答案2

这篇 LWN 文章:

在写入[日志]提交记录之前,文件系统代码必须绝对确保所有事务信息都已写入日志。仅以正确的顺序进行写入是不够的;现代驱动器维护大量内部缓存,并将重新排序操作以获得更好的性能。因此,文件系统必须在写入提交记录之前显式指示磁盘将所有日志数据获取到介质上;如果先写入提交记录,则日志可能会损坏。内核的块 I/O 子系统通过使用屏障来提供此功能;本质上,屏障禁止在屏障之后写入任何块,直到屏障之前写入的所有块都提交到介质。通过使用屏障,文件系统可以确保其磁盘结构始终保持一致。

相关内容