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
之前完成吗?
答案 0 :(得分:2)
我的理解是https://lwn.net/Articles/400541/
描述了块I / O障碍的Linux内核处理的当前状态也就是说,排队的请求(无论是软件还是硬件(NCQ,TCQ))通常是无序的,内核或硬件可以按任何顺序自由处理它们。如果需要订购,更高级别(例如文件系统)负责等待完成。
比如说,如果文件系统希望在写入日志提交记录X之前将A,B,C写入磁盘,则必须执行类似
的操作现在,提出您的问题:
不,没有订购要求。
未指定。
我不确定,但我相信FLUSH是无序的,就像其他命令一样。