另外参见

mkswap(8),swapoff(8),swapon(8)

语法

#包括
#包括

int swapon(const char * path,int swapflags);复制代码
int swapoff(const char * path);

遵循规范

这些功能是特定于Linux的,不应在打算移植的程序中使用。第二个swapflags参数在Linux 1.3.2中引入。

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

SWAPON - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

swapon,swapoff-开始/停止交换到文件/设备

备注

必须使用mkswap(8)准备分区或路径。

可以使用的交换文件数量有一个上限,由内核常量MAX_SWAPFILES定义。在内核2.4.10之前,MAX_SWAPFILES的值为8;从内核2.4.10开始,其值为32。从内核2.6.18开始,如果内核是使用CONFIG_MIGRATION选项构建的(将为页面迁移功能保留两个交换表条目),则限制减少2(因此:30)。 mbind(2)和migration_pages(2))。从内核2.6.32开始,如果使用CONFIG_MEMORY_FAILURE选项构建内核,则限制将进一步降低1。

交换页面的丢弃是在内核2.6.29中引入的,然后以内核2.6.36中的SWAP_FLAG_DISCARD标志为条件,该标志在调用swapon()时仍丢弃整个交换区域,即使该标志位未设置也是如此。

错误说明

EBUSY
(对于swapon())指定的路径已被用作交换区域。
EINVAL
该文件路径存在,但既不引用常规文件也不引用块设备。
EINVAL
(swapon())指示的路径不包含有效的交换签名,或者位于内存中的文件系统(例如tmpfs(5))上。
EINVAL(since Linux 3.4)
(swapon())在swapflags中指定了无效的标志值。
EINVAL
(swapoff())路径当前不是交换区域。
ENFILE
已达到系统范围内打开文件总数的限制。
ENOENT
文件路径不存在。
ENOMEM
系统内存不足,无法开始交换。
EPERM
调用者不具有CAP_SYS_ADMIN功能。另外,交换文件的最大数量已经被使用。请参阅下面的注释。

说明

swapon()将交换区域设置为path指定的文件或块设备。 swapoff()停止交换到路径指定的文件或块设备。

如果在swapon()swapflags参数中指定了SWAP_FLAG_PREFER标志,则新交换区的优先级将高于默认值。优先级在swapflags中编码为:

(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK

如果在swapon()swapflags参数中指定了SWAP_FLAG_DISCARD标志,则如果交换设备支持丢弃或修整操作,则释放的交换页在重用之前将被丢弃。 (这可能会提高某些固态设备上的性能,但通常不能提高性能。)另请参见注意。

这些功能只能由特权进程(具有CAP_SYS_ADMIN功能的进程)使用。

Priority

每个交换区域都有一个高优先级或低优先级。默认优先级为低。在低优先级区域中,新区域的优先级甚至比旧区域低。

所有使用swapflags设置的优先级均为高优先级,高于默认值。它们可能具有调用方选择的任何非负值。数字越高意味着优先级越高。

交换页面是按优先级顺序从区域分配的,优先级最高。对于具有不同优先级的区域,在使用较低优先级区域之前会耗尽较高优先级区域。如果两个或多个区域具有相同的优先级,并且这是可用的最高优先级,则在它们之间以循环为基础分配页面。

从Linux 1.3.6开始,内核通常遵循这些规则,但是也有例外。

日期:2019-08-20 17:59:31 来源:oir作者:oir