Teste de desempenho do BRTOS 1.45
Para analisar o desempenho do BRTOS procuramos utilizar uma ferramenta de benchmark neutra. O Thread-Metric é uma Suite de Benchmark de código aberto que permite medir o desempenho de qualquer RTOS através de uma API própria para a análise de aplicações teste. Com esta ferramenta os desenvolvedores podem medir a sobrecarga de diversos RTOSes em um determinado processador ou podem comparar o desempenho de diversos processadores em um mesmo RTOS.
A Suite Thread-Metric inclui programas de benchmark que testam o processamento básico de interrupções e de chamadas de serviço do sistema (troca de contexto, passagem de mensagens, alocação de memória e sincronização). Este conjunto de serviços foi escolhido por ser geralmente encontrado em todos os RTOSes, tornando esta ferramenta numa suite de benchmark amplamente aplicável para avaliação de um RTOS.
Esta Suite consiste dos seguintes teste de benchmark (cada um destes testes mede um aspecto particular do desempenho de um RTOS):
- Processamento básico
- Troca de contexto cooperativo
- Troca de contexto preemptivo
- Processamento de interrupção
- Processamento de interrupção com preempção
- Passagem de mensagem
- Processamento de semáforo
- Alocação e desalocação de memória
Cada um dos testes consiste de:
Troca de contexto cooperativo: Mede o tempo que o escalonador de um RTOS leva para trocar o contexto de execução de uma tarefa para outra de mesma prioridade. Para tanto 5 tarefas são criadas com a mesma prioridade. Cada uma das 5 tarefas executa um laço infinito chamando o serviço de desistência do processador.
Troca de contexto preemptivo: Mede o tempo que um RTOS leva para trocar o contexto de execução de uma tarefa para uma tarefa de maior prioridade através de preempção. Para tanto 5 tarefas com prioridades diferentes são criadas. A tarefa executa até ser preemptada por uma tarefa de maior prioridade. Todas as tarefas iniciam suspensas (menos a de menor prioridade). A tarefa de menor prioridade acorda a tarefa de mais alta prioridade seguinte, e assim por diante, até que a tarefa de maior prioridade seja executada. Cada tarefa incrementa seu contador de execução e se suspende. O processo é reiniciado quando o processador retorna para a tarefa de menor prioridade.
Processamento de interrupção: é o tempo necessário para saltar para uma interrupção, executar a rotina de tratamento desta interrupção, executar o escalonador para determinar qual tarefa deverá ser executada, restaurar o contexto desta tarefa (caso necessário) e saltar para a execução desta tarefa. Neste teste deve ser utilizado uma interrupção de software para realizar a preempção.
Teste sem preempção: Neste teste não há preempção, ou seja, a tarefa interrompida volta a ser executada. O tempo total medido é o tempo em que uma tarefa não está sendo executada. Muitos RTOSes anunciam / fazem propaganda de baixa latência de interrupção, mas deixam a desejar na latência das tarefas. Ambas as latências são críticas, sendo o tempo total o que realmente importa. O teste realizado considera a latência de interrupção e a sobrecarga para ativação das tarefas.
Teste com preempção: mede o tempo que um RTOS leva em situações onde uma tarefa diferente é selecionada pelo escalonador para executar na saída de uma interrupção. Este caso ocorre quando o tratamento de uma interrupção adiciona a lista de prontos uma tarefa de maior prioridade que a tarefa que estava sendo executada. O tempo para executar o salvamento de contexto da tarefa interrompida e restaurar o contexto para uma nova tarefa é incluído na pontuação deste teste. Para realizar este teste a tarefa 1 se suspende, permitindo que a tarefa 5 execute. A tarefa 5 força uma interrupção por software. O tratamento da interrupção acorda a tarefa 1. O escalonador troca o contexto da tarefa 5 para a tarefa 1 e a tarefa 1 é executada.
Teste de passagem de mensagem: mede o tempo que um RTOS leva para passar uma mensagem de 16-bytes por valor, ou seja, copiada da origem para uma fila e recebida por uma tarefa. Mensagens maiores do que 16 bytes geralmente são passadas por referência (o ponteiro é enviado ao invés dos dados). Para realizar este teste uma tarefa envia uma mensagem de 16 bytes para uma fila e retira desta fila os mesmos 16 bytes. A tarefa incrementa um contador depois de enviar e receber a seqüencia completa de dados.
Teste de processamento de semáforo: Mede o tempo que um RTOS leva para “obter” e “liberar” um semáforo. Para realizar este teste uma tarefa obtém um semáforo e imediatamente o libera. Depois deste procedimento a tarefa incrementa o contador de execução.
Teste de alocação de memória: Mede o tempo que leva para um RTOS alocar um bloco de memória de tamanho fixo (128 bytes) para uma tarefa. Se um RTOS não possuir gerenciamento de blocos de memória a função malloc do Ansi C deverá ser utilizada (provavelmente obtendo baixo desempenho). Para realizar este teste uma tarefa aloca um bloco de memória de 128 bytes e logo em seguida desaloca este mesmo bloco. Depois de liberar o bloco de memória a tarefa incrementa o contador de execução.
Teste de desempenho do BRTOS
Os testes de desempenho do BRTOS 1.45 apresentados aqui foram obtidos com um processador Coldfire V1 com clock de barramento de 25MHz. Os índices apresentados na figura abaixo foram obtidos com os testes da Suite Thread-Metric sendo executados por 30 segundos (padrão do teste). O sistema operacional de tempo real uCOS-II foi escolhido como base para a análise de desempenho por ser um RTOS bastante popular e possuir diversos ports. Os índices dos RTOSes foram obtidos com o mesmo processador (ports oficiais), com o mesmo clock de barramento e com a versão 2.86 do uCOS-II e 1.45 do BRTOS.
Note que no teste de processamento básico o uCOS-II perde por ocupar maior processamento no tick do sistema. O teste de alocação de memória não é apresentado devido ao BRTOS ainda não possuir um módulo de alocação dinâmica de memória. Verifique que o desempenho do BRTOS foi em média 32% superior ao do uCOS-II na plataforma testada.
Confira você mesmo o desempenho do BRTOS com o Thread-Metric fazendo o download dos testes na página oficial do projeto. Note que disponibilizamos também as tarefas de teste para o uCOS-II. Para testa-las, faça o download destes sistemas nos sites oficiais:
por Carlos Henrique Barriquello e Gustavo Weber Denardin …
Fonte das informações sobre o Thread-Metric:
Measure your RTOS’s real-time performance
por William Lamie and John Carbone
Oi, gostaria de fazer esse mesmo teste para o rtos mqx, é possível? Basta mudar o porting layer? Em que parte do datasheet eu posso encontrar as modificaçãos que seriam necessárias.
Obrigado
Olá Samir,
Sim, para realizar o teste com o MQX você só precisa modifcar a porting layer. Basicamente você define a estrutura de filas, semáforos, etc para este RTOS.
Quanto aonde você pode encontrar estas informações eu não sei. Fizemos o port analisando o código do Thread-Metric. Mas acredito que exista alguma informação sobre isso. Tente procurar por estas informações no google.
Oi, eu estou tentando conhecer melhor essas plataformas de programação de rtos, e baixei o codewarrior com o coldfire, além do brtos e o threadmetric com o porting layer de vcs.. Minha dúvida é bem básica, como eu não tenho muita familiaridade com essa ide, eu não consigo fazer o programa rodar, o que devo fazer?
Eu crio um novo projeto, escolho o coldfire v1 MCF51QE128, mas não consigo pôr os arquivos do thread-metric dentro do projeto. Tenho que pô-los em alguma pasta especial?
Sei que é uma pergunta boba, mas são poucos passos que me ajudariam muito.
Desde já, obrigado!
Olá Pedro, tudo bem?
Ficamos contentes que esteja experimentando o BRTOS.
Na verdade você não precisa adicionar nenhum arquivo, você pode fazer o download do projeto de teste do BRTOS no site do projeto:
http://brtos.googlecode.com/files/BRTOS%201.50%20-%20CFV1%20-%20TM.rar
Daí é só abrir o projeto no CodeWarrior 6.3 e executar no simulador (pressionando a tecla F5). Para trocar os testes é só modificar o valor da variável test de 1 a 6.
Note que os testes são de 30 segundos, mas no simulador este tempo pode variar de 1 a 3 minutos, dependendo do seu computador.
Assim que o teste acabar o índice alcançado pelo microcontrolador será mostrado na tela “terminal” do simulador.
Qualquer dúvida é só perguntar.
Abraço,
Gustavo
Muito obrigado, funcionou muito bem.
Olá, eu gostaria de saber qual a unidade no eixo horizontal X das tabelas de performance?
Olá Alexandre. O eixo x é um contador, quanto maior o valor, melhor o desempenho. Ele conta em cada teste a quantidade de iterações que o sistema consegue executar em 30 segundos de execução. Espero ter respondido a sua pergunta da melhor maneira possível. Também existe outro artigo, que apresenta as melhoras de desempenho do BRTOS na versão 1.76.
https://brtosblog.wordpress.com/2012/10/13/melhora-do-desempenho-do-brtos-com-a-versao-1-76/
Abraço.