admin 管理员组

文章数量: 1184232


2024年1月18日发(作者:vba二维数组整行赋值)

一种嵌入式实时操作系统的性能测试平台的构建

王劲松 孙文生

北京邮电大学电信工程学院,北京 (100876)

E-mail:@

摘 要:本文提出一种基于Thread-Metric测试套件和ARM平台的RTOS性能测试平台的构建方案。该测试平台实现原理比较简洁,能有效地测量实时操作系统的运行速度等实时特性。本文以针对μC /OS II的移植和配置为例,详细阐述了平台的搭建和配置过程。

关键词:Thread-Metric,ARM,嵌入式操作系统测试平台

1. 引言

RTOS的应用中,对于其评价可以从很多角度来进行[1],如体系结构、API的丰富程度、网络支持、可靠性等。其中,实时性是RTOS评价的最重要的指标之一,实时性的优劣是用户选择操作系统的一个重要参考。评价一个操作系统的实时性应该着重考察它的哪些指标,以及如何进行测试,是本文着重讨论的问题。

本文提出了使用Thread-Metric测试套件在ARM电路板上搭建测试平台的一种方案[2] [3]。该方案没有采用昂贵的硬件设备,成本不高,能相对有效地衡量不同操作系统技术之间的相对性能。

2. RTOS简介

Thread-Metric是一个开源且免费的测试套件,同时Thread-Metric还提供了ThreadX的测试结果供使用者进行比较参考。ThreadX本身是一个非常优秀的商业化实时内核,在行业里有着许多非常成功的应用,通过与ThreadX测试结果的比较,我们可以对自己所测试的RTOS有个更加直观的了解。

2.1 Thread-Metric的测试原理

整个Thread-Metric测试套件由几个独立的测试项目组成,每个项目分别用于测试实时内核中的某一基本功能(如任务切换、中断处理、信号量处理等等)。测试的基本原理是通过计算一定周期时间长度里内核反复处理某一事务的次数,并将结果通过“printf”函数输出给PC终端获取。

Thread-Metric中的第一个测试项目为“基准测试(Basic Processing Test)”,该测试用于获取一个称之为“校准值(Calibration)”的数据,校准值的大小反映的是测试中所使用的硬件平台的能力,它的引入是为了屏蔽硬件平台对测试结果的影响,因为我们所需要评估的是RTOS的性能,而并非整个系统的性能。

除第一个测试项目(基准测试)外,在其它测试项目中,我们将会获取到一个称之为“迭代值(Iteration)”数据,迭代值的就是在一个测试周期长度里内核所处理的这一事务的次数,于是我们使用公式:

得分 = 迭代值÷校准值

即可得到实时内核在这一测试项目的得分。

-1-

2.2 Thread-Metric的文件结构

Thread-Metric测试套件全部由C语言编写,因此它适用于绝大部分实时内核,使用Thread-Metric也需要一个移植过程,不过Thread-Metric的移植非常简单,其移植过程只是一些API的重映射操作。Thread-Metric测试套件的源文件的组成如表1所示:

文件“tm_porting_layer_threadx.c”是Thread-Metric提供的一个已经完成的基于ThreadX的移植文件,它只是用来帮助我们快速的将Thread-Metric移植到其它实时内核,在我们实际利用Thread-Metric测试其它RTOS时,它是不需要使用的。

表1 Thread-Metric中的文件

Tab.1 List of each file in the Thread-Metric Suit

文件名

tm_api.h

tm_basic_processing_test.c

tm_cooperative_scheduling_test.c

tm_preemptive_scheduling_test.c

tm_interrupt_processing_test.c

tm_interrupt_preemption_processing_test.c

tm_synchronization_processing_test.c

tm_message_processing_test.c

tm_memory_allocation_test.c

tm_porting_layer.c

tm_porting_layer_threadx.c

功能描述

API声明和宏定义常量

基准测试

协同式的任务调度测试

抢占式的任务调度测试

中断处理测试

中断当中的任务抢占处理测试

任务同步处理测试

消息处理测试

内存分配测试

Thread-Metric移植相关文件

Thread-Metric移植于ThreadX内核的参考实例

2.3 Thread-Metric的使用要求

在使用Thread-Metric测试套件时,为了得到一个客观公正的测试结果,我们应当遵循Thread-Metric建议的几点要求,

一、测试周期长度应至少大于30秒。越大的测试周期长度越有利于消除调用“printf”函数输出测试结果时对于测试结果本身的影响;

二、关闭所有编译器优化选项,不允许将代码缓存在处理器的任何高速Cache中运行;

三、在移植Thread-Metric的过程中,API的重映射不能采用宏定义的方式;

四、内核的时钟节拍周期应设置为10毫秒;

3. Thread-Metric中的测试项目

当前版本的Thread-Metric总共包含8个测试项目,这些测试项目基本覆盖了实时操作系统最重要的核心功能[4]。

测试1:基准测试(Basic Processing Test)

测试1的主要目的就是获取硬件平台的性能校准值,校准值越大说明硬件平台的性能越强。在这个测试中将只创建一个运行任务。

测试2:协同式的任务调度测试(Cooperative Scheduling Test)

该测试中包含5个相同优先级的任务,各个任务在在执行过程中会先将自己的计数器加1,然后通过调有“relinquish”函数主动将CPU使用权交给下一个任务。图1是测试2的运行示意图:

-2-

图1 协同式的任务调度测试

测试3:抢占式的任务调度测试(Preemptive Scheduling Test)

该测试中包含5个由高到低不同优先级的任务,各个任务在执行过程中会将自己的计数器加1。在测试开始时,只有优先级最低的任务处于就绪,其它任务都被挂起。优先级最低的任务先唤醒优先级次低的任务被抢占,这样依次抢占下去后,最高优先级的任务获的CPU使用权后又将自己挂起,次高优先级的任务也将自己挂起,到最后优先级最低任务又获得CPU使用权,一个新的循环又开始。图2是测试3的运行示意图:

图2 抢占式的任务调度测试

测试4:中断处理测试(Interrupt Processing Test)

该测试中只包含1个任务,该任务通过调用软中断(SWI)指令的方式来连续模拟中断的发生,中断服务程序会释放一个信号量,中断返回后,任务去获取该信号量。获取成功后再次调用软中断。图4-3是测试4的运行示意图:

图3 中断处理测试

测试5:中断当中的任务抢占处理测试(Interrupt Preemption Processing Test)

该测试中包含2个优先级不同的任务,低优先级的任务通过调用软中断(SWI)指令的方式来模拟中断,中断服务程序中另外一个高优先级的任务被唤醒,中断返回时发生任务抢占。图4是测试5的运行示意图:

-3-

图4 中断当中的任务抢占处理测试

测试6:消息处理测试(Message Processing Test)

该测试包含1个任务,任务先想邮箱中发送一条消息,然后紧接着又再去邮箱中获取,并将获取的消息与发送的做对比,图5是测试6的运行示意图:

图5 消息处理测试

测试7:任务同步处理测试(Synchronization Processing Test)

该测试包含1个任务,任务通过不断获取和释放信号量的操作来模拟信号量的任务同步功能,图6是测试7的运行示意图:

图6 任务同步处理测试

测试8:内存分配测试(Memory Allocation Test)

该测试包含1个任务,任务通过不断获取和释放一个内存块来的测试内核的内存管理功能。图7是测试8的运行示意图:

图7 内存分配测试

4. 测试步骤与方法

在开始使用Thread-Metric进行测试之前,以下几个预备条件应当确保已经满足:

-4-

本文标签: 测试 任务 使用 中断

更多相关文章

MuJoCo初学者到高手的7大必学调试技巧

21天前

7个MuJoCo调试技巧:从模型崩溃到完美仿真的实战指南 你是否曾在MuJoCo仿真中遇到模型莫名抖动、关节卡滞或仿真崩溃?作为Multi-Joint dynamics with Contact(多关节接触动力学)引擎,MuJ

实现Debian10、CentOS7、ProxmoxVE的虚拟硬盘到OpenWRT-KoolShare模改-v2.36-r14941-67f6fa0a30-x86的转换:一步步操作指南

21天前

测试:vmdk格式转为qcow2格式 # 下载测试用vmdkwget# 重命名方便操作mv openwrt-koolshare-mod-v2.36-r14941-67f6fa0a30-x86-64-generic-squashfs-

构建现代应用:".NET Framework 3.5的全面指南

21天前

.NET Framework 3.5 中的功能简介(1) 我在前文《.NET Framework版本解析》()中提到:.NET Framework 3.5 = .NET Framework 3.0 + .NE

提升鼠标右键体验,Adobe Flash Player里的小窍门

20天前

最近电脑装了些软件后,右键打开的速度变得非常慢,严重影响工作效率。网上找了些解决方案,装了“**右键清理工具”附带了一堆垃圾软件,360安全卫士也么有响应的小工具,终于找了一个从注册表解决的方法,mark下。 电脑鼠标右

Autocad2014安装秘籍:助你快速掌握建筑设计与工程设计技巧!

20天前

Autocad2014注册机是一款专为Autocad2014 设计软件提供注册的辅助软件。用户使用Autocad2014zcj可以将未经注册激活的Autocad2014软件成功注册并激活。这款软件操作简单,易于使用,拥有广泛的受众群体

如何在Linux中调整系统时间?超详细步骤解析

19天前

在 Linux 系统中,可以通过不同的方法来设置系统时间,下面详细介绍几种常见的方式。目录方法一:使用date命令手动设置时间 date命令是一个简单且常用的用于显示和设置系统时间的工具。

遇到苹果手机黑屏?3招教你快速重启!

18天前

苹果手机作为市场上备受欢迎的智能手机之一,其稳定性和流畅性一直备受赞誉。然而,偶尔遇到手机突然黑屏无法打开的情况,也会让不少用户感到困扰。今天,我们就来详细探讨一下苹果手机突然黑屏打不开的解决方法,帮助大家快速恢复手机正常使用。

Ubuntu新手必备:静态IP配置步骤详述

18天前

为Ubuntu系统设置静态IP 前言 之前在使用Ubuntu时,Ubuntu一直都是固定分配为一个IP,今天和其他师傅交流的时候分配的IP突然改了,当时打开VMware看IP,改.ssh感觉非常狼狈,于是回来就为其配置

vcruntime140.dll干嘛的?丢失了vcruntime140.dll要咋办?

16天前

vcruntime140.dll干嘛的?vcruntime140.dll就是一个dll文件,它对于很多程序都是有用的,如果没有了它,那么你的有些程序是打不开的!所以当你丢失的时候,你就要想办法去修复vcruntime140.dll文件

pipwire cpu 100%使用率的问题

16天前

在Manjaro使用6.14以下内核版本+pipwire1.4.1及以下版本(已知存在问题的版本) 会出现因为声卡snd-seq模块导致的单核cpu使用率100%,导致笔记本耗电严重。通过lsof 看下5这个描述符是干啥的

如何释放并重新获得ip地址呢?_ip释放 ip重新获取

15天前

如何释放并重新获得ip地址呢? 释放并重新获得一个IP地址的具体步骤如下:1、要想从DHCP服务器重新获取ip,电脑必须设置成"自动获取ip",设置如下,在电脑桌面"网络"-属性-

windows系统下快速删除海量小文件方法_windows快速删除大量文件

14天前

使用windows命令行工具(DOS指令)来处理。 1、使用del命令删除文件del只删除文件夹里的文件,文件夹不删。 del fsq dirname附del的参数 P 删除每一个文件之前提

CPU使用率监测

14天前

看到 yrt888 提出的问题,抽空研究了一下,发现其实并不像网上那些示例写的,计算其实很简单,只要使用SystemProcessorPerformanceInformation 参数反复调用NtQuerySystemInfor

CPU负载与CPU使用率之区别

14天前

01 简介存储、内存和 CPU(中央处理器)等系统资源不足会极大地影响应用程序的性能。因此,监控这些组件至关重要。 与磁盘和内存不同,监控 Linux 系统上的 CPU 使用率并不那么简单。在本文中,我

使用MultCloud加速谷歌云盘数据

14天前

最近看的论文附带的数据集在谷歌云盘里,每个文件都有十个G左右的大小,而直接从谷歌云盘下载速度过慢而且有可能中断,而multcloud是一个非常好的多云盘管理软件。他可以通过国内网直接登录操作,我们可以通过multcloud将谷歌云盘的

JS弹出新窗口被拦截的解决方法_系统之间跳转如何用js关闭浏览器弹窗拦截

10天前

在Web编程中,使用JS在新窗口打开页面的时候,会遇到被浏览器拦截的情况,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?一、问题一一般情况下,如果直接在js中调用window.open()函数去打开一个新

[Windows编程] 使用AttachThreadInput 来捕捉其它窗口的键盘输入

9天前

在一些情况下(比如屏幕软键盘或者输入法程序),自己的窗口没有输入焦点但是想要当前焦点窗口的键盘输入消息,可以使用Win32 API函数来解决这个问题。AttachThreadInput把一个线程( idAtta

使用requests获取抖音secuid:通过重定向URL的方法,

9天前

import requestsrequests.packages.urllib3.disable_warnings()id = '93803600609'"""网址: 抖音uid一

免费畅游ChinaNet:坊巷WIFI应用指南

9天前

简介:坊巷WIFI是一款专为福建地区用户设计的软件,提供免费使用ChinaNet网络服务。软件基于WIFI技术,允许用户无线连接互联网。它覆盖全国范围,稳定高速,适合移动上网或公共场所使用。坊巷WIFI的安装程序坊巷WIFISetup

英雄联盟战斗力与隐藏分查询系统源码实战项目

9天前

简介:本项目是一个针对《英雄联盟》(LOL)的游戏数据分析工具,涵盖战斗力评估、隐藏分查询、皮肤信息展示及自动化数据获取功能。通过API接口或网络爬虫技术,系统可获取玩家表现数据并进行深度分析,帮助玩家了解自身真实水平与匹配机制。源码

发表评论

全部评论 0
暂无评论