linux - FUSE 文件系统的并行网络 I/O

标签 linux file kernel system fuse

我的动机

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

我的问题

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

我的理解

我脑子里有两个相互冲突的想法。一个是FUSE内核模块使用我的程序的ABI来劫持进程并调用我实现的特定FUSE函数名称(同步或异步,w/e),另一个是..程序正在运行,并且阻塞到从内核模块接收事件(我不认为是这种情况,但我可能是错的)。

无论它是什么,这是否意味着我可以简单地启动一个线程并执行网络操作?我有点不知道它是如何工作的。谢谢。

最佳答案

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

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

您可以类似地尝试并行化读取,但这里的问题是,在至少读取数据的开头之前,您将无法返回 FUSE(从而释放读取过程)。

关于linux - FUSE 文件系统的并行网络 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16137298/

相关文章:

Linux内核的Linux参数sysctl列表及其解释

linux - 如何使用 grep 只获取一行的一部分

python - (centos6.6) 更新python2.7.3之前,是python 2.6.6。运行 pybot --version 时出现错误

python - for循环中的if-else在python中不起作用

linux - skb_dst() 返回 NULL

linux - 哪个版本的linux内核开始支持sd/sdio version 3.00?

linux - 我可以使用 Perl、DBI 和 DBD::Pg 在另一台机器上访问 Postgre 数据库吗?

linux - 使用 PowerShell 测试与 Unix 服务器的连接

c++ - 将逗号分隔的数据分配给 vector

ruby - 将文件中的字节数据读入多个整数