LWN:page在2024年的状况!

Trae编程工具Cline插件深度集成与Claude 3.7 API Key高级配置实战 本文详细介绍了如何在Trae编程工具中深度集成Cline插件并配置Claude 3.7 API Key的高级技巧。通过实战案例,展示了如何提升代码补全质量、实现多轮对话记忆及自定义代理设置,特别适合全栈工程师和需要私有化AI服务的团队。文章还涵盖了安装流程、API Key获取方式及企业级部署的最佳实践。 阅读详情

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

The state of the page in 2024

By Jonathan Corbet
May 15, 2024
LSFMM+BPF
ChatGPT translation
https://lwn.net/Articles/973565/

引入folio结构来描述页面组,是近年来内核中最为基础的转变之一。由于 folio 转换工作影响到了许多子系统,因此在 2024年Linux存储、文件系统、内存管理和BPF峰会的开幕会议上,存储、文件系统和内存管理议题联合讨论了这一主题。Matthew Wilcox 在会议中回顾了这一领域的工作,并讨论了未来的计划。

他首先提到,这一转变的第一步是将传统上存储在内核 page 结构中的大部分信息转移到 folio 中,然后将使用 struct page 的地方都转换为使用新的结构。最初的目标是为复合页 (compound pages) 提供类型安全的表示,但自那以后,任务的目标已经大大扩展。这导致了一些模糊性:在当前内核中,folio 到底是什么?目前来说,folio 仍被定义为“复合页的第一页”。

1ce10b5282759db04a6ec2805ae85207.png

在下一个阶段完成时,计划是将 struct page 缩小为一个单独的八字节内存描述符,其中最底下几位描述了 page 的类型。描述符本身是跟特定页面类型相关的;例如,slab 页面将有跟匿名 folio 或充满页表条目 (page-table entries) 的页面都不相同的描述符。

推动向描述符转变的主要目标之一是减少内存映射的 size,这是一个描述系统中每个物理页面的规模庞大的 page 结构的数组。目前,内存映射的开销为其所描述内存的 1.6%,这太高了。在使用虚拟化的系统中,内存映射也出现在客户机中,导致内存映射消耗的内存翻倍。通过转向使用描述符,这一开销可以减少到 0.2%的内存,从而在较大系统上节省多达数 GB 的内存。

要达到这一目标,需要将更多信息移入 folio 结构。在此过程中,可以澄清页面的固定计数等概念,清理内存管理子系统中的一些长期问题。这一举措自然会增加 folio 结构的大小,以至于它会大于 struct page 。但优势在于,一个 folio 结构可以指向所有组成这个 folio 的基础页(base page)。对于两个 page 的 folio,总的内存使用大致相同;对于四个 page 或更多 page 的 folio,内存使用量就会减少。如果内核正在缓存一个 1GB 文件,目前需要 16MB 的 page 结构。如果完全用基础页进行缓存,未来这一开销将增加到 23MB。但如果使用四页 folio,则总共下降到 9MB。

某些类型的描述符,包括那些用于slab页面和页表项条目的描述符,已经被引入。页表描述符比 folio 小得多,因为有许多字段是不需要的。例如因为这些页面不能被映射到用户空间,因此不需要一个表示映射次数的计数器。

Wilcox 展示了一张图表,显示自 2021 年以来内核中提到 struct page 和 struct folio 的次数。在这段时间内,大约 30%的用到 page 的地方已经被移除了。他强调,最终目标不是完全去除 struct page ;它总是有其用途的。例如,页面是将内存映射到用户空间的粒度。

自去年的更新以来,内存管理子系统内完成了很多工作。许多内核子系统已经转换为使用 folio。现在还有一种可靠的方法来确定一个 folio 是否是 hugetlbfs 的一部分,之前一直缺乏这个功能,这曾经是一个让人令人惊讶的问题。采用large anonymous folio是一个受欢迎的改动。

虚拟文件系统层也进行了大量与 folio 相关的工作。 sendpage() 回调已被更好的 API 取代。fs-verity子系统现在支持大 folio。buffer cache的转换正在进行中,但遇到了一个意外:Wilcox 假设 buffer head 总是绑定在 folio 上,但事实证明,ext4 文件系统分配了 slab 内存并跟它绑定起来。这种用法并没有错,Wilcox 说,但他“打算使其变成错误”,他不想在此过程中引入错误。

为了避免问题,需要在 struct page 中保留一些本来可能移出的信息。总体来说,他表示,如果早知道会导致这种结果,他就不会在 buffer head 上采取这种改法,但现在他不想退回去重来了。现在一切都很好,他说;ext4 代码非常小心地确保不在非 folio 支持的 buffer head 上调用可能使系统崩溃的函数。但未来没有任何东西可以阻止这种情况发生,这有点令人担忧。

虚拟文件系统层现在通过整个写路径分配和使用大 folio,带来了巨大的性能提升。Wilcox 还添加了一个内部函数,folio_end_read(),对此他颇为自豪。这个函数设置了最新 bit(up-to-date bit),清除了锁定位(lock bit),检查是否有其他线程在等待该 folio,并会作为内存屏障——在 x86 系统上,这些操作都只需一条指令。各种其他辅助函数也已添加,回调函数也进行了更新。还有一个新的回写迭代器(writeback iterator)取代了旧的基于回调的接口;其中一个好处是帮助恢复因 Spectre 缓解措施而失去的一些性能。

a61e986d93c2ca7aa2780bbc39f8f21a.png

各个文件系统中,许多在过去一年里已经转换为 folio。整体上,文件系统正在逃离 writepage() API;因为该 API 被认为是有害的,所以没有创建 folio 版本。bcachefs 文件系统现在可以处理大 folio——几乎没有其他文件系统能做到这一点。旧的 NTFS 文件系统被移除,而不用进行转换。为了支持网络文件系统,创建了"netfs"层。Wilcox 展示了一张图表,显示了许多文件系统的状态,表明大多数文件系统仍有大量工作要做。“XFS 是绿色的,”他告诉在场的开发者,“你的文件系统也可以是绿色的。”

folio 的下一步是将映射(mapping)和索引字段从 struct page 中移出。这些字段可能会在尚不支持大 folio 的文件系统中造成麻烦,而几乎所有文件系统目前都不支持大 folio。与其在转换这些文件系统时冒着引入错误的风险,不如现在就将这些字段移除。同时,许多页面标志(page flags)也正在移出;像 PageDirty 和 PageReferenced 这样的标志是针对整个 folio 的,而不是针对其中的单个页面,因此应保留在 folio 中。还有计划替换仍然直接使用 page 的 write_begin() 和 write_end() 地址空间操作。

除此之外,仍有大量文件系统需要完成转换,其中许多往好里说也是处于“伪维护”状态。hugetlbfs 子系统需要现代化。shmem 和 tmpfs 内存文件系统应该增强,以使用中间大小(intermediate-size)的大 folio。此外,还希望消除所有不使用复合页(compound pages)的大块(higher-order)内存分配,因为这些地方不能直接转换为 folio;加密层有很多这样的分配。

此外,还有“phyr”概念。phyr 是指一个物理页面范围,这是“block 层需要进行的改动”。这将允许块 I/O 操作直接在物理页面上工作,消除对覆盖所有物理内存的内存映射的需求。

看来需要一个 khugepaged 内核线程来将中等大小的 folio 折叠成更大的 folio。其他类型的内存需要为其创建专用的内存描述符。此外,还有KMSAN(Kernel Memory Sanitizer,内核内存清理器),这个工具实际上还没有被认真考虑过。KMSAN 为 struct page 添加了自己的特殊 bit,这种用法需要为基于 folio 的未来重新考虑。

一个重要任务是为更多文件系统添加大 folio 支持。在 Wilcox 所做的转换中,他避免添加这种支持,除了 XFS。这不是一项容易的工作,需要对特定文件系统类型有专业知识。但随着单页 folio 的开销增加,需要使用更大 folio 的需求也将随之增长。大 folio 还有助于减少内存管理子系统的 LRU 列表的大小,从而使回收更加高效。

Ted Ts'o 问到,这种转换对于使用较少的文件系统来说是不是很重要;比如 VFAT 需要转换吗?Wilcox 回答说,对于任何在意性能的文件系统都应该进行转换。Dave Chinner 补充说,任何在 NVMe 固态设备上工作的文件系统都需要大 folio 才能表现良好。Wilcox 总结说,切换到大 folio 使内核编译速度提高了 5%,并且还是人们想要的许多其他功能的前提条件,因此在场的开发人员应该尽早进行转换。

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

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

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

c06fa7f4d67951ae195e83b1cf291797.jpeg

终极版:完美实现在PyQT5或Pyside2中构建无边框圆角阴影窗口,可拖动,阴影随窗口活动状态变化,窗口鼠标拖动改变大小(完美复用) 终极版(完美复用):完美实现在PyQT5或Pyside2中构建无边框圆角阴影窗口,可拖动,阴影随窗口活动状态变化,窗口鼠标拖动改变大小 阅读详情

相关推荐

生成对抗网络(GAN、DCGAN、ACGAN)-----学习笔记

生成对抗网络学习笔记 生成对抗网络有两个关键结构:生成模型、判别模型。 生成模型:输入是一个服从正态分布的N维向量,利用这个N维向量生成一张图片。 判别模型:对于生成模型输出的图像判别它是不是真的图像。 生成模型和判别模型的博弈关系在于:生成模型的目的是生成让判别模型无法判别真伪的图像,而判别模型的目的是判断输入图像的真伪。 结合代码来看生成对抗网络中,生成器和判别器的训练过程: 判别模型的训...

weixin_43227526的博客 5489

LWN:丢弃文件系统的page cache!

关注了就能看到更多这么棒的文章哦~Dropping the page cache for filesystemsBy Jake EdgeJune 11, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/977486/VFS 维护者 Christian Brauner 在 2024 年的Linux 存储、文件系统、...

Linux News搬运工 1687

亚马逊(Amazon ads)广告API申请步骤(已经更新完)

你如果是自己的店铺使用,就选择左边的、如果是授权的那种给别人用就选右边的。审核通过了才能进行下一步,我目前就是刚申请完,后续会持续更新!然后会调整到,下面的页面,选择Agency然后右上角点击创建。审核通过会发邮件到你的企业邮箱、时间大概是1-7天左右。输入对应的信息,点击提交审核,就可以开始申请了。1、广告平台跟卖家平台是分开的,这个概念要清楚。2、注册广告一定要用企业邮箱!回到首页,点击成为合作伙伴。注册了以后会跳转到广告。然后再点击加入合作伙伴。然后会弹出下面的页面。

阿泽的博客 5655

LWN: 冻结page引用计数!

关注了就能看到更多这么棒的文章哦~Freezing out the page reference countBy Jonathan CorbetDecember 6, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/1000654/`page` 结构体是内核内存管理子系统的核心(目前是这样),其关键部分是存储在 `refcount`...

Linux News搬运工 1190

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

CATIA二次开发实战:我用VBA写了个BOM表自动导出工具,效率提升80%

本文详细介绍了如何利用VBA进行CATIA二次开发,构建BOM表自动导出工具的全过程。通过智能解析算法、异常处理机制和性能优化技巧,该工具将BOM表生成时间从2.5小时缩短至8分钟,效率提升80%。文章还探讨了与PDM系统集成和定制化报告生成等扩展应用,为机械设计工程师提供了实用的自动化解决方案。

weixin_33709590的博客 553

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

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2418

LWN:用BPF异步采集stack trace!

关注了就能看到更多这么棒的文章哦~Capturing stack traces asynchronously with BPFBy Daroc AldenJune 19, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/978736/Andrii Nakryiko 在 2024 年的Linux 存储、文件系统、内...

Linux News搬运工 2352

QEMU源码全解析 —— virtio(3)

QEMU源码全解析 —— virtio(3)

phmatthaus的专栏 1847

Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】

1. 设置目标原件时,选择切换,这样就可以实现,当原件展示时,点击自动隐藏,隐藏时自动显示; 2. 展开/收起原件(推动/拉动原件)设置为方向**向下**

专注于计算机研发知识和资讯分享 1377

LWN:对内核内存分配进行profiling!

关注了就能看到更多这么棒的文章哦~Memory-allocation profiling for the kernelBy Jonathan CorbetMay 21, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974380/优化内核的内存使用变得容易很多的前提是,开发者要能对内存的使用情况有准确的了解。然而...

Linux News搬运工 688

EndNote导入文献出现带有大括号{}乱码的解决办法

进入word中的Endnote工具栏——Bibliography Preferences(位于Bibliography区块的右下角),就是那个输入杂志名的小三角形,在Temporary citation delimiters处修改变量的默认符号。将默认的大括号{}修改为文章中不回使用到的符号。原因:因为Endnote插入的参考文献在Word中的代码就是以大括号隔开的,当文章中出现了该符号,endnote就会自动比对Library中的书目,而此时endnote出现错误。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4万+

LWN:测量和改进buffered I/O!

关注了就能看到更多这么棒的文章哦~Measuring and improving buffered I/OBy Jake EdgeJune 5, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/976856/Linux 上存在两种类型的文件 I/O:缓冲 I/O (buffered I/O) 和直接 I/O (di...

Linux News搬运工 753

SAP B1中文培訓教材_SDK

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LWN:DMA两步映射!

关注了就能看到更多这么棒的文章哦~Dancing the DMA two-stepBy Jonathan CorbetNovember 14, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/997563/Direct memory access (DMA) 直接内存访问 I/O , 简单的说,就是外围设备在 CPU 忙于其他任务时...

Linux News搬运工 1473

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LWN:6.9 合并周期的后半部分!

关注了就能看到更多这么棒的文章哦~The rest of the 6.9 merge windowBy Jonathan CorbetMarch 25, 2024Gemini translationhttps://lwn.net/Articles/965541/6.9-rc1内核预发布版本于 3 月 24 日公布,标志着本次开发周期的合并窗口关闭。截至那时,已有 12,435 个非合并变更集(n...

Linux News搬运工 366

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

LWN:2025 疯狂的 mapcount!

但是,这种优化只会使专有性问题更加难以回答,尤其是在存在部分映射的页组(其中只有部分页面映射到地址空间中)的情况下。所有这些工作的结果是,内核可以更好地处理任何给定的页组是被独占还是共享映射,尽管它仍然可能偶尔得出结论,即页组在未被独占映射时被共享映射。它们有自己的映射计数,本质上是它们包含的页面的映射计数的总和。对于单个页面,专有性问题很容易回答:如果映射计数为 1,则映射是独占的,否则是共享的。但是,如果映射计数是在页组级别维护的,则该规则不再适用,因为页组级别的计数几乎不可能是 1。

Linux News搬运工 1661

LWN:关于Emacs Org mode!

关注了就能看到更多这么棒的文章哦~Notes on Emacs Org modeBy Jake EdgeJanuary 10, 2024ChatGPT translationhttps://lwn.net/Articles/957316/在某种程度上来说为了学习更多 Lisp 的知识,我开始学习master Emacs,而这个过程中我花了相当多的时间深入 Emacs 世界的各种角落,其中之一就是...

Linux News搬运工 445

LWN:MAX_ORDER 带来的麻烦!

关注了就能看到更多这么棒的文章哦~The trouble with MAX_ORDERBy Jonathan CorbetJanuary 1, 2024ChatGPT translationhttps://lwn.net/Articles/956321/或许人们认为关于定义整数常量值的一个很简单宏可能没有太多可说的。但内核似乎不是这样。对MAX_ORDER定义的更改带来了许多随之而来的影响,清...

Linux News搬运工 675

LWN:kernel通用的ring buffer!

关注了就能看到更多这么棒的文章哦~A generic ring buffer for the kernelBy Jonathan CorbetJune 6, 2024Gemini-1.5-flash translationhttps://lwn.net/Articles/976836/内核的用户空间 ABI 中不乏环形缓冲区(ring buffer);在例如BPF、io_uring、perf和...

Linux News搬运工 1523

LWN:在内核里更好地处理整数的溢出环绕问题!

关注了就能看到更多这么棒的文章哦~Better handling of integer wraparound in the kernelBy Jonathan CorbetJanuary 26, 2024Gemini translationhttps://lwn.net/Articles/959189/数字(number)在数学领域来说是无限的,但计算机只能表示其中有限的一个子集。当算术运算产生计...

Linux News搬运工 438

LWN:FUSE 改用 folio 页集时出现的困扰!

关注了就能看到更多这么棒的文章哦~FUSE folio conversion confusionBy Daroc AldenFebruary 18, 2025Gemini-1.5-flash translationhttps://lwn.net/Articles/1008714/内核开发者们一直在努力将各种内部接口转换为使用folios(页集);虽然这个过程一直在进行,但由此引入的回归(regr...

Linux News搬运工 959

LWN:NUMA系统上对内核代码段复制多份!

关注了就能看到更多这么棒的文章哦~Kernel-text replication on NUMA systemsBy Jonathan CorbetJanuary 5, 2024ChatGPT translationhttps://lwn.net/Articles/956900/内核开发人员通常会想方设法减少内核本身使用的内存;这部分内存对人们实际想在其系统上运行的工作负载来说是无法利用的。这类内...

Linux News搬运工 835

LWN:BPF 里新的共享内存方案!

关注了就能看到更多这么棒的文章哦~A proposal for shared memory in BPF programsBy Daroc AldenFebruary 21, 2024Gemini translationhttps://lwn.net/Articles/961941/2021 年 2 月 6 日,Alexei Starovoitov 提交了一系列的补丁(patch series)给...

Linux News搬运工 503

LWN:文件系统杂记:EROFS、NTFS 和 XFS

因此,在一个给定的机器上,一个 EROFS 文件系统通常会被挂载多次,并且可能存在同一个文件系统的多个细微差异的变体。针对新的 NTFS 实现,有用户质疑在安全意识日益增强的今天,是否有必要为了性能而放弃像 ntfs-3g 这样成熟的 FUSE 方案,转而使用可能增加攻击面的内核态驱动。EROFS 支持各种先进的文件系统特性,并提供高性能的数据压缩。在最近的消息中,EROFS 文件系统正朝着获得实用的页面缓存共享功能迈进,一个新的 NTFS 实现也即将问世,而 XFS 则可能很快就会获得一套自愈基础设施。

Linux News搬运工 181

LWN:继续探索原子缓冲写(atomic buffered writes)

对于较小的系统,或者数据库作为具有自身内存需求的较大型应用程序的一部分运行的系统,内核可以管理内存分配的缓冲 I/O 设置仍然表现更好。缓冲 I/O 增加了复杂性,因为这些操作必须经过页缓存(page cache),而且实际的写入操作通常是在内核抽出时间时的另一个时间点执行的。这将允许创建一个短期的固定(pin)以将页面保留在内存中(如果装满数据的页面在操作过程中被推送到交换分区 [swap],则很难执行原子写),并允许内核在操作进行期间防止对这些页面的任何其他更改。他建议通过要求原子缓冲写在包含。

Linux News搬运工 147
上一篇: LWN:6.9 版本的开发数据!
下一篇: LWN:llamafile让LLM更易用!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值