Linux下tmpfs与ramfs的区别

ramfs是Linux下一种基于RAM做存储的文件系统。在使用过程中你就可以把ramfs理解为在普通的HDD上建立了一个文件系统,而现在HDD被替换成了RAM,因为是RAM做存储所以会有很高的存储效率。由于ramfs的实现就相当于把RAM作为最后一层的存储,所以在ramfs中不会使用swap。你什么时候听过会把HDD上的文件swap到哪里去吗?平常说的swap都是针对内存来说的,而ramfs底层的存储是RAM,虽然不是HDD,但是在Linux看来它就跟HDD一样。但是ramfs有一个很大的缺陷就是它会吃光系统所有的内存,即使你mount的时候指定了大小,同时它也只能被root用户访问。测试方法很简单:

sudo mount -t ramfs -o size=10M ramfs ./ramfs/

sudo dd if=/dev/zero of=./ramfs/test.file bs=1M count=20

测试时你会发现上面这个操作是能成功的,或者你再自己虚拟机上干脆做狠点,直接写一个比内存更大的文件,你会发现瞬间系统就卡主了。另外在dd命令如果不以root用户执行就会权限不够:

dd: opening `./ramfs/test.file‘: Permission denied

tmpfs也是Linux下的一个文件系统,它将所有的文件都保存在虚拟内存中,umount tmpfs后所有的数据也会丢失,tmpfs就是ramfs的衍生品。tmpfs使用了虚拟内存的机制,它会进行swap,但是它有一个相比ramfs的好处:mount时指定的size参数是起作用的,这样就能保证系统的安全,而不是像ramfs那样,一不留心因为写入数据太大吃光系统所有内存导致系统被hang住。在我文章最开始的那个例子中就是mount了一个10M大小的tmpfs,然后执行sql 命令(它需要创建的临时表大于10M),因为tmpfs限制了大小,因此也就报错。那么tmpfs适用的场景有哪些呢?在官方文档上主要有如下几点:

kernel 内部需要用到它,而我们是无法看到的

glibc 2.2以上的版本,必须有一个tmpfs被mount在/dev/shm用做POSIX shared memory

还有很多包括现在还不知道的用途

包括我现在的公司就有一个需求,某些数据如果放在磁盘上访问压力根本扛不住,因此临时做了一个tmpfs做缓存来减缓压力,当然这不是最终的解决之道。所以总结来说ramfs与tmpfs有如下几点异同:

ramfs会因为数据的写入自动增长空间,所以可能导致最后系统所有的内存耗完

tmpfs可以再mount时限定大小,不会自动增长

ramfs不会用swap

tmpfs会使用swap

两者都是用来提升效率,但是tmpfs比ramfs的性能更好(结果是对的,原理有待进一步探究)

时间: 2024-10-01 02:17:30

Linux下tmpfs与ramfs的区别的相关文章

Linux下tmpfs介绍及使用

tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由linux内核里面的vm子系统管理的.linux下面VM的大小由RM(Real Memory)和swap组成,RM的大小就是物理内存的大小,而Swap的大小是由自己决定的.Swap是通过硬盘虚拟出来的内存空间,因此它的读写速度相对RM(Real Memory)要慢许多,当一个进程申请一定数量的内存时,如内

Linux的tmpfs和ramfs

tmpfs tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(virtual memory) 是由linux内核里面的vm子系统管理. VM的大小由RM(Real Memory)和swap组成, RM就是物理内存, swap是通过硬盘虚拟出来的内存空间, 大小是可以配置的. swap的读写速度相对RM(Real Memory)要慢许多. 在物理内存不足时一个进程申请内存, 内核的vm子系统就会把RM里面的一些不常用的数据交换到swap

Windows下与Linux下编写socket程序的区别 《转载》

原文网址:http://blog.chinaunix.net/uid-2270658-id-308160.html [[Windows]] [Windows: 头文件的区别] #include<winsock.h>#include<winsock2.h> [Windows: 初始化的区别] WSADATA wsaData;WSAStartup(0x202,&wsaData); [Windows: 声明Socket] SOCKET类型 [Windows: Socket关闭]c

linux下su 与su -的区别

Linux下su与su -命令的区别在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令区别就是: su只是切换了root身份,但Shell环境仍然是普通用户的Shell:而su -连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误. su切换成root用

docker在windows下和linux下网络底层的一些区别

windows和linux下的docker运行时的网络结构是有区别的 a.windows下,默认使用Hyper-v创建一个linux虚拟机,承载docker.所以从外向内的路径为: windows -> linux系统的docker(hyper-v中) -> docker内的容器(应用) 其中docker desktop会默认创建一个网络DockerNAT,windows宿主分配IP:10.0.75.1 linux虚拟机会分配IP:10.0.75.2,并且还另外会分配内部网段IP:172.17

转://Linux下tmpfs介绍及使用

tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由linux内核里面的vm子系统管理的.linux下面VM的大小由RM(Real Memory)和swap组成,RM的大小就是物理内存的大小,而Swap的大小是由自己决定的.Swap是通过硬盘虚拟出来的内存空间,因此它的读写速度相对RM(Real Memory)要慢许多,当一个进程申请一定数量的内存时,如内

Linux下tmpfs介绍与使用

1 Tmpfs是什么 tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的内存或swap分区来存储文件.由此可见,tmpfs主要存储 暂存的文件. 优势 : 1. 动态文件系统的大小. 2.tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的tmpfs文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的.同时它也有一个缺点tmpfs数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的.所以有必要做一些脚本做诸如加载,绑定的操作. 注意:tmpfs

linux下 bin和sbin的区别

/bin里面一般是普通可执行程序,而/sbin里多为系统管理程序和服务程序 s应该是system这个单词 Linux系统各个目录的一般作用 记录一:Linux各个目录其实就是文件, 以下是根目录低下的个个目录的作用总结: 1. 根文件系统(/ ) 根文件系统中包含了几乎所有的文件目录.相当于中央系统.进入的最简单方法是:cd /   2. /usr文件系统 /usr文件系统中包含了命令库文件和在通常操作中不会修改的文件.安装程序默认就是安装在此文件内部某个子文件夹内.输入命令后系统默认执行/us

Linux下进程与线程的区别及查询方法

在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位线程自己基本上不拥有系统资源,只拥有一点 在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线