对于每个嵌入式软件开发人员和团队来说,性能是关键的指标。无论您是开发资源受限的设备,高性能模块还是仅仅是普通的系统,浪费的时钟周期都会花费金钱,时间和能量。如今,许多嵌入式系统都是由RTO构建的,但是根据我的经验,团队通常几乎不考虑其性能。
团队不考虑它也就不足为奇了,因为比较不同的RTOSE的数据很少。每个RTO虽然以核心概念和工具为基础,但都提供了广泛而多样的功能。使用此类功能集,您如何以提供合理的“苹果苹果”比较的方式测试RTOS性能?
在这篇文章中,我将分享如何测试三个流行的开源RTOSE(Zephyr RTOS,Freertos和Eclipse ThreadX)和一个商业RTO(PX5 RTOS)的RTOS性能。
识别RTOS性能测试
您可能会怀疑,并非所有的RTOSE都相等。每个RTO都会牢记不同的目标。这意味着基础实施将从一个RTO到另一个RTO都不同。每个RTO都有其优势,劣势,定制和标准功能。我们如何以公平的方式比较不同的rtoses并为我们提供准确的结果?
首先,我们必须认识到我们不能测试RTO的每个功能。例如,弗雷托斯(Freertos)具有超酷的功能,可让您在无滴答模式下以低功率应用程序运行内核。尽管这是一个很棒的功能,但并非所有RTOSE都具有它,因此很难比较其他RTOSE的功能。
我们必须专注于所有rtoses所共有的功能,而不是专注于差异化者,并且有很多。例如,所有RTOSE都将至少有一个调度程序,消息队列,信号量,内存管理和其他一些。这些构成了今天几乎所有可用的RTO的基础。这些功能是应该关注的功能,然后可以使我们对不同的功能的性能有一种感觉。
RTOS性能基准
如果要比较RTOS性能,则需要进行测试安全带。测试安全带使您可以创建一组常见的测试,该测试可行任何RTO中可用的标准功能。尽管开发人员可以使用几种不同的选项,但我使用的最多和最熟悉的是Eclipse基础线程度量基准套件。
线程度量基准套件由八个测试组成,其中一项是校准测试,以确保平台的操作相似。例如,如果成功地将RTO带入测试线束,并使用类似的设置并使用GCC进行了编译,则您希望校准测试为每个RTO提供约70,000个计数。如果不是这样,那么您知道编译器或其他设置不是相同的,这意味着您不能信任任何其他测试的结果。 (至少不信任任何直接比较)。
在我的实验中,我选择了我认为每个RTO的五个最常见的功能,每个RTO应具有的线程度量基准套件,其中包括:
· 合作计划
· 预先安排
· 内存分配
· 同步处理(信号量)
· 消息传递
每个测试的时间为30秒间隔,结果提供了计数器中累积的值。值越高,该测试的性能越高。 RTO完全有可能在一个测试上粉碎它,只能在另一个测试上表现出色。
获得苹果与苹果的比较
您可能会认为,使用基准套件,您将RTO插入套件,进行一些测试,进行一些比较并完成。不幸的是,这并不是那么简单。还记得我如何提到没有同等的两个rtose?为了获得合理的比较,您需要确保以使其公平的方式配置每个RTO!
您可以清楚地看到PX5 RTOS优于开源RTOSE。实际上,如果您看开源RTOSE,则Zephyr RTO的表现似乎非常可怕!剪裁干燥吧? Zephyr RTO的表现不佳,还是这样做?
Zephyr以其默认配置进行了测试。那是什么意思?
它的意思是:
· 不启用速度优化
· 启用了记录
· 主张检查已启用
· 启用了调试优化
· 运行时错误检查已启用
· 电源管理已启用
· MPU已启用并用于堆栈保护
我们可以争辩说,默认情况下,这些是否是启用的好东西,但是在任何一种情况下,其他RTOSE是否默认启用了这些东西?
他们不!默认情况下,它们是配置的,或者通过我的一些小调整,以禁用这些功能,以确保每个RTO的配置足够接近,以便可以轻松地将它们进行比较以进行性能!
为了获得苹果到苹果的比较,我必须禁用这些Zephyr RTOS功能。当我这样做时,结果有所改变。
唯一的变化是Zephyr的表现几乎增加了两倍!它的性能仍比PX5 RTOS慢约30%,并且比ThreadX慢20%,但是我们现在可以更自信地比较其性能并得出一些初步结论。
结论
比较RTOS之间的RTOS性能并不是微不足道的!每个RTO都有独特的功能和配置,必须考虑到准确的比较。我发现,一旦您将竞争环境升级,您就可以看到每个RTO的性能,将它们相互比较,并得出结论您的RTO可能如何影响您自己的项目。
每个项目都有其需求和需求,每个RTO都有其利基市场。作为工程师,拥有数据来帮助我们了解性能特征可以帮助我们做出正确的设计决策,并确保我们不会在桌面上留下任何急需的性能。
您已经看到错误配置如何影响比较测量值。我有一个动作项目供您从今天的帖子中删除:问自己:“我的RTO是否正确配置了?”这个问题可能会使您的RTOS的性能增加一倍。