swap换出的情景分析

【信息科学与工程学】【数据中心】 第八十八篇 IDC运营商全景的运营模型和财务、成本、融资融券 符号含义常用单位N机柜总数(标准柜 / 4kW级)个u,u∈[0,1]r单机柜(或单kW)月租金元/柜·月 或 元/kW·月kw​单机柜额定IT功率kW/柜(常见 4~8kW,AI可达 20~40kW+)PIT​总IT负载 = N⋅u⋅kw​kWPUE能效比 = Pfacility​/PIT​≥1典型 1.2~1.6τe​电价元/kWhHy​年运行小时 ≈ 8760 hhCcapex​总建设资本支出万元D年折旧额(直线法)万元/年s。 阅读详情


 
 

1 哪些页需要swap
(本文基于linux2.6.21.5)
总之内核将没有文件backed的用户空间的数据swap到交换空间。
这些页一般是应用程序的堆栈空间的数据,而进程的代码段的内容、以及其使用的文件产生的page cahe等都不会被swap到交换空间。

 

2交换空间
交换空间对应磁盘上的分区或文件,其本身和普通磁盘文件一样,用一个struct address_space 来抽象。


struct address_space swapper_space = {
 .page_tree = RADIX_TREE_INIT(GFP_ATOMIC|__GFP_NOWARN),//用来挂这个空间上的page cache
 .tree_lock = __RW_LOCK_UNLOCKED(swapper_space.tree_lock),
 .a_ops  = &swap_aops,//这个空间上的page cache的操作函数
 .i_mmap_nonlinear = LIST_HEAD_INIT(swapper_space.i_mmap_nonlinear),
 .backing_dev_info = &swap_backing_dev_info,//对应该交换空间的块设备
};

 

3换出
这是在static unsigned long shrink_page_list(struct list_head *page_list,struct scan_control *sc)里进行的.该函数主要在收缩内存page cache时被调用,它检查当前inactive里的待选页。针对匿名页被换出的情景如下:


A 如果发现其是匿名页:PageAnon(page),且没有被加入到交换空间:!PageSwapCache(page),则调用add_to_swap(page, GFP_ATOMIC);将该页加入到交换空间,即上述swapper_space的page_tree里。

 

B 找到这个页的对应的struct address_space,对于被加入到swap的匿名页,显然返回swapper_space


static inline struct address_space *page_mapping(struct page *page)
{
 struct address_space *mapping = page->mapping;

 if (unlikely(PageSwapCache(page)))//加入到swap的匿名页,会被置位PG_swapcache
  mapping = &swapper_space;
 else if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
  mapping = NULL;
 return mapping;
}

 

C 如果该页被映射到页表,将该页的从页表中去除。对应用户空间的堆栈的page cache。显然这一步是必须的。

  if (page_mapped(page) && mapping) {
   switch (try_to_unmap(page, 0)) {//执行取出页表映射操作
   case SWAP_FAIL:
    goto activate_locked;
   case SWAP_AGAIN:
    goto keep_locked;
   case SWAP_SUCCESS:
    ; /* try to free the page below */
   }
  }

D 该页如果被修改过,则将其写入到磁盘,对应用户空间的堆栈显然是脏页,需要写入磁盘上的swap空间。其回写机制是通过调用struct address_space_operations *a_ops的writepage例程实现的。显然这对应上文提到
的swap_aops的writepage例程

  if (PageDirty(page)) {
   ......
   switch(pageout(page, mapping)) {//执行swap_writepage函数向块设备层提交写申请
    }
  }

 

自此该匿名页被换出到磁盘上的交换空间

 

===============================================================
讨论:  linux_kernel_2_6@yahoo.com.cn
未经允许请勿用于商业用途
                                             wangsen
===============================================================

  

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径 ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E 阅读详情

相关推荐

告别裸机思维:在STM32F407上玩转LwIP,让你的设备轻松接入TCP网络

本文详细介绍了如何在STM32F407微控制器上使用LwIP协议栈实现TCP网络连接,从裸机编程到网络化的架构革命。通过事件驱动模型、内存优化配置和工业级稳定性实现,帮助开发者高效构建稳定TCP连接,适用于物联网设备联网等场景。

weixin_33725515的博客 562

Linux Swap 从 userspace 到 kernel详解

Linux Swap 从 userspace 到 kernel详解简介整体架构涉及的文件介绍与内存的联系与IO的联系主要的数据结构swap_info_structswp_entry_tswap_extentswap_cluster_infoswapper_spacesswap cacheSwapout/swapin 流程分析SwapoutSwapin附录 简介 Linux Swap 机制在很早之前...

qkhhyga2016的博客 7844

512分辨率万能遮罩模型实战指南:从下载到高精度应用

本文提供了512分辨率万能遮罩模型的完整实战指南。该模型经过超过540万次迭代,专门优化了对头发、手、眼睛等复杂区域的识别。文章详细介绍了从可靠渠道下载、环境部署、使用DF_ICE工具批量应用遮罩,到利用XSeg Editor进行高精度精修的全流程,旨在帮助用户显著提升AI换脸合成视频的质量与效率。

y2z3a4b5c的博客 1161

linux内存管理笔记(四十一)----swap分区

前面我们学习了操作系统通过“虚拟内存”技术,不但在功能上突破了物理内存的限制,使程序可以操作大于实际物理内存的空间;更重要的是,隔离了每个进程的安全保护,使每个进程都不受其他程序的干扰。但是,对于系统内存,总是会存在一种场景 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中 正是因为 Linux 上

奇小葩 2616

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

【JavaSE】之流程控制与方法

Java基础之Java流程控制与方法相关知识介绍~

小新要变强的博客 5795

15.2 匿名页面的使用和换出

匿名页面的使用: 匿名页面在缺页中断中分配完成之后,就建立了进程虚拟地址空间VMA和物理页面的映射关系,用户进程访问虚拟地址即访问匿名页面的内容 匿名页面的换出: 假设现在系统内存紧张,需要回收一些页面来释放内存。anon_page刚分配时会加入活跃LRU链表(LRU_ACTIVE_ANON)的头部,在经历了活跃LRU链表的一段时间的移动,该anon_page到达活跃LRU链表的尾部,shrink_active_list()函数把该页加入不活跃LRU链表(LRU_INAC...

Do one thing at a time, and do well. 602

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 474

swap函数_Linux中的Anonymous Pages和Swap [一]

在进程的地址空间中,包括heap, stack和通过mmap匿名映射的区域,这些区域在建立的时候只有虚拟地址,当它们真正被访问到的时候,内核才会为其分配物理页面,这种方式被称作demand allocation(按需分配),它和page cache的demand paging的概念是对应的。这部分物理页面由于没有对应外部存储介质上的文件,因此被统称为anonymous pages。Anonymou...

weixin_39968724的博客 986

【MATLAB/Simulink】从模型到飞行:基于PX4与Rflysim的无人机MBD实战指南

本文详细介绍了基于MATLAB/Simulink与PX4、Rflysim的无人机模型开发与飞行控制实战指南。通过MBD(基于模型设计)方法,从建模、仿真到代码生成与硬件部署,实现无人机开发的高效闭环。文章涵盖开发环境搭建、动力学建模、控制算法实现及测试验证全流程,为无人机开发者提供实用技巧与优化建议。

weixin_30181209的博客 410

aic8800出现insmod: can‘t insert ‘/lib/modules/4.9.191/aic8800_fdrv.ko‘: No such device

2、如果单独编译wifi驱动,则把CONFIG_PLATFORM_UBUNTU?= y都改为CONFIG_PLATFORM_ALLWINNER?1、如果把wifi驱动嵌入到内核编译,则在makefile中加入这一句。后面再修改对应平台的交叉编译链和内核吗路径等。

mantouyouyou的博客 509

Caldera部署最佳实践:安全配置与性能优化指南

Caldera是一个强大的自动化对手仿真平台,基于MITRE ATT&CK框架构建,帮助安全团队进行红队演练和事件响应。本文将为您提供完整的Caldera部署指南,涵盖安全配置和性能优化的关键要点。🚀 ## 📋 准备工作与环境要求 在开始部署Caldera之前,确保您的系统满足以下要求: - **操作系统**:Linux或MacOS - **Python版本**:3.10+(包含Pip3

gitblog_00487的博客 1154

【AI智能体】Dify 搭建发票识别助手操作实战详解

Dify 搭建发票识别专属助手操作实战详解

congge 5549

Linux 内核源代码情景分析 chap2 存储管理 (6) --- 页面的定期换出

1. 目的Linux 内核通过定期检查并且预先将若干页面换出, 实现减轻系统在缺页异常时候所产生的负担。 虽然, 无法避免需要临时寻找可以换出的页面, 但是, 可以减少这种事件发生的概率。Linux 内核中设置一个专门用来定期将页面换出的线程 kswapd。 kswapd 相当于一个进程 有自己的进程控制块 task_struct 结构, 但是呢, 他没有自己独立的地址空间, 我们可以将它理解为是

zhyh1435589631的专栏 5542

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux内核源代码学习(5)内存页面的换入换出

  linux内核源代码学习(5)内存页面的换入换出---flyli       关于物理页面的换入换出,其实其主要的目的也就是当物理内存不够使用的时候,将不常用到的内存页面交换到硬盘上,以保证程序能够正常运行。           在计算机理论里面时间资源和空间资源是一对矛盾的论题,我们经常可以见到以时间换空间,或者以空间换时间的算法,其不可单独评价那种更好,但是在相应的环境

lihn1987的专栏 2724

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

<内核情景分析> 2.8:页面的定期换出 总结

主要的代码集中在2个内核线程kswapd和kreclaimd中,书中的分析主要集中在kswapd上。 Kswapd是一个无限循环,每过HZ个时间单位就被唤醒循环一次。每次循环中,使用inactive_shortage和free_shortage两个函数来判断是否存在可用物理页面短缺的情况。任何一个函数返回非零即认为物理页面短缺。      出现物理页面短缺时,调用函数do_try_to_fre

ClearRiveryang的专栏 1008

Linux SWAP内存交换机制基本概念

Linux SWAP内存交换机制基本概念tags: Linux源码Linux SWAP内存交换机制基本概念 摘要 前序知识 内存交换要做什么 硬件上给予的支持 下面假定场景更好的叙述 Linux中的实现 数据什么时候跑到磁盘上面去的 什么时候换出内存 交换与回写什么关系 小小的总结 引用 摘要本文旨在以较容易理解的水平讨论Linux的内存交换机制。文中尽量不涉及具体的代码,不涉及一些边边角角的情况,

河道一血不如床上一血 1万+

Linux 内核源代码情景分析 chap 2 存储管理 (四)

物理页面的使用和周转1. 几个术语1.1 虚存页面指虚拟地址空间中一个固定大小, 边界与页面大小 4KB 对齐的区间及其内容1.2 物理页面与虚存页面相对的, 需要映射到某种物理存储介质上面的页面。 根据他是否在内存中, 我们可以分为 内存页面 和 盘上页面。 另外, 通常说物理内存页面的分配和释放是指 物理介质, 而谈及页面的换入和换出的时候, 是指他的内容。1.3 交换技术当系统内存不够用的时

zhyh1435589631的专栏 1628

Linux 内核源码情景分析 chap 2 存储管理 (四)

物理页面的使用和周转 1. 几个术语 1.1 虚存页面 指虚拟地址空间中一个固定大小, 边界与页面大小 4KB 对齐的区间及其内容 1.2 物理页面 与虚存页面相对的, 须要映射到某种物理存储介质上面的页面。 依据他是否在内存中。 我们能够分为 内存页面 和 盘上页面。 另外。 通常说物理内存页面的分配和释放是指 物理介质, 而谈及页面的换入和换出的时候...

weixin_34232744的博客 128

ARM Linux 如何模拟X86 PTE中的Present Young和Dirty标志位

ARM Linux 如何模拟X86 PTE中的Present Young和Dirty标志位 原创文章,转载请注明出处.转载自:Li Haifeng's Blog 本文链接地址:ARM Linux 如何模拟X86 PTE中的Present Young和Dirty标志位 注:本文是参考Kernel的代码并加上个人揣测,欢迎指正 在X86 MMU Page table entry中,有三个标...

zf1575192187的专栏 1294

linux mmap申请大内存泄露,关于linux的虚拟内存

今天和同事讨论一个问题就是是否会针对外设创建页表,也就是虚拟内存的本质是什么?以mmap为例,我们将普通的文件通过mmap映射到虚拟内存中,直接操作映射的虚拟内存则可以修改文件,其实现的机制是什么?对于物理内存的mmap原理以及实现机制这个都是知道的。我想问的是我们如何是将存储介质中的文件(毕竟存储介质中文件是不可以直接被CPU操作的,只有通过IO接口来操作的)与虚拟内存联系起来的?|大概了解一点...

weixin_33122947的博客 417

linux内存使用情况

Linux系统会把大部分可用内存划归自己使用。这是Linux管理内存的一种方式。他不是在需要分配空间的时候再到物理内存中去划一块归某个进程使用,而是提前就把整个内存管理起来,需要的时候再分配给某个进程。这样的好处是因为有了统一管理,不容易出现内存碎片,提高了效率。这些linux管理的内存大多数是空闲状态,你可以看看当新的程序运行的时候,Linux的内存占用不会提高,除非机器的内存已经耗尽。这时Li

ak47mig的网志(自家用,谢绝无聊斗鸡) 2325

读《莱昂氏UNIX源代码分析》

在unix早期的代码中,schedule和swap两个核心任务都是由0号进程来负责的,这个朴实的设计就是unix系统最最原始的设计,因为unix在开始设计的时候十分清楚进程应该做什么不应该做什么,应该做它本职的工作,而诸如调度和置换之类的任务不应该由用户进程负责,但是linux后来颠覆了这个想法,毕竟频繁的切换带来的开销已经基本抵消了分工设计带来的优雅,于是就将调度工作分担给了各个进程本身,而置换...

totoxian 170

操作系统核心概念与考研重点全解析:从进程管理到虚拟内存

操作系统是计算机系统的核心软件,负责管理硬件资源并为上层应用提供服务。其核心原理在于通过进程管理、内存管理、文件系统和I/O管理等机制,实现对CPU、内存、磁盘等关键资源的抽象、虚拟化与高效调度。在技术价值上,操作系统确保了多任务并发执行的安全性、稳定性和性能,是构建所有应用软件的基石。典型的应用场景包括服务器高并发处理、桌面多任务操作以及嵌入式实时系统等。本文聚焦于计算机考研与系统学习中的核心难点,深入剖析了进程与线程的状态转换、CPU调度算法(如时间片轮转和多级反馈队列)、进程同步与通信机制(如信号量与

weixin_30627341的博客 470

linux kernel swap daemon

  The nameswap daemonis a bit of a misnomer as the daemon does more than just swap modified pages out to the swap file. Its task is to keep the memory management system operating efficiently. The Ke...

weixin_30532837的博客 144
下一篇: IA32架构下截获系统调用的方法
linux_kernel_2_8
博客等级 码龄19年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值