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. 零基础入门学习Java之多线程

    多线程 话不多说,看代码 1.什么是多线程 众所周知CPU单线程的东西,也就是说在同一时间内程序只能去做一件事情,但很多时候比如说多人买票.龟兔赛跑.游戏开发等都需要在同一时间内完成多个东西,因此就有 ...

  2. RSAToken 的签名算法 SHA256withRSA、数字签名

    数字签名的意义,看下百科:数字签名sign可不是对数据的加密和解密,而是生成签名和验证签名. https://baike.baidu.com/item/%E6%95%B0%E5%AD%97%E7%AD ...

  3. Delphi dbgrideh颜色设置

    DBGridEh中分行分列.单元格的颜色设置(1)分行不同颜色设置:在DBGridEh1DrawColumnCell中写: if ADOQuery1.RecNo mod 2=0 then begin ...

  4. 《ASP.NET Core 与 RESTful API 开发实战》-- (第9章)-- 读书笔记(下)

    集成测试 集成测试能够确保应用程序的组件正常工作,包括应用程序支持的基础结构,如数据库和文件系统等 进行集成测试时,应为项目添加 Microsoft.AspNetCore.MvcTesting 包 它 ...

  5. Pandas—read_csv()/read_table()文本文件的读取

    对于CSV及txt后缀的文本文件,分别使用pandas模块中的read_csv函数和read_table函数 文件类型 函数名称 CSV read_csv() txt read_table() 1. ...

  6. 【译】.NET 8 网络改进(二)

    原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 修改 HttpClient 日志记录 自定义(甚至简单地关闭)HttpClientFactory 日志记录是长期请求的功能 ...

  7. 【分布式】load balance 03-一致性哈希算法 java 实现

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 本节我们来看一下如何实现一个一致性 hash 框架. ...

  8. Javascript中的var变量声明作用域问题

    先看一下这两段代码的执行结果 var name2 = 'What!'; function a() { if (typeof name2 === 'undefined') { console.log(' ...

  9. 我的小程序之旅六:微信公众号授权登录(适用于H5小程序)

    实现步骤 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需sco ...

  10. Google C++ 风格指南记录

    最近在看谷歌的 C++ 风格指南发现了一些有意思的知识点,遂记录下 1. 第六章第二小节介绍了右值引用 只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用 std::forward. 定义: ...