FUA,冲洗和订购
FUA, flush and ordering
A FUA
命令通常意味着数据需要在信号完成之前提交给 NVM
。
根据我的理解,FUA
命令之前没有要求将数据刷新到NVM
。
1。
如果我们有
LBA0(缓存),LBA1(缓存),LBA0 带 FUA,
是否可以先完成带有FUA 的LBA0,然后再完成Cache 中的LBA0?
两者有顺序要求吗?
2。
同样,如果我们有命令:
Write LBA0 with X
Write LBA1 with Y
Write LBA0 with Z and FUA is set.
READ LBA0
可以读取 LBA0
return X 或 Z?
3。
另一个问题是关于FLUSH
的:
如果flush
自带一个数据:
写入缓存中的数据必须在执行标记为 Flush 的 BIO
之前提交。
如果 FS
问题:
WRITE LBA0 with X (1)
FLUSH
WRITE LBA0 with Y (2)
如果 (2) 在 FLUSH
完成后发出,则保证顺序。
但是,如果 (2) 在 FLUSH
完成之前发出,那么两者都在飞行命令中,(2) 可以在 FLUSH
之前完成吗?
我的理解是 Linux 内核处理块 I/O 障碍的当前状态由 https://lwn.net/Articles/400541/
描述
也就是说,排队的请求(无论是软件还是硬件(NCQ、TCQ))通常是无序的,内核或硬件可以自由地以任何顺序处理它们。如果需要排序,更高层(例如文件系统)负责等待完成。
比如说,如果文件系统想要在写入日志提交记录 X 之前将 A、B、C 写入磁盘,它必须执行类似
的操作
- 提交 A、B、C
- 等待A、B、C完成
- 发出 FLUSH(确保 A、B、C 从磁盘缓存转到持久存储)
- 设置 FUA 位写入 X
- 或者,如果硬件不支持 FUA,可以通过以下方式模拟
- 写 X
- 等待 X 完成
- 发出 FLUSH
现在,针对您的问题:
没有,没有订购要求
未指定。
我不确定,但我相信 FLUSH 是无序的,就像其他命令一样。
A FUA
命令通常意味着数据需要在信号完成之前提交给 NVM
。
根据我的理解,FUA
命令之前没有要求将数据刷新到NVM
。
1。 如果我们有 LBA0(缓存),LBA1(缓存),LBA0 带 FUA,
是否可以先完成带有FUA 的LBA0,然后再完成Cache 中的LBA0? 两者有顺序要求吗?
2。 同样,如果我们有命令:
Write LBA0 with X
Write LBA1 with Y
Write LBA0 with Z and FUA is set.
READ LBA0
可以读取 LBA0
return X 或 Z?
3。
另一个问题是关于FLUSH
的:
如果flush
自带一个数据:
写入缓存中的数据必须在执行标记为 Flush 的 BIO
之前提交。
如果 FS
问题:
WRITE LBA0 with X (1)
FLUSH
WRITE LBA0 with Y (2)
如果 (2) 在 FLUSH
完成后发出,则保证顺序。
但是,如果 (2) 在 FLUSH
完成之前发出,那么两者都在飞行命令中,(2) 可以在 FLUSH
之前完成吗?
我的理解是 Linux 内核处理块 I/O 障碍的当前状态由 https://lwn.net/Articles/400541/
描述也就是说,排队的请求(无论是软件还是硬件(NCQ、TCQ))通常是无序的,内核或硬件可以自由地以任何顺序处理它们。如果需要排序,更高层(例如文件系统)负责等待完成。
比如说,如果文件系统想要在写入日志提交记录 X 之前将 A、B、C 写入磁盘,它必须执行类似
的操作- 提交 A、B、C
- 等待A、B、C完成
- 发出 FLUSH(确保 A、B、C 从磁盘缓存转到持久存储)
- 设置 FUA 位写入 X
- 或者,如果硬件不支持 FUA,可以通过以下方式模拟
- 写 X
- 等待 X 完成
- 发出 FLUSH
- 或者,如果硬件不支持 FUA,可以通过以下方式模拟
现在,针对您的问题:
没有,没有订购要求
未指定。
我不确定,但我相信 FLUSH 是无序的,就像其他命令一样。