2013-04-21 76 views
1

我的動機網絡I/O在一個FUSE文件系統

我很想寫使用FUSE分佈式文件系統並行。我還在設計代碼之前,我在跳,這會可能用C或圍棋,問題是,我該如何處理與網絡I/O並行?

我的問題

更具體地說,我想我的文件系統在本地寫的,有一個線程做網絡開銷異步。如果它在我的情況稍微延遲沒關係,我只是想避免緩慢寫入文件,因爲代碼有某處接觸一些慢速服務器。

我的理解

有兩個想法在我的腦海衝突。其一是,FUSE內核模塊使用我的程序的ABI劫持的過程,並調用特定的FUSE函數名我實現了(同步或異步,W/E),另一種是..程序運行,並阻斷接收來自內核模塊的事件(我不認爲是這種情況,但我可能是錯的)。

不管是什麼,不就意味着我可以簡單地啓動一個線程,做網絡的東西?我對於如何工作有點失落。謝謝。

回答

1

你不需要做任何劫持。 FUSE內核模塊註冊爲文件系統提供者(fusefs類型)。然後,它通過將它們分派到用戶模式進程來爲讀/寫/打開/ etc調用提供服務。當該進程返回時,內核模塊獲取返回值,並從相應的系統調用中返回。

如果您希望通過異步和多線程方式獲得服務器(即用戶模式進程),您只需將操作(假設它是寫入 - 您無法以此方式並行輸入)調度到另一個線程在那個過程中,並立即返回到FUSE。這樣,您的用戶模式進程就可以隨時向遠程服務器寫出數據。

您可以類似地嘗試並行讀取,但是這裏的問題是您將無法返回到FUSE(從而釋放讀取過程),直到您至少讀取數據的開始。

+0

這是有道理的。寫入可以是線程中的異步,但讀取仍然會遭受同樣的問題,因爲從服務器獲得答案時,我很久以前就會返回到FUSE。幸運的是,我的文件系統的設計並不需要這個。感謝您的幫助,今天嘗試了您的建議,我顯然回到了正確的軌道上! – 2013-04-22 18:36:15