PS:要转载请注明出处,本人版权所有。

PS: 这个只是基于《我自己》的理解,

如果和你的原则及想法相冲突,请谅解,勿喷。

前置说明

  本文作为本人csdn blog的主站的备份。(BlogID=064)

  本文发布于 2018-05-28 15:07:04,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=064)

环境说明

  无

前言


  在本系列第一篇文章的开始,我提出了写本系列文章的原因,就是为了改变当前项目中用到的核心板的内存大小来满足当前的新需求,所以我得根据当前单板的芯片型号然后去判定这个板子的硬件情况。同时也算是在工作中第一次实际项目中用相关知识来处理这个问题,对我来说,也算是对学校中知识的复习吧!

海思的三个内存关系(MMZ,OSMEM,RAM)


  OSMEM:就是我们的操作系统所用的内存,通过free可以看见

  MMZ(Media Memory Zone):此内存是供海思的媒体业务模块使用的内存,常用在音视频编解码等地方。此内存是通过linux driver实现的,在驱动内部对OSMEM没有使用的RAM部分进行内存管理。

  RAM:RAM=OSMEM+MMZ

  下面是一个512MB内存板子的例子(来自于海思SDK)

  DDR:


-----|-------| 0x80000000 # Memory managed by OS. 64M | OS | | | -----|-------| 0x84000000 # Memory managed by MMZ block anonymous. 448M | MMZ | | | -----|-------| 0xA0000000 # Memory managed by MMZ block jpeg.

内存调整


  查看MMZ内存的使用情况:

命令:cat /proc/media-mem
---MMZ_USE_INFO:
total size=159744KB(156MB),used=15164KB(14MB + 828KB),remain=144580KB(141MB + 196KB),zone_number=1,block_number=45

  从这里的情况来看,mmz大概只用了15M的样子,剩余了141M的样子,造成了极大的浪费,考虑到后续对MMZ的一些需求,我这里将MMZ大小调整为26M的样子,做一定的预留。然后OSMEM扩展到230MB(以前是100MB)。然后在对我们的程序里面的使用的内存进行仔细的调整和优化(能用1byte不用2byte,此时内存依然很紧张啊,跑的东西太多了),达到了项目部署要求,不用更换硬件,造成项目成本上升。(注意,MMZ内存占用情况会根据你使用的实际内容改变,比如:流的路数、分辨率、采样率等可能会改变MMZ的占用内存大小,一般板子起来后,用上文的命令查看实际的占用情况,根据实际占用预留一部分内存,然后根据RAM大小来计算即可。)

  现在的MMZ使用情况:

---MMZ_USE_INFO:
total size=26624KB(26MB),used=15164KB(14MB + 828KB),remain=11460KB(11MB + 196KB),zone_number=1,block_number=45

  现在的内存示意图:

    -----|-------|  0x8000 0000   # Memory managed by OS.              

    230M  | OS    |                                                 

         |       |                                                 

    -----|-------|  0x8E60 0000   # Memory managed by MMZ block anonymous.          

    26M | MMZ   |                                                 

         |       |                                                 

    -----|-------|  0x90000000   # Memory managed by MMZ block jpeg.

后记


  无

参考文献


打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。

HISI3520DV300 折腾记录(三)之《终篇》的更多相关文章

  1. disruptor笔记之八:知识点补充(终篇)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)

    前言:前面介绍了两篇关于bootstrap table的基础用法,这章我们继续来看看它比较常用的一些功能,来个终结篇吧,毛爷爷告诉我们做事要有始有终~~bootstrap table这东西要想所有功能 ...

  3. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. 网站静态化处理—web前端优化—下【终篇】(13)

    网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...

  5. Java Learning Path(三)过程篇

    Java Learning Path(三)过程篇 每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法.因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基 ...

  6. 前端面试题总结(三)JavaScript篇

    前端面试题总结(三)JavaScript篇 一.谈谈对this的理解? this是一个关键字. this总是指向函数的直接调用者(而非间接调用者). 如果有new关键字,this指向new出来的那个对 ...

  7. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  8. 跟我学SpringCloud | 终篇:文章汇总(持续更新)

    SpringCloud系列教程 | 终篇:文章汇总(持续更新) 我为什么这些文章?一是巩固自己的知识,二是希望有更加开放和与人分享的心态,三是接受各位大神的批评指教,有任何问题可以联系我: inwsy ...

  9. 我的第一次diy装机记录——小白的装机篇

    接上一篇<我的第一次diy装机记录——小白的配置篇> 处理器 AMD Ryzen 5 2600X 六核主板 微星 B450M MORTAR (MS-7B89) ( AMD PCI 标准主机 ...

  10. JUnit5学习之八:综合进阶(终篇)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. idea 集成接口测试插件

    idea api集成接口测试 日常逼逼叨 相信很多后端开发接口的小伙伴们在开发完成后也会进行简单的测试,可能会用到apifox,postman之类的测试工具,但是up近期发现了一个比较好用的idea插 ...

  2. 2024-02-03:用go语言,你有 k 个背包。给你一个下标从 0 开始的整数数组 weights, 其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k, 请你按照如下规则将所有

    2024-02-03:用go语言,你有 k 个背包.给你一个下标从 0 开始的整数数组 weights, 其中 weights[i] 是第 i 个珠子的重量.同时给你整数 k, 请你按照如下规则将所有 ...

  3. C++——异常处理模块笔记

    异常处理是C++中的重要概念之一,用于处理在程序执行过程中可能发生的错误或异常情况.异常是指在程序执行过程中发生的一些不寻常的事件,例如除零错误.访问无效内存等.C++提供了一套异常处理机制,使得程序 ...

  4. 推荐一款id生成器: Hashids

    唯一 id 生成的方式有很多种,比较常见的有以下几种方式: 语言自带功能,如 Java 中的 UUID,常用于后端 第三方工具提供,如 npm 中的 nanoid,常用于前端 Twitter 开源的 ...

  5. CF1916

    重点在 E B 如果 \(lcm(a,b)\neq b\),则是一个答案. 否则答案是 \(b\times\frac{b}{a}\). C 先前缀和.设前缀和 \(s_i\).考虑 \(s_i\) 减 ...

  6. Unicode编码的魅力:跨语言交流的桥梁

    引言: Unicode编码是一种用于表示世界上所有字符的标准编码方式.它解决了字符集兼容性和多语言文本处理的难题,成为实现全球化软件的关键技术.本文将深入探讨Unicode编码的优点与缺点,并介绍它在 ...

  7. react 聊聊setState异步背后的原理,react如何感知setState下的同步与异步?

    壹 ❀ 引 在react中的setState是同步还是异步?react为什么要将其设计成异步?一文中,我们介绍了setState同步异步问题,解释了何种情况下同步与异步,异步带来了什么好处,以及rea ...

  8. NC16645 [NOIP2007]矩阵取数游戏

    题目链接 题目 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵 ...

  9. 从零开始手写 redis(三)内存数据重启后如何不丢失?

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 我们在 从零手写 cache 框架(一)实现过期特性 中实现了 key 的过期特性. 本节,让我 ...

  10. Springboot集成Druid连接池并实现数据库密码加密

    Druid介绍 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss ...