Skip to content

Latest commit

 

History

History
82 lines (51 loc) · 3.86 KB

创建内存低水位环境.md

File metadata and controls

82 lines (51 loc) · 3.86 KB

tmpfs[1]

tmpfs是一种虚拟内存文件系统, 它的存储空间在VM里面,现在大多数操作系统都采用了虚拟内存管理机制, VM(Virtual Memory) 是由Linux内核里面的VM子系统管理. VM的大小由RM(Real Memory)和swap组成, RM就是物理内存, swap是通过硬盘虚拟出来的内存空间, 大小是可以配置的. swap的读写速度相对RM(Real Memory)要慢许多. 在物理内存不足时一个进程申请内存, 内核的VM子系统就会把RM里面的一些不常用的数据交换到swap里面, 在需要使用这些数据时再从swap交换到RM里. tmpfs最大可用的存储空间等于 RM + swap, 但是tmpfs本身不知道实际使用的空间是RM还是swap.

blueline:/data/local/tmp # mkdir memory
blueline:/data/local/tmp # mount -t tmpfs -o size=512M tmpfs memory
blueline:/data/local/tmp # dd if=/dev/zero of=memory/block
#卸载tmpfs
blueline:/data/local/tmp # rm memory/block 
blueline:/data/local/tmp # umount memory

ramfs[2]

ramfs是Linux下一种基于RAM做存储的文件系统。在使用过程中你就可以把ramfs理解为在普通的HDD上建立了一个文件系统,而现在HDD被替换成了RAM,因为是RAM做存储所以会有很高的存储效率。由于ramfs的实现就相当于把RAM作为最后一层的存储,所以在ramfs中不会使用swap。

  • 达到空间上限时可以继续写入
  • 非固定大小
  • 不会使用swap
  • ramfs中的数据会常驻内存,由Unevictable LRU管理[3]
#挂载ramfs,并向ramfs写入数据,以占用内存
blueline:/data/local/tmp # mount -t ramfs -o size=10M ramfs ./ramfs/
blueline:/data/local/tmp # setenforce 0
blueline:/data/local/tmp # dd if=/dev/zero of=./ramfs/test.file bs=1M count=800

说明:占用内存大小为test.file文件大小,由于dd if=/dev/zero of=./ramfs/test.file bs=1M count=800是覆盖写,所以占用内存大小就是800M

#卸载ramfs
blueline:/data/local/tmp # rm ramfs/test.file 
blueline:/data/local/tmp # umount ramfs

说明

命令 dd if=/dev/zero of=./ramfs/test.file bs=1M count=20 是覆盖写。 dd 命令的作用: dd 命令是 Linux/Unix 系统中用于复制和转换文件的强大工具。它可以将输入文件的内容复制到输出文件中,并在此过程中进行各种转换操作。 if=/dev/zero: 指定输入文件为 /dev/zero。这个设备是一个特殊的设备文件,可以无限提供零字节的数据。 of=./ramfs/test.file: 指定输出文件为 ./ramfs/test.file,也就是将数据写入到这个文件中。 bs=1M: 指定每次读写的数据块大小为 1MB。 count=20: 指定总共写入 20 个 1MB 的数据块,也就是一共写入 20MB 的数据。 为什么是覆盖写? 当你使用 dd 命令将数据写入一个已存在的文件时,新的数据会覆盖旧的数据。 在这个命令中,我们指定了输出文件 ./ramfs/test.file,如果这个文件已经存在,那么 dd 命令就会直接覆盖这个文件的内容,用新的零字节数据填充。 总结: 这个命令的作用是将 20MB 的零字节数据写入到 ./ramfs/test.file 文件中。如果该文件之前存在,那么原来的内容会被完全覆盖。因此,这是一种覆盖写操作。 需要注意的是: 数据丢失: 覆盖写操作会覆盖原有数据,请谨慎使用。 文件大小: 如果 ./ramfs/test.file 文件之前已经存在,但大小小于 20MB,那么 dd 命令会将文件扩展到 20MB,多余的部分用零填充。 ramfs 特性: 由于 ramfs 是内存文件系统,数据不持久化,系统重启或卸载后,文件中的数据会丢失。

refs

[1] Linux的tmpfs和ramfs. https://www.cnblogs.com/milton/p/11541260.html

[2] Linux: 内存文件系统 ramfs. https://blog.csdn.net/halo_hsuh/article/details/105768540

[3] Unevictable LRU Infrastructure. https://www.cnblogs.com/pengdonglin137/p/17876210.html