AVALIAÇÃO E COMPARAÇÃO DE DESEMPENHO DE SISTEMAS OPERACIONAIS DE TEMPO REAL (RTOS) COM FOCO DE APLICAÇÃO EM SISTEMAS EMBARCADOS CRÍTICOS Guilherme C. de Oliveira, Daniel F. Pigatto, Kalinka R. L. J. C. Branco Universidade de São Paulo/Instituto de Ciências Matemáticas e de Computação [email protected], [email protected], [email protected] Resumo Sistemas embarcados críticos são um tipo particular de sistema embarcado onde falhas podem acarretar perdas humanas ou de ativos de alto valor. Normalmente, esses sistemas trabalham com tarefas que demandam respostas rápidas, i.e., em tempo real. Para atender os diversos deadlines dessas tarefas, o hardware e o software utilizado nesses dispositivos devem considerar necessidades mais robustas e operar em tempo real para não prejudicar o sistema como um todo. Um elemento importante na concepção desses sistemas é o sistema operacional, que deve ser de tempo real (do inglês, real time operating system, ou RTOS). A escolha de um RTOS adequado ao tipo de sistema embarcado é essencial para que o conjunto possa atingir um bom desempenho. Efetuando um levantamento dos RTOSes disponíveis na atualidade, este trabalho foca então em identificar os recursos oferecidos por cada sistema operacional, avaliando-os e comparando-os usando um protótipo real de experimentações. Com base nos resultados obtidos, pode-se definir os RTOSes mais indicados para uso em cada tipo de sistema embarcado crítico. Palavras chave: sistemas operacionais, sistemas embarcados, RTOS. Abstract Critical embedded systems are a specific type of embedded system where failures may result in human or high value assets damages. Usually these systems deal with tasks that require quick responses, i.e., in real time. Therefore, to meet the deadlines imposed by these tasks, hardware and the software used in these devices should consider more robust requirements and operate in real time in order not to harm the system as a whole. An important element in the design of these systems is the operating system, which should be a real-time operating system (RTOS). Choosing an adequate RTOS for the specific type of embedded system is essential for achieving good performance. Thus, making a survey of RTOSes available today, this paper focuses on identifying the features offered by each operating system to evaluate and compare them using a real experimental prototype. Based on the results, it’s defined the RTOSes best suited for use in each type of critical embedded systems. Key words: operating systems, embedded systems, RTOS. SIICUSP 2014 – 22º Simpósio Internacional de Iniciação Científica e Tecnológica da USP Introdução Dispositivos responsáveis por realizar funções dedicadas são chamados de sistemas embarcados. Um conversor digital é um exemplo: sua função é converter o sinal enviado pelas emissoras em um formato que possa ser reproduzido por um televisor. Na maioria dos casos, os sistemas embarcados são realmente “embarcados”, onde vários sistemas menores compõem um sistema maior. O decodificador áudio/vídeo (responsável por receber um único sinal multimídia e produzir sinais de áudio e vídeo) e o decodificador de canais (responsável por “quebrar” o sinal multimídia em canais separados) são sistemas embarcados menores que compõem o sistema embarcado maior do conversor digital. Há também aqueles que trabalham como um sistema independente, por exemplo, um roteador de rede. Pode-se generalizar a definição de um sistema embarcado (embedded system, em inglês) como: sistemas computacionais com forte integração entre hardware e software, desenhados para realizar uma função dedicada. Dentre os sistemas embarcados, há aqueles que são chamados de críticos. Os sistemas embarcados críticos são aqueles em que falhas podem levar a perdas humanas e ou de ativos de alto valor. Os domínios da aviação e automobilística são exemplos clássicos onde custos, ciclos de produção curtos, robustez, segurança, controle de emissão de poluentes e demandas específicas de cada cenário influenciam na obtenção do produto final. Devido ao alto investimento em pesquisas nesta área, o comprometimento de um produto destes leva a perdas financeiras consideráveis. Sistemas embarcados críticos são comumente submetidos a situações extremas, como altas e baixas temperaturas, altas velocidades e operações perigosas. O uso de tarefas em tempo real (i.e., que devem executar suas funções em tempo determinado) é essencial. Caso contrário, o sistema como um todo pode não prover as respostas necessárias em um tempo hábil, tornando-o sem utilidade e passível de falhas (indesejável em embarcados críticos). Nessas condições, é inevitável projetar sistemas embarcados considerando requisitos mais rígidos de tempo, desde o projeto até a concepção final dos mesmos. Considerando essa necessidade específica, um passo importante para que a característica de tempo real seja atingida é a escolha de um sistema operacional, que deve ser de tempo real (RTOS), adequado ao tipo de sistema embarcado em questão. Trabalhos correlatos Existem vários RTOS na literatura e alguns estudos têm mostrado resultados comparativos sobre os mesmos. O artigo de Parikh et. al. (2013) trata de parâmetros e fatores considerados fundamentais para que os desenvolvedores de RTOS obtenham o melhor desempenho possível para o sistema como um todo. Fornece ainda métodos de benchmarking para aferição de parâmetros aplicáveis a qualquer RTOS. Tan e Nguyen (2009) discutem as diferenças entre RTOS e sistemas operacionais convencionais, evidenciando as vantagens e desvantagens do uso de RTOS. Mostra ainda os métodos utilizados para avaliação, e concluise que não há um vencedor, pois cada RTOS pode ser mais indicado para um cenário em específico. Objetivos Embora os resultados dos estudos comparativos sejam relevantes, não existe um trabalho que compare os principais RTOSes que determine qual é o mais indicado para cada tipo de sistema embarcado crítico. Dessa forma, este trabalho possui como principal objetivo avaliar e comparar os principais sistemas operacionais de tempo real disponíveis na atualidade em um protótipo real de sistema embarcado, identificando assim as principais características e obtendo resultados práticos a respeito do desempenho dos sistemas, auxiliando então na escolha do RTOS adequado para cada tipo de sistema embarcado. Para atingir o objetivo principal, alguns objetivos específicos foram definidos: estudo do funcionamento de sistemas operacionais em geral e especificamente dos RTOS; levantamento dos RTOS disponíveis na atualidade, identificando os recursos e destaques de cada um; identificação dos requisitos mais comuns de sistemas embarcados críticos e onde eles influenciam na decisão sobre os melhores RTOS aplicáveis a estes sistemas; definição de um método de experimentação prática a fim de avaliar o desempenho dos RTOSes; e por fim, com base nos resultados obtidos, conclusão de quais são os mais indicados para cada aplicação de sistemas embarcados críticos. SIICUSP 2014 – 22º Simpósio Internacional de Iniciação Científica e Tecnológica da USP Materiais e Métodos O estudo dos sistemas operacionais de tempo real permite identificar uma série de recursos que são oferecidos pela maioria desses sistemas. Tratando-se de um sistema de tempo real, é essencial que o gerenciamento desses recursos seja feito de forma eficiente a fim de que o sistema como um todo possa ter um bom resultado final. Dessa forma, é importante avaliar individualmente o desempenho desses componentes para obter uma comparação mais profunda entre os RTOSes. A aferição dos componentes é feita com base em repetidos testes que permitirão uma avaliação estatística e válida dos resultados. Após o levantamento inicial de RTOSes, com base em recursos-chave de sistemas de tempo real, uma filtragem é realizada. Dessa forma garante-se que apenas os sistemas que possam fornecer as características vitais aos sistemas embarcados críticos passarão pelo processo de benchmarking. É importante ressaltar que alguns RTOSes podem não passar por avaliação prática por questões de licenciamento, o que não é determinante para descartá-los do uso em sistemas embarcados. Os RTOSes selecionados passarão pelo benckmarking em kits Gumstix Overo EVM. Esse kit é composto por uma placa Overo Fire COM (computer on-module) com processador ARM Cortex-A8 OMAP3530 (720 MHz), memória RAM de 256MB e suporte a cartão de memória MicroSD e conexões Bluetooth e Wireless. Acompanha uma placa de expansão Chestnut43 com conexões Ethernet, USB e console serial via miniUSB. Um monitor LCD touchscreen também integra o kit. Resultados Inicialmente buscou-se estudar as principais características do RTOS, a fim de identificar os componentes que impactam no desempenho do sistema. O kernel de um RTOS deve fornecer as seguintes funções essenciais: escalonamento de tarefas (scheduling method, i.e., determina qual task será executada na CPU), despacho (i.e., trabalho necessário para transacionar a execução de uma task para outra), intercomunicação e sincronização (troca de informações entre as diversas tasks). No que diz respeito ao método de escalonamento de tarefas, são comumente encontrados os métodos: preemptive scheduling e round-robin scheduling. O preemptive scheduling é baseado em prioridades: cada task possui uma prioridade definida em sua criação, e a task em execução é aquela que possui a maior prioridade entre as que estão prontas para executar. O round-robin scheduling fornece a cada task um tempo de execução igual, partilhando a CPU entre elas. O despacho, seguindo o método de escalonamento, realiza o trabalho de transacionar a execução de uma task para outra, transição chamada de context switch. Para intercomunicação e sincronização, os RTOSes geralmente oferecem: semáforos (binários, contadores e mutex); filas de mensagens (para transferência de dados estruturada); pipes (para transferência de dados serial); registradores de eventos, sinais e variáveis condicionais (para notificações); timers (para controle de tempo); bloqueio de escalonamento (scheduler lock, ou também preemption lock); e bloqueio de interrupções (interrupt lock). À medida que a complexidade do sistema embarcado crítico aumenta, é importante lembrar e dar destaque a alguns problemas que comumente aparecem no desenvolvimento de sistemas de tempo real: deadlock (quando o sistema entra em um estado de bloqueio de tempo indeterminado ou infinito, podendo atrasar a execução das tarefas) e priority inversion (quando uma task de maior prioridade é bloqueada em função da execução de uma task de menor prioridade que guarda um recurso compartilhado). Se esses casos forem ignorados, o sistema embarcado pode não atender suas expectativas. Em levantamento inicial dos RTOSes, são notáveis as diferenças entre os sistemas. Os mais simples (geralmente de licença de uso livre), mas não menos importantes, oferecem as características essenciais de um RTOS, mas deixam a desejar em documentação, não facilitam a configuração, e possuem escassos recursos de destaque. Os mais robustos (geralmente pagos) possuem documentação detalhada e uma grande quantidade de recursos que facilitam o desenvolvimento de aplicações. SIICUSP 2014 – 22º Simpósio Internacional de Iniciação Científica e Tecnológica da USP Conclusões parciais Embora a maior parte dos RTOSes utilize o preemptive scheduling como método principal de escalonamento de tarefas, ainda há os que utilizam o round-robin scheduling. Em um sistema embarcado de tempo real, é inevitável que as tarefas tenham trabalhos de diferente grau de importância. Assim, utilizar puramente o método round-robin scheduling não satisfaz os requisitos de tempo real. No entanto, alguns RTOSes oferecem esse método como um complemento do preemptive scheduling para alocar tasks de mesma prioridade, o que pode ser útil em alguns sistemas embarcados. A forma como o despacho em um RTOS é feito é irrelevante para a análise de desempenho de um sistema, mas o tempo que o sistema operacional leva para fazer o despacho (chamado de context switch time) é um dos tempos que mais impacta no desempenho do sistema, principalmente em aplicações onde há grande quantidade de transições entre as tasks. Com bastante importância como o context switch time estão o preemption lock time e o interrupt lock time, relacionados respectivamente ao preemption lock e ao interrupt lock. Os tempos de execução das operações do RTOS relacionadas aos outros componentes (semáforos, filas de mensagens, etc.) também devem ser levados em conta para avaliar o desempenho do sistema. Em questão de quantidade de componentes, o RTOS que oferece mais recursos no nível do kernel tende a possuir um melhor desempenho geral quando comparado com implementações em nível de aplicação. O deadlock e a priority inversion são problemas fortemente indesejáveis em sistemas embarcados críticos. O bloqueio indeterminado do sistema ou a inversão indeterminada de prioridades, respectivamente, pode fazer o sistema embarcado não cumprir seus deadlines e, no pior dos casos, causar o comprometimento do dispositivo. Apesar de o deadlock estar mais ligado a implementação da aplicação do que ao RTOS, muitos sistemas oferecem formas de identificação e tratamento de deadlocks, recursos bastante importantes principalmente em sistemas embarcados de extrema criticidade. Já com respeito à priority inversion, os RTOSes costumam oferecer protocolos que amenizam sua ocorrência: priority inheritance protocol, ceiling priority protocol, e priority ceiling protocol. Apesar de o foco deste trabalho não ser a avaliação da documentação/suporte dos RTOSes, é válido ressaltar que, mesmo não sendo uma regra, sistemas com melhor suporte ao desenvolvedor costumam possuir um sistema operacional melhor implementado, além de que o desenvolvimento nessas plataformas é facilitado. Tratando-se de um trabalho em andamento, o projeto segue com o levantamento dos RTOSes candidatos à avaliação, seguida da fase de instalações e processo de benchmarking com o método repetitivo de aferição também a ser definido, baseando-se nas principais características de um RTOS aqui descritas. Referências Bibliográficas LI, Q.; YAO, C.; Real-Time Concepts for Embedded Systems. CMP Books. 2003. LAPLANTE, P. A.; Real-time Systems Design and Analysis. IEEE Press. 2004. JANUZAJ, V.; KUGELE, S.; LANGER, B.; SCHALLHART, C.; VEITH, H.; New Challenges in the Development of Critical Embedded Systems — An “aeromotive” Perspective. In: MARGARIA, T.; STEFFEN, B.; eds. Leveraging Applications of Formal Methods, Verification, and Validation. Springer. 2010. PARIKH, H.; SHAH, R.; SHAH, U.; DESHMUKH, S.; "Performance parameters of RTOSs; comparison of open source RTOSs and benchmarking techniques," Advances in Technology and Engineering (ICATE), 2013 International Conference on , vol., no., pp.1,6, 23-25 Jan. 2013. TAN, Su-Lim; NGUYEN, Tran B, "Survey and performance evaluation of real-time operating systems (RTOS) for small microcontrollers," Micro, IEEE , vol.PP, no.99, pp.1,1, Ago, 2009. JAIN, R. The art of computer systems performance analysis: techniques for experimental design, measurement, simulation, and modeling. Wiley professional computing. Wiley, 685 p., 1991. WOLF, W. H. Computers as components: principles of embedded computing system design. The Morgan Kaufmann Series in Computer Architecture and Design. Elsevier/Morgan Kaufmann, 507 p., 2008. SIICUSP 2014 – 22º Simpósio Internacional de Iniciação Científica e Tecnológica da USP