把 unix socket 建在 /dev/shm 会提高性能么?


我发现很多中文的教程都说这样可以提高性能,但找不到英文的资料支持这一观点。

例如: http://blog.chinaunix.net/uid-26156216-id-3502458.html

我们可以直接在/dev/shm下使用创建文件,而不用再mkfs格式化文件系统,因为都是在内存中操作。所以/dev/shm下的文件I/O速度相对很快利用这点。我们可以把php.socket放在/dev/shm下加速工作效率

以及: https://blog.linuxeye.com/364.html

Socket是使用unix domain socket连接套接字/dev/shm/php-cgi.sock(很多教程使用路径/tmp,而路径/dev/shm是个tmpfs,速度比磁盘快得多)

Linux

水无月清姬 9 years, 8 months ago

从某种程度上来说应该快一点 因为如果把socket建立在普通的文件系统上,创建、修改inode数据,会涉及到磁盘寻道.而在tmpfs上,由于是内存,这些操作的overhead会小些.
不过整个socket的数据还是会在内存缓冲区里存储,所以socket的数据传输速度上应该不会有差别。

拯救大姨妈 answered 9 years, 8 months ago

理论上来说创建、检索和删除会快一点,数据传输没有差别。实际上嘛,你把 socket 放 /dev/shm 下就是找抽,那么一点点差别别说人了,一般连程序都察觉不到。那个是放共享内存之类的东西用的。

socket 建议存放地址:

  • /run:这个是比较新的位置,专门用于存放运行时的东西,比如 socket、pidfile、
    lock file 等,是 tmpfs。FreeDesktop 还专门给每用户弄了目录(/run/user/$UID)。
  • /tmp:这个一般也是 tmpfs,也可以是普通文件系统。不过长期不使用的文件可能被清
    除(systemd 会定期清理)。
  • 「抽象套接字」(abstract socket),即地址的第一个字符为 NUL 字符的套接字。不
    对应到文件系统的。目前只有 Linux 支持。
约束之青鸟 answered 9 years, 8 months ago

Your Answer