場景A:通過nfs共享mmap文件?
要共享的同一主機上運行的兩個過程之間的存儲器中的讀/寫塊,喬mmaps從兩種方法中相同的本地文件。
情形B:
要共享的在兩個不同的主機上運行的兩個進程之間的存儲器的讀/寫塊,喬股經由主機之間NFS一個文件,然後mmaps共享來自兩個進程的文件。
有沒有人試過方案B?情景B中出現的哪些額外問題不適用於情景A?
場景A:通過nfs共享mmap文件?
要共享的同一主機上運行的兩個過程之間的存儲器中的讀/寫塊,喬mmaps從兩種方法中相同的本地文件。
情形B:
要共享的在兩個不同的主機上運行的兩個進程之間的存儲器的讀/寫塊,喬股經由主機之間NFS一個文件,然後mmaps共享來自兩個進程的文件。
有沒有人試過方案B?情景B中出現的哪些額外問題不適用於情景A?
我想說方案B擁有各類問題(假設其工作原理在評論中所建議的)。最明顯的是標準併發性問題 - 2個進程共享1個資源,沒有任何形式的鎖定等。這可能會導致問題...不確定NFS在這方面是否有其獨特的怪癖。
假設你能找到解決的併發問題弄好了,你現在是在保持穩定的(和快速)的網絡連接的依賴。顯然,如果網絡退出,您可能會錯過一些更改。這是否重要取決於你的架構。
我的想法是這聽起來像一個簡單的方式來分享在不同機器上的內存塊,但我不能說我聽說過它正在做這讓我覺得這也不是那麼好。當我認爲proc之間共享數據時,我認爲數據庫,消息或專用服務器。如果您做一個PROC主(處理併發和擁有的概念 - 即無論這傢伙說的是數據的最佳副本)它可能工作...
MMAP將不共享數據,而無需額外的一些這種情況下,動作。
如果更改文件的mmaped部分數據的變化將只存儲在內存中。直到msync
或者munmap或者關閉甚至決定OS內核及其FS,它們纔會被刷新到文件系統(本地或遠程)。
使用NFS時,鎖定和存儲數據將比使用本地FS更慢。刷新超時和文件操作時間也會有所不同。
On the sister site人們說NFS可能緩存策略很差,因此將NFS服務器的I/O請求比I/O請求計數與本地FS進行比較要多得多。
您需要字節範圍鎖才能正確行爲。它們在NFS> = v4.0中可用。
你可能會得到'ENODEV'。但是編寫一個試圖從NFS映射文件的程序比編寫這個問題需要更少的擊鍵。 – C2H5OH 2012-04-28 21:34:45
@ C2H50H:爲什麼會返回NODEV?我很確定mmap系統調用會返回成功 - 但是這不能回答我的問題。 – 2012-04-28 21:39:25