ramdisk tmpfs_site:csdn.net ramdisk的概念-程序员宅基地

http://www.lupaworld.com/home-space-do-blog-uid-56821-id-139835.html

一)ramdisk

1)概念

ramdisk就是指使用一部分内存空间来模拟硬盘分区,也就是说ramdisk是一个块设备,要用mkfs格式化,才能真正使用它.

.ramdisk在内核2.0/2.2版本就已经支持.
.ramdisk设备是它不允许重新声明它的内存空间,所以ramdisk块通常会一直占用空间的内存直到系统重启.
.ramdisk的一个缺点是在它上面创建一个文件系统,它同时会消耗缓冲区高速缓存和文件系统缓存,理论上,它可以消耗一个磁盘文件的两倍随机内存.
.ramdisk的另一个缺点是它大小固定,之后不能改变
.现在大多数需要RAM临时存储的应用程序会使用tmpfs文件系统而不是ramdisk设备.


2)ramdisk的应用

2.1)查看当前系统的ramdisk

[root@test1 ~]# ls -l /dev/ram*
lrwxrwxrwx 1 root root     4 Feb  6 13:51 /dev/ram -> ram1
brw-r----- 1 root disk 1,  0 Feb  6 13:50 /dev/ram0
brw-r----- 1 root disk 1,  1 Feb  6 13:50 /dev/ram1
brw-r----- 1 root disk 1, 10 Feb  6 13:50 /dev/ram10
brw-r----- 1 root disk 1, 11 Feb  6 13:50 /dev/ram11
brw-r----- 1 root disk 1, 12 Feb  6 13:50 /dev/ram12
brw-r----- 1 root disk 1, 13 Feb  6 13:50 /dev/ram13
brw-r----- 1 root disk 1, 14 Feb  6 13:50 /dev/ram14
brw-r----- 1 root disk 1, 15 Feb  6 13:50 /dev/ram15
brw-r----- 1 root disk 1,  2 Feb  6 13:50 /dev/ram2
brw-r----- 1 root disk 1,  3 Feb  6 13:50 /dev/ram3
brw-r----- 1 root disk 1,  4 Feb  6 13:50 /dev/ram4
brw-r----- 1 root disk 1,  5 Feb  6 13:50 /dev/ram5
brw-r----- 1 root disk 1,  6 Feb  6 13:50 /dev/ram6
brw-r----- 1 root disk 1,  7 Feb  6 13:50 /dev/ram7
brw-r----- 1 root disk 1,  8 Feb  6 13:50 /dev/ram8
brw-r----- 1 root disk 1,  9 Feb  6 13:50 /dev/ram9
lrwxrwxrwx 1 root root     4 Feb  6 13:51 /dev/ramdisk -> ram0


2.2)ramdisk的应用实例

2.2.1)格式化/dev/ram0
mkfs -t ext2 /dev/ram0

2.2.2)挂载/dev/ram0 到 /tmp/ramdisk0
mkdir /tmp/ramdisk0
mount /dev/ram0 /tmp/ramdisk0

2.2.3)查看当前挂载的情况
df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 252M     0  252M   0% /dev/shm
/dev/ram0              16M   24K   15M   1% /tmp/ramdisk0

 

二)tmpfs

1)概念:

tmpfs是一种基于内存的文件系统,也可以使用swap分区来存储.tmpfs是一个文件系统,并不是块设备,只要安装它,就可以使用了.

.tmpfs在存储时不需要块设备.
.tmpfs文件系统的数据完全存放在文件系统的缓存中.也可以是交换存储.
.可以在得到高速RAM硬盘优势的同时还享有虚拟内存的灵活性.
.tmpfs基本上是所有版本中共享内存设备/dev/shm的默认文件系统.
.在Linux内核中,虚拟内存资源由物理内存和交换分区组成,tmpfs向虚拟内存子系统请求页来存储文件,它同其它请求页的部分一样,不知道分配给自己的是物理内存还是交换分区存储.


2)tmpfs的应用

2.1)/dev/shm

/dev/shm类型是tmpfs,也就是用shm_open,shm_unlink请求共享内存时,系统会通过/dev/shm来响应请求,tmpfs本身也用的是文件系统缓存.

2.1.1)/dev/shm默认是物理内存的一半.

[root@test1 ~]# free -m
total       used       free     shared    buffers     cached
Mem:           503        190        313          0         14        140
-/+ buffers/cache:         35        467
Swap:         1027          0       1027


[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 252M     0  252M   0% /dev/shm

2.1.2)更改/dev/shm的大小

现在的/dev/shm是252M
[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 252M     0  252M   0% /dev/shm

修改tmpfs挂载项的size为512M
[root@test1 ~]# vi /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
tmpfs                   /dev/shm                tmpfs   defaults,size=512M        0 0
proc                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/loop0              /mnt/acltest            ext3    defaults,acl    0 0

卸载/dev/shm,再挂载/dev/shm,最后查看/dev/shm的大小

[root@test1 ~]# umount /dev/shm
[root@test1 ~]# mount /dev/shm
[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 512M     0  512M   0% /dev/shm


2.1.3)利用/dev/shm来存取文件,并查看cache的利用情况

现在/dev/shm的利用率为0
[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 512M     0  512M   0% /dev/shm

内存中文件系统缓存的cached为141M
[root@test1 ~]# free -m
total       used       free     shared    buffers     cached
Mem:           503        190        312          0         14        141
-/+ buffers/cache:         35        468
Swap:         1027          0       1027

在/dev/shm/下新建一个文件test,大小为10M
[root@test1 ~]# dd if=/dev/zero f=/dev/shm/test bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0511599 seconds, 205 MB/s

现在的cached已经是151M
[root@test1 ~]# free -m
total       used       free     shared    buffers     cached
Mem:           503        200        302          0         14        151
-/+ buffers/cache:         35        468
Swap:         1027          0       1027

/dev/shm已经被占用了10M
[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 512M   11M  502M   2% /dev/shm

 

2.2)利用tmpfs来提高磁盘的读写

新建/mnt/disktest目录,并通过tmpfs挂载到/mnt/disktest目录.

mkdir /mnt/disktest
[root@test1 ~]# mount tmpfs /mnt/disktest -t tmpfs -o size=128M
[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.1G   15G  18% /
tmpfs                 512M   11M  502M   2% /dev/shm
tmpfs                 128M     0  128M   0% /mnt/disktest

在/mnt/disktest下新建100MB的文件,共消耗了0.317秒,传输速度为315 MB/s
[root@test1 ~]# time dd if=/dev/zero f=/mnt/disktest/testfile bs=1MB count=100
100+0 records in
100+0 records out
100000000 bytes (100 MB) copied, 0.317704 seconds, 315 MB/s

real    0m0.346s
user    0m0.000s
sys     0m0.343s

在/tmp下新建100MB的文件,共消耗了0.815秒,传输速度为128MB/s
[root@test1 ~]# time dd if=/dev/zero f=/tmp/testfile bs=1MB count=100
100+0 records in
100+0 records out
100000000 bytes (100 MB) copied, 0.815914 seconds, 123 MB/s

real    0m0.865s
user    0m0.004s
sys     0m0.687s

以上的测试说明了tmpfs能明显的提高速度.


2.3)释放tmpfs的测试

查看占用cached的文件
[root@test1 ~]# ls -lh /mnt/disktest/testfile
-rw-r--r-- 1 root root 96M Feb 22 12:05 /mnt/disktest/testfile

[root@test1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  3.2G   15G  18% /
tmpfs                 512M     0  512M   0% /dev/shm
tmpfs                 128M   96M   33M  75% /mnt/disktest

删除/mnt/disktest/testfile,查看是否释放掉cached

没删除之前:
[root@test1 ~]# free
total       used       free     shared    buffers     cached
Mem:        515600     393448     122152          0      15528     339768
-/+ buffers/cache:      38152     477448
Swap:      1052248          0    1052248

删除文件testfile:
[root@test1 ~]# rm /mnt/disktest/testfile
rm: remove regular file `/mnt/disktest/testfile'? y

查看是否释放掉了cached:
[root@test1 ~]# free
total       used       free     shared    buffers     cached
Mem:        515600     295736     219864          0      15536     242108
-/+ buffers/cache:      38092     477508
Swap:      1052248          0    1052248

这里cached变成了242108KB,之前是339768KB,说明cached被释放掉了.


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ryder001/article/details/8500437

智能推荐

【ElasticSearch实战】使用 Elastic Stack 简单有效快捷的监控网络资源_connection to backoff-程序员宅基地

文章浏览阅读1.9k次。使用 Elastic Stack 简单有效监控网络资源我们都知道监控web服务和应用的响应性的确是个挑战。随着时间的推移和规模的扩大,能够跟踪这种响应就更加有趣了。设置SLAs, SLOs, and KPIs 不仅需要历史视图,还需要进行分析和预测的能力。由于我们目前在学习ElasticSearch,所以可以基于它的技术栈来实现各种监控,接下来,我们将讨论利用 Heartbeat 和 Elastic Uptime 如何帮助运营团队实现可观察性,并提供大量的管理 web 服务所需的有价值的洞察力。我们将演示_connection to backoff

扩展RBAC用户角色权限设计方案_rbac更改用户角色-程序员宅基地

文章浏览阅读2.5k次。扩展RBAC用户角色权限设计方案领域模型 from http://www.iteye.com/topic/930648RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角_rbac更改用户角色

CameraX 概览_settargetrotation-程序员宅基地

文章浏览阅读1.4k次。CameraX 是一个 Jetpack 支持库,旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面,适用于大多数 Android 设备,并可向后兼容至 Android 5.0(API 级别 21)。虽然它利用的是 camera2 的功能,但使用的是更为简单且基于用例的方法,该方法具有生命周期感知能力。它还解决了设备兼容性问题,因此您无需在代码库中包含设备专属代码。这些功能减..._settargetrotation

UITabBarItem不能显示文字和图片_uitabbar首次加载不显示其他内容-程序员宅基地

文章浏览阅读1.3k次。ViewController中加入UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Playlists" image:[UIImage imageNamed:@"music.png"] tag:0]; self.tabBarItem = item;[item release];就可以显示说来了_uitabbar首次加载不显示其他内容

Swift5.0 代理的基本使用-程序员宅基地

文章浏览阅读1.1k次。代理: 个人理解, 假如存在 A B两个对象需求: 当B做出动作的时候, 需要A来响应,并做出动作实现思路:B 中 创建的函数 通过在 A中创建了B B中调用函数, A接收而改变代码如下:A 对象import UIKitclass ViewController: UIViewController,TestDelegate { func returuColore(in color: UIColor) { // 改变自..._swift5.0 代理

Web安全学习图径——系列课程推荐_这套php的教程包含了html/css/js和php+mysql-程序员宅基地

文章浏览阅读598次。本文作者:i春秋作家 大哥哥团长 说到Web安全必须要了解Web方面的一些基础知识做为铺垫的去的去学习这门技术,因为不是人人都可以直接先渗透在进行编程等方面学习的、所以为了更好的入门的Web安全必须要先掌握一些基础知识,相比对逆向方面的入门Web安全真的不难,逆向要是想了解一个简单的什么叫jmp esp溢出需要的基础知识不是一点点,如果是计算机专业的还好,不然通过自己去学习_这套php的教程包含了html/css/js和php+mysql

随便推点

物联网基础:使用EMQ搭建MQTT服务器_emqtt-程序员宅基地

文章浏览阅读2.5k次,点赞5次,收藏24次。1 EMQ介绍EMQ (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议EMQ 项目设计目标是承载移动终端或物联网终端海量 MQTT 连接,并实现在海量物联网设备间_emqtt

位运算,字符串反转(c语言实现)_c语言 字符换翻转位运算-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。C语言1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回..._c语言 字符换翻转位运算

面试谈薪资时,HR问上家公司薪水并要求看流水,这是什么意思?_面试谈对上家公司的感想-程序员宅基地

文章浏览阅读3.4k次。面试定薪,是个技术活。HR首先要做胜任能力的判断,通俗点讲就是这活你能不能干,过了这一关,HR才会和你谈钱。所以,聊薪资本身是一个信号:HR对你有点意思。郎有情妾有意了,能不能干柴烈火,就看价格能不能谈妥了。面试就是一场博弈,在博弈开始之前,双方应该确认好自己的底牌。求职者要想好,你能接受的薪资底线是多少;招聘方也要想好,你最高能出的价格是多少。对于求职者,理论上来说,我比较建议想好底线之后,虚高一丢丢来报价留下谈判的空间。当然了,底线价格不能拍脑袋,要结合业内行情和自身能力,客观一点来估值。_面试谈对上家公司的感想

单片机应用编程技巧 (FAQ)_表驱动开发在单片机应用-程序员宅基地

文章浏览阅读1.7k次。 1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。 对于目前普遍使用的RIS_表驱动开发在单片机应用

前端初学者必学的34个CSS选择器-程序员宅基地

文章浏览阅读386次。前端初学者必学的34种常用CSS选择器_前端初学者必学的34个css选择器

diy 格力空调arduino遥控器_arduino空调遥控器-程序员宅基地

文章浏览阅读4.6k次,点赞7次,收藏33次。diy 格力空调arduino遥控器公司的中央空调莫得遥控器,手机也没红外,自己做一个先看格力的红外编码 这个是参考https://blog.csdn.net/yannanxiu/article/details/48174649起始码(S)+35位数据码+连接码(C)+32位数据码1、各种编码的电平宽度:数据码由“0”“1”组成:0的电平宽度为:600us低电平+600us高电平,1..._arduino空调遥控器