0
我需要有關直接磁盤IO的幫助。我用標記爲O_DIRECT的文件描述符(fd)打開一個文件。在我的用戶空間應用程序中,我想從文件中讀取大量數據,並且這些數據僅用於一次。一塊未緩存的內存緩衝區通過「set_memory_uc」(使用x86)在我的內核模塊中分配,而「remap_pfn_range」與vm_page_prot設置爲非緩存(pgrot_noncached)。此緩衝區旨在用於通過PCIe進行DMA傳輸。通過mmap分配到/從緩衝區的直接磁盤IO分配
我試圖
讀(FD,緩衝液,LEN)
和
lseek的(FD,爲0x1000,SEEK_SET)
'緩衝' VA被對準到4K邊界。因此,沒有 'len個'(N * 4K)
的莫名其妙,「lseek'seems可行的,因爲打完電話後lseek的返回×1000
但 '讀' 返回-1
是否有任何限制直接磁盤讀取磁盤數據到mmap緩衝區?
+1 this。開始使用'O_DIRECT'幾乎總是一個錯誤。可能有合理的用途,但我真的無法想象一個有利的案例(實際上,而不是某人的想象)。唯一可爭論的「優點」是在寫作時更多的數據安全性,但這是一種幻想。除此之外,它不會更快,但通常比緩存讀取慢很多。 – Damon
謝謝你回答我的問題。我對「posix_fadvise()」的問題是磁盤讀取性能。 「O_DIRECT」和「posix_fadvise()」之間的數據流路徑是否不同?使用「O_DIRECT」數據的圖像被繞過OS緩衝區和緩存並直接轉移到物理內存以供磁盤讀取。但是「posix_fadvise()」仍然通過OS緩衝區和緩存。 –
@SharonLee:看到這裏:https://unix.stackexchange.com/questions/6467/use-of-o-direct-on-linux - 你相信'O_DIRECT'會更快,但它可能不會。 –