【问题标题】:Network i/o in parallel for a FUSE file systemFUSE 文件系统的并行网络 i/o
【发布时间】:2013-04-14 18:37:08
【问题描述】:

我的动机

我很想用 FUSE 编写一个分布式文件系统。在我开始之前,我还在设计代码。它可能会用 C 或 Go 编写,问题是,我如何并行处理网络 i/o?

我的问题

更具体地说,我希望我的文件系统在本地写入,并让一个线程异步处理网络开销。在我的情况下稍微延迟也没关系,我只是想避免缓慢写入文件,因为代码必须在某处联系一些慢速服务器。

我的理解

我脑子里有两个相互冲突的想法。一是FUSE内核模块使用我程序的ABI劫持进程,调用我实现的具体FUSE函数名(sync or async, w/e),二是..程序正在运行,阻塞到从内核模块接收事件(我不认为是这种情况,但我可能是错的)。

不管它是什么,这是否意味着我可以简单地启动一个线程并做网络工作?我对它的工作原理有点迷茫。谢谢。

【问题讨论】:

    标签: linux file kernel system fuse


    【解决方案1】:

    您无需进行任何劫持。 FUSE 内核模块注册为文件系统提供程序(类型为 fusefs)。然后它通过将它们分派到用户模式进程来服务读/写/打开/等调用。当该进程返回时,内核模块获取返回值,并从相应的系统调用中返回。

    如果您想通过异步和多线程来拥有服务器(即用户模式进程),您所要做的就是将操作(假设它是写入 - 您不能以这种方式并行化输入)分派到另一个线程该过程,并立即返回 FUSE。这样,您的用户模式进程就可以在闲暇时向远程服务器写入数据。

    您可以类似地尝试并行读取,但这里的问题是您将无法返回到 FUSE(并因此释放读取过程),直到您至少开始读取数据。

    【讨论】:

    • 有道理。线程中的写入可以是异步的,但读取仍然会遇到同样的问题,因为当我从服务器获得答案时,我早就回到了 FUSE。幸运的是,我的文件系统的设计不需要这个。感谢您的帮助,今天尝试了您的建议,我显然回到了正确的轨道上!
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2013-11-25
    • 2011-12-03
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多