我正在寻找最好的方法来设计一个需要尽可能接近实时响应的应用程序。我曾考虑过使用一个精简的内核,并将软件直接构建到其中,但我认为这不是最好的解决方案。
我对在硬件中创建一些东西很感兴趣(我已经在这里读到了),我想知道是否有人构建了类似的东西,如果是的话,他们使用的是什么硬件?
例如,是否有一种具有千兆位以太网的设备也是可编程的?即卡上的CPU?然后,我可以编写一个内核驱动程序来通信/控制卡上运行的应用程序-由于它非常接近网络接口,因此基于网络流量做出决策的延迟会更低……
有人这么做过吗?如果是这样的话,有谁能推荐一些我应该研究的硬件/软件吗?
发布于 2011-01-09 14:14:57
一般评论
在人们能够回答之前,您可能需要更具体地说明您的需求。我们中的许多人都构建了实时系统,但请记住,a)实时与实时不同,b)“实时”是一系列不同的及时性标准的总称。
您需要哪些活动来确保活动的及时性?你在问题中提出的解决方案有点异乎寻常,只有当你陈述了你的需求,并且你确信更传统的方法是不够的时,才应该考虑这些解决方案。
构建实时应用程序/系统与设计任何其他应用程序/系统没有什么不同。然而,您确实需要捕获每个活动的时效性需求,其精度与您通常捕获“功能性”需求的精度相同(例如,函数/方法pre、post和不变条件)。当您开始理解所有这些需求的总和时,困难的部分就出现了--这与系统设计的其他方面不太一样。
即使您不能应用它的所有严格细节,我也建议您尝试用RMA analysis来框架您的应用程序的活动。许多动态应用程序不会完全屈从于分析,因为您没有足够的数据(它们本质上是不确定的/动态的/不确定的),但尝试应用该规则将有所帮助。
在任何情况下,从分析开始,而不是一小撮漂亮的(和复杂的)解决方案……
一些你应该掌握的东西:
基于其他注释的编辑
在迁移到hw/sw混合方法之前,请确保您首先用尽了软件解决方案。如果你的任务被内核抢占了,那么你应该努力让它处于控制之下。
操作系统是什么?如果是Linux、最新的Windows或Mac,您应该能够以实时优先级调度处理线程,并最大限度地减少内核引起的抢占。如果您真的要消耗CPU,也许您应该考虑双CPU方法,将单CPU用于应用程序处理(同样,取决于操作系统)。
啊哈,0.5ms的响应时间开始让情况变得更清晰了。如果您使用的是通用操作系统,那么一致的亚毫秒级延迟可能有点困难。
什么处理器(和时钟速度?)
听起来你已经准备好了一些可用的(或接近的)代码。你已经做了一些分析,因为你认为抢占正在杀死你。您采取了哪些步骤来消除抢占?你提到的“决策”活动是不是一个很小/很简单的评估?它是确定性的吗?0.5ms的限制是物理限制,还是由于包括系统其他部分的延迟预算而征收?
https://stackoverflow.com/questions/4637902
复制相似问题