LWN:多代LRU方案的未来!

基于大语言模型的学术论文阅读辅助分析系统的研究与应用 本文提出了一种基于大语言模型的学术论文阅读辅助分析系统PaperMind,旨在解决传统学术阅读方式面临的三大困境:信息定位困难、跨学科知识断层和手动整理耗时。系统采用检索增强生成(RAG)架构,通过PDF文档解析、语义分割、向量嵌入与FAISS向量检索相结合的技术路线,构建了完整的文档处理流水线。实验结果表明,系统在文档加载分割、向量检索与问答生成环节均达到预期性能指标,检索命中率最高达98%。该系统为学术文献智能化处理提供了可复用的技术方案,有效解决了通用大语言模型在学术场景中的幻觉引用、归因能力不足等问 阅读详情

Multi-generational LRU: the next generation

By Jonathan Corbet
May 24, 2021
DeepL assisted translation
https://lwn.net/Articles/856931/

multi-generational LRU patch set 对内核的内存管理子系统来说是一次重大改造,它应该可以给一些场景提供更好的性能。LWN 在 4 月份时曾报道过。在那之后,开发人员 Yu Zhao 已经发布了该工作的两个新版本,其中第三版于 5 月 20 日发布。自从最初的介绍文章发布之后,已经有了一些重大的变化,所以有必要再介绍一下。

先来快速复习一下:目前的内核里维护有两个 LRU 列表来跟踪内存 page,分别名为 "active" 和 "inactive" list。前者包含那些被判定为正在使用的 page,而后者包含的则是被认为未在使用的、可用于其他用途的 page。经常需要做不少工作来决定应该在什么时候在这两个 list 之间移动 page。multi-generational LRU 将这个原本两代的架构扩展为多代,也就是说 page 还可以处于 "likely to be active" 和 "likely to be unused" 这些状态。当一个 page 被访问时,它们会从较老的一代 list 移动到较新的一代,当需要回收内存时,会先从最古老的一代来开始回收 page。每一代的 page 都会随着时间的推移而变得老化,当最老的一代中的 page 都被回收掉了的时候,就会创造出新的一代。

这个总结里简化了很多细节,可以参考之前 LWN 的文章来得到更详细的信息。

Multi-tier, multi-generational LRU

自这项工作的第一次发布以来最大的变动是在 "tier" (层)的定义上,tier 这个词现在被用来细分各代 page,这反过来又可以帮助更好地决定哪些 page 需要回收(reclaim),特别是在那些需要使用大量 buffered I/O 的系统中。具体来说,tier 是一种采用访问频率来对每一代中的 page 进行分类的方式,不过它只关注那些通过文件描述符方式进行的访问。如果某个进程会通过文件描述符来访问该 page,此 page 的使用计数就会增加,于是就会把它移到第 1 层。后续的访问则会将该 page 推到更高的 tier(层);实际的 tier 级数就是对使用次数的的 base-2 对数值。

在研究应该如何利用这些 tier 信息之前,可以先讨论一下为什么要这样管理它们。为什么只计算基于文件描述符的访问操作?在补丁集或讨论中从未提及到一个可能理由(并且似乎是合理的理由):通过文件描述符的访问都是系统调用来的,并且相对容易地计算出来,开销很小。如果要跟踪 CPU 对内存的直接访问的话,成本会比较高,因此无法采用类似的粒度来进行监控。

另一个原因是,这种机制使得通过 I/O 引入的那些 page 的老化方式发生了一些改变。在目前的内核中,被放入内存的 page(例如 read() 调用得到的内容),一开始就会被添加到 inactive list 中。这种做法是有道理的,因为这个 page 大多数情况下不会再被使用了。但是,如果又有了一次对该 page 的访问,那么它就会被放到 active list 中,内核就会尽量避免回收它。这种机制比很久以前的机制要好,但是对于做大量 I/O 的进程来说,仍然有可能会把有用的 page 从 active list 中冲掉,从而损害系统的性能。

要做得更好的话,需要利用内核中已有的 shadow-page 跟踪机制。当 page 被回收用于其他用途时,内核会在接下来的一段时间内记着这些 page 所包含的内容,以及旧的内容是什么时候被抛弃掉的。如果这些 page 中有一个在不久的将来就被再次访问了,那么就需要从二级存储中把它提取回来,内核会注意到这个 "refault" 动作,这就是一个信号表明正在使用的 page 被回收掉了。一般来说,refault 通常都意味着 "thrashing" (频繁来回搬移),这并不是一件好事。内核如果发现了 refault 比较过量,就会做出一些调整,例如,增大 active list。

multi-generational LRU 的方案里面调整了 shadow 功能的相关记录项,于是就可以记录一个 page 在被回收时处于哪个 tier。如果这个 page 后来发生了 refault,那么它可以被恢复到之前的 tier 级别,同时这些 refault 时间也会被统计并记录到这个 tier 级别有关的数据中。这样就可以算出每个 tier 级别的 refault 比率,也就是说,从该 tier 回收的 page 中,有多大比例的 page 随后就因为 refault 而又放回了内存中?似乎很明显,在较高 tier 层级(意味着访问更加频繁)的 page 上发生的 refault 一般来说更加需要避免。

是通过比较更高一个 tier 层级的 refault 比率和 tier 0 层的 refault 率,就可以评估 refault 情况了。这里的 tier 0 层包含的是那些被 CPU 直接访问的 page 以及根本没有被访问过的 page。如果较高 tier 层级的 refault 比率高于 tier 0 层级的 refault 率,那么这些 tier 层级的 page 就会被移到较年轻的一代,从而(暂时)避免被回收。这样做了之后,事实上就把回收的重点放在那些较少发生 refault 的 page 类型上了。

还有一点需要注意,内存管理代码不会再像当前内核那样,每当再次进行基于文件描述符的访问的时候就自动将 page 提升一个级别。取而代之的是,那些由 I/O 产生的 page 会停留在最古老的一代,除非它们由于被访问到从而移到了一个比那些直接访问(directly accessed)的 page 更容易发生 refault 的 tier。正如 Zhao 在他的一段很长的解释信息中所说,这样做的效果就是防止这些 page 把那些使用量更大的 directly accessed page 从内存中挤出去。这应该会在那些有大量 buffered I/O 操作的系统带来更好的性能表现。Jens Axboe 也说确实有帮助。

与第一个版本相比,还有一个变化是增加了一个用户空间的开关,用来强制把一个或多个 generation 的 page 给回收掉。这个功能的目的似乎是为了让 job controller 能够为今后要做的工作预先腾出一些空间来,相关的文档 patch 里包含了更多的信息。

Multiple patch generations

multi-generational LRU 工作看起来还是很有价值,它已经收获了许多人的关注。不过,它进入 mainline 内核的道路看起来仍然漫长而艰难。Johannes Weiner 提出了一个在第一篇文章中也提到的问题:现在实现的 multi-generation LRU 与现有的内存管理代码是一个并列的选项,也就是给了内核两种 page reclaim 回收机制。根据 Weiner 所说的原因,这会很难得到推广:

不可能同时维护这两个方案,既不利于集中开发资源,也不利于集中测试资源,并且两个系统要想都能实现得比较稳定的话,会需要花费很多精力来维护一个复杂的共享代码 base。

因此,新的代码必须要能取代现有的方案,而这就是一个很高的要求了。必须要能证明它对于任何工作场景都要能有更好的表现(或者说,至少不能差),并且要能证明它足够可靠,可以用来替换已经有了 "数十亿小时的生产环境中的测试和调优" 的代码。做到这一点的唯一方法是将这个改动分为一系列更小的、逐步进化的改动来合并到 Linux kernel。因此,multi-generation LRU patch set 必须被分解成一系列的改动,其中任何一个改动都不可以过大,导致内存管理的开发者们认为合入它们不是一个安全的选择。

多年来,内核已经通过这种方式吸收了大量的改动,但这个过程无法快速且简单地完成。Weiner 提出了几个可以重点关注的领域,作为开始将这项工作中的一部分来推向 upstream,并使其余部分更容易被考虑合入的一种方式。如果遵循这个建议的话,可能可以在相对较短的时间内合并 multi-generation LRU。但是,这也意味着这个功能整体来说可能还需要经过更多的版本之后,才能全部进入 mainline 内核。

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS 本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。 阅读详情

相关推荐

STM32CubeMx+stm32f407+FreeRTOS+LAN8720实现LWIP以太网UDP TCP数据收发功能

单片机实现LWIP的调试

qq_40600203的博客 3068

LWN:针对二进制格式的一些好用工具!

关注了就能看到更多这么棒的文章哦~Some useful tools for binary formatsFebruary 28, 2023This article was contributed by Koen VervloesemFOSDEMAI assisted translationhttps://lwn.net/Articles/924133/Linux 用户经常使用文本文件;grep、...

Linux News搬运工 2406

X猫免费小说安卓逆向分析

七猫免费小说安卓逆向分析 难度(♥♥) 文章目录七猫免费小说安卓逆向分析 难度(♥♥)1. 查壳2. 抓包分析3. sign1. Frida-rpc2. Native函数分析快3点了. 睡觉~ 白天再继续写! 1. 查壳 我这边使用的是ApkTool, 拖进去显示未加壳。 2. 抓包分析 POST https://xiaoshuo.wtzw.com/api/v1/login/index HTTP/1.1 net-env: 1 channel: qm-cbcpa056_wm is-white: 0 platf

Qiled的博客 4366

LWN:内核开发者的更好的工具!

关注了就能看到更多这么棒的文章哦~Better tools for kernel developersByJonathan CorbetFebruary 6, 2020原文来自:htt...

Linux News搬运工 2448

C# 异步编程详解(Task,async/await)

同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调用者不用等待该方法执行完毕,我们称这个方法为异步方法。异步的好处在于非阻塞(调用线程不会暂停执行去等待子线程完成),因此我们把一些不需要立即使用结果、较耗时的任务设为异步执行,可以提高程序的运行效率。

luxingyu329的博客 4150

基于Simulink的压缩空气储能(Compressed Air Energy Storage, CAES)

压缩空气储能(CAES)是一种将电能转化为压缩空气存储在高压容器中,然后在需要时释放空气驱动涡轮机发电的技术。它具有大规模、长寿命和环境友好的特点,在电力系统中用于削峰填谷、频率调节和备用电源等应用。本项目将详细介绍如何在MATLAB/Simulink中搭建一个完整的基于压缩空气储能的系统,并提供具体的代码实现和设计步骤。如果你需要实现更复杂的控制逻辑,可以使用MATLAB Function模块。以下是一个简单的例子,展示了如何在该模块中实现一个条件逻辑:Matlab深色版本Kp = 1;

MHD0815的博客 1274

LWN:用户空间的影子堆栈!

关注了就能看到更多这么棒的文章哦~Shadow stacks for user spaceBy Jonathan CorbetFebruary 21, 2022DeepL assisted...

Linux News搬运工 2230

Laser-Marking 激光振镜打标机的开源代码 - 下载 - 搜珍网

为了方便开发者的使用和定制化需求,我们在这里提供激光振镜打标机的开源代码,并附带详细的描述。首先,让我们来了解一下激光振镜打标机的基本原理。振镜系统由两个可移动的反射镜组成,可以控制激光束在水平和垂直方向上的偏转角度,从而实现对工件的精确控制。通过这段开源代码,开发者可以根据自己的需求对激光振镜打标机进行二次开发和定制化。你可以修改振镜角度、打标速度等参数,也可以添加其他功能,例如自动识别和追踪等。首先,我们创建了一个串口对象,用于与激光振镜打标机进行通信。函数实现了对用户输入文本的打标操作。

TechProX的博客 1278

linux内存管理

文章目录内存分配机制虚拟内存MMUNUMAzone三级缓存机制大内存的分配slab内存回收机制页标记具体流程存在的问题 内存分配机制 linux中将内存区域分为了3块 DMA NORMAL:OS占用的内存空间 HIGH:非OS占用的内存空间 虚拟内存 作用如下: 提供了进程间的数据共享 实现了物理内存按需分页 降低了使用物理内存的门槛 虚拟内存的管理使用了红黑树,key为起始地址,value为vma MMU memory management unit,也叫分页内存管理单元。它负责虚拟地址到物理

zacharytse的博客 467

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1127

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

XiaoqiangClub的博客 1万+

LWN:开源语音助手的希望!

关注了就能看到更多这么棒的文章哦~Hopes and promises for open-source voice assistantsMarch 21, 2023This article was contributed by Koen VervloesemDeepL assisted translationhttps://lwn.net/Articles/926484/2022 年底,Paulu...

Linux News搬运工 2295

YOLOv8模型改进、剪枝、蒸馏和Web端界面的直观展示

模型蒸馏与性能提升 为了进一步优化YOLOv8模型,可以使用蒸馏技术将大型模型的知识转移到小型模型中。在模型蒸馏过程中,通过定义适当的损失函数和训练策略,学生网络可以学习教师网络的知识,并达到接近教师网络性能的效果。这样做不仅可以减少模型的存储和计算开销,还可以提高模型的推理速度和实时应用的响应能力。这样,用户可以直观地观察到模型的性能和应用的效果。为了优化YOLOv8模型并实现直观地观看检测效果或训练结果的全家通应用,本文将探讨如何通过改进、剪枝和蒸馏技术,并结合Web端界面来提升模型性能。

weixin_51988935的博客 2396

LWN: 多代化之后的LRU!

关注了就能看到更多这么棒的文章哦~The multi-generational LRUBy Jonathan CorbetApril 2, 2021DeepL assisted trans...

Linux News搬运工 1266

怀旧版电脑GBC模拟器

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LWN:内核热点: folio,多代LRU,以及Rust!

关注了就能看到更多这么棒的文章哦~The kernel radar: folios, multi-generational LRU, and RustBy Jonathan CorbetJ...

Linux News搬运工 1822

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LWN:重新审视多代 LRU

Barry Song 提出了 另一个单独的抱怨:当系统执行 预读 (readahead)(投机性地读取它认为用户空间可能很快请求的数据)时,它会将所有生成的页面放入最年轻的一代,即使并不能保证这些页面一定会被使用。内核必须处理的核心内存管理任务之一,是确定哪些页面应保留在内存中,哪些页面应被换出到较慢的存储设备中(即“回收 (reclaim)”)。这看起来将是一场有趣的会议。从(仅限订阅者的) Zhao 的 KSDB 页面 可以看到,他偶尔会改进 MGLRU,但最后一次是 6.14 内核中的几个提交。

Linux News搬运工 208

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LWN:如何合并 multi-generational LRU!

关注了就能看到更多这么棒的文章哦~Merging the multi-generational LRUBy Jonathan CorbetMay 12, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894859/很多类型的内核改动都可以在邮件列表中讨论决定下来。然而,有些类型的 patch 就很难...

Linux News搬运工 1446

LWN: 使用DAMON调整LRU-list!

关注了就能看到更多这么棒的文章哦~LRU-list manipulation with DAMONBy Jonathan CorbetAugust 22, 2022DeepL assisted translationhttps://lwn.net/Articles/905370/DAMON 子系统在 5.15 发布周期中进入了内核,它使用了一些启发式方法来确定哪些内存 page 正在被使用。从一开...

Linux News搬运工 715

LWN:优化内存中经常需要访问的匿名页!

关注了就能看到更多这么棒的文章哦~Working-set protection for anonymous pagesByJonathan CorbetMarch 19, 2020原...

Linux News搬运工 737

如何合并 multi-generational LRU

Merging the multi-generational LRU很多类型的内核改动都可以在邮件列表中讨论决定下来。然而,有些类型的 patch 就很难通过这种方式完成实现。它们非常大,而且具有侵入性,需要相关开发者的实际聚在一起讨论。multi-generational LRU 工作(MGLRU)就属于这种类型,这就是为什么它是 2022 年 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)上一整个小时会议的主题。...

Chinese_big_boy的博客 731

LWN:各种BPF实现的性能对比!

关注了就能看到更多这么棒的文章哦~Comparing BPF performance between implementationsBy Daroc AldenJune 5, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/976317/Alan Jowett 在 2024 年的Linux 存储、文件系统、内存管...

Linux News搬运工 946

LWN: 20年后能否解决 negative dentry 问题!

关注了就能看到更多这么棒的文章哦~Negative dentries, 20 years laterBy Jonathan CorbetApril 11, 2022DeepL assisted translationhttps://lwn.net/Articles/890025/文件系统和虚拟文件系统层的任务就是管理实际存在的文件,但 Linux 的 "dentry ca...

Linux News搬运工 908

LWN:分层内存的主动回收及其他!

关注了就能看到更多这么棒的文章哦~Proactive reclaim for tiered memory and moreBy Jonathan CorbetMay 13, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894849/Linux 中的内存回收(memory reclaim)基本上是采...

Linux News搬运工 592

LWN:folio的最新情况!

关注了就能看到更多这么棒的文章哦~A memory-folio updateBy Jonathan CorbetMay 4, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/893512/folio 项目还不到两年,但它已经导致了对内核的内存管理以及文件系统层的重大改变。虽然已经做了很多工作,但仍有不...

Linux News搬运工 1448

LWN:优化只有一个用户的内存!

关注了就能看到更多这么棒的文章哦~Optimizing single-owner memoryBy Jonathan CorbetMay 26, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932391/内核里的内存管理子系统的主要优化目标是要能最大程度地共享资源。但是,正如 Pasha Tatashin 在 20...

Linux News搬运工 1095

LWN:要提供更好的 OOM 调试工具!

关注了就能看到更多这么棒的文章哦~Better tools for out-of-memory debuggingBy Jonathan CorbetMay 11, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894546/Out-of-memory(OOM)的情况是用户、系统管理员以及内核开发人...

Linux News搬运工 400
上一篇: Linux 内存workingset Refault Distance算法源码及源码解析
下一篇: Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值