barrier linux,LinuxBarrierI/O的介绍有哪些呢? 爱问知识人
Barrier I/O的目的是使其之前的I/O在其之前寫入存儲介質,之后的I/O需要等到其寫入完成后才能得到執行。為了實現這個要求,我們最多需要執行2次flush(刷新)操作。(注意,這兒所說的flush,指的是刷新存儲設備的緩存。但并不是所有存儲設備都支持flush操作,所以不是所有設備都支持barrier I/O。
支持根據這個要求,需要在初始化磁盤設備的請求隊列時,顯式的表明該設備支持barrier I/O的類型并實現prepare flush 方法,參見”Linux Barrier I/O”。)第一次flush是把barrier I/O之前的所有數據刷新,當刷新成功,也就是這些數據被存儲設備告知確實寫入其介質后,提交Barrier I/O所在的請求。
然后執行第二次刷新,這次刷新的是Barrier I/O所攜帶的數據。當然,如果Barrier I/O沒有攜帶任何數據,則第二次刷新可以省略。此外,如果存儲設備支持FUA,則可以在提交Barrier I/O所攜帶的數據時,使用FUA命令。這樣可以直接知道Barrier I/O所攜帶的數據是否寫入成功,從而省略掉第二次刷新。
通過對Barrier I/O的處理過程,我們可以看到,其中最核心的是兩次刷新操作和中間的Barrier I/O。為了表示這兩次刷新操作以及該Barrier I/O,在Linux Barrier I/O的實現中,引入了3個輔助request: pre_flush_rq, bar_rq, post_flush_rq。
它們包含在磁盤設備的request_queue中。每當通用塊層接收到上面發下來的Barrier I/O請求,就會把該請求拷貝到bar_rq,并把這3個請求依次加入請求隊列,形成flush->barrier->flush請求序列。這樣,在處理請求時,便能實現barrier I/O所要求的功能。
當然,并不是所有設備都必須使用以上序列中的所有操作,具體要使用那些操作,是有設備自身特點決定的。
全部
總結
以上是生活随笔為你收集整理的barrier linux,LinuxBarrierI/O的介绍有哪些呢? 爱问知识人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 拦截webview资源请
- 下一篇: 深入了解 CPU 的型号、代际架构与微架