mm4

page cache

在linux读写文件时,page cache用于缓存文件的逻辑内容,从而加快对磁盘映射和数据的访问,应用程序可以通过read/write()、mmap()来访问

page cache的两种形式:

  • 以文件系统中的文件为背景:cached

    mount /dev/sda1 /mnt/mnt中文件内容的page cache叫cached

  • 以裸分区/dev/sdax等为背景:buffers

    dd id=/dev/sd1 of=xxxxxx的page cache叫buffers

free命令的详细解释

## ubuntu10.04, 老版free命令
## 
## 2058052 = 267360 + 1790692
## 126116  = 267360 - 29364 - 111880
## 1931936 = 1790692 + 29364 + 111880
## 
## buffers and cached is page cache
$ free
             total       used       free     shared    buffers     cached
Mem:       2058052     267360    1790692          0      29364     111880
-/+ buffers/cache:     126116    1931936
Swap:      2187256          0    2187256

## ubuntu18.045,  新版free命令
## 
## 8153096 = 962580 + 6053780 + 1136736
$ free
              total        used        free      shared  buff/cache   available
Mem:        8153096      962580     6053780       12192     1136736     6900224
Swap:       2097148           0     2097148

file-backed pages和anonymous pages

  1. file-backed映射,把进程虚拟地址空间映射到files

    如 代码段等

    当内存不够时,在内存的file-backed pages被删除,等待需要时,重新从磁盘文件将file-backed pages加载到内存中

  2. anonymous映射,进程虚拟地址空间没有映射到任何file

    如 stack, heap, CoW pages等

    当内存不够时,在内存的anonymous pages被保存到swapfile文件或swap分区,等待需要时,重新从swapfile文件或swap分区将anonymous pages加载到内存中;用LRU算法来进行swap和page cache的页面替换

swap与zRAW

嵌入式的存储设备(如 nand flash, nor flash...)的存取速度很慢且读写次数有限制,所以不可以直接申请swapfile文件或者一个swap分区为anonymous pages作交换动作。

此时就出现存储设备zRAW,zRAW是通过申请一小块内存作为swap分区使用,会将数据解压缩后进出swap分区。这样swap访问速度可以提高很多,因解压缩数据,zRAW申请的内存对应的存储数据变多,但是解压缩会占用CPU时间。

如何使用zRAW?

## 1. linux kernel使能zRAW功能
## 2. 应用层指定zRAW大小
$ echo $((48*1024*1024)) > /sys/block/zram0/disksize
## 3. 应用层使能zRAW
$ swapon -p 10 /dev/zram0


## 查看swap分区
$ cat /pro/swaps
## 失能所有swap分区
$ swapoff -a

Last updated

Was this helpful?