SWAPON - Linux手册页
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
swapon,swapoff-开始/停止交换到文件/设备
语法
#包括
#包括
int swapon(const char * path,int swapflags);复制代码
int swapoff(const char * path);
说明
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开始,内核通常遵循这些规则,但是也有例外。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
错误说明
- EBUSY
- (对于swapon())指定的路径已被用作交换区域。
- EINVAL
- 该文件路径存在,但既不引用常规文件也不引用块设备。
- EINVAL
- (swapon())指示的路径不包含有效的交换签名,或者位于内存中的文件系统(例如tmpfs(5))上。
- EINVAL(since Linux 3.4)
- (swapon())在swapflags中指定了无效的标志值。
- EINVAL
- (swapoff())路径当前不是交换区域。
- ENFILE
- 已达到系统范围内打开文件总数的限制。
- ENOENT
- 文件路径不存在。
- ENOMEM
- 系统内存不足,无法开始交换。
- EPERM
- 调用者不具有CAP_SYS_ADMIN功能。另外,交换文件的最大数量已经被使用。请参阅下面的注释。
遵循规范
这些功能是特定于Linux的,不应在打算移植的程序中使用。第二个swapflags参数在Linux 1.3.2中引入。
备注
必须使用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()时仍丢弃整个交换区域,即使该标志位未设置也是如此。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。