LWN:多代LRU方案的未来!

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码) 本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。 阅读详情

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

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 内核。

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

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

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

博途PLC信号处理系列之卡尔曼滤波程序(Kalman Filter) 三菱系列PLC的卡尔曼滤波程序,可以参看下面这篇博文PLC滤波算法之卡尔曼滤波(kalmanFilter)代码+测试_RXXW_Dor的博客-优快云博客_plc滤波kalman滤波是采用递归的方法解决线性滤波问题,只需要当前的测量值input(西门子PLC里比如我们的模拟量通道AIW0值)和前一个采样周期的估计值(上一个时刻的滤波输出结果last_out)就能进行状态估计,需要的存储空间小,每一步的计算量小。下面我们通过程序代码一一给大家展示下。注意。...... 阅读详情

相关推荐

实战指南:在摩尔线程GPU上部署AI模型的完整流程

本文提供了一份详尽的实战指南,手把手教你如何在摩尔线程GPU上成功部署AI模型。内容涵盖从驱动安装、Docker环境配置,到核心的代码适配与模型运行全流程,并分享了性能调优技巧与常见避坑方法,旨在帮助开发者高效利用国产硬件进行AI应用开发。

weixin_29271263的博客 537

linux内存管理

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

zacharytse的博客 467

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进

本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。

weixin_42539414的博客 294

refault distance算法的一点理解

换成大白话来说就是,如果这个时候(第二次读入pagecache缓存),我把这个pagecache页放入活跃lru链表,有没有可能(或者说增大可能),在下次用户需要读取这个pagecache的时候,他还在lru链表上(无论是活跃还是非活跃链表),这样的话,就代表这个页还没被踢出lru链表,从而用户访问的时候,就没必要从存储介质中重新读了,毕竟从存储介质读内容的性能肯定比不上从内存里读,如果能直接从内存里(lru链表上)读到,岂不美哉?这个算法看了好几次了,都没太理解,今天记录一下,加深一下印象。

kaka__55的博客 768

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 364

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

14.7 跟踪LRU活动情况和Refault Distance算法

linux内核内存管理的实现以structpage为核心,类似城市的地标(如上海的东方明珠),其他所有的内存管理设施都为之展开,例如VMA管理、缺页中断、反向映射、页面分配与回收等。structpage数据结构定义在include/linux/mm_types.h头文件中,大量使用了C语言的联合体union来优化其数据结构的大小,因为每个物理页面都需要一个structpage数据结构。因此管理成本很高。page数据结构的主要成员如下: /* * Each physical page in the...

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

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1546

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

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

Linux News搬运工 1822

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2924

DeFi核心协议代码解析

本文解析了DeFi两大核心协议Uniswap V2和Compound的智能合约架构与关键代码。Uniswap V2采用恒定乘积公式(x*y=k)实现自动做市,核心合约包括Factory、Pair和Router,具备流动性铸造、代币兑换和TWAP预言机功能。Compound借贷协议通过cToken合约管理存款和借款,采用动态利率模型和抵押率机制,包含资金利用率计算、清算触发等核心算法。两协议均采用模块化设计,通过智能合约实现去中心化金融服务的核心逻辑。

闲人编程的博客 933

LWN: 多代化之后的LRU!

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

Linux News搬运工 1266

恒玄BES调试笔记-BES2500如何打开COMPEXP

打开Compressor and expander会占用资源,这个根据个人项目需求而定吧!打开方法,以及参数修改如下: config\best2300a_ibrt_anc\target.mk SPEECH_RX_COMPEXP ?= 1 apps\audioplayers\bt_sco_chain_cfg_default.c #if defined(SPEECH_RX_COMPEXP) /*****************************************************

leezs的博客 705

LWN:重新审视多代 LRU

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

Linux News搬运工 208

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LWN:如何合并 multi-generational LRU!

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

Linux News搬运工 1446

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

workingset protection/detection on the anonymous LRU list

Working-set protection for anonymous pages [LWN.net][PATCH v3 0/9] workingset protection/detection on the anonymous LRU list [LWN.net]14.7 跟踪LRU活动情况和Refault Distance算法-优快云博客

yiyeguzhou100的专栏 1448

LWN:针对多层内存系统重新进行NUMA平衡!

关注了就能看到更多这么棒的文章哦~NUMA rebalancing on tiered-memory systemsMay 2, 2022This article was contributed by David VernetDeepL assisted translationhttps://lwn.net/Articles/893024/传统的 NUMA 架构是围绕 n...

Linux News搬运工 1200
上一篇: LWN:为什么RISC-V尚未支持KVM?
下一篇: LWN: Control-flow integrity in 5.13!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值