LWN回顾: Android内存管理

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧 本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。 阅读详情

Android memory management

By Jonathan Corbet, May 1, 2019, LSFMM

Android系统的设计核心目标就是要能够让用户体验到丝滑一般的响应速度,哪怕是CPU和内存很有限的场景,体验也不能下降的太离谱。为了达成这个目标,就引入了很多的技术细节,包括定期进行low-memory process killer(低空闲内存时杀进程)这个其他系统下没有的功能。在2019 Linux Storage, Filesystem, and Memory-Management Summit上,Suren Baghdasaryan介绍了Android为了让UI交互进程(interactive processes)能有足够的内存,碰到了哪些问题。

Baghdasaryan一开始就介绍了最近新加的pressure-stall information (https://lwn.net/Articles/759781/)  功能。这个功能起初不是Android开发的,不过看起来非常有效。它能让Android runtime拿到更精确的内存压力信息,也就能用来更好的管理运行的那些进程。总的来说,Android memory management的目标是能让interactive process尽可能的正常运行,与此同时也减少不必要的out-of-memory kill事件(也就是希望能少kill进程)。

Android的low-memory killer daemon (LMKD) 负责来实现这些功能。除了pressure-stall information(内存卡顿压力信息),近期还有其他一些功能能让LMKD更有效。例如pidfd( LWN:给进程发signal的时候PID已经被别的进程占用了,怎么办?!)就是很有用的技术,还有正在加入的功能可以轮询这些descriptor来检测死亡进程的也会很有用处。但是在回收内存的时候,还是有不少问题。例如cgroup,这个功能在其他很多地方都很有帮助,但是在LMKD里面,却事实上把kernel的LRU(least-recently-used,最近使用过)list给分成了很多的小list,这样内存回收实际上更难了。这个session讨论的核心问题就是怎样能尽快从LMKD杀死的进程那里把内存回收出来。内存回收(reclaim)有时候可能会耗费很长时间,甚至是无法预期什么时候才能回收到可用内存,这样LMKD就很难使用了,它甚至会很快开始继续kill其他本不用被kill的进程。Baghdasaryan的opportunistic reclaim patches (LWN:尽快释放被杀死的进程内存)就是希望能改善这个情况。它能够马上把被kill的进程(目标进程)的内存剥夺出来,避免目标进程自己出于某些原因只在缓慢的释放资源。快速回收内存就能让LMKD更好的预测是否需要kill更多进程。

第一版的patch是基于OOM reaper代码的,但他认为可能不是最终版的实现方式。不过要想实现出最终版本,需要先回答好几个问题。第一,从被kill的进程哪里剥夺内存,应该在哪里来做?一个方案是让发出SIGKILL信号的进程来负责(在kernel space)回收这部分内存。这个方案有很多好处:很简单能实现,CPU time会算在发起kill的进程上,内存回收时能够自动做好进程优先级继承,也能让user-space更好的控制内存回收的可预期性,但是从超大进程(large processes)来回收内存可能存在一些问题。

第二个方案就是找一些kernel thread来做这个事情,这样能让API很简单,也能做到很容易扩展(针对那些超大进程)。但是呢,user space就没法控制这些内存回收了。

Rik van Riel注意到这里有一个硬件配置问题,某些时候,移动设备会运行的非常快,也拥有足够的内存,这样根本也就不需要内存回收。这种场景下,增加一个新的API来加速内存回收可能本身就是一个错误的行为。Michal Hocko却认为这里的真正问题在于被block的进程(它们因此没法做自己的cleanup工作来释放内存),而不在于这些硬件配置是否高端。Johannes Weiner提出,针对那些硬件资源有限的环境,也可以通过自动把推出的进程迁移到系统里最快的CPU上去做。其他的资源限制就不会对这个正在退出的进程造成阻碍了,它们也就能尽快让出资源,因此他认为这里可能真正应该做的是调整CPU的分配。其他还有一些人担心这个方案会导致功耗过高的问题,不过其实这种场景下一般是有interactive process正在进行交互,这样一般都是会有一个快速的CPU(例如ARM里的big cores)正在运行的。

Hocko回答道,这里用到的功耗并不是一个问题,但是进程隔离可能是个问题。如果一个进程被绑定到一个slow CPU上,那么把它搬到fast CPU上去很可能会破坏cgroup之前规定好的进程隔离的规则,进而影响到当前正在运行的interactive processes交互进程。如果真的希望让一个正在退出的进程迁移去一个fast CPU上去做自己的清理释放工作,那就应该是让user space来发起这个迁移,把它移到另一个cgroup里去,然后再kill。 

Mel Gorman提出,这里会有好几个问题,一个是可能没有足够的CPU time来让这个清理释放工作尽快完成;另一个问题是进程空间现在已经膨胀的太大了,哪怕是最快的CPU也很难立刻把清理释放工作即可完成。他认为最好的方案很简单,至少是kernel这部分很简单:正在退出的进程应该迁移到一个快速CPU上(当然前提条件是CPU mask允许它迁过去),剩下的工作就是user space该解决的了,它应该把进程事先迁移安排好,如果它真想尽快回收内存的话。kernel不应该做更多的事情了,否则肯定会违背某些应用场景下进程隔离的需求。

Matthew Wilcox回到最开始的方案,他觉得在发起kill的进程那里去回收内存,就能绕过这些问题了。Gorman回答道,按那样去实现内存回收的话肯定能减少CPU之间的inter-processor interrupt终端,因为被kill的进程的内存不用被两个CPU都来touch了(那样性能肯定会不好)。也有人担心如果让发起kill的进程来负责回收的话,kill()系统调用就可能会变成一个blocking operation(阻塞操作)了,没人知道kill()多久之后才会返回,这样发起kill()的进程会丈二和尚摸不着头脑。

一个最终方案可能就是利用madvise(MADV_DONTNEED)类似的操作,来允许某个进程可以强制回收另一个进程的内存(至少是部分)。Gorman有点担心这个操作可能会被利用来做恶作剧,就像常说的”进程是否能用ptrace()来强制控制目标进程?“。不过这个API可能会有个好处就是能用在多线程的环境里,每个线程可以释放一部分地址空间。这样就能比较容易的把释放内存的工作并行化。在讨论的最后,还有个建议,每当对一个pidfd(process file descriptor)来调用fadvise()或者truncate()的时候,就能够做到回收目标进程的内存。不过这个idea没有更多时间展开讨论了。

手把手教你从入门到精通C# Modbus通信 本文是《Modbus通信从入门到精通》的导读,本专栏将会详细介绍ModusRTU 、ModbusASCII、ModbusTCP这三种协议的C#实现,由一个高级工程师多年实战经验总结而成,绝对干货! 阅读详情

相关推荐

【RT-Thread】从零到一:RT-Thread Studio工程创建与程序下载全流程实战

本文详细介绍了RT-Thread Studio开发环境的安装与使用,从工程创建到程序下载的全流程实战指南。通过具体案例演示了如何在STM32平台上快速开发RT-Thread应用,包括时钟配置、内存优化、构建调试等关键技巧,帮助开发者高效完成嵌入式系统开发。

weixin_30336061的博客 541

LMKD浅析(三)——Android Q新特性(MTK篇)

Android Q引入新模式——PSI (Pressure Stall Information),根据注册对PSI信息的监听,并通过判断watermark,memfree,swapfree,thrashing等信息,更全面地判断当前系统压力,并进行针对性杀进程。 此模式需要依赖: 1、内核配置CONFIG_PSI=y; 2、属性ro.lmk.use_psi须不为false; 3、属性...

Ryan ZHENG的专栏 1万+

量子-经典混合架构与动态QUBO建模

量子-经典混合架构与动态QUBO建模的结合,是当前量子计算与经典计算融合领域的前沿方向。通过将量子计算的并行性与经典计算的灵活性结合,该技术为解决复杂动态优化问题(如实时调度、金融投资组合优化、电力系统控制等)提供了全新的方法论。:将发电机组调度分解为QUBO(启停决策)与非QUBO(功率分配)子问题,通过3块ADMM协调;c_i(t) $随外部环境(如电力需求、市场价格)动态调整。量子-经典混合架构与动态QUBO建模的结合,标志着优化计算从。:每分钟根据市场波动调整QUBO的收益率-风险系数;

百态·数智思维 | 聚焦大数据、量化与未来AI 1334

android 内存优化_Android内存优化大盘点

内存优化是性能优化的重头戏,因此这部分也花了很多时间来梳理。老规矩,先上大纲:1.1 Android内存管理框架:这里针对上图进行简单描述:1)物理地址与虚拟地址:虚拟内存是程序和物理内存之间引入的中间层,目的是解决直接使用物理内存带来的安全性问题、超过物理内存大小需求无法满足等等问题。而Linux的内存管理就是建立在虚拟内存之上的。虚拟地址与物理地址通过页表建立映射关系,CPU通过MMU(Mem...

weixin_39830688的博客 400

TL494充电器原理与维修 (转)

TL494充电器原理与维修 电动自行车充电器多采用开关 电源,型号虽多,但电路结构大同小异,主要区别在于所选的脉宽调制(PWM)芯片不同如(UC3845、UC3842、SG3524、TL494)。现以佳腾牌 充电器为例,介绍其原理和故障检修方法。 一、电路原理 根据实物测绘的佳腾牌充电器电路原理如图1所示。整机可分为PWM产生和推动电路、功 率开关变换电路、...

weixin_30500663的博客 1814

数学:箭头符号→(to)都表示什么意义?

数学符号“→”在不同领域有不同含义:在逻辑中表示“蕴含”(p→q);在函数中表示映射关系(f:A→B);在极限中表示变量趋近(x→a);在推导过程中表示推理方向(A→B)。此外,它也可能用于向量表示或数列趋势。其具体含义需结合上下文判断,核心应用场景包括逻辑运算、函数定义、极限分析和数学推导等。

shunzi2016的博客 5563

LWN:PID的复仇!以及process_madvise(), pidfd capabilities

关注了就能看到更多这么棒的文章哦~process_madvise(), pidfd capabilities, and the revenge of the PIDsByJonath...

Linux News搬运工 2116

用一套可追溯的闭环,把设备变成可管理的资产:SAP S/4HANA Asset Management 模块详解

摘要:SAP S/4HANA的资产管理模块(EAM)通过标准化流程管理企业资产全生命周期,解决资产状态、需求和资源的不确定性。系统将资产抽象为技术对象,支持纠正性和预防性维护流程,通过维护工单实现可执行的工作包,并与物料管理、财务、生产计划等模块集成形成管理闭环。该模块可帮助降低非计划停机时间,通过数据驱动决策优化维护策略,提升资产可用率和运营效率。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

LWN:在另一个进程的地址空间内执行代码!

关注了就能看到更多这么棒的文章哦~Running code within another process's address spaceBy Jonathan CorbetApri...

Linux News搬运工 527

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1318

AUTOSAR进阶图解==>AUTOSAR_SWS_CANNetworkManagement

本文介绍了AUTOSAR架构中的CAN网络管理(CanNm)模块,主要内容包括: 模块概述:CanNm是协调CAN网络节点状态转换的基础组件,采用去中心化设计,通过周期性发送网络管理PDU保持网络活跃状态,支持网络唤醒、睡眠和部分网络功能。 架构设计:CanNm位于AUTOSAR中间层,连接上层通信管理器(ComM)和底层CAN接口(CanIf),包含状态管理、PDU处理和定时器管理等子组件。 状态机设计:定义了三种主要模式(总线睡眠、准备睡眠和网络模式)及其转换逻辑,网络模式又包含重复消息、正常操作和准备

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2037

高负载下性能瓶颈信息的提取

所有未过度使用系统基本上都是一样的,但是每一个过度使用的系统都会有不同的超载方式。如果一个项目的目标是最大化利用可用的计算资源,过度使用就不远了,但是过度使用发生的时候却很难定位问题所在。有些时候,即便存在问题也不会立刻显现出来。Johannes Weiner发布的pressure-stall information补丁可能会减轻系统管理员的负担,pressure-stall informatio...

ytfy339784578的专栏 2354

15、目标检测模型的评估指标与YOLO算法解析

本文详细解析了目标检测模型的评估指标,包括精确率、召回率、AP、mAP及IoU的定义与作用,并深入介绍了YOLO算法的核心原理与推理流程。从网格划分、锚框引入到边界框细化与后处理,全面阐述了YOLO如何实现快速准确的目标检测。同时总结了YOLO在智能安防、自动驾驶和工业检测等领域的应用,并展望了其未来在准确性提升、多类别支持和技术融合方面的发展趋势。

work3的博客 64

android之ION内存管理器(1)-- 简介

by JHJ(jianghuijun211@gmail.com) 为什么需要ION 回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的

crazyjiang的专栏 3万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jre9下载 jdk9

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

android 内存管理 ion,android内存管理-ION/PMEM

ION debugION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<>$cat /sys/kernel/debug/ion/ion-heap-1client pid sizetest_...

weixin_42519489的博客 290

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android pmem内存,android内存管理-ION/PMEM【转】

ION debugION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<>$cat /sys/kernel/debug/ion/ion-heap-1每个由pid标识的client也有一个debugfs目录/sys/kernel/debug...

weixin_35998980的博客 196

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android内存管理-ION/PMEM【转】

转自:https://www.jianshu.com/p/0eac3d3ff6bb ION debug ION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。 每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<<heap name>> $cat /sys/k...

weixin_30919571的博客 280

Linux下ion内存,android内存管理-ION/PMEM

ION debugION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<>$cat /sys/kernel/debug/ion/ion-heap-1client pid sizetest_...

weixin_39996742的博客 648

android之ion内存储器管理器,Android ION

场景:android之ION内存储器管理器(1)- 简介android之ION内存管理器(1)-- 简介by JHJ(jianghuijun211@gmail.com)为什么需要ION回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM...

weixin_35643153的博客 474

ion android 内核,Android Ion用户空间和内核空间

为什么需要ION回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的是ION内存管理器。ION是google在Android4.0 ICS为...

weixin_30175731的博客 411

Android Ion用户空间和内核空间

目录[-] ION filesION architectureION APIsUserland APIKernel APIHeap APIION debug ION is the memory manager of Android, it could be used by graphic and multimedia stacks to allocate buffers. I

技术无捷径,一步一脚印 2099

android之ion内存储器管理器,android之ION内存储器管理器(1)- 简介

为什么需要ION回顾2011年末[2],LWN审查了 android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的是ION内存管理器。ION是google在Android4.0 ICS...

weixin_35128544的博客 472
上一篇: LWN:关于TCP/IP网络拥塞改善方案的争论,以及专利风险
下一篇: LWN回顾: facebook利用transparent huge page来优化代码执行性能
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值