在Linux中,“屏障”安装标志是什么意思?


20

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

屏障= 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
如果您了解日记文件系统,那么您将认识到先写日记,然后执行日记,从而将实际数据写到磁盘,这一点很重要。屏障可确保在日记帐被执行之前将其写入。否则日记对我们毫无用处。
ctrl-alt-delor 2014年

@richard在BBWC硬RAID中使用“ nobarrier”标志时,磁盘无法确保在其数据执行之前就写入日志,这个条件没关系吗?
leafonsword

我不太了解这是否重要。我认为更糟糕的是,它就像没有期刊一样糟糕,但是我读过的书似乎并不那么糟糕,但是我无法辨别其细微之处。我有barrier=1,它对我来说运行得足够快。除非您做的是真正的重型工作,否则我将继续进行下去。您有ram缓冲区,因此将在可能的情况下将其写入,而不会降低应用程序的运行速度。而且写入磁盘的延迟很小。如果您想了解ram缓冲区可以加快多少速度,请在您的主目录中添加sync = 1,然后尝试使用您的系统一两​​天。
ctrl-alt-delor 2014年

Answers:


15

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

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

问题在于,许多磁盘都有自己的缓存,这些缓存也可能会对写入进行重新排序。一些文件系统会假定这种情况会发生,并会迫使磁盘在某些时候刷新缓存以防止这种情况发生,write barriers例如在ext4和Linux中通常称为。

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


1

这篇LWN文章中

在写入[journaling]提交记录之前,文件系统代码必须绝对确保所有交易信息都已记录到日志中。仅按正确的顺序进行写操作是不够的。现代驱动器维护着较大的内部缓存,并将对操作进行重新排序以提高性能。因此,文件系统必须在写入提交记录之前明确指示磁盘将所有日志数据都存储到介质上。如果首先写入提交记录,则日记可能已损坏。内核的块I / O子系统通过使用障碍使此功能可用。本质上,屏障禁止在屏障之后写入任何块,直到屏障之前写入的所有块都提交给介质为止。通过使用障碍,

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.