LWN回顾: facebook利用transparent huge page来优化代码执行性能

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

点击上方蓝色字关注我们~

Transparent huge pages for filesystems

By Jake Edge
May 22, 2019


LSFMM

继续2019 Linux Storage, Filesystem, and Memory-Management Summit (LSFMM)会议记录。Liu Song在会场里提出一个问题,关于如何让文件系统能真正支持transparement huge pages (THPs)。大家都知道文件系统支持THPs很难,那么如何开始第一步?Liu Song在Facebook工作,他们很需要在file page cache里面支持THPs。THPs可以减少page数量,从而减少TLB miss(Translation lookaside buffer miss,指MMU地址翻译没法利用TLB快速查询到结果,需要走完整的MMU walk路径,耗时较长),也就会有更好的performance。Facebook希望把常用的函数都放到huge page里面,从而减少相关指令导致的TLB miss。Facebook先利用Binary Optimization and Layout Tool (BOLT) 来采集他们的代码的运行情况,了解最常用函数是哪些。然后把这些函数归集到一个8MB的memory空间,塞到最终生成的可执行程序里去。

在程序运行的时候,它会在内存里创建一个8MB的临时缓存区,然后把那些常用函数都复制到这块区域。此后,通过mmap()映射anonymous page以及madvise来创建huge page,程序代码段原来的8MB的区域就变成了一个huge page区域,再把临时缓存区的内容copy回来,并且用mprotect()来把这块区域继续设置为可执行代码区域。

这一系列操作之后,kernel什么都不用改,就能获得5~10%的性能提升。不过THP区域的符号地址以及uprobe target就乱掉了,因为kernel没有意识到这块区域还是程序代码段的一部分。假如文件系统代码里面支持了THPs,那就不用搞这么多复杂的小动作,直接用一个madvise()命令来达成即可。

Liu希望能完成filesystem里面相关的代码,不过他所实现的代码里面还是有很多限制和简化。例如,不支持对THP内存区域的写入操作。大家对这里的操作有不小分歧。一位参会者问他为何部支持写操作,是因为性能问题,还是因为代码太复杂。Johannes Weiner解释说如果要加write支持的话,就意味着要修改filesystem里面所有需要用到page结构的代码。特别是所有的文件系统都要被修改了。所以为了避免用一个巨大的patch来一次修改完所有文件,他们采取了一个简洁的修改作为第一步,当然这不会是最终版本。

Kirill Shutemov和Matthew Wilcox有点担心,不支持写入的话,这个代码很难被合入Linux kernel。Chris Mason认为Facebook所描述的这种应用场景,确实不需要写操作。Wilcox坚持认为这个方案太不通用了。Rik van Riel认为大家都应该牢记一点,要想把这么大的一个改动一次性合入kernel,简直是不可能完成的任务。这个patch太大了,还是需要确定第一阶段应该完成什么。Shutemov和Wilcox很坚定的认为,不支持write操作的话,就没有理由合入kernel。

Wilcox倒是提到,他在做的page cache的一些改动(minimizing the tail pages, https://lwn.net/Articles/787388/ ) 会能简化文件系统里相关的支持。具体来说,能够把所有那些针对compound page来返回tail page的函数都拿掉。这样文件系统代码就只需要处理head page即可。他建议等他的代码完成之后,在此基础之上来加文件系统的THP支持。Shutemov比较赞同这个想法。当然这可能不是Liu最希望从这个讨论中看到的结果,没关系,Facebook还是可以继续在内部使用它现有的方案作为过渡。

全文完

极度欢迎将文章分享到朋友圈 
热烈欢迎随意转载,只需保留出处~

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

【LSF/MM内核前沿】Linux 内存回收推倒重来?解析 MGLRU 与传统 LRU 的“统一之战” Linux内核内存管理领域正经历一场重大变革。随着MGLRU算法的引入,vmscan.c文件膨胀至8000多行,包含40%重复代码,引发Google、Oracle等厂商开发者推动统一内存回收框架(reclaim_ext)的讨论。核心矛盾在于高性能但难维护的MGLRU与稳定但老旧的传统LRU之争。解决方案提出"机制与策略分离"理念,提取公共机制并定义策略接口。深度讨论聚焦可扩展性,提出通过eBPF实现定制化回收策略的可能性。这场重构不仅解决代码冗余,更标志Linux社区向模块化、透明化架构 阅读详情

相关推荐

内核内存管理的下一次进化:LSF/MM/BPF 2026 三大核心议题深度解析

Linux内核内存管理面临硬件变革带来的挑战,LSF/MM/BPF2026峰会提出三大革新方案:1)闪存友好型Swap通过缓冲、顺序写入和去重优化嵌入式设备存储寿命;2)DAMON框架计划整合NUMA提示异常机制,提升多线程监控精度;3)移除page_mapcount简化大页管理,虽牺牲统计精度但显著提升性能。这些提案共同推动内存管理向硬件感知和高效化发展,为TB级内存服务器和云环境铺路。

mounter625的专栏 779

【二进制优化 | 性能优化】(篇1)什么是 BOLT(Binary Optimization and Layout Tool)?BOLT 的基本流程是啥?如何使用?

基本块是一段连续的机器指令序列,仅有一个入口(首条指令)和一个出口(最后一条指令),且内部无分支或跳转(除末尾)。调整函数内部基本块的顺序,使高频执行路径(Hot Path)连续排列,减少分支跳转和缓存行切换。将高频调用或共同执行的函数在内存中相邻存放,减少函数调用时的缓存行切换开销。:边权重为基本块之间的跳转频率(如A→B跳转100次,B→C跳转50次)。:将频繁访问的数据结构(如全局变量、常量池)集中存放,提升数据缓存命中率。:最大化“连续执行基本块”的局部性,即跳转频率高的块应相邻。

Mercury_Lc的博客 1421

BOLT:Binary Optimization and Layout Tool-一种用于优化二进制文件性能的linux命令行实用程序

螺栓 BOLT是为加速大型应用程序而开发的后链接优化器。 它实现了基于由采样分析器,如Linux聚集执行配置文件优化应用程序的代码布局的改进perf工具。 概述了在BOLT中实施的想法,并讨论了其潜力和当前成果。 输入二进制要求 BOLT在X86-64和AArch64 ELF二进制文件上运行。 二进制文件至少应具有未剥离的符号表,并且为了获得最大的性能提升,它们应与重定位链接( --emit-relocs或-q链接器标志)。 在运行优化之前,BOLT会分解功能并重建控制流程图(CFG)。 由于这是一项艰巨的任务,尤其是在存在间接分支的情况下,我们依靠某些启发式方法来完成此任务。 这些启发式方法已在使用Clang和GCC编译器生成的代码上进行了测试。 C / C ++代码的主要要求是不依赖于代码布局属性,例如函数指针增量。 汇编代码也可以处理。 它的要求包括将代码和数据明确分开,并将数据对

什么是llvm bolt

基于bolt的二进制程序优化

叶玄青的博客 1453

YOLO26算法水面与液体识别+训练好的模型+393张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[未获取()] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 52 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.8528** mAP50-95 | 0.3441 Precision | 0.7729 Recall | 0.8354 train/box_loss | 1.5367 train/cls_loss | 1.0228 val/box_loss | 1.6809 val/cls_loss | 1.1758 【训练过程分析】 我这次训练了52个周期,模型在训练初期确实收敛速度很快,前20个周期mAP50从0.74逐步提升至0.82,这说明模型开始适应数据集,学习到一些关键特征。但到第30个周期后,提升速度逐渐放缓,到了40个周期时,mAP50达到0.85,这个阶段的曲线走势有些像磨砂玻璃,平滑且不规则,后期更是趋于平缓,表明模型可能已经达到最优解,再继续训练可能会有少量提升但代价较大。整体而言,从loss曲线来看,训练集的box_loss和cls_loss在52个周期内分别从1.80和1.25降到1.54和1.02,下降曲线较为稳定,但到了后期,这两项指标下降幅度逐渐减缓,尤其cls_loss下降至1.10左右后趋于稳定,这可能是模型对训练数据已有了较强的泛化能力,但也提示我们分类的稳定性可能还欠些火候。 至于验证集的表现,box_lo... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

C#西门子上位机与PLC通讯++S7协议

支持S7-200,S7-300,S7-1200,S7-1500+使用技术C#+S7net

linux二进制文件优化方式,Binary Optimization and Layout Tool - 用于优化二进制文件性能的Linux命令行工具...

BOLTBOLT is a post-link optimizer developed to speed up large applications. It achieves the improvements by optimizing application's code layout based on execution profile gathered by sampling profile...

weixin_33761747的博客 425

AI大模型医学影像诊断智能识别应用方案.pptx

AI大模型医学影像诊断智能识别应用方案.pptx

避免Linux内存浪费:Facebook开发新的THP收缩机制

Facebook正在为Linux内核开发的THP收缩机制旨在解决这种浪费,与此同时仍然可以享受THP以提高CPU效率的优势,THP Shrinker将分割利用率最低的大内存页面。THP对于某些工作负载来说,通过减少TLB缓存的未命中状态可以提高效率,但是2MB与4Kb的页面大小如果没有得到有效利用,反而会导致大量的内存浪费。Facebook的工程师在他们的一个平台上发现,由于THP没有得到充分利用,甚至让每台机器造成了大约2.7GB的内存浪费。

永远在学习Linux之路上 262

智能驾驶智慧交通行业智算中心(AIDC)建设规划方案.pptx

智能驾驶智慧交通行业智算中心(AIDC)建设规划方案.pptx

LLC谐振变换器恒压恒流双竞争闭环控制simulink仿真(附说明文档)

内容概要:本资源是一套面向电力电子与智能控制领域的综合性科研仿真资料合集,核心聚焦于LLC谐振变换器的恒压恒流双竞争闭环控制策略设计与Simulink建模仿真实现,涵盖半桥LLC、双向全桥LLC等拓扑结构的调频闭环仿真,并提供详尽的说明文档与PPT辅助材料。资源体系不仅深入呈现LLC变换器的动态响应与控制逻辑,还扩展至双有源桥(DAB)变换器的软开关协同优化、最小应力控制、EPS调制策略及新扩展移相角优化等前沿技术,同时集成三相PWM整流器在电网不平衡条件下的功率平衡控制、VOC+SVPWM双闭环控制等典型应用场景。此外,资源包涵盖状态估计(如EKF、UKF、PF)、微电网经济调度、卡尔曼滤波融合、神经网络控制、PID优化、储能系统管理等多个交叉方向,特别强调对顶级EI期刊研究成果的高精度复现,旨在帮助科研人员快速掌握先进控制算法的核心思想与仿真实现方法。; 适合人群:电气工程、自动化、电力电子、新能源科学与工程等相关专业的硕士博士研究生、高校科研人员,以及从事新能源变换器、智能电网、电动汽车、微电网系统研发的工程技术人员。; 使用场景及目标:① 深入理解LLC与DAB变换器的闭环控制机理,掌握恒压恒流切换、软开关实现与损耗优化方法;② 利用Simulink平台构建复杂电力电子系统模型,开展动态性能分析与控制器参数整定;③ 复现高水平期刊论文中的先进控制策略,提升科研创新能力与论文发表竞争力;④ 支持毕业设计、科研课题、项目申报及工程原型开发中的仿真验证环节。; 阅读建议:建议结合提供的完整资源目录循序渐进学习,优先研读标注“顶级EI复现”的案例以获取权威方法参考,配合MATLAB/Simulink动手搭建模型,重点关注控制框图设计、调制逻辑实现与仿真结果对比,深入理解算法背后的物理意义与数学推导过程。

LWN:LSFMM 远程参会的体验!

关注了就能看到更多这么棒的文章哦~Remote participation at LSFMMBy Jake EdgeJune 15, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/897915/和近期进行的许多其他会议一样,2022 年的 Linux 存储、文件系统、内存管理和 BPF 峰会(LSF...

Linux News搬运工 427

概率神经网络的分类预测-基于PNN的变压器故障诊断(Matlab代码实现)

内容概要:本文系统阐述了基于概率神经网络(PNN)的变压器故障诊断方法,结合Matlab代码实现分类预测。通过提取变压器运行过程中的关键特征参数,构建PNN模型以实现对正常状态与典型故障状态(如绕组短路、铁芯故障等)的高效分类识别。文章深入剖析了PNN的网络结构、概率密度估计原理、训练机制及分类决策过程,并通过仿真实验验证了该方法在故障诊断任务中具备较高的准确率与鲁棒性,展现了其在电力系统状态监测与智能运维中的良好应用前景。; 适合人群:具备一定机器学习理论基础和Matlab编程能力的电气工程、自动化、智能电网等相关领域的研究生、科研人员以及从事电力设备状态监测与故障诊断工作的工程技术人员。; 使用场景及目标:①实现变压器早期故障的智能化诊断与预警,提升电力系统运行安全性;②为基于神经网络的工业设备故障分类任务提供可复现的算法实现范例与技术验证平台; 阅读建议:建议读者结合文中提供的Matlab代码,动手复现实验流程,深入理解PNN在实际分类问题中的参数配置、训练策略、性能评估方法,并鼓励将该方法迁移至其他电力设备或机电系统的故障诊断场景中进行拓展研究与优化改进。

[转]LWN:The 2022 Linux Storage, Filesystem, Memory-Management, and BPF Summit

The 2022 Linux Storage, Filesystem, Memory-Management, and BPF Summit By Jonathan Corbet May 4, 2022 DeepL assisted translation https://lwn.net/Articles/893733/ Linux Storage, Filesystem, Memory-Management, and BPF Summit(LSFMM)一直以来都是许多核心的内核开发者的重要聚会之一。不过,上

m0_51717456的博客 359

优快云首页 发布文章 优快云同步助手 多无人机面向城市空中交通的多无人机路径规划研究(Matlab代码实现) 37 100 摘要:会在推荐、列表等场景外露,帮助读者快速了解内容,支持

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,系统阐述了该领域的核心挑战与关键技术。文章首先定义了多无人机路径规划的问题,明确了包括飞行安全、避障、协同效率在内的多项约束条件与性能指标。随后,重点介绍了三大类路径规划方法:基于改进RRT算法和图论的全局路径规划方法,用于构建初始可行路径;基于动态风险场的模型预测控制和动态窗口法(DWA)的动态避障方法,以应对环境中的突发障碍;以及多无人机协同规划策略和分布式协同控制算法构成的局部协同调整方法,确保多机间的飞行安全与任务协同。研究通过搭建Matlab仿真实验平台,设计了多种复杂城市飞行场景,对所提方法进行了全面的仿真验证与结果对比分析,展示了各方法在不同场景下的有效性与优劣。; 适合人群:具备一定自动化、计算机或航空航天领域基础知识,从事无人机、智能交通、路径规划等相关方向研究的研发人员和研究生。; 使用场景及目标:①为城市空中交通管理系统(UATM)的设计与开发提供理论基础和技术参考;②应用于物流配送、城市巡检、应急救援等多无人机协同任务的路径规划算法设计与仿真验证;③作为相关领域科研工作的技术参考资料,推动多智能体协同决策与控制技术的发展。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,通过复现仿真结果加深对各类算法原理与实现细节的理解。在学习过程中,应重点关注全局规划与局部避障的结合机制,以及多机协同策略中的冲突消解逻辑。

基于dify平台批量分析excel格式信息

如何以表格形式批量输入一些信息,然后让大模型以对话应用形式逐条进行推理分析?请逐行分析以下数据,给出推理结果:{{input}}这里提供一个分步解决方案,结合。

knightissocool的博客 8008

Facebook专家:Huge Page是否为拯救性能的万能良药?

准备知识 在阅读本文之前,需要读者至少了解以下基础知识: CPU Cache的基本概念。 NUMA的基本概念。 目前Linux基于多核CPU繁忙程度的线程调度机制,参看Chip Multi Processing aware Linux Kernel Scheduler论文。 一、关于Huge Page 在正式开始本文分析前,...

weixin_33963594的博客 215

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

Huge pages (标准大页)和 Transparent Huge pages(透明大页)

在Linux中大页分为两种:Huge pages (标准大页)和Transparent Huge pages(透明大页)。 内存是以块即页的方式进行管理的,当前大部分系统默认的页大小为4096 bytes即4K。1MB内存等于256页;1GB内存等于256000页。 CPU拥有内置的内存管理单元,包含这些页面的列表,每个页面通过页表条目引用。当内存越来越大的时候,CPU需要管理这些内存页的成本也就越高,这样会对操作系统的性能产生影响。 ...

Nicholas的专栏 7770

get_ccopt系列命令介绍

get_ccopt_property:用来获取cts阶段,clock tree上所有的参数信息,可以通过get_ccopt_property –help *获取所有参数。get_ccopt_skew_group_delay:用来获取skew group的相关信息,可以通过筛选出特定条件下skew_group的参数,如skew_group下latency最长是多少;get_ccopt_clock_tree_source_groups:获取clock tree的source group名字;

芯冰乐 280

030、自动白平衡AWB实战:灰度世界、完美反射与色温估计的工程实现与局限

本文深入探讨了自动白平衡(AWB)算法在工程实践中的实现与局限性。作者结合实际项目经验,分析了灰度世界算法、完美反射算法和色温估计三种主流方法的优缺点和适用场景,并分享了调试过程中的关键技巧和常见陷阱。文章指出,纯色背景、多光源环境等特殊场景容易导致算法失效,需要通过混合策略和场景检测来优化。作者强调AWB调试需要大量实际场景测试,建议保留手动调节功能,并针对不同硬件配置进行参数标定。最后提出,AWB优化是一个持续迭代的过程,需要工程化的测试方法和数据处理能力。

zzfmlxs的博客 281
上一篇: LWN回顾: Android内存管理
下一篇: LWN: 使用buffered I/O但是不用担心page cache被占满了!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值