'barrier' 挂载标志在 Linux 中是什么意思?

lea*_*ord 24 linux ext4 mount

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

屏障=0 / 屏障=1

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

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

假设正常顺序——journal 1,data 1;journal 2, data 2.
如果我设置了,会出现以下哪个排序结果barrier=0

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

rem*_*mmy 20

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

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

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

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