FUA,冲洗和订购

时间:2017-01-11 23:23:45

标签: linux linux-kernel nvm

FUA命令通常意味着在信令完成之前需要将数据提交到NVM

根据我的理解,不需要在FUA命令之前将数据刷新到NVM

1。 如果我们有 LBA0(缓存中的 ),LBA1(缓存),带有FUA的LBA0,

首先完成带有FUA的LBA0然后完成缓存中的LBA0吗? 这两个是否有订购要求?

2。 如果我们有命令:

Write LBA0 with X

Write LBA1 with Y

Write LBA0 with Z and FUA is set. 

READ LBA0 

可以读取LBA0返回X还是Z?

3。 另一个问题是关于FLUSH

如果flush附带数据:

写入缓存中的数据必须在标记为Flush执行的BIO之前提交。

如果FS问题:

WRITE LBA0 with X (1) 

FLUSH

WRITE LBA0 with Y (2)

如果在FLUSH完成后发出(2),则保证排序。 但是,如果在FLUSH完成之前发出(2),那么两者都在飞行命令中,可以(2)在FLUSH之前完成吗?

1 个答案:

答案 0 :(得分:2)

我的理解是https://lwn.net/Articles/400541/

描述了块I / O障碍的Linux内核处理的当前状态

也就是说,排队的请求(无论是软件还是硬件(NCQ,TCQ))通常是无序的,内核或硬件可以按任何顺序自由处理它们。如果需要订购,更高级别(例如文件系统)负责等待完成。

比如说,如果文件系统希望在写入日志提交记录X之前将A,B,C写入磁盘,则必须执行类似

的操作
  1. 提交A,B,C
  2. 等待A,B,C完成
  3. 问题FLUSH(确保A,B,C从磁盘缓存转到持久存储)
  4. 使用FUA位设置写入X.
    • 或者,如果HW不支持FUA,则可以通过模拟来实现
      1. 写X
      2. 等待X完成
      3. 问题FLUSH
  5. 现在,提出您的问题:

    1. 不,没有订购要求。

    2. 未指定。

    3. 我不确定,但我相信FLUSH是无序的,就像其他命令一样。