0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内存占用分析

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 10:38 次阅读

内存占用分析

每颗芯片在出厂时,其bootrom就已经固化在芯片内部,假设bootrom的地址是0x0,即上电后,会从0x0地址处开始运行程序。

在启动RISC-VLinux之前,需要先运行opensbi,因此应该把opensbi放到地址0x0处,这样芯片上电后,就会从0x0地址处执行opensbi。在opensbi运行完后,会跳转到opensbi运行地址偏移2M的位置去执行下一级boot(这里下一级boot是kernel),即跳转到0x200000地址处运行kernel,因此应该把kernel放到内存的0x200000处。

内存分布示意图如下:

图片

对于kernel来说,在启动时会从自己的kernel加载地址处(即0x200000)开始建立页表映射,只有对物理内存建立了页表映射,后面才能访问这些内存。而kernel加载地址前面的2M内存(即0x0- 0x200000)将被kernel忽略,不会对这2M内存建立页表,即kernel无法访问这2M内存。

在QEMU上RISC-V Linux的启动信息

图片

但opensbi实际不需要使用2M这么大的范围,默认是512KB,opensbi的pmp会保护这512KB内存,不让其他程序访问。

图片

因此在Kernel和opensbi之间会存在1.5M的内存空隙,并且这部分内存空隙没有程序使用,这就会造成内存浪费,那如何让kernel将前面的一部分内存也利用起来呢?

优化方案方案一:将opensbi放到内存的最后面,kernel入口地址仍然保持2M对齐。

方案一

我们将opensbi放到内存的最后面,kernel入口地址仍然保持2M对齐。

即kernel放到内存的最前面,opensbi放到后面:

图片

例如kernel放到内存的0x0地址处,opensbi放到内存的0x10000000地址处。这样kernel前面就不会有预留内存,只不过这样需要修改bootrom的地址,将地址从0x0修改为0x0x10000000。这种方案只适合芯片还没出厂前,因为用户无法修改bootrom的地址,芯片出厂后,bootrom地址是固定的,假设bootrom地址为0x0,那么芯片上电后,就会从0x0开始运行程序,所以opensbi必须放到0x0地址处,这样必然kernel只能往后偏移2M。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47804

    浏览量

    409180
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206740
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72774
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83250
收藏 人收藏

    评论

    相关推荐

    Linux下查询进程占用内存方法总结

    今天浩道跟大家一篇关于运维牛人如何在Linux下挖出吃内存的进程,可以说是相当干的一个运维技能了,一起看看吧!
    发表于 07-27 10:51 9258次阅读
    <b class='flag-5'>Linux</b>下查询进程<b class='flag-5'>占用</b>的<b class='flag-5'>内存</b>方法总结

    linux下查询进程占用内存方法有哪些?

    linux下查询进程占用内存方法
    发表于 04-08 06:03

    Linux的CPU和内存占用率查看

    我们经常需要查看CPU和内存占用率,否则一旦存在情况很快就会有IDC(或客户)找上门,Linux上查看资源使用情况有多种命令可以参考,CPU、内存、IO、NETWORK等资源使用情况都
    发表于 07-24 06:52

    基于IMX6查看Linux下的CPU和内存占用

    查看 Linux 下 CPU、内存占用率方法1 : 如何查看 Linux内存占用率 我们可
    发表于 10-30 10:18

    哪些进程会占用我们过多的内存和CPU信息呢?如何查看呢

    过快。最佳top 命令包含更多的指标统计,相当于一个综合命令。top 命令常用的性能分析是实时显示系统中Linux进程的能力,资源占用情况。通过top命令可以快速实时知道服务器中的哪些进程会
    发表于 06-20 18:12

    枚举变量占用多少内存

    枚举变量占用多少内存
    发表于 10-11 08:07

    Android高效内存:让图片占用尽可能少的内存

    在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用。而在App中,大部分内存可能被我们图片
    的头像 发表于 06-02 11:05 4736次阅读

    详细介绍Linux 内存使用方法

    Linux内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具
    发表于 05-16 17:13 441次阅读

    Java服务器内存和CPU占用过高的原因

    造成服务器内存占用过高只有两种情况:内存溢出或内存泄漏
    的头像 发表于 03-21 15:50 2.1w次阅读

    电脑内存占用过高加内存条起作用吗

    电脑内存占用过高加内存条有用。内存容量小是内容占用过高的其中一个原因,所以加内存条可以解决问题;
    发表于 06-16 10:25 5996次阅读

    Linux:测试进程占用的虚拟内存大小

    Linux:测试进程占用的虚拟内存大小
    的头像 发表于 06-23 09:23 2637次阅读
    <b class='flag-5'>Linux</b>:测试进程<b class='flag-5'>占用</b>的虚拟<b class='flag-5'>内存</b>大小

    分析Linux操作系统的内存

    前言:在Linux上不像在Windows上看内存那样方便,而且还有Swap这个新的概念,所以知道如何来看Linux内存还是有一定意义的
    的头像 发表于 03-31 16:43 1168次阅读

    更低内存占用的通用Json库-RyanJson

    RyanJson是一个小巧的c语言json解析器,包含json文本文件解析 / 生成,专门针对内存占用进行优化,相比cJSON内存占用减少30% - 60%,运行速度和cJSON差不多
    的头像 发表于 08-24 17:23 801次阅读
    更低<b class='flag-5'>内存</b><b class='flag-5'>占用</b>的通用Json库-RyanJson

    分享排查Linux系统CPU占用的一个Shell脚本

    众所周知,Linux系统CPU占用100%这个异常现象还是经常遇到的,因此分析其导致异常原因是解决问题的根本。
    的头像 发表于 09-04 09:17 1054次阅读
    分享排查<b class='flag-5'>Linux</b>系统CPU<b class='flag-5'>占用</b>的一个Shell脚本

    Windows不明内存占用案例分析:Driver Locked

    前一段有客户反映Windows系统下不明内存占用越来越多,128GB物理内存的主机,启动完成后就有大约一半的内存占用,导致留给应用的
    的头像 发表于 09-25 14:49 807次阅读
    Windows不明<b class='flag-5'>内存</b><b class='flag-5'>占用</b>案例<b class='flag-5'>分析</b>:Driver Locked