LWN:给kernel的swap添加一个抽象层!

LSF/MM/BPF Summit 2023 5月8号,今年度的Linux Storage, Filesystem, Memory Management & BPF Summit已经拉开帷幕,Linux存储、文件系统、内存管理以及BPF领域的年度峰会又一次到来。此次峰会聚集了Linux最重要的开发专家以及内核子系统维护者,以规划和探索改进相关模块的发展方向,这些技术点将在未来24-48个月内进入主流内核和Linux发行版。 阅读详情

关注了就能看到更多这么棒的文章哦~

A new swap abstraction layer for the kernel

By Jonathan Corbet
May 23, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/974587/

交换(swapping)在本质上可能是一种内存管理技术,但其实现也涉及内核的文件系统和存储层。因此,在 2024 年 Linux 存储、文件系统、内存管理和 BPF 峰会(2024 Linux Storage, Filesystem, Memory-Management and BPF Summit)上,由 Chris Li 主持的关于内核交换抽象层的会议由这三个领域共同举办也就不足为奇了。Li 对改进子系统有一些雄心勃勃的想法,但要实现可行的方案可能并不容易。

Li 开始介绍了当前内核维护的交换功能的状态开始,以了解新实现需要保留哪些内容。这里的关键数据是交换偏移量(swap offset),即交换文件中可以找到有关已换出页面的其他信息的存储位置。内核中的其他信息都是可选的。他说,这种信息的散布是灵活的,但也可能是痛苦的根源。

f85967ccdb5f7ac75a5c51e52a905161.png

当前的交换设计在内存效率方面很高,但很复杂。可以通过使用更多内存来改进它,这实际上相当于为了获得更好的结果而走向更糟的结果。David Hildenbrand 表示,交换层所需的所有资源都是预先分配的,因为在系统需要交换时尝试分配内存很容易失败。这种预分配是为什么非常需要让开销最小化的原因;如果能找到减少预分配的方法,这些开销就不那么令人担忧了。在不使用交换时消耗更少的内存会很好,但当需要交换时必须分配内存就不好了。

Li 同意系统通常情况下不会进行交换;在这种情况下,那些预分配的内存都完全被浪费了。另一方面,当发生大量交换时,交换层中产生的内存高消耗也会造成损害。

他最初提议为每个 交换项(swap entry) 添加一个字节;这用于保存一些标志。完整的交换映射(full swap map,用于跟踪交换设备中空间的使用情况)不会预先分配,而是根据需要进行扩展。但是,添加单个字节的问题是,它会将一个 4 字节项变为 5 字节,这将导致对齐问题。因此,它应该增加 4 个字节,这将允许添加指针。但是,如果添加了 8 个字节,就可能做更多的事情了,包括来动态分配交换项结构。它的 size 可以变化,正如 已针对内存描述符提出的那样。复合交换项可以共享此描述符,最终,这些好处将会让这 8 个额外字节的成本变得很值得。

他说,对直接交换(directly swapping)多尺寸透明巨页 (mTHP) 的支持已添加到 mm-unstable 树中。将 64KB mTHP 交换到 zram 设备可以显着提高压缩率,并节省将单页交换出去时所需的近三分之二的 CPU 时间。但与往常一样,存在代码,主要表现为后端碎片化的增加。随着时间的推移,分配 mTHP 块的能力会下降,以至于即使在不到一半的交换空间使用的情况下,在 5 个小时后也会变得无法使用。

他说,问题在于交换集群(swap cluster)的处理方式。集群 size 设置为等于完整的 THP size(通常为 2MB)。任何单页分配都将从每个 CPU 列表上的第一个集群中获取,导致一个部分为空的集群,该集群不能用于交换即使是 mTHP 大小块(小于完整的 THP 大小);他不确定为什么。显然需要一个更好的分配器。短期内,他的计划是记录半空的交换集群,并从中分配 mTHP 大小块。长期计划是为交换项创建一个伙伴分配器。

但他表示,更好的分配器还不够。由于交换层不控制交换项的生命周期,因此碎片化仍然会发生。恶意用户可以选择性地释放内存,导致尽管有大量交换空间可用但没有一个可以分配。解决此问题的方法是非连续交换项,由复合交换结构管理。头部项将包含结构的顺序,对于简单情况来说就足够了。更复杂的情况将通过放弃交换空间的对齐要求来处理,并允许它不连续。

Li 指出,这将是一个侵入性的更改。Matthew Wilcox 同意,并警告 Li 说他正在给自己创造“一个痛苦的世界”。Wilcox 说,这个计划是重新发明文件系统,内存管理开发人员试图设计文件系统的悲惨结果是众所周知的。他建议 Li 找到一个文件系统开发人员合作,如果确实需要沿着这条道路走下去的话。

Jan Kara 表示,现有的文件系统设计不适合此任务,因为它们不是为了最小化内存开销而编写的。但他表示,管理这种复杂性将有其成本。他建议,一个更容易的解决方案可能是设置一个最小尺寸,用在交换出去的数据,以此来减少碎片化。他说,大量匿名内存往往不会被使用,因此应该可以将它们以更大的块交换出去,从而减少开销和碎片化。

在会议结束时,Hildenbrand 表示,这个计划引入了太多复杂性。相反,他说,交换进和交换出的粒度应该相互解耦。如果交换空间碎片化是一个问题,那么在交换出去之前,应将 folio 拆分。folio 可以在交换进来时重新组装。Li 回答说,他当前的设计允许部分向内交换(inward swapping);不必将整个 folio 都换入进来。

和往常一样,下一步将是等待出现实现这些想法的补丁。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

69cb0bd651d321d19b014c17fbe1e332.jpeg

计算机网络自顶向下(第八版)第一章课后习题 电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑; 阅读详情

相关推荐

Origin作图——等高线图

最近做一个测试数据图,开始想通过用热图来展示,结果发现热图有很多的小方块,很难呈现出最好的效果,因为数据是有一层一层的递进效果,因此经过尝试后,发现等高线图是个好选择。 热图展示效果如下:其中有很多的小方块不适合,热图制图方法前面有记录。 下面展示等高线图制作方法。首先是导入数据,可以从excal导入,也可以直接复制进去。等方法。 选中要展示的数据,绘图----等高线图 选中箭头,确定。 双击图像,点击线,我们需要把线隐藏了. 双击图像,我们需要调色板,根据自己的选择,一般用调色板的颜色。

qq_42278015的博客 1万+

2024年Linux内核社区关于large folio和mthp的关键进展

所以唯一可行方案是THP recovery,也就是在被split的1GBTHP基础上,保留未被重新分配的页,并将已被重新分配的页的数据复制到额外的4KB页,然后将原有的1GB物理区域“物归原主”成THP。由于 mTHP 的 size 大于 4KiB 的 small folios,理论上,它更容易出现 false sharing 的情况,频繁迁移会导致内存跨 NUMA Node 来回 ping-pong,因此,在算法上,mTHP 暂时借用了 PMD-mapped 的 2-stage filter 机制。

GetnextWindow的专栏 2981

AlphaFold2算法详解

正文:https://www.nature.com/articles/s41586-021-03819-2 补充文件:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdfhttps://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/Med

Daisy4的博客 1万+

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

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6455

C#调用企业微信JS-Sdk实现扫描二维码

企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验提示:生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是H5应用调用企业微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。

清浅 937

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

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

奇小葩 2616

knowhere | 第一课:项目导论与环境搭建

摘要 本课程是Knowhere项目的第一课,重点介绍项目整体架构和开发环境搭建。Knowhere定位为AI Agent的文档记忆基础设施,通过解析多格式文档并保留结构化信息(如章节层级、表格语义等),为Agent提供可导航的文档知识。项目采用Python monorepo结构,核心包括: apps/api:FastAPI服务,处理HTTP请求和流程调用 apps/worker:Celery服务,执行文档解析等耗时任务 packages/shared-python:共享基础设施层 课程明确了各层职责边界,并推

weixin_43674738的博客 151

2024年Linux内核十大技术革新盘点|年终盘点

【优快云 编者按】岁末年初,Linux内核2024年度盘点如约而至。继《2022 Linux内核十大技术革新功能 | 年终盘点》、《熠熠生辉 | 2023 Linux 内核十大技术革新功能》之后,知名Linux内核一线开发者,经典书籍《Linux 设备驱动开发详解》作者宋宝华老师又给大家带来了2024年Linux内核开发中,十个最典型的patchset,为大家呈现干货满满的硬核技术年货。作者 |...

优快云资讯 6059

【四足机器人实战】四足机器人运动学、动力学模型

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!四足机器人的运动学和动力学模型是其设计和控制的基础,涉及到如何精确描述和预测机器人在不同条件下的运动状态和行为本文先对四足机器人运动学、动力学模型做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章运动学模型主要关注四足机器人的几何形态和时间序列下的运动特性,而动力学模型则进一步考虑了引起这些运动的力和扭矩的作用效果。运动学模型:运动学模型描述了四足机器人在没有考虑力的影响下的运动特性。

qq_35635374的博客 1055

不使用工具箱,通过MATLAB纯编程实现lstm网络的训练过程

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1012

Linux Swap机制概述

识别需交换的页 1.      页框回收算法(PFRA)将页分为不可回收页、可交换页、可同步页、可丢弃页四种类型。其中,可交换页包括: I.属于进程匿名线性区(如用户态堆、栈)的页; II.属于进程私有内存映射的脏页; III.属于IPC共享内存区的页; 对于内存中的每一页,内核利用页表项中的Present标志来判断该页是否被换出。 2.      映射页是指映

华的专栏 6046

【WorkBuddy专栏09】WorkBuddy多模态能力深度揭秘

【WorkBuddy专栏09】AI不止会聊天——WorkBuddy多模态能力深度揭秘

AI人人懂 2106

cluster/slot/vma到底是什么,有什么关系?foilo和他们的关系是什么?

文章通过仓库的类比,解释了内存和swap空间的管理机制。Swap Slot是swap空间的最小存储单位,类似于仓库中的单个储物格;Cluster是多个连续slot组成的块,用于批量管理,类似于一整排货架;VMA(虚拟内存区域)则从程序视角定义内存区域的用途和范围,类似于物品分类区。三者共同决定了数据如何从swap预读到内存。Cluster-based预读适用于swap未碎片化的情况,而VMA-based预读则在swap碎片化时更为精准。最终,物理管理工具(Cluster/Slot)与程序视角(VMA)的结合

qq_55655082的博客 587

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

廖雪峰Python教程[完整版]

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

Linux Swap 介绍

由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存用于缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。而在进程的地址空...

内核工匠 7203

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Linux 多阶透明大页(mTHP)深度解析

虚拟页是将用户态虚拟地址空间划分成固定大小的块,与物理页类似,用于地址映射管理。

Angelica_0v0的博客 1218

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

gitblog_00487的博客 1154

LWN:现代化的交换机制:swap map 的终结

具体来说,如果一个交换设备设置了 SWP_SYNCHRONOUS_IO 标志(表示该设备速度极快,I/O 应该同步进行),并且交换映射中的特定槽位的引用计数为 1,那么换入该槽位中存储的页面的请求将同步发生,不进行预读,并且新读取的页面不会被添加到交换缓存中。到目前为止介绍的数据结构包括 交换集群(swap cluster),它代表交换文件(swap file)中一组 2MB 的交换槽(swap slots),以及存储在交换集群中的新交换表,用于跟踪每个交换槽的状态。这个相对简短的系列完全消除了交换映射。

Linux News搬运工 128

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

Android Memory management

https://developer.android.com/topic/performance/memory-overview Android Runtime(ART)和Dalvik使用页(paging)和内存(memory-mapping)映射来管理内存。 一个app修改过的内存,只能通过释放对象引用的方式让garbage collector回收; 唯一的例外是映射的文件如果没有被修改过,那么系...

Dylan_Sen的博客 984

LWN:SLUB分配器的下一步计划!

关注了就能看到更多这么棒的文章哦~What's next for the SLUB allocatorBy Jonathan CorbetMay 20, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974138/Linux 内核中存在两个级别的基本内存分配器:页分配器 (page allocator),以页为单...

Linux News搬运工 465

swap换出的情景分析

  1 哪些页需要swap(本文基于linux2.6.21.5)总之内核将没有文件backed的用户空间的数据swap到交换空间。这些页一般是应用程序的堆栈空间的数据,而进程的代码段的内容、以及其使用的文件产生的page cahe等都不会被swap到交换空间。 2交换空间交换空间对应磁盘上的分区或文件,其本身和普通磁盘文件一样,用一个struct address_space 来抽象。

linux_kernel_2_8的专栏 1835

LWN:参与者共同记录page flags!

关注了就能看到更多这么棒的文章哦~Documenting page flags by committeeBy Jonathan CorbetMay 22, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974515/对于系统中的每个内存页面(page),内核都会维护一组页面标志(page flag),描述页面的使...

Linux News搬运工 546

Linux SWAP 深度解读

概述 本文讨论的swap基于Linux4.4内核代码。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。 希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题: 1、swap到底是干嘛的?2、swappiness到底是用来调节什么的?3、kswapd什么时候会进行swap操作?4、什么是内存水位标记?5、swap分...

weixin_33728268的博客 2603

Linux内核源代码分析——swap实现

swap是现代Unix操作系统一个非常重要的特性。尤其在大型数据库服务器上,swap往往是性能首要查看指标。 通俗的说法,在Unix里,将开辟一个磁盘分区,用作swap,这块磁盘将作为内存的的替代品,在内存不够用的时候,把一部分内存空间交换到磁盘上去。 而Unix的swap功能也成为了Unixer们认为Unix由于windows的一个论据(?)。在Unix里,swap一般被认为设置为内存...

xuela-net 1311

Linux 中 Swap 分区的概念和使用

Linux 中 Swap **分区的概念和使用** vm.swapiness

繁星 1241
上一篇: LWN:6.10合并窗口的后半部分!
下一篇: LWN:Fedora同意提供预编译的macOS二进制文件!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值