Unix域套接字是否执行任何文件系统读写操作?

4

使用unix域套接字的memcached,是否存在文件系统读/写?如果有:这对试图减少或完全清除任何文件系统操作的工具来说不是一个缺点吗?

或者用另一种方式问,是否有可能仅使用内存进行unix域套接字?

我仍然不确定Unix Domain Sockets是否使用文件系统,我不是C语言专家,但对https://github.com/torvalds/linux/blob/master/net/unix/af_unix.c实现有一些了解,我看到有文件系统使用。那么这不仅可以在内存中工作吗?

编辑:阅读我的问题和描述后,我意识到我问了很多问题,而且问题本身几乎与描述不同。我想填补我脑海中的信息空白,抱歉造成混淆。

1个回答

9

Linux内核本身不保留任何内部数据或应用程序数据。您可以在没有挂载磁盘的情况下使用所有内核功能。

您必须区分文件系统和磁盘。文件系统可以完全虚拟,它可以驻留在内存中或网络上。

一些POSIX操作使用路径作为唯一标识符,包括UNIX域套接字。路径仅作为标识符存在。例如,您可以将其放置在tmpfs中以避免使用任何磁盘。在现代Linux系统上,/tmp/通常被挂载到tmpfs

请注意,即使您的套接字端点位于驻留在磁盘上的文件系统中,磁盘使用也仍然微不足道。由于路径仅用于标识/查找套接字本身,因此实际数据中没有任何数据被写入磁盘。同时,内核还会将路径缓存在内存中。


谢谢@ypnos,我觉得我错过了一些基本点,在我的本地Linux中,我看到有5个tmpfs文件系统和几个挂载的路径。例如:/run,但是我看到有一个套接字文件位于/var/run/libvirt/libvirt-sock,但/var/run没有挂载在tmpfs上,这意味着它可能在/dev/sda3上,那么这是否意味着套接字文件确切地写入磁盘?还是还有其他潜在的概念? - FZE
我刚刚编辑了我的回答,以澄清这个问题。请看最后一段。 - ypnos
我明白了,感谢进一步的澄清。那么,“Linux内核本身不会保留任何内部数据或应用程序数据。”这就是经验法则! - FZE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接