高通内存优化计算

内存计算

内存映射计算步骤

通过命令“adbshell dmesg > dmesg.txt”收集内核日志,即dmesg日志

通过命令收集meminfo

 

adb shell cat/proc/meminfo > Meminfo.txt

生成内存映射的说明

下表显示了1GB终端的内存映射示列

非HLOS

99MB

Modem(W+G)

ADSP

Wconnect等

HLOS静态

25MB

内核

HLOS或android

900MB

应用程序+框架 411MB

可用+缓存  489MB

内存映射可分为三个主要区域:

n 非HLOS内存

n HLOS-静态内存(包括内核内存、IONCarveout内存,也可以包括Framebuffer内存)

n HLOS或Android内存

遵循以下方法测量或计算上述内存映射的各个组成部分:

1. 捕获终端的启动时间内核日志。启动时间内核消息输出的示例如下:

<6>[ 0.000000] Machine: QualcommTechnologies, Inc. MSM 8916 MTP

<6>[ 0.000000] cma: Foundexternal_image__region@0, memory base 0x0000000086000000, size 8 MiB, limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundmodem_adsp_region@0, memory base 0x0000000086800000, size 85 MiB, limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundpheripheral_region@0,   memory base0x000000008bd00000, size 6 MiB,limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundsecure_region@0, memory base 0x0000000000000000, size 109 MiB, limit0xffffffffffffffff

<6>[ 0.000000] cma: Foundvenus_qseecom_region@0, memory base 0x0000000000000000, size 18 MiB, limit0x0000000090000000

<6>[ 0.000000] cma: Foundaudio_region@0, memory base

0x0000000000000000, size 3 MiB, limit0xffffffffffffffff

 

/proc/meminfo的日志示例显示如下。 ¨ MemTotal 921600 kB

¨ MemFree 138728 kB

¨ Buffers 4616 kB

¨ Cached 362008 kB

 

测量非HLOS内存。基于以下日志:

非HLOS内存 = 8 MB + 85 MB + 6 MB = 99 MB

4. 测量HLOS或Android内存。根据/proc/meminfo,作如下计算:

HLOS或Android内存 = MemTotal(来自/proc/meminfo= 900MB)

5. 计算内核内存,内核空间 = 总RAM – 非HLOS内存 – HLOS或Android内存 –(Carveout +Framebuffer,如有)。

= 1024 MB – 99 MB – 900 MB – 0 MB = 25 MB

6. 计算可用内存。

可用内存 = Memfree + Cached(来自/proc/meminfo = 489 MB)

= 138728 kB + 362008 kB ~= 489 MB

7. 计算应用程序+框架,应用程序+框架 = HLOS或Android内存 – 可用内存 = 900 MB – 489 MB =411 MB

n 要获得终端的root访问权限:

adb root

adb shell setenforce 0

n 要获得整体内存占用,使用以下命令:

adb shell cat /proc/meminfo

adb shell /proc/iomem

adb shell procrank

adb shell procrank –C

adb shell cat /proc/zoneinfo

adb shell dumpsys meminfo

adb shell dumpsys SurfaceFlinger

(以相同顺序运行上述命令,由于dumpsys会触发GC,这会导致数据出现变化)

n 使用以下命令获得zram配置的详细情况,并将zram文件夹复制到日志位置:

adb shell cat /proc/swaps

adb pull /sys/block/zram0/ zram

n 使用以下命令获得PPR配置的详细情况(按进程回收)。

adb shell

cat/sys/module/process_reclaim/parameters/enable_process_reclaim

adb shell cat/sys/module/process_reclaim/parameters/pressure_min

adb shell cat/sys/module/process_reclaim/parameters/pressure_max

adb shell cat /sys/module/process_reclaim/parameters/per_swap_size

adb shell cat/sys/module/process_reclaim/parameters/swap_opt_eff

n 如果有多个zram终端(zram1、zram2等),需要获取全部此项信息。要了解KSM节省的空间,使用以下命令集并共享ksm文件夹。

mount –t debugfs none /sys/kernel/debug

adb pull /sys/kernel/mm/ksm/ ksm

n 要获得特定进程的内存占用,使用以下命令:

adb shell procmem <process_pid>

adb shell dumpsys meminfo<process_pid>

adb shell cat/proc/<process_pid>/smaps

adb shell dumpsys procstat<process_pid>

n 要了解所有vm设置,使用以下命令:

adb shell cat /proc/sys/vm/*

n 要获得LMK参数,使用以下命令:

adb shell cat/sys/module/lowmemorykiller/parameters/adj

adb shell cat/sys/module/lowmemorykiller/parameters/minfree

n 使用以下命令获得自适应LMK参数的详细信息。

adb shell cat/sys/module/lowmemorykiller/parameters/enable_adaptive_lmk

adb shell cat /sys/module/lowmemorykiller/parameters/vmpressure_file_min

n 要了解内核的缓冲区分配情况,使用以下命令:

nm -t d -l -r --size-sort -S vmlinux | head-50

n 要了解KGSL分配情况,使用以下命令集并共享kgsl文件夹。

mount –t debugfs none /sys/kernel/debug

adb pull /sys/class/kgsl/kgsl/ kgsl

n 共享终端上的build.prop文件:

adb pull /system/build.prop

n 共享终端规格:

RAM size

Display resolution

LCD screen length

某个应用程序的内存占用

每个应用程序的内存消耗中都包含以下部分

n 非缓存内存

n 缓存内存

n KGSL内存

n ION内存

QC提供的所有进程内存数据均使用“dumpsysmeminfo”包含上述全部内容。其他供应商可能不包括KGSL和ION内存。我们基于Google的建议在表达中包括了kgsl和ion,实施在memtrack硬件模块(/system/lib/hw/memtrack.msm8916.so)中,作为解决方案的一部分并对上层开放(例如dumpsys、meminfo等)


生成内存映射的说明

下表显示了1GB终端的内存映射示列

非HLOS

99MB

Modem(W+G)

ADSP

Wconnect等

HLOS静态

25MB

内核

HLOS或android

900MB

应用程序+框架 411MB

可用+缓存  489MB

内存映射可分为三个主要区域:

n 非HLOS内存

n HLOS-静态内存(包括内核内存、IONCarveout内存,也可以包括Framebuffer内存)

n HLOS或Android内存

遵循以下方法测量或计算上述内存映射的各个组成部分:

1. 捕获终端的启动时间内核日志。启动时间内核消息输出的示例如下:

<6>[ 0.000000] Machine: QualcommTechnologies, Inc. MSM 8916 MTP

<6>[ 0.000000] cma: Foundexternal_image__region@0, memory base 0x0000000086000000, size 8 MiB, limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundmodem_adsp_region@0, memory base 0x0000000086800000, size 85 MiB, limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundpheripheral_region@0,   memory base0x000000008bd00000, size 6 MiB,limit 0xffffffffffffffff

<6>[ 0.000000] cma: Foundsecure_region@0, memory base 0x0000000000000000, size 109 MiB, limit0xffffffffffffffff

<6>[ 0.000000] cma: Foundvenus_qseecom_region@0, memory base 0x0000000000000000, size 18 MiB, limit0x0000000090000000

<6>[ 0.000000] cma: Foundaudio_region@0, memory base

0x0000000000000000, size 3 MiB, limit0xffffffffffffffff

 

/proc/meminfo的日志示例显示如下。 ¨ MemTotal 921600 kB

¨ MemFree 138728 kB

¨ Buffers 4616 kB

¨ Cached 362008 kB

 

测量非HLOS内存。基于以下日志:

非HLOS内存 = 8 MB + 85 MB + 6 MB = 99 MB

4. 测量HLOS或Android内存。根据/proc/meminfo,作如下计算:

HLOS或Android内存 = MemTotal(来自/proc/meminfo= 900MB)

5. 计算内核内存,内核空间 = 总RAM – 非HLOS内存 – HLOS或Android内存 –(Carveout +Framebuffer,如有)。

= 1024 MB – 99 MB – 900 MB – 0 MB = 25 MB

6. 计算可用内存。

可用内存 = Memfree + Cached(来自/proc/meminfo = 489 MB)

= 138728 kB + 362008 kB ~= 489 MB

7. 计算应用程序+框架,应用程序+框架 = HLOS或Android内存 – 可用内存 = 900 MB – 489 MB =411 MB

n 要获得终端的root访问权限:

adb root

adb shell setenforce 0

n 要获得整体内存占用,使用以下命令:

adb shell cat /proc/meminfo

adb shell /proc/iomem

adb shell procrank

adb shell procrank –C

adb shell cat /proc/zoneinfo

adb shell dumpsys meminfo

adb shell dumpsys SurfaceFlinger

(以相同顺序运行上述命令,由于dumpsys会触发GC,这会导致数据出现变化)

n 使用以下命令获得zram配置的详细情况,并将zram文件夹复制到日志位置:

adb shell cat /proc/swaps

adb pull /sys/block/zram0/ zram

n 使用以下命令获得PPR配置的详细情况(按进程回收)。

adb shell

cat/sys/module/process_reclaim/parameters/enable_process_reclaim

adb shell cat/sys/module/process_reclaim/parameters/pressure_min

adb shell cat/sys/module/process_reclaim/parameters/pressure_max

adb shell cat /sys/module/process_reclaim/parameters/per_swap_size

adb shell cat/sys/module/process_reclaim/parameters/swap_opt_eff

n 如果有多个zram终端(zram1、zram2等),需要获取全部此项信息。要了解KSM节省的空间,使用以下命令集并共享ksm文件夹。

mount –t debugfs none /sys/kernel/debug

adb pull /sys/kernel/mm/ksm/ ksm

n 要获得特定进程的内存占用,使用以下命令:

adb shell procmem <process_pid>

adb shell dumpsys meminfo<process_pid>

adb shell cat/proc/<process_pid>/smaps

adb shell dumpsys procstat<process_pid>

n 要了解所有vm设置,使用以下命令:

adb shell cat /proc/sys/vm/*

n 要获得LMK参数,使用以下命令:

adb shell cat/sys/module/lowmemorykiller/parameters/adj

adb shell cat/sys/module/lowmemorykiller/parameters/minfree

n 使用以下命令获得自适应LMK参数的详细信息。

adb shell cat/sys/module/lowmemorykiller/parameters/enable_adaptive_lmk

adb shell cat /sys/module/lowmemorykiller/parameters/vmpressure_file_min

n 要了解内核的缓冲区分配情况,使用以下命令:

nm -t d -l -r --size-sort -S vmlinux | head-50

n 要了解KGSL分配情况,使用以下命令集并共享kgsl文件夹。

mount –t debugfs none /sys/kernel/debug

adb pull /sys/class/kgsl/kgsl/ kgsl

n 共享终端上的build.prop文件:

adb pull /system/build.prop

n 共享终端规格:

RAM size

Display resolution

LCD screen length

某个应用程序的内存占用

每个应用程序的内存消耗中都包含以下部分

n 非缓存内存

n 缓存内存

n KGSL内存

n ION内存

QC提供的所有进程内存数据均使用“dumpsysmeminfo”包含上述全部内容。其他供应商可能不包括KGSL和ION内存。我们基于Google的建议在表达中包括了kgsl和ion,实施在memtrack硬件模块(/system/lib/hw/memtrack.msm8916.so)中,作为解决方案的一部分并对上层开放(例如dumpsys、meminfo等)


猜你喜欢

转载自blog.csdn.net/ldinvicible/article/details/79447208
今日推荐