原创 Android通過命令啓動APP的方法

1.首先手動啓動APP,然後執行命令“adb shell dumpsys window | findstr mCurrentFocus”獲取當前APP的activity 2. 執行命令adb shell am start-activity

原创 kernel-4.9內存回收核心流程

以32位系統爲例 內存分配流程調用流程: alloc_pages()  -->alloc_pages_node()   -->__alloc_pages_node()    -->__alloc_pages()     -->__allo

原创 Linux cgroup的整體框架

最近因爲項目原因,發現對於cgroup的知識嚴重匱乏,所以惡補了一下cgroup的相關知識。 cgroup指對進程進行分組,然後控制讓他們的cpu,io以及memory的使用,和系統的性能息息相關。 一、首先是cgroup的整體框架圖:

原创 cgroup之 memory cgroup(一)

如前文所述,memcg的整體框架如下: 對於memcg,作爲一個cgroup的subsystem,它遵循hierarchy的所有規則,另外,對於hierarchy中cgroup的層級對memcg管理規則的影響,主要分兩方面: 1、 如果

原创 Android中cgroup文件系統的mount流程

我們知道Android起來之後cgroup的各個子系統的文件夾都放在dev目錄下,例如: /dev/memcg/ /dev/cpuctrl/ /dev/cpuset/ /dev/acct/ /dev/blkio/ 以上這些文件夾都是在初始

原创 cgroup之memory cgroup(二)

memory cgroup起作用主要是限制各個進程使用內存大小,當其值超越限制值時會發生oom,講當前進程清理掉。 memcg oom的主要運行流程如下: 首先進程在申請內存時會進行try_charge操作,此時會進行oom檢測,如果是o

原创 內存回收中fastpath和kswapd以及direct reclaim的差異

fastpath、kswapd和direct reclaim都會掃描zone,且最後調用的函數都一樣,那麼他們有什麼區別呢? fastpath和slowpath的區別在於,fastpath要求zone的unmapped file page

原创 內存回收的關鍵函數以及其功能

zone_wartermark_ok()主要用來判斷當前zone的free pages個數是否大於參數的watermark的值,且當前zone存在連續的內存塊滿足內存分配時的2^order個頁數,order爲函數參數指定。 balance

原创 Binder驅動介紹

看到一篇不錯的關於binder驅動介紹的文章,轉載一下,原文鏈接: https://www.jianshu.com/p/b826cbf3cb8d Binder驅動是Android專用的一個驅動程序,保持了和一般Linux驅動一樣框架。Bi

原创 schedule_timeout

fastcall signed long __sched schedule_timeout(signed long timeout) {     struct timer_list timer;     unsigned long ex

原创 page的幾個比較中重要的flag

_count:表示內核引用該頁面的次數,當_count爲0時表示該頁面爲空閒或者即將被釋放,當count大於0時表示該頁面正在被使用,暫時不會被釋放。 _mapcount:表示該頁面被進程映射的個數,即已經映射了多少個pte頁表。_map

原创 RMAP反向映射

看了一下關於RMAP的東西,感覺看的雲裏霧裏,現在簡單總結下RMAP的作用: 產生背景: 我們知道一個page可以被多個進程的多個虛擬地址映射到,但是如果需要從page找到所有映射這個page的虛擬地址需要同時訪問系統當前所有進程的進程空

原创 DDR3 內存帶寬計算

內存帶寬計算公式:帶寬=內存核心頻率×內存總線位數×倍增係數。      先容我從DDR的技術說起,DDR採用時鐘脈衝上升、下降沿各傳一次數據,1個時鐘信號可以傳輸2倍於SDRAM的數據,所以又稱爲雙倍速率SDRAM。它的倍增係數就是2。

原创 缺頁異常詳解

首先明確下什麼是缺頁異常,CPU通過地址總線可以訪問連接在地址總線上的所有外設,包括物理內存、IO設備等等,但從CPU發出的訪問地址並非是這些外設在地址總線上的物理地址,而是一個虛擬地址,由MMU將虛擬地址轉換成物理地址再從地址總線上發出

原创 缺頁異常的幾種情況處理機制簡介

匿名頁面: do_anonymous_page(): static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned l