9.Linux 交换空间管理

计算机存储器的层次结构

计算机存储器速度越快,成本较高。 为了获得好的性能/价格比,计算机中各种存储器组成一个层 状的塔式结构,取长补短,协调工作。

CPU 寄存器,是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数 据和运算结果以及一些 CPU 运行需要的信息。

CPU 高速缓存,也就是CPU Cache,是一种容量小、速度快的高缓冲存储器,由SRAM组 成,直接制作在CPU芯片内,速度几乎与CPU一样快。在金字塔式存储体系中它位于自顶向 下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。

主存储器(Main memory),简称主存或内存,其作用是存放指令和数据,并能由中央处 理器(CPU)直接随机存取。主存储器速度比CPU高速缓存慢,但存储容器却大的多。

主存储器的速度一般用存取时间衡量,即每次与CPU间数据处理耗费的时间,以纳秒(ns)为 单位。大多数SDRAM内存芯片的存取时间为5、6、7、8或10ns。

存储器的带宽计算公式:带宽=频率*位宽/8。 例如:DDR4 内存频率是3600 MHz,在64位系统(双通道位宽为128,以此类推), 1B=8bit, 单通道 DDR4-3600:3600MHz * 64bit / 8=28800MB/S 双通道 DDR4-3600:3600MHz * 64bit * 2 / 8=57600MB/S

辅助存储器,速度慢的多,优点是容量大,可持久化存储。

计算机存储器的工作原理

CPU运行程序时,先从寄存器中读取数据。如果在寄存器中可以找到数据,则直接从寄存器 中读取。如果在寄存器中找不到数据,则从CPU Cache中读取数据,并将数据缓存在CPU Cache中。

如果在CPU cache中可以找到数据,则直接从CPU Cache中读取。如果在CPU cache中找不 到数据,则从主存储器(内存)中读取数据,将数据缓存在主存储器中

如果在内存中可以找到数据,则直接从内存中读取。如果在内存中找不到数据,则从辅助存 储器中读取数据,例如机械磁盘、光盘、U盘等,并将数据缓存在内存中。

3物理内存3

计算机系统将内存划分为固定大小的块,称为 page,标准 page 大小为 4 KiB。进程并不直接对 物理内存寻址,每个进程具有虚拟地址空间virtual address space。当进程请求内存时,MMU 将进程获得的虚拟地址(VA,Virtual Address )映射到物理地址(PA,Physical Address )。

思考:为什么CPU不直接访问物理地址?

虚拟内存的容量是物理内存和交换空间的总和,而虚拟地址负责映射到物理内存地址和交换 空间地址。

进程使用内存的过程中,希望内存是连续的。如果进程直接访问物理地址,则内核很难保证 进程获得的物理地址空间是连续的,因为进程存在着运行和退出,就会出现内存碎片化。进 程的虚拟地址在虚拟内存中是连续的,达到了内存连续的目的,而 MMU 会将进程的虚拟地 址映射到物理地址。

Swap 空间

查看内存
 默认单位是KiB,使用-m选项,以MiB为单位
 [root@server ~ 17:12:59]# free
              total        used        free      shared  buff/cache   available
Mem:        8154896      212560     7829484       11988      112852     7743036:
Swap:       8257532           0     8257532

输出说明:

Mem:

total:物理内存空间大小。

used:使用的内存 (total - free - buffers - cache)

free:未使用的内存空间大小(真正的空闲,未被任何程序占用)。

shared:多个进程共享的内存空间大小。

bufffers:被更改但未写回磁盘的数据占用的内存空间大小

swap:

total:交换空间大小。

used:使用的交换空间大小。

free:未使用交换空间大小。

Swap 空间大小

笔记本电脑和台式机的Hibernate功能会在关闭系统电源之前使用交换空间来保存RAM内容。重 新打开系统时, 内核将从交换空间恢复RAM内容,无需完全启动。 对于这些系统而言,交换空 间需要超过RAM量

创建交换空间
# 使用parted创建所需大小的分区并将其文件系统类型设置为linux-swap
[root@server ~ 17:13:44]# parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.

[root@server ~ 17:17:51]# parted /dev/sdb unit MiB mkpart swap01 linux-swap 1 2049
Information: You may need to update /etc/fstab.

[root@server ~ 17:19:03]# parted /dev/sdb unit MiB print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start    End      Size     File system  Name    Flags
 1      1.00MiB  2049MiB  2048MiB  xfs          swap01

#格式化swap空间(mkswap是swap的一种专用格式化)
[root@server ~ 17:19:35]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=ee0cad39-ba13-4cf5-b8a0-311ad0769f30
激活 swap 空间
# 激活swap空间
no label, UUID=ee0cad39-ba13-4cf5-b8a0-311ad0769f30
[root@server ~ 17:22:37]# swapon /dev/sdb1
[root@server ~ 17:23:23]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	8257532	0	-2
/dev/sdb1                              	partition	2097148	0	-3

默认情况下,多个交换空间具有相同的优先级时,系统会按顺序使用交换空间,即内核先使用第 一个已激活交换空间,直至其空间已满,然后开始使用第二个交换空间。在激活交换分区的时 候,可以为每个交换空间定义一个优先级,从而强制按该顺序使用交换空间。

swapon 命令使用-p选项指定优先级,优先级介于-1和32767之间,值越大优先级越高。

示例

[root@centos7 ~]# swapon -p 4 /dev/sdb1

取消 swap 空间激活
[root@server ~ 17:26:13]# swapoff /dev/sdb1
[root@server ~ 17:27:28]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	8257532	0	-2

持久化激活 swap 空间

修改/etc/fstab文件,添加如下类似记录:

UUID=2bf4e179-3648-4412-9495-3b278df4acd6 swap swap pri=4 0 0

使用命令 swapon -a 激活/etc/fstab中所有交换设备。

使用命令 swapoff -a 取消/etc/fstab中所有交换设备激活。

[root@server ~ 17:29:10]# vim /etc/fstab 
[root@server ~ 17:30:05]# swapon -a
[root@server ~ 17:30:11]# swapon -s
Filename Type Size Used Priority
/dev/dm-1               partition 4063228 0    -2
/dev/sdb1               partition 2097148 0    -3

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐