我在linux 2.6內核上使用ext4。我有字節數組的記錄,其範圍可能從幾百到16MB不等。對於每個記錄,在使用write()的應用程序中是否有任何好處,而不是說緩存X MB,然後在X MB上使用write()?任何使用緩衝在linux ext4文件系統上寫入數據?
如果在緩衝中有好處,那麼ext4會有什麼好的價值。這個問題適用於在ext4中描述多塊分配器行爲的人。
我的理解是文件系統會緩衝大小爲pagesize的倍數並嘗試在磁盤上刷新它們。如果提供給write()的緩衝區比文件系統緩衝區大,會發生什麼?這是一種粗暴的方式來強制文件系統刷新到磁盤()
2
A
回答
0
「正確」的答案取決於你真正想要做的數據。
write(2)被設計爲單行進入內核空間,並提供良好的I/O控制。但是,除非使用O_SYNC打開文件,否則數據僅進入內核的緩存,而不進入磁盤。 O_SYNC更改以確保文件被同步到磁盤。實際的寫入磁盤是由內核緩存發出的,ext4會嘗試分配一個大緩衝區來寫入,以最大限度地減少碎片,iirc。通常,使用緩衝或O_SYNC文件編寫(2)是控制數據是否進入內核或其是否仍在應用程序緩存中的好方法。
但是,對於寫入大量記錄,您可能會對寫入緩衝區列表中的數據的writev(2)感興趣。類似於write(2),它是一個原子調用(儘管當然只有在操作系統語義中,實際上不在磁盤上,除非再次使用直接I/O)。
相關問題
- 1. 修改由Ext4文件系統寫入磁盤的數據
- 2. 如何從ext4文件系統數據中提取文件?
- 3. 使用緩衝寫入器在新文件中寫入輸出
- 4. Ubuntu機器上的XFS或ext4文件系統mongodb服務器?
- 5. 寫入到文件系統
- 6. 使用Javascript寫入系統文件
- 7. 如何在FLTK中編寫面板任務欄以在Linux系統上使用
- 8. 使用小程序在客戶端系統上寫入文件
- 9. 在Linux平臺上捕獲文件系統系統調用
- 10. 如何在java中使用緩衝讀取器和緩衝寫入器讀取和寫入文件
- 11. 如何在有根系統上寫入* .kl文件並複製到系統上
- 12. 寫入Windows文件系統
- 13. 在Linux內核中安裝ext4文件系統的代碼在哪裏?
- 14. 使用Java中的緩衝寫入器編寫csv文件
- 15. 直接從原始分區從ext4文件系統讀取數據,無需掛載文件系統
- 16. 在文件系統上緩存
- 17. 如何使用Node tmp Package從緩衝區寫入文件
- 18. 在Linux proc文件系統
- 19. 緩衝的寫入器在文本文件上寫入內存垃圾
- 20. Linux系統調用寫入:內核是否保證數據寫入順序?
- 21. 使用緩衝IO寫入文件vs使用Goroutine
- 22. 你如何寫入緩衝區,然後寫入文件
- 23. 緩衝區寫入文件兩次
- 24. C語言:無緩衝寫入文件
- 25. 在Dokan文件系統上識別Office文件寫入操作
- 26. 如何在Linux系統上使用mmap()進行讀取和寫入
- 27. 使用ExtAudioFileWrite將Streamed mp3數據包的緩衝區寫入wav文件ios
- 28. fsync無法在ext3或ext4系統上工作
- 29. 如何使用php ssh exec將多行內容寫入任何linux文件系統?
- 30. 如何在Hadoop上更新或寫入文件系統?
即使緩衝內核調用的次數也可以有所作爲。這裏不太可能是個問題,但是1k x 1字節的寫入通常會比1 x 1k字節更差......當然,我選擇了極端值。 – 2012-04-21 23:44:09