我正在爲C編寫Linux 2.6.X內核的自定義數據庫引擎,我需要知道用O_DIRECT標誌打開的文件的write()系統調用的最小寫入大小是多少?在文檔中說它自Linux 2.6內核版本起可以使用512字節塊。但是,如果我的硬盤使用8K塊呢?在這種情況下它會在寫入時返回EINVAL錯誤嗎?我聽說512字節扇區的磁盤已經過時,新磁盤使用8K扇區,所以我需要確保當用戶在這種磁盤上嘗試時,我的應用不會崩潰。 如果可以在8k扇區的磁盤上使用512字節的寫入,當我寫入時會發生什麼情況,比如2個512字節的數據塊,linux內核是否從磁盤讀取8k扇區,替換我告訴它的1k數據塊寫入8k扇區然後寫回磁盤?這會很慢!最小寫入大小與O_DIRECT
另外,我還有一個關於這個問題的問題,如果在打開文件時使用原始設備或ext3文件系統,最小寫入大小是否會有所不同?
據我所知,沒有最小尺寸。如果您願意,您可以一次寫入一個字節,但在這種情況下性能會很差。最佳寫入可能是磁盤塊大小的多倍。 – 2012-01-18 14:25:07
http://stackoverflow.com/a/8803741/841108是一個非常相關的問題的答案。我建議寫64k字節。也許可以進行配置,因爲最佳尺寸取決於系統和硬件。 – 2012-01-18 15:03:59
「據我所知,沒有最小尺寸」< - 這是不正確的。我只編寫了一個寫例程,它返回EINVAL,因爲寫入大小不是512字節的倍數 – Nulik 2012-01-18 15:54:42