Professional Documents
Culture Documents
1. Introdução
Os sistemas embarcados [Wolf 2001] apresentam características em comum com
sistemas computacionais de propósitos gerais, mas não possuem a uniformidade desses.
Cada aplicação pode apresentar requisitos diferentes de desempenho, consumo de
potência e área ocupada, o que vai acarretar em uma combinação distinta de módulos de
hardware e software para atender estes requisitos.
Em muitas aplicações é adequada a integração do sistema em uma única pastilha
(SoC – System-on-a-Chip). A arquitetura de hardware de um SoC embarcado pode
conter um ou mais processadores, memórias, interfaces para periféricos e blocos
dedicados. Os componentes são interligados por uma estrutura de comunicação que
pode variar de um barramento a uma rede complexa (NoC - Network-on-a-Chip)
[Micheli 2002]. Os processadores podem ser de tipos diversos (RISC, VLIW, DSP, até
ASIPs – processadores integrados para aplicações específicas), conforme a aplicação.
O software de aplicação pode ser composto por múltiplos processos, distribuídos entre
diversos processadores e comunicando-se através de diferentes mecanismos. Em muitos
casos são gerenciados através de um sistema operacional de tempo real (RTOS) [Burns
1997], que fornece, pelo menos, serviços de comunicação e escalonamento de
processos.
Sendo, em geral, os projetos de sistemas embarcados dominados pelo software
(aplicações e RTOS), é ideal que a exploração do espaço de projeto seja feita no nível
de abstração mais alto possível. Esta exploração consiste em avaliar as alternativas de
arquitetura de hardware e de software, verificando o impacto sobre desempenho,
potência e área do sistema. Para que esta prévia avaliação corresponda ao sistema real é
necessária a utilização de bons estimadores.
A escolha da forma de comunicação (software-software, software-hardware e
hardware-hardware) e do mecanismo (memória compartilhada, troca de mensagens,
acesso direto à memória, etc.) representa um dos aspectos mais importantes em um
projeto de sistemas embarcados. Outro fator importante na exploração do espaço de
projeto é a definição dos serviços que serão fornecidos pelo RTOS. O nível de suporte
de comunicação oferecido pelas primitivas e o tamanho do sistema operacional são
exemplos de alguns dos parâmetros que devem ser levados em conta.
As abordagens atuais para síntese de um RTOS dedicado e mínimo [Chivukula
2002] [Gauthier 2001] consideram as necessidades da aplicação, mas não consideram
explicitamente o atendimento de restrições de projeto como área e potência. Por outro
lado, existem diversas abordagens para projeto de software que consideram restrições
de potência [Yang 2001] [Zhang 2002], mas não especificamente no caso do projeto da
comunicação.
Este trabalho demonstra o impacto de dois mecanismos clássicos de
comunicação (memória compartilhada e troca de mensagens) sobre o desempenho,
potência e área de memória de um sistema embarcado. Estes mecanismos foram
desenvolvidos em Java e tiveram seus custos caracterizados para uma plataforma-alvo
baseada em um microcontrolador Java dedicado (ASIP). Com estes resultados, o
desenvolvedor de uma aplicação de software embarcada para esta plataforma pode
estimar, num alto nível de abstração, o impacto de suas decisões de projeto sobre o
sistema sintetizado final.
O restante deste artigo está organizado da seguinte forma: a Seção 2 discute
trabalhos relacionados. Na Seção 3 é apresentada a plataforma-alvo e na Seção 4 os
mecanismos de comunicação avaliados. A Seção 5 descreve a ferramenta utilizada na
avaliação de potência e desempenho dos mecanismos. Os resultados obtidos são
apresentados e discutidos na Seção 6. Por fim, a Seção 7 apresenta as conclusões e
introduz trabalhos futuros.
2. Trabalhos Relacionados
Sistemas Embarcados geralmente interagem com o ambiente ou tem alguma função
relacionada ao tempo. Sistemas Operacionais de Tempo Real (RTOS) podem ser
utilizados na implementação do domínio de software de tais sistemas. As principais
características de RTOS são:
• determinismo na latência do tratamento de interrupções;
• implementação otimizada para ocupar menos espaço na memória e
executar mais rapidamente;
• escalonamento baseado em prioridades;
• escalabilidade;
• suporte a multitarefas preemptivas.
Para que um sistema embarcado possa ser executado, as tarefas devem ser
mapeadas para processos no sistema operacional. Tais processos podem comunicar-se
através de estruturas providas pelo sistema operacional como caixas de mensagens ou
diretamente através da memória compartilhada.
Durante o projeto, um fator a ser considerado é que tipo de sistema operacional
será utilizado: genérico ou sintetizado a partir das necessidades da aplicação. RTOS
genéricos, como o QNX [Oakley 1997] e o eCos [RedHat 2003], demonstram as
vantagens de serem flexíveis e adaptáveis tendo implementações para diferentes
arquiteturas, sendo, portanto, portáveis. Outros propõem a síntese de um sistema
operacional específico para a aplicação. Ditze [Ditze 1998] apresenta resultados da
síntese de um RTOS baseado na biblioteca DREAMS, demonstrando que a utilização de
um sistema operacional específico resulta em um menor espaço de memória ocupado e
melhor desempenho.
Vários trabalhos propõem a síntese do sistema operacional a partir da
especificação do sistema. Em [Gauthier 2001] é apresentada uma ferramenta para
síntese de sistemas operacionais a partir de descrições realizadas em SystemC. A
comunicação entre os processos é transformada em chamadas do sistema na forma de
readX, writeX, onde X é o tipo do dado a ser transferido. A implementação de tais
chamadas de sistema varia conforme a organização dos processos. Para processos em
um mesmo processador é utilizada a memória compartilhada enquanto que para
processos em processadores diferentes a comunicação é realizada pelo barramento
utilizando-se endereços para especificar o canal a ser utilizado.
Böke [Böke 2000] apresenta um ambiente para síntese do RTOS com ênfase nas
estruturas de comunicação. O sistema operacional é construído a partir de uma
biblioteca pré-definida denominada DREAMS. Após a análise da aplicação é possível
verificar os recursos utilizados e se a estrutura de comunicação utilizada atende aos
requisitos da aplicação. Em [Brunel 2000] a síntese também é feita considerando a
comunicação entre componentes de software. Outra abordagem de síntese de RTOS é
apresentada em [Mooney 2002], onde o sistema operacional é sintetizado como um
módulo de hardware em um SoC.
De um modo geral, tanto nos casos de RTOS dedicados, como naqueles
sintetizados não existe uma preocupação direta na avaliação de potência, área e
desempenho. A prioridade é a minimização do tamanho do software. O aumento do
desempenho e a minimização da potência e da área, muitas vezes, são resultantes da
síntese, mas não objetivo central desta.
Algumas abordagens propõem análises de consumo de potência utilizando
estimadores baseados nas instruções do processador. Em [Tiwari 1994] a estimativa é
obtida através de experimentos. Outras abordagens também baseadas em simulação ao
nível de instruções [Choi 2001] [Chen 2001] [Dalal 2001], consideram modelos
específicos de consumo de potência para os componentes da arquitetura (unidades
funcionais, barramentos, registradores, memórias, unidades de controle) que são
afetados por cada instrução, de acordo com a atividade de chaveamento das entradas
dos componentes e de suas propriedades físicas. Existem ainda abordagens [Givargis
2001] [Stitt 2000] que combinam ambos os modelos de estimativa: baseado em
componentes e baseado em instruções.
Além do impacto do software na plataforma de hardware (através do sistema
operacional, dos diferentes algoritmos possíveis, do estilo de codificação e da
compilação da aplicação), a gerência da potência do sistema tem se tornado uma parte
fundamental no projeto do sistema operacional [Micheli 2000]. Quando alguns
componentes do sistema não estão sendo utilizados o sistema operacional pode desligá-
los, enquanto permanecer esta inatividade.
3. Plataforma
5. Ferramenta de avaliação
Um simulador ciclo-a-ciclo CACO-PS (Cycle-Accurate COmpiled-code Power
Simulator) [Beck 2003] do microcontrolador FemtoJava foi utilizado para prover dados
do consumo de energia, uso de memória e performance. Este simulador atua sobre uma
descrição estrutural do microcontrolador, avaliando a potência consumida por cada
bloco funcional acionado a cada ciclo de relógio na execução de cada instrução.
A dissipação de potência é avaliada em termos de chaveamento de carga dos
capacitores, e como o processador tem as instruções separadas da memória de dados, o
módulo de avaliação fornece também a avaliação distinta para as memórias RAM e
ROM. Dessa forma, é possível verificar o consumo de potência da CPU, da memória de
programa e da memória de dados. Isso é importante para avaliar o impacto de cada um
desses blocos para melhor explorar o espaço de projeto. Por exemplo, se o consumo de
potência da ROM e da RAM forem muito diferentes, versões distintas do mesmo
algoritmo podem ser avaliadas para reduzir o consumo total do sistema. Um algoritmo
com ênfase no número reduzido de instruções, que utilize mais laços e registradores da
CPU, implicará numa ROM reduzida e numa maior memória de dados. Por outro lado,
outra versão que utilize mais constantes e instruções de endereçamento imediato gerará
uma menor RAM e uma memória de programa maior.
O simulador coleta a quantidade de capacitâncias chaveadas durante a execução
de um determinado programa e fornece o número de ciclos, a quantidade utilizada de
memória de programa e de memória de dados, assim como o consumo de potência.
Dessa forma, o projetista pode medir facilmente o impacto sobre aspectos físicos de seu
sistema a partir de uma descrição de alto nível de abstração da aplicação embarcada,
avaliando rapidamente o impacto de diferentes alternativas do projeto de software.
MEMÓRIA TROCA DE
COMPARTILHADA MENSAGENS
POTÊNCIA TOTAL
MEMÓRIA COMPARTILHADA TROCA DE MENSAGENS
RAM(23000) RAM(4600) RAM(23000) RAM(4600)
1 inteiro x8 5.071.396 1.575.396 8.546.373 3.504.773
x 64 35.292.187 11.188.187 59.009.816 25.061.816
x 128 69.832.380 22.176.380 116.585.716 49.646.516
x 256 138.898.060 44.138.060 231.778.054 98.856.454
MEMÓRIA TROCA DE
COMPARTILHADA MENSAGENS
ROM ROM
1 inteiro x8 109 243
x 64 439 465
x 128 823 721
x 256 1592 1234
Agradecimentos
Este artigo teve financiamento parcial do CNPq e CAPES.
Referências
Beck Filho, A. C. S. (2003). “CACO-PS: um avaliador de potência”. (Relatório de
Pesquisa) Porto Alegre: PPGC da UFRGS.
Böke, C. (2000) “Combining Two Customization Approaches: Extending the
Customization Tool TEReCS for Software Synthesis of Real-Time Execution
Platforms”. In: Proceedings of the Workshop on Architectures of Embedded
Systems.
Brunel, J-Y. et al. (2000) “COSY Communication IP’s”. In: DAC'00 — Design
Automation Conference, Los Angeles. Proceedings, ACM.
Burns, A. and Wellings, A. (1997) “Real-Time Systems and Their Programming
Languages”. Addison-Wesley.
Chen, R., Irwin, M. J. and Bajwa, R. (2001) “Architecture-Level Power Estimation and
Design Experiments”. In: ACM Transactions on Design Automation of Electronic
Systems, vol. 6, n. 1. pp 50-66.
Chivukula, R. P., Böke, C. and Ramming, F. J. (2002) “Customizing the Configuration
Process of an Operating System Using Hierarchy and Clustering”. In: Proceedings of
the 5th IEEE International Symposium on Object Oriented Real Time Distributed
Computing. Crystal City. IEEE Computer Society Press. p. 280-287.
Choi, K. and Chatterjee, A. (2001) "Efficient Instruction-Level Optimization
Methodology for Low-Power Embedded Systems". International Symposium on
System Synthesis. Montréal. ACM. pp 147-152.
Dalal, V. and Ravikumar, C. P. (2001) "Software Power Optimizations in an Embedded
System". VLSI Design Conference. IEEE Computer Science Press. pp 254-259.
Ditze, C. and Böke, C. (1998) “Supporting Software Synthesis of Communication
Infrastructures for Embedded Real-Time Applications”. In: Proceedings of the
Workshop on Distributed Computer Control Systems, Italy.
Gauthier, L., Yoo, S. and Jerraya, A. (2001) “Automatic Generation and Targeting of
Application-Specific Operating Systems and Embedded Systems Software”. In:
Proceedings of the Design, Automation, and Test in Europe Conference. Munich.
IEEE Computer Society Press.
Givargis, T., Vahid, F. and Henkel, J. (2001) “System-Level Exploration for Pareto-
optimal Configurations in Parameterized Systems-on-a-chip”. International
Conference on Computer-Aided Design. Santa Clara.
Ito, S. A., Carro, L. and Jacobi, R. (2000) "System Design Based on Single Language
and Single-Chip Java ASIP Microcontroller". Design, Automation and Test in
Europe Conference. Paris. IEEE Computer Society.
Ito, S. A., Carro, L. and Jacobi, R. (2001) "Making Java Work for Microcontroller
Applications". In: IEEE Design & Test, vol. 18, n. 5, Sept. /Oct. pp. 100-110.
Micheli, G. and Benini, L. (2000) “System-Level Power Optimization: Techniques And
Tools”. In: Proceedings of the Design, Automation, and Test in Europe Conference.
Paris. IEEE Computer Society.
Micheli, G. and Benini, L. (2002) "Networks-on-Chip: a New Paradigm for Systems-
on-Chip Design". In: Proceedings of the Design, Automation, and Test in Europe
Conference. Paris. IEEE Computer Society Press.
Mooney III, V. J. and Blough, D. M. (2001) "A Hardware-Software Real-Time
Operating Systems Framework for SoCs". In: IEEE Design & Test of Computers,
Nov. /Dec.
Oakley, R. (1997) “QNX microkernel technology: a scalable approach to real-time
distributed and embedded systems”. In: Proceedings of the Symposium on Operating
System Principles. ACM.
RedHat, (2003) “eCos Reference Manual” (http://sources.redhat.com/ ecos/docs-
latest/ref/ecos-ref.html), Technical Reference Manual, RedHat, Mar.
Stitt, G., Vahid, F., Givargis, T. and Lysecky, R. (2000) "A First-Step Towards an
Architecture Tuning Methodology". International Conference on Compilers,
Architecture and Synthesis for Embedded Systems. San Jose.
Tiwari, V., Malik, S. and Wolf, A. (1994) "Power Analysis of Embedded Software: a
First Step Towards Software Power Minimization". In: IEEE Transactions on Very
Large Scale Integration Systems, vol. 2, n. 4, Dec. pp 437-445.
Wolf, W. (2001) “Computers as Components”. McGraw-Hill.
Yang, P. et al. (2001) "Energy-Aware Runtime Scheduling for Embedded-
Multiprocessor SOCs". In: IEEE Design & Test of Computers, Sept./Oct.
Zhang, Y., Hu, X., and Chen, D. Z. (2002) "Task Scheduling and Voltage Selection for
Energy Minimization". In: Proceedings of the Design Automation Conference, New
Orleans. ACM.