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=xxx
,xxx
的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
file-backed映射,把进程虚拟地址空间映射到files
如 代码段等
当内存不够时,在内存的file-backed pages被删除,等待需要时,重新从磁盘文件将file-backed pages加载到内存中
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?