博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[用户态内存] 共享内存1---tmpfs和ramfs
阅读量:4281 次
发布时间:2019-05-27

本文共 2068 字,大约阅读时间需要 6 分钟。

文章目录

1.ramfs

ramfs是Linux下一种基于RAM做存储的文件系统,由于ramfs的实现就相当于把RAM作为最后一层的存储,所以在ramfs中不会使用swap。linux os看ramfs就像看普通硬盘一样,所以ramfs有一个较大缺陷就是它会吃光os的内存,哪怕你在mount时已经指定了该ramfs的大小。由于上述缺陷,ramfs只能root用户访问。

ramfs创建

mkdir -p /dev/myRamFsmount -t ramfs none /dev/myRamFs

mkdir -p /myRamFs#大小限制无效mount -t ramfs none /myRamFs -o maxsize=10000

2.tmpfs

tmpfs是一个将所有文件保存在虚拟内存中的一个临时文件系统。tmpfs中的所有内容都是临时的,因为tmpfs储存依托并不是硬盘而是内存。如果我们umount一个tmpfs实例,那么存储在其中的所有内容将丢失。(tmpfs puts everything into the kernel internal caches)

因为tmpfs存储的内容都是通过VM(Virtual Memory)管理的,所以tmpfs的文件存储介质包括真实的物理内存和swap磁盘,但在swap中的读写速度相对于物理内存要慢很多。由上可知tmpfs的最大存储空间为系统物理内存空间+swap空间,但是tmpfs本身并不知道实际使用的空间是物理内存还是swap磁盘空间。

tmpfs有最大容量限制,但是我们也可以通过"mount -o remount …"命令对tmpfs的容量大小进行调整。

如果要比较tmpfs和ramfs的区别,那就是ramfs不会使用swap,另外ramfs创建后没有容量大小的限制,存在耗尽内存的风险。

另外一类与tmpfs相似的东西是RAM disk(/dev/ram*),它是将内存中一块固定大小的区域用来模拟一块硬盘。在使用RAM disk前,你必须在它上面创建一个ordinary filesystem 。Ram disk不能使用swap空间,也不能动态调整它的空间大小。

因为tmpfs中所有的内容存储在page cache或swap空间中,因此tmpfs在cat /proc/meminfo命令中显示为"Shmem",而在free命令中显示为"Shared"。需要注意的是上面命令的计算方式包括了shared memory(shmen,see ipcs(1))。因此获取他们最可靠的方式是通过df和du命令。

tmpfs有下列用法:

  1. tmpfs总会存在一些用户态根本看不到内核内部挂载,这些用于共享匿名映射和SYSV共享内存。并且这种tmfs的mount是不依赖 CONFIG_TMPFS 内核配置的,也就是如果没有配置CONFIG_TMPFS ,用户态是不能构建tmpfs的,但内核态中该机制是存在的。

  2. glibc2.2及以上版本期望tmpfs被挂载到/dev/shm上,用于POSIX共享内存(shm_open,shm_unlink).若想linux os启动默认tmpfs挂载到/dev/shm,需要添加下列内容到文件/etc/fstab中的某一行中:

    tmpfs	/dev/shm	tmpfs	defaults	0 0

    当然我们也可以在shell终端自定义创建tmfs文件目录:

    mkdir /dev/myshmmount -t tmpfs -o size=1024M tmpfs /dev/myshm#resize大小mount -size=64M -o remount /dev/myshm#查看相关信息df -lh

3 ramfs和tmpfs性能对比和异同

同等环境条件下tmpfs在性能方面优于ramfs。因为ramfs是将内存作为虚拟文件系统的底层存储介质,那么当一个进程使用ramfs时处理数据时会有这样一条数据处理路径:

RAMFS -> PAGE CACHE -> 进程

对于tmpfs,因为采用虚拟内存实现的,则tmpfs被认为没有后备设备(backing store)。那么当一个进程使用tmpfs时处理数据时会有这样一条数据处理路径:

TMPFS -> 进程 (tmpfs充当page cache的作用)

通过以上的设计,tmpfs相较于ramfs就少了一次page cache到RAM的数据拷贝,虽然内存间的数据拷贝很快,但这些操作也会增加ramfs的时耗。因此在性能上tmpfs优于ramfs。

ramfs与tmpfs的异同

  1. ramfs空间不会被限制,会因为数据的不断写入而自动增长空间,直到内存耗尽;而tmpfs在mount时可以限制空间大小,不会自动增长(但可以通过"mount -o remount …")。
  2. ramfs不会用swap,tmpfs会用swap
  3. ramfs和tmpfs都用于提升性能,但tmpfs性能更佳

参考:

转载地址:http://dpbgi.baihongyu.com/

你可能感兴趣的文章
流程不紧扣价值,就是伪流程
查看>>
算法时间空间复杂度学习总结
查看>>
10分钟掌握数据类型、索引、查询的MySQL优化技巧
查看>>
Go 网络编程示例
查看>>
Web指纹识别技术研究与优化实现(CMS)
查看>>
JNI基础知识(java中的一套接口,用来跟c和c++通信)
查看>>
如何在线关闭一个tcp socket连接
查看>>
最全的微服务知识科普
查看>>
LVDS接口分类,时序,输出格式
查看>>
selinux在 android 上的实现
查看>>
快速解决Android中的selinux权限问题
查看>>
request_firmware函数的使用
查看>>
Linux内核中的软中断、tasklet和工作队列详解
查看>>
Ubuntu 如何更换内核
查看>>
Android 9.0 Auto及m4 core倒车逻辑--基于imx8qm
查看>>
FreeRTOS移植——基于stm32f1
查看>>
关于FreeRTOS移植到STM32F103上的步骤以及注意事项
查看>>
轻松几步实现在STM32上运行FreeRTOS任务
查看>>
Linux 命令使用:cat与tac、more与less、head与tail
查看>>
Linux中的split命令,文件切割
查看>>