中文 英语

使用嵌入式软件管理内存

充分利用内存资源意味着充分利用硬件和软件所能做的一切。

受欢迎程度

作者:Ann Steffora Mutschler
内存正在成为嵌入式软件未来的一个关键杠杆点,因为它代表了当今soc中硅不动产的很大一部分。有效地管理内存和内存带宽也是潜在瓶颈和功耗的重要部分。因此,嵌入式软件在增强人们优化内存方面所做的一切都对系统的可靠性、硅的成本、功耗以及工作负载增加时的健壮性和可扩展性产生重大影响。

Cadence研究员、Tensilica联合创始人克里斯·罗文(Chris Rowen)说:“soc确实正在变成系统,而系统思维变得更加重要。”“这包括对软件在系统上组合的方式的更多抽象需求。你不能说,‘哦,这两个家伙知道软件的一切,他们会优化最后一个字节,最后一个循环,这一切都将是如此完美。他说,当你在设计一款用于车库门打开器的软件时,这还好,但当你在考虑一款与互联网相连、与云端交互、具有可下载应用程序的东西时,从软件的角度来看,这是一件复杂得多的事情。你必须把它想象成一个分层的系统,其中有一些基本的软件,它与硬件通信,然后是一些操作系统,然后是一些中间件和堆栈,然后是一些应用程序服务,最后是用户应用程序。”

所有这些层都将由不同的工程师开发。“这些层将通过正式的应用程序编程接口和其他类型的api相互交流。在每一层中,对简单易懂的需求都不可避免地导致更多的周期和更多的内存,因为你必须缓冲更多的东西,你必须假设最坏的情况下可能传输的大小-你真的必须用很多方法来填充它,”Rowen说。

这对处理器制造商来说是个好消息,因为这些动态创造了令人难以置信的处理需求。他说:“在过去40年的计算进步中出现的大交易是,硬件人员创造了越来越多的计算能力,而软件人员则把它扔在抽象上。”“我的意思并不是消极的。事实上,编程的抽象确实是系统进步的大目标。这并不是说我们需要车库门开器比以前快一万倍。我们需要10000倍的功能。功能实际上来自于易于编程。所以在某种意义上,我们利用了所有的内存密度和所有的计算能力,并通过提供抽象层来耗尽它们。但正是这些抽象层,不仅是周期消耗的来源,而且是越来越多的内存消耗的来源。”

内存的增加意味着芯片上的比特数更多,RAM阵列更大,芯片外内存的带宽更大,闪存设备中的芯片外dram也需要更大。

为了处理抽象,需要保护和隔离机制,因为随着应用程序复杂性的增长,您将从不同的人获得不同类型的软件。有时是你信任的某个软件,因为它是你隔壁同事开发的;有时是你在网上发现的某个应用程序,听起来很酷,所以你下载了它。

至于进入系统层面或整体系统管理,Synopsys ARC处理器营销高级经理Mike Thompson说:“比如你有一台平板电脑。你需要管理总线带宽和内存带宽这在很多系统中都是一个大问题。我们看到芯片上的芯片网络(noc)越来越多,这真的很有趣。”

此外,Synopsys的产品营销总监Marc Greenberg补充说,当谈到片外DRAM时,用户的部分期望是内存调度功能将由NoC或NoC内的某些元素处理。“在这种情况下,我们将内存调度功能的控制交给NoC,我们处理所有的协议功能——所有的维护功能,所有协议控制器中的协议功能。我们对这两类客户有几种不同的看法。我们肯定会看到NoC客户进入,通常NoC希望管理外部DRAM的所有方面。我们也看到客户进来,他们希望内存控制器负责调度和重新排序。”

虚拟化
系统IP开发商sonic的产品营销总监Frank Ferro指出,软件工程师和硬件工程师之间仍然存在脱节,试图将他们结合在一起一直是一个挑战。但随着soc的开发成本越来越高,它开始推动更多的合作。“特别是对于内存,我们看到了能够以更快的便携方式移动平台的需求,所以当你从一个SoC到下一个SoC时,由于费用和开发SoC所需的时间,我们意识到很大一部分费用是在软件上。如果搞硬件的人换了芯片,你每次都得重写软件,这是非常低效的。这可能是显而易见的,但他们还是这么做。”

因此,Sonics在其互连结构/片上网络中开发了所谓的交织内存技术(IMT),该技术可以平衡内存通道之间的负载,并基本上告诉硬件工程师,存储数据的内存是哪一组无关紧要。他解释说,对软件程序员来说,它基本上是虚拟的。“他所知道的是,GPU将从内存中取出一段数据——无论是在通道1还是通道2中,它都变得透明,因为fabric所做的是自动平衡银行之间的负载。我们试图尽可能多地交织以获得对DRAM的最有效访问。”

从虚拟的角度来看,Mentor Graphics的技术营销工程师Rich Rejmaniak指出,虚拟内存的一个工件是提供了从内存的一个区域到另一个区域的保护。Linux和Windows之外的RTOS环境并不总是能够运行虚拟内存,因为它需要大量的操作系统开销——这增加了系统的复杂性和规模。然而,保护不同单位不受伤害的能力是至关重要的。

他解释说,为了解决这个问题,Mentor在其Nucleus RTOS中增加了使用该硬件的能力,这样在实时操作系统上运行的不同应用程序和任务现在就不会干扰内核,也不会相互干扰。在这个环境中,它并不一定意味着要作为一个安全问题来防止恶意代码,因为一切通常都是相当可信的。

嵌入式软件的一个大问题是“潦草”——一种有bug的软件,在不应该写入内存的时候写入内存,从而导致其他模块崩溃,Rejmaniak说。“它运行得很好,但把其他人都排除在外了,你把所有的调试精力都集中在其他人身上,而他们并不是真正的问题所在。通过将这种保护放在每个模块中,如果它偏离了它的区域,它就会触发处理器的中断,操作可以捕获它,并且您可以很快找到问题的根源在哪里。它很早就解决了绝大多数问题——尤其是在你发布之前的工程环境中。”

使用嵌入式软件管理内存确实是当今SoC设计中的一个动态领域,这一点从上面仅涉及的活动中就可以看出。但这些只是这个领域中发生的活动的表面。随着抽象的兴起,嵌入式软件的潜力将是一个值得关注的有趣领域。



留下回复


(注:此名称将公开显示)

Baidu