吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何改進移動系統(tǒng)的內存管理?

SSDFans ? 來源:SSDFans ? 作者:SSDFans ? 2023-07-31 09:13 ? 次閱讀

1、背景&問題

A、現今移動系統(tǒng)的內存管理對用戶程序和用戶來說都不友好:

① 上層應用程序以object為單位進行內存分配和回收,而底層內核以page為粒度進行內存管理。這導致系統(tǒng)不了解應用程序內存使用情況,往往直接分配固定大小的內存預算(heap)。而應用程序實際工作集只占應用程序被分配的heap大小的很小一部分,造成內存資源的浪費;

② 當內存資源緊張時,系統(tǒng)會直接殺死應用程序(lmkd),而重新啟動應用程序需要很長時間,并且應用程序并沒有積極使用被分配的內存;

1eaa0322-2f34-11ee-815d-dac502259ad0.png?

1eca2f08-2f34-11ee-815d-dac502259ad0.png

B、傳統(tǒng)的swap機制效果不好:

① 傳統(tǒng)的swap機制不適用于托管語言(比如,Java),因為這類語言運行時的垃圾回收會導致額外的swap操作,讓工作集的估計變得困難;

② 傳統(tǒng)的按需swap無法滿足基于觸控響應的移動設備,在內存壓力下,會造成延時和卡頓;

1edf810a-2f34-11ee-815d-dac502259ad0.png

基于以上分析,作者提出對移動系統(tǒng)來說,限制內存管理改善的主要問題是底層系統(tǒng)缺少對上層系統(tǒng)語言運行時(比如,Android Run Time,ART)的了解。

2、設計

本文提出一種新的內存管理機制Marvin。Marvin的核心思想是結合Android系統(tǒng)內核內存管理機制和上層Java運行時,重新設計針對移動系統(tǒng)的swap機制。

A、Marvin包括三個基本功能:以對象為粒度的工作集估計、提前進行swap以及帶書簽的垃圾回收機制(Bookmarking garbage collector)。

以對象為粒度的工作集估計:

Marvin利用這個設計識別提前swap的候選并且將垃圾回收訪問與應用程序訪問分離;由于缺乏硬件訪問位來幫助進行跟蹤,Marvin實現ART 解釋器和編譯器中的軟件訪問跟蹤,因為現代移動語言運行時同時運行解釋代碼和編譯代碼。

提前進行swap:

Marvin將磁盤交換與回收內存分開,提前swap。根據不同object的狀態(tài),劃分兩類object:saved objects,已經復制到磁盤,但仍然駐留在內存中;reclaimed objects,不再駐留在內存中,只存在于磁盤中。

帶書簽的垃圾回收機制:

垃圾回收器在遍歷對象堆以查找未使用的對象時可能會無意中在內存中進行換頁導致swap操作。Marvin 通過將修改后的書簽垃圾收集器集成到 Android 運行時來解決這個問題

B、Marvin包括三個核心設計:存根(Stubs),相當于對象之間的中間層;回收表,運行時和底層系統(tǒng)進行訪問協(xié)調swap工作;對象訪問干預(Object access interposition),使得系統(tǒng)在運行時可以透明的采取行動。

對象引用間接存根:

Marvin 需要在相互引用的對象之間建立一個間接層,捕獲對換出對象(swapped-out)的訪問;存根提供該間接層,它是位于 Java 堆中小型偽對象,指向真實對象并且存儲真實對象引用的副本。

1ef96d72-2f34-11ee-815d-dac502259ad0.png

底層系統(tǒng)-運行時協(xié)調的回收表:

Marvin 需要一種讓運行時和操作系統(tǒng)協(xié)調的方法,告訴 OS 哪些對象可以被回收,防止操作系統(tǒng)回收運行時正在使用的對象。同時共享內存回收表允許這種協(xié)調,存儲對象的位置和大小,并具有用于鎖定的元數據位。

對象訪問干預:

當應用程序代碼訪問對象時,運行時需要一種透明的方式恢復換出的對象并且更新工作集元數據。同時,對象訪問干預是通過一系列成對解釋器和編譯器的修改來實現的。具體來說,解釋器在執(zhí)行對象訪問時直接行動,編譯器圍繞對象訪問生成額外的 ARM64 指令。

C、Marvin三個基本功能的工作過程:

以對象為粒度的工作集估計:對對象設置訪問位;掃描訪問位;產生工作集(Marvin 在每個對象標頭中保留四個字節(jié),并使用它們來存儲交換元數據和訪問位)。

1f08ead6-2f34-11ee-815d-dac502259ad0.png

設置訪問位

1f299844-2f34-11ee-815d-dac502259ad0.png

GC掃描訪問位,產生以對象為粒度的工作集

提前swap:將對象提前保存到外存;回收對象;恢復對象。

1f424024-2f34-11ee-815d-dac502259ad0.png

帶書簽的垃圾回收機制:運行時使用對象訪問干預來維護存根引用;GC 在不接觸底層對象的情況下檢測存根和讀取引用。

1f655726-2f34-11ee-815d-dac502259ad0.png

1f7cf110-2f34-11ee-815d-dac502259ad0.png

3、實現

Marvin 有兩個關鍵組件:(1) Marvin 內核 (MK),修改后的 Android/Linux 內核(MK 的唯一職責是通過決定何時以及從哪個應用程序回收內存來平衡應用程序之間的內存分配。),以及 (2) Marvin Runtime (MRT),一種改進的 ART(它執(zhí)行工作集估計、提前交換和書簽垃圾收集)。

4、實驗

A、實驗配置:Pixel XL phones,Android 7.1.1 (or our modified build)

B、性能指標:運行App數量;提前swap的效率;開銷

Marvin 可以運行的應用程序數量是普通 Android 的 2 倍以上,同時在帶有 Linux swap 的 Android 上,少量分配會使應用程序無法使用;

1f91a290-2f34-11ee-815d-dac502259ad0.png

Marvin 回收內存比帶 Linux swap 的 Android 快得多

1fa5b834-2f34-11ee-815d-dac502259ad0.png

5、總結

相比起之前優(yōu)化移動系統(tǒng)內存管理(尤其是swap)的設計,Marvin的創(chuàng)新性在于結合上層高級語言運行時和底層內核對內存管理優(yōu)化這一經典問題提出針對性設計。盡管Marvin的具體設計取得文章所述的收益有待驗證,但作者發(fā)現的這一問題確實存在,即軟件運行時和底層內核運行存在信息壁壘。通過設計合理的機制來解決這一問題,應該能夠帶來系統(tǒng)性能的有效提升。


審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7528

    瀏覽量

    164342
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210391
  • Linux系統(tǒng)

    關注

    4

    文章

    595

    瀏覽量

    27510
  • SWAP
    +關注

    關注

    0

    文章

    51

    瀏覽量

    12914
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    20178
  • ART
    ART
    +關注

    關注

    0

    文章

    26

    瀏覽量

    10501

原文標題:Marvin:語言運行時和內核協(xié)作讓我們的APP更快

文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux的內存管理是什么,Linux的內存管理詳解

    Linux的內存管理 Linux的內存管理是一個非常復雜的過程,主要分成兩個大的部分:內核的內存管理
    的頭像 發(fā)表于 05-11 17:54 ?6156次閱讀
    Linux的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>是什么,Linux的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>詳解

    嵌入式系統(tǒng)內存管理

    本帖最后由 VVX 于 2016-9-18 13:15 編輯 1、概述操作系統(tǒng)內存管理功能用于向操作系統(tǒng)提供一致的地址映射功能和內存
    發(fā)表于 09-17 19:40

    Linux核心對系統(tǒng)掛起支持及改進

    目前,系統(tǒng)掛起的主要障礙就是那些還不太完善的驅動程序,如USB、顯卡、聲卡驅動等。當然,現在Linux核心對系統(tǒng)掛起的支持還有待改進,主要表現在:1 不支持SMP系統(tǒng)。2 不支持大
    發(fā)表于 07-04 06:49

    操作系統(tǒng)對于內存管理

    操作系統(tǒng)如何有效的管理內存便顯得尤為重要。本文講述操作系統(tǒng)對于內存管理的過去和現在,以及一些頁
    發(fā)表于 08-07 06:53

    Keil C動態(tài)內存管理機制分析及改進,不看肯定后悔

    Keil C動態(tài)內存管理機制分析及改進,不看肯定后悔
    發(fā)表于 04-25 08:48

    怎么設計嵌入式系統(tǒng)內存管理

    系列文章:一篇講透嵌入式操作系統(tǒng)任務調度從需求反推設計方案,假如讓你設計嵌入式系統(tǒng)內存管理,你怎么設計?最簡單的,用一個雙鏈表控制,所有已分配和未分配的
    發(fā)表于 12-17 06:54

    Buddy算法在μC/OSII動態(tài)內存管理改進中的應用分析

    1 內存管理概述 內存管理是操作系統(tǒng)的中心任務之一,其主要任務是組織內存以容納內核和待執(zhí)行程序,
    發(fā)表于 10-26 10:12 ?0次下載
    Buddy算法在μC/OSII動態(tài)<b class='flag-5'>內存</b><b class='flag-5'>管理</b><b class='flag-5'>改進</b>中的應用分析

    關于μC/OS-II實時操作系統(tǒng)內存管理改進方法分析

    C/OS-II是一種開放源碼的實時操作系統(tǒng),具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發(fā)現,內核在任務管理(包括任務調度、任務
    發(fā)表于 10-27 11:50 ?0次下載

    基于μC/OS-Ⅱ實時操作系統(tǒng)內存管理改進方案

    C/OS-Ⅱ是一種開放源碼的實時操作系統(tǒng),具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發(fā)現,內核在任務管理(包括任務調度、任務間
    發(fā)表于 10-30 11:05 ?0次下載

    μC/OS-II實時操作系統(tǒng)內存管理改進

    C/OS-II是一種開放源碼的實時操作系統(tǒng),具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發(fā)現,內核在任務管理(包括任務調度、任務
    發(fā)表于 12-01 01:27 ?344次閱讀

    嵌入式系統(tǒng)內存管理機制詳解

    操作系統(tǒng)內存管理功能用于向操作系統(tǒng)提供一致的地址映射功能和內存頁面的申請、釋放操作。在嵌入式實時系統(tǒng)
    發(fā)表于 11-18 09:41 ?4565次閱讀

    Windows版Firefox將改進密碼管理系統(tǒng)

    Mozilla 計劃對 Windows 版 Firefox 上的密碼管理系統(tǒng)進行改進,以更好地提升數據安全性。
    的頭像 發(fā)表于 03-23 09:36 ?1328次閱讀

    Linux內存管理體系介紹

    內存是計算機最重要的資源之一,內存管理是操作系統(tǒng)最重要的任務之一。內存管理并不是簡單地
    的頭像 發(fā)表于 08-08 09:28 ?1693次閱讀

    Linux內存管理的詳細介紹分享

    內存管理是計算機系統(tǒng)中負責管理系統(tǒng)內存資源的一種機制,主要包括
    的頭像 發(fā)表于 05-29 14:09 ?1812次閱讀
    Linux<b class='flag-5'>內存</b><b class='flag-5'>管理</b>的詳細介紹分享

    Linux 內存管理總結

    一、Linux內存管理概述 Linux內存管理是指對系統(tǒng)內存的分配、釋放、映射、
    的頭像 發(fā)表于 11-10 14:58 ?592次閱讀
    Linux <b class='flag-5'>內存</b><b class='flag-5'>管理</b>總結
    博9网娱乐| 娱乐城百家乐官网论坛| 百家乐玩法规| 24葬书-葬法| 新世百家乐官网的玩法技巧和规则 | 打百家乐的技术| 诺贝尔百家乐官网的玩法技巧和规则| 六合彩香港| 大发888是怎么吃钱不| 真人游戏 豆瓣| 博狗百家乐的玩法技巧和规则| 杨公24山| 试玩百家乐官网帐| 温州市百家乐官网鞋业有限公司| 永利娱乐| 线上游戏| 金莎国际娱乐| 网上真钱梭哈| 百家乐官网高人破解| 怀柔区| 百家乐官网视频聊天游戏| 澳门百家乐有赢钱的吗| 筹码百家乐500| 菲律宾百家乐娱乐平台| 迪威百家乐娱乐场| 狮威百家乐娱乐| 威尼斯人娱乐信誉| 大发888真钱游戏下载官网| 大发888娱乐场下载ypu rd| 棋牌室名字| 澳门百家乐官网| 百家乐官网赌的技巧| 百家乐官网信誉平台现金投注| 白沙| 保单机百家乐官网破解方法| 百家乐官网黄金城游戏大厅| YY百家乐官网的玩法技巧和规则 | 百家乐官网桌布橡胶| 百家乐官网筹码价格| 百家乐算牌皇冠网| 四方百家乐的玩法技巧和规则 |