2012-10-29 86 views
1

我想知道在什麼情況下直接I/O傳輸將會失敗?direct_io故障的原因

我對此有三個子查詢。按照「瞭解Linux內核」一書。

  1. Linux提供了一種繞過頁面緩存的簡單方法:直接I/O傳輸。在每次I/O直接傳輸中,內核對磁盤控制器進行編程,以將數據直接從屬於自緩存應用程序的用戶模式地址空間的頁面傳輸到頁面。

- 所以要解釋失敗,需要檢查應用程序是否具有自我緩存功能?不知道如何做到這一點。

2.此外,該書說:「當自緩存應用程序希望直接訪問文件時,它會打開指定O_DIRECT標誌的文件。在服務open()系統調用時,dentry_open()函數檢查對正在打開的文件的address_space對象實施direct_IO方法,並在相反的情況下返回錯誤代碼「。

- 除了這個可以解釋直接I/O故障的任何其他原因?

3.Will此命令 「DD如果= MYFILE BS = 1M的=的/ dev /零計數= 1周的oflag =直接」 任何故障在linux(假設可用的足夠的磁盤空間)?

回答

0

底層文件系統和塊設備必須支持O_DIRECT標誌。此命令將失敗,因爲tmpfs不支持O_DIRECT

dd if=/dev/zero of=/dev/shm/test bs=1M count=1 oflag=direct 

寫入大小必須是底層驅動程序塊大小的乘積。此命令將失敗,因爲123不乘以512:

dd if=/dev/zero of=myfile bs=123 count=1 oflag=direct