文档章节

Linux 下的 tempfs 与 /dev/shm

Konghy
 Konghy
发布于 2016/10/27 17:38
字数 1027
阅读 56
收藏 1
点赞 0
评论 0

tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件。

Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页,tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中;做这种决定是 VM 子系统的工作。tmpfs 文件系统所知道的就是它正在使用某种形式的虚拟内存。

由于 tmpfs 是基于内存的,因此速度是相当快的。另外 tmpfs 使用的 VM 资源是动态的,当删除 tmpfs 中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,当然在其中创建文件时也会动态的分配VM资源。另外,tmpfs 不具备持久性,重启后数据不保留。

/dev/shm 就是一个基于 tmpfs 的设备,在有些 Linux 发行版中 /dev/shm/run/shm/ 目录的一个软链接。实际上在很多系统上的 /run 是被挂载为 tmpsf 的。用 df -T 可以查看系统中的磁盘挂载情况:

文件系统          1K-块     已用     可用 已用% 挂载点
udev            1859684        4  1859680    1% /dev
tmpfs            374096     1524   372572    1% /run
/dev/sda8      76561456 36029540 36619724   50% /
none                  4        0        4    0% /sys/fs/cgroup
none               5120        0     5120    0% /run/lock
none            1870460    27688  1842772    2% /run/shm
none             102400       56   102344    1% /run/user

那么,我们就先来说说 /run 目录。现在我们知道,该目录是基于内存的,实际上它的前身是 /var/run 目录,后来被 /run 替换。这是因为 /var/run 文件系统并不是在系统一启动就是就绪的,而在此之前已经启动的进程就先将自己的运行信息存放在 /dev 中,/dev 同样是一种 tmpfs,而且是在系统一启动就可用的。但是 /dev 设计的本意是为了存放设备文件的,而不是为了保存进程运行时信息的,所以为了不引起混淆,/dev 中存放进程信息的文件都以 "." 开始命名,也就是都是隐藏文件夹。但是即便是这样,随着文件夹的数量越来越多,/dev 里面也就越来越混乱,于是就引入了替代方案,也就是 /run。实际上在很多系统上 /var/run 目录仍然存在,但其是 /run 目录的一个软链接。

/var/run 目录中主要存放的是自系统启动以来描述系统信息的文件。比较常见的用途是 daemon 进程将自己的 pid 保存到这个目录。

/dev/shm/ 是 Linux 下一个非常有用的目录,它的意思是 Shared memory,也就是共享内存。由于它在内存上,所以所有系统进程都能共享该目录。默认情况下它的大小是内存的一半。如果希望改变它的大小,可以用 mount 来管理:

mount -o size=4000M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

如果希望永久生效,可以修改 /etc/fstab 文件:

tmpfs /dev/shm tmpfs defaults,size=4G 0 0

利用 /dev/shm 可以做很多事情,这里说一个 Python 的应用。用 Python 做数据处理时,可能会用到 numpy,通常做数据处理时的数据量都是很大的,如果有多个进程都需要用到同样的数据,那么 /dev/shm 就派上了用场,也就是用共享内存技术。Python 有一个第三方库可以用来在多个进程间共享 numpy 数组,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 标准,能够兼容多个平台。

参考资料

© 著作权归作者所有

共有 人打赏支持
Konghy
粉丝 7
博文 22
码字总数 31889
作品 0
朝阳
程序员
linux下posix共享内存区shm_open error,以及信号量sem_open error

刚接触linux系统,买了本UNPv1来看看,在看posix共享内存区的时候,拿书带的源代码总是执行出问题,作者把对象创建在了/tmp下,但是我用的是ubuntu 10.04,linux系统下共享内存对象是创建在/...

卜星星
2013/04/05
0
1
解决办法:ORA-00845: MEMORY_TARGET not supported on thi

ORA-00845: MEMORY_TARGET not supported on this system RA:Linux系统的shm大小比SGA设置的小造成的,SGA设置为4G,而shm只有1G 解决办法: 1.临时解决 mount -o size=8G -o nr_inodes=1000...

青苗飞扬
06/26
0
0
linux下的/dev/shm[转]

/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。 /dev /shm/需要注...

雁南飞丶
2015/06/18
0
0
Linux hugepage的配置方法

/etc/security/limits.conf: weblogic soft memlock 6291456 (物理内存总和减2G) x10241024 weblogic hard memlock 6291456 /etc/sysctl.conf: kernel.shmmax = 7516192768 (cat /proc/me......

qazplm59
06/26
0
0
如何在linux下挂载NTFS格式的U盘或硬盘。

相信小伙伴们都有过这样的烦恼,就是在linux服务器上传文件过慢,而且还影响远程操作这样的问题当然可以通过,接入本地硬盘来解决,但是当你插入硬盘,mount 挂载的时候,就会出现报错错误的...

三极行者
06/26
0
0
linux的/dev/shm目录用于优化

我们日常操作中经常df –Th查看磁盘容量,那么/dev/shm的作用到底是什么? $ df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/sda2 ext3 57G 32G 23G 59% / /dev/sda5 ext3 476G 341...

果树啊
2015/07/14
0
0
Linux中挂载Windows里共享目录

将Windows里的F:sadoc文件夹右键点击设置为共享目录,共享用户为administrator # yum -y install cifs-utils #安装mount.cifs软件包 # mkdir /windows #创建挂载目录windows # mount.cifs //...

茁壮的小草
07/02
0
0
linux 挂载NTFS移动硬盘

[root@desktop2 ~]# fdisk -l Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot......

蓝狐乐队
2015/06/02
0
0
CentOS5.5 添加一块新硬盘,分区并设置系统启动自动挂载的方法

先把需要挂载的硬盘正确连接到电脑上,查看 BIOS,确保开机自检时,BIOS 能够检测并识别出新连接的硬盘,然后再进行下面的操作。 [root@Linux ~]# fdisk -l //查看当前磁盘信息,就会发现最下...

pureboys
2014/01/21
0
0
4.1 df命令 4.2 du命令 4.3-4.4 磁盘分区(上)(下)

4.1 df命令 4.2 du命令 4.3-4.4 磁盘分区(上)(下) 4.1 df命令 磁盘管理 查看磁盘分区的命令 df 报告文件系统磁盘空间使用情况 第一列:磁盘分区 第二列:分区的大小 第三列:已经使用的空...

JasonYan86
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn学习笔记之简单线性回归

简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项。线性回归的思想其实就是解一组方程,得到...

wangxuwei
9分钟前
0
0
feign之动态interceptor(二)

背景 上文提到了按照不同的feignClient可以根据多个不同的key来进行多个不同的bean的配置 那么我们如何完成多个interceptor的配置呢? 分析 我们刚提到多个配置的玄机就在FeignClientProper...

Mr_Qi
11分钟前
1
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
36分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
56分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
今天
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
3
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部