高通内存优化计算

内存计算

内存映射计算步骤

 

通过命令“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等)

 


高通camera框架的内存分配是指在Android系统中使用高通手机芯片时,为摄像头硬件设备封装的一系列底层接口所分配的内存,包括画面缓存、预览缓存、视频帧数据、图像处理器缓存等。在高通的硬件架构中,摄像头模块和芯片核心处理器之间通过共享内存来传递数据,为了保证数据的传输速度和稳定性,需要对内存进行合理的管理和分配。 在高通camera框架中,内存分配的具体实现是通过一个名为Gralloc的模块来完成的。Gralloc是高通内存管理器,它可以自动为摄像头设备分配缓存空间,并在使用完毕后自动回收内存。此外,Gralloc还可以根据不同应用场景的需求,动态地调整缓存大小和数量,以保证系统内存的最优化使用。 在实际的使用中,高通camera框架的内存分配通常会涉及到如下几个方面: 1.缓存大小的设定。高通camera框架可以根据摄像头采集的分辨率、帧率等参数,自动计算出所需缓存的大小,并分配相应的内存空间。 2.缓存的数量。高通camera框架会根据应用场景的不同,动态地调整缓存的数量,以保持内存的平衡状态。 3.缓存的回收。高通camera框架会定期检查缓存使用情况,及时回收不再使用的缓存空间,以释放内存资源。 总之,高通camera框架的内存分配对于系统的性能和稳定性有着至关重要的影响。通过合理的设计和管理,可以有效地提高系统的响应速度和运行效率,从而更好地满足用户的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值