2013-04-21 41 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