/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?
Posted
技术标签:
【中文标题】/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?【英文标题】:/tmp vs. /dev/shm for temp file storage on Linux? 【发布时间】:2012-04-02 11:15:41 【问题描述】:我的脚本需要创建数百个快速连续的小型临时文件,并很快读回,然后取消链接。
我的测试显示,即使在中等负载下,在 Linux 上将所述文件放入 /tmp
(到磁盘)或 /dev/shm
(文件系统级共享内存)中,性能差异也很小。我将此归因于文件系统缓存。
授予磁盘最终会受到文件系统操作的影响,但是在多个小的读写临时文件上,您为什么(不)推荐/dev/shm
而不是磁盘支持的目录?您是否注意到共享内存目录在缓存 VFS 上的性能大幅提升?
【问题讨论】:
【参考方案1】:/dev/shm
用于非常特殊的目的,而不是用于任意程序放入的文件。
相比之下,/tmp
是 exactly made for this。在我的系统上,/tmp
也是 tmpfs
,而 /var/tmp
是 designed 用于放置更大的文件,可能会保留更长时间。
【讨论】:
+1/dev/shm
是一个通用的tmpfs
是Linux 的实现细节,无论如何都不能保证(可用空间通常非常有限)。将/tmp
和/var/tmp
用于它们的用途。并且根据使用情况和文件系统,如果您创建和取消链接一个文件,它可能只会在缓存中,并且永远不会命中磁盘。
@ephemient - 文件创建并立即取消链接,即使缓存最终会命中磁盘,不是吗?
@glglgl - 在我们正在部署的系统上(在托管服务场景中)/tmp 不是由tmpfs
支持,而是由主 sda1 磁盘支持。否则,我同意保持标准,但这是我们目前的部署环境。
什么是“特殊目的”?
@tkarls 使用shm_open(3)
,您可以请求创建一个特殊的“共享内存”对象。一些实现(或一般的 Linux?)使用/dev/shm
来放置创建的对象。【参考方案2】:
本质上是一样的(当你有交换文件时,磁盘也隐式支持 shm)。
/tmp 的优点是它更难填满(考虑到您的硬盘可能比您的交换文件大)。并且得到了更广泛的支持。
【讨论】:
以上是关于/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?的主要内容,如果未能解决你的问题,请参考以下文章