2015-09-05 59 views
2

我遇到了使用LVM和我正在使用的磁盤驅動程序的爭用情況。它看起來像vgcreate和lvcreate在O_DIRECT模式下執行它們的IO。使用-vvv運行這些命令時我發現了這一點。當使用O_DIRECT寫入時,是否有必要使無效/丟棄緩存來讀取?

Clearing start of logical volume "test" 
    /dev/Finance-PG-vg/test: Added to device cache 
    Opened /dev/Finance-PG-vg/test RW O_DIRECT 
    Wiping /dev/Finance-PG-vg/test at sector 0 length 8 sectors 
    /dev/Finance-PG-vg/test: block size is 4096 bytes 
    Closed /dev/Finance-PG-vg/test 

具體而言,我懷疑我們的讀取命中緩存,並沒有獲取最新的磁盤內容。

如果使用O_DIRECT寫入內容,我的理解是繞過緩存。因此,對該扇區的任何讀取都將從緩存中接收舊數據,至少在緩存失效之前。所以如果我想讀幾秒鐘內寫的O_DIRECT,我應該首先刪除緩存?

對不起?

+0

我已經試過在每個lvm命令後丟棄緩存,沒有運氣。閱讀時,我仍然會定期得到零。 – Ahhmyface

回答

1

有幾個混亂這裏:

  • 的工具,你提到最有可能使用O_DIRECT以確保新的LVM配置是持久的。 LVM元數據實際上存儲在您提供的所有物理磁盤/分區上的特定位置。

  • 寫入LVM設備默認情況下不使用O_DIRECT(儘管打開文件時可以傳遞此標誌)。

  • 用O_DIRECT繞過緩存並不意味着你會得到過時的數據。讓我們假設你打開一個文件,寫入文件,關閉它,然後用O_DIRECT再次打開它並讀取文件。讀取保證將最新的更改返回到文件。沒有過時的數據返回。使用O_DIRECT時不需要刪除緩存。

相關問題