Académique Documents
Professionnel Documents
Culture Documents
I INTRODUO
II. Background
Esta seo fornece um rpido histrico sobre Virtualizao, Suas tcnicas e interface de
paravirtualizao Linux.
A. Virtualizao
B. Hipervisores
C. Paravirtualizao
Embora o campo de virtualizao tenha sido muito desenvolvido Nos ltimos anos, pouco
est sendo feito em relao aos Virtualizao de sistemas. A virtualizao mais conhecida
Solues, como Xen [5], KVM [6] e VMware ESXi [7], pode suportar muitos sistemas
operacionais, mas eles no Resolver alguns dos problemas que os sistemas embutidos enfrentam.
Portanto, a escolha da pea de software que virtualiza O sistema de primeira importncia.
Kaiser identifica o Principais abordagens de virtualizao sobre sua aplicabilidade Sistemas
embutidos, apresenta possveis deficincias que Abordagens, e prope mtodos que Essas
lacunas [8].
Bruns et ai. Fornecer no seu trabalho [9] uma avaliao da Interferncias impostas por
aplicativos sem restries de tempo Que funcionam em paralelo com um subsistema em tempo
real, comparando O L4 [10] / Fiasco [11] microkernels e FreeRTOS [12]. Seu trabalho afirma
que a sobrecarga de tempo de execuo no microkernel Tem quase nenhum efeito sobre as
aplicaes em tempo real. Contudo, O sistema resultante requer mais recursos de cache para
alcanar O mesmo nvel de desempenho de um sistema operacional no sistema.
No trabalho de Sandstrm et al., Os autores identificam as Solues de ponta entre o estado
da arte do servidor e Virtualizao. Eles discutem quais so os requisitos de hardware Para as
tecnologias de virtualizao, bem como o nvel de servio Fornecidos por cada um. Mais
importante ainda, os autores Orientaes de desenvolvimento para suportar Sistemas em tempo
real [13]. Os esforos realizados para apoiar tarefas em tempo real De Gerum, foco na melhoria
da capacidade de execuo do Linux Em tempo real [14]. Esta abordagem diferente da nossa.
Dentro nosso trabalho, oferecemos um hipervisor seguro em tempo Suportar qualquer Linux em
um ambiente isolado, portanto no Interferindo uns com os outros, e ainda executar tarefas em
tempo real em VMs.
O trabalho apresentado por Aguiar e Hessel, discute as Formas adequadas de utilizao da
virtualizao em sistemas incorporados E os objetivos primrios que essas tcnicas podem
alcanar [15]. Salientam igualmente que a Sistemas operacionais e sistemas embarcados podem
aumentar a Qualidade do desenvolvimento de software, uma vez que permite ao Escolha entre os
sistemas operacionais disponveis mais adequados para o aplicativo de destino. Alm disso, o
tempo necessrio para um aplicativo pode ser reduzido, porque os aplicativos j disponveis para
sistemas operacionais especficos no precisam ser reescritos.
A execuo do Linux em um hypervisor em tempo real j foi Feito por Legout et al. [16].
Eles constroem um hipervisor dentro do microkernel de Anaxagoros que no fornece alta
Desempenho, mas ainda d respostas corretas e usa o Paravirt_ops para colocar o kernel do Linux
no seu hipervisor. Enquanto os autores foram capazes de portar o Linux para o seu hipervisor,
Hipervisor no atinge em tempo real. Em nosso trabalho, usamos HyperEPOS para conseguir
isso.
O Linux o software open source mais conhecido e mais utilizado. Sistema no mundo [17].
Ele executado em uma gama altamente diversificada Das arquiteturas de computadores. De
smartphones a carros, super- Computadores e eletrodomsticos, o sistema operacional Linux Est
em todo o lugar. As distribuies Linux geralmente so diferentes propsitos, incluindo suporte
arquitetura de computadores, Sistemas embutidos, estabilidade, segurana, localizao a um
determinado Regio ou idioma, segmentao de grupos de usurios especficos, para aplicaes
em tempo real, ou compromisso com um determinado desktop meio Ambiente. Estas so as
principais razes que tornam o Linux Uma escolha to interessante de sistema operacional de
propsito geral para empregar em sistemas embarcados. Alm disso, a partir de kernel Verso
2.6.23, o Linux vem com uma interface de paravirtualizao. Paravirt_ops fornece uma interface
uniforme, que pode ser usada por muitos hipervisores distintos, assim, a padronizao do porto
de Linux para novos Hypervisors.
Como desejamos ter recursos em tempo real em nosso sistema, Escolhemos um hipervisor
de tempo real em metal puro. A principal razo Para esta escolha o fato de que no importa se
estamos a correr Um hypervisor em tempo real se o sistema operacional por baixo dele No nos
fornece polticas de tempo estritas. Enquanto isso, o O uso de um metal nu assegura que as
restries de tempo sejam atendidas.
A. HyperEPOS
A maioria dos hypervisors que visam em tempo real no lidam com Os desafios impostos pelas
modernas arquiteturas multicore tais como Como hierarquias de memria e I / O. Em vez disso,
eles empregam um Abordagem de hardware dedicada (por exemplo, CoMik) [18], no Tempo
real em tempo real (por exemplo, OKL4 e uC / OS-MMU) [19], [20] ou Concentrar-se
principalmente em questes de programao multicore (por exemplo, RT Xen) no Realizando
uma investigao adicional na memria nem I / O [21]. HyperEPOS um hipervisor em tempo
real que leva em conta Na sua concepo e implementao tais aspectos arquitetnicos,
Gerenciamento de memria e hierarquia de E / S, tratamento de Programao em tempo real.
HyperEPOS virtualiza execuo com Virtual CPU (VCPU) s, que so agrupadas em um domnio
(isto , um Mquina virtual (VM)) onde se encontra um SO convidado. Cada VCPU Por sua
vez, atribuda a uma CPU fsica (PCPU) (por exemplo, um ncleo Processador multincleo). Os
domnios so classificados como crticos ou Como melhor esforo. Os crticos so destinados a
executar em tempo real incorporado Sistemas operacionais (RTOS) e no devem sofrer
interferncias Que poderiam perturbar seu comportamento temporal. Melhor esforo (BE)
Domnios so esperados para executar sistemas de operao de propsito geral Em que aplicaes
de interao humana e multimdia iro ser executado.
No HyperEPOS, um VCPU implementado como um Servidor peridico: est
programado para ser executado e Concluso do seu perodo, em que o SO convidado pode
executar Suas tarefas. Alm disso, os prprios VCPUs esto programados Pelo hypervisor de
acordo com algoritmos de escalonamento em tempo real Tal como PEDF. Em arquiteturas
multicore, um ncleo pode causar Interferncia em outro devido ao compartilhamento do cache
de ltimo nvel (LLC). HyperEPOS lida com essa interferncia usando a pgina Colorao, uma
estratgia de particionamento de memria onde uma cor Dado a um conjunto de pginas de
forma que o uso de pginas de uma No evitam linhas de cache de outra cor. Portanto, permitindo
o tempo Previsibilidade em acessos memria [22], [23]. Em HyperEPOS Uma cor atribuda a
cada VCPU que se destina a ser utilizado Em um domnio crtico. Assim, domnios crticos no
sofrem nem Causar interferncia em outros domnios. Alm disso, os VCPUs de Os domnios BE
podem compartilhar a mesma cor, pois no so crticos Que causam interferncia temporal entre
si. Memria Gerenciamento em HyperEPOS construdo usando o hardware MMU Mediador,
responsvel pela alocao da memria fsica Sistema e por captaes, responsvel pela alocao
de Memria lgica para as tarefas de domnio. A implementao de A colorao da pgina usada
no HyperEPOS depende do EPOS MMU Famlia de mediadores de hardware. Ao empregar cores,
a MMU Fornece vrias listas para gerenciamento de quadros livres, uma Lista para cada cor. Da
mesma forma, existem mltiplas pilhas, uma Para cada cor, fornecer alocao dinmica de
memria para o Domnio tarefas [24]. Para resolver o problema da interferncia temporal causada
por E / S Operaes, o HyperEPOS prope uma estratgia de monitorizao Trfego em nibus
compartilhados e desativao de perifricos
Pgina 4
Utilizados por tarefas no crticas para mitigar a interferncia sofrida Pelos PCPUs que so
atribudos a domnios crticos. Alimentao Perifricos realizada de forma especulativa com
base em Sobre os dados da Unidade de Monitorizao do Desempenho (PMU) e Tambm a partir
dos registos de desempenho dos perifricos (por Que conta o nmero de bytes enviados em uma
placa de rede). o Hipervisor pode optar por desligar um domnio BE que usa E / S Sempre que a
taxa de insero relacionada I / O Basear-se em anlises estatsticas dos parmetros perifricos
uso. Essa avaliao de qual domnio deve ser alimentado Down executado em tempo de
execuo pelo hypervisor, em seu ocioso (Quando todos os VCPUs tiverem concludo o seu
trabalho e Esperando o prximo perodo). Interface de gerenciamento de energia E POS,
Implementado pelo HyperEPOS, permite alterar as Modos de componentes individuais, incluindo
a capacidade de Os em e fora [25]. Tambm acompanha a relao entre Componentes do sistema,
assegurando a consistncia do modo de operao Transies. Uma das idias-chave para atingir
a manipulao de interrupo limitada, Necessria para cumprir os requisitos em tempo real,
desacoplar a interrupo Recepo e confirmao do servio de interrupo. Hyper- EPOS
alcana isso empregando linhas de manuteno de interrupo (IST) s que so modeladas e
implementadas usando o Concur- Padro de projeto de aluguel_Observer [26]. Em tal padro de
Interrupo de hardware tratada por um servio de interrupo curto Rotinas (ISR) que esto
limitadas a receber, reconhecer e Notificar em um semforo a ocorrncia da interrupo. A IST
espera no mesmo semforo para que a interrupo ocorra E uma vez notificado procede com a
manuteno de interrupo. Em As interrupes dos dispositivos HyperEPOS so encaminhadas
para uma nica PCPU Cujo VCPU pertence a um domnio dedicado, denominado Domain 0, que
responsvel pelo tratamento de interrupes de E / S. Uma vez Interrupo de hardware ocorre,
ela recebida por um curto ISR que Notifica o semforo se o projeto Concurrent_Observer
padronizar. Aps a invocao de um hypercall, uma tarefa executando Um SO convidado de um
domnio far com que o VCPU atribudo a ele Desempenhar o papel do IST do projeto
Concurrent_Observer Manipulao da interrupo que pode implicar, por exemplo, Na cpia de
dados de um buffer dentro do hypervisor para um buffer Do domnio SO convidado. Deve-se
notar que o uso de Semforos no Observador Concorrente no introduzem prioridade Problemas
de inverso porque no esto sendo usados para seo Crtica. Eles so usados apenas para
sincronizar o ISR Com o IST correspondente, muito no caso de um produtor / consumidor
caminho. B. Integrao Linux e HyperEPOS A Figura 1 mostra como temos integrado o Linux
eo HyperE- POS. Nossa interface hypervisor, chamada phepos, atribui funes Paravirt_ops
hooks (ponteiros de funo), implementando Paravirt_ops interface. Devemos observar que nem
todos esses Funes devem ser implementadas atravs de um hypercall direto. Alguns deles s
precisa ter o mesmo comportamento. Antes Descrevendo como cada paravirt_ops ganchos so
implementados por Phepos, descrevemos a configurao do kernel usada e como O HyperEPOS
salta para o domnio Linux (incio do dia). VM 1 - Linux de Uso Geral Linux Kernel v3.18.20
Linux paravirt_ops HyperEPOS X86 HW VM 0 - ParaEPOS Interface Phepos Paravirt_op
Chamada Hypercall CPU virtual CPU MMU IRQ Tempo CPU MMU IRQ Tempo Memria
virtual Dispositivos de E / S virtuais Hypercall CPU fsica Memria fsica Dispositivos fsicos de
E / S Figura 1. Integrao Linux e HyperEPOS. C. Configurao do Kernel Neste trabalho,
usamos a verso 3.18.20 do kernel do Linux com Personalizado configuraes que so
principalmente responsveis pela construo de um 32- Kernel sem suporte PAE, habilitando o
paravirt_ops e Realocando a imagem. Essas configuraes foram geradas Em configuraes
predefinidas do Linux. Usamos i386_defconfig para Crie um arquivo de configurao padro para
a compilao do kernel. A partir de Essa configurao, adicionamos os parmetros tinyconfig,
que Altera o arquivo de configurao para criar um kernel funcional com Tamanho mnimo e
funcionalidades mnimas. O HyperEPOS assume que todas as aplicaes comeam Endereo
0x00000000 eo segmento de dados separado por Uma tabela de pgina (0x400000). Como o
Linux executado como uma aplicao Sob HyperEPOS, alteramos PHYSICAL_START (fsico
Endereo onde o kernel est carregado), PAGE_OFFSET para o Necessrio para tornar o ELF
compatvel com o hypervisor. O script de ligao do Linux tambm foi alterado para que os dados
Segmento comea no endereo especificado. Por fim, habilitmos A interface paravirtualizao.
Fora isso, no Quaisquer alteraes no cdigo-fonte do Linux que no sejam as Necessrio
adicionar HyperEPOS como um host. D. Incio do Dia No fluxo de arranque do Linux habitual
depois de Modo, o kernel habilita a paginao e retoma a inicializao I386_start_kernel e
start_kernel. Ao executar paravirtu- O hipervisor j est sendo executado sob o Sistema, ento
devemos atribuir ganchos de funo para o Funes que so corrigidas atravs da
paravirtualizao Antes de alcanarmos os seus primeiros telefonemas. Para fazer isso quando
Entrar no modo protegido e antes de chegar a qualquer um destes Funes, saltamos para
phepos_start_kernel. responsvel por
Pgina 5
Toda a configurao do hypervisor dentro do kernel. Ele atribui principalmente Ganchos para as
funes do paravirt_ops, mas tambm Algumas funes extras que a configurao tpica seria
(reservando O topo da memria), ou o hypervisor requer (indicando Onde as estruturas de pgina
so). E. Hypercalls Os sistemas operacionais convidados em execuo sob um hypervisor so
No capaz de executar qualquer instruo privilegiada. Do mesmo jeito, Que os aplicativos
usam chamadas de sistema para perguntar ao sistema operacional Kernel para executar uma
instruo privilegiada; Uma mquina virtual Usa hypercalls para perguntar ao hypervisor. A
Tabela I lista os hipercalls Usado por phepos para implementar os ganchos paravirt_ops
relacionados a Virtualizao de CPU, MMU e IRQ. Na Figura 2 temos um Exemplo onde o kernel
emite um write_cr3 dentro do load_cr3 Chamada de funo. Com o kernel configurado para
paravirtualizao, O write_cr3 implementado atravs de pv_mmu_ops, que tem Um gancho
atribudo a phepos, que implementa esta instruo Atravs de um hypercall. Para x86_32 alvos,
paravirt_ops usa o regparm (3) Conveno de chamada do GCC. Isso coloca os trs primeiros
argumentos Em% eax,% edx,% ecx (nessa ordem) e os restantes Argumentos so colocados na
pilha quando uma funo Interface chamado. As hipercalls podem levar at 4 argumentos, Que
o caso da instruo cpuid. Nosso hypervisor, em Por outro lado, leva todos os argumentos de
funo da pilha. Para lidar com isso, envolvemos nossas funes com instrues asm Que colocou
os argumentos dos registros na questo da pilha A chamada de funo e coloque os valores de
retorno da pilha para Os registos novamente. Esta a nica sobrecarga que trazida Por nossa
interface hypervisor. Nas sees a seguir, descrevemos as principais consideraes Quando
atribuir os ganchos de funo adequada para o paravirt_ops interface. F. Gancho da CPU Estas
funes so responsveis por interceptar uma srie Das instrues privilegiadas da CPU e, se
necessrio, Hipervisor para execut-los atravs de um hypercall. A maioria dos Instrues
privilegiadas relacionadas ao CPU x86 usam o Registros de Controle (CR). O registo de controlo
CR0 mantm vrios sinalizadores que Operao bsica do processador. Ns mantemos o valor do
CR0 registar localmente. O hypervisor (Host) no Fazer alteraes. s vezes, o Linux faz
Registos, estes no tm de ser implementados atravs de uma Hipercall porque isso causaria uma
sobrecarga desnecessria Para o hospedeiro. O registo de controlo CR4, entre outras funes,
Usado em modo protegido para controlar operaes como virtual- 8086, habilitando pontos de
interrupo de E / S, extenso de tamanho de Excees de verificao da mquina. Uma vez que
no desejamos Extenso de tamanho de pgina ou qualquer outro dos recursos que o CR4
Controles, nossa funo write_cr4 no faz nada eo read_cr4 Sempre retorna zero. Tabela I T
ABELA DE H YPERCALLS Hypercall Descrio Hyper_epos_cpuid Retorna a identificao do
processador E informaes de recursos Hyper_epos_read_cr2 Retorna o valor do CR2 Registrar
para o VCPU atual Hyper_epos_read_cr3 Retorna o valor do CR3 Registrar para o VCPU atual
Hyper_epos_write_cr3 Grava o valor de dar no Registo CR3 da corrente VCPU
Hyper_epos_int_disable Desativar interrupes VCPU atuais Hyper_epos_int_enable Ativar
interrupes VCPU atuais. Hyper_epos_load_idt_entry Atualizar sombra IDT
Hyper_epos_new_page_table Cria uma nova tabela de pgina Hyper_epos_new_page_table_at
Criar nova tabela de pgina em dado Nmero da moldura da pgina
Hyper_epos_attach_page_table Anexa a tabela de pgina O diretrio de pginas da VCPU
Hyper_epos_detach_page_table Separa a tabela de pgina fornecida para O diretrio de pginas
da VCPU Hyper_epos_update_page_table_entry Atualizar uma determinada entrada de tabela de
pgina Hyper_epos_flush_tlb Limpa o TLB da corrente VCPU O kernel emite a instruo cpuid
para consultar o processador Para obter uma lista dos seus recursos disponveis. Implementao
do HyperEPOS Para esta instruo mascara todas as caractersticas inconvenientes para fora,
Ento o Linux no tenta ativ-los. G. MMU Ganchos A maioria dos nossos hypercalls esto
relacionados ao gerenciamento de memria. Para simplificar o nosso porto, no implementamos
o PAE. Temos apenas A estrutura de paginao de um kernel de 32 bits sem suporte PAE.
Portanto, s precisamos lidar com dois nveis de paginao (PGD E PTE). O registo de controlo
CR3 aponta para o directrio de pginas actual. O diretrio da pgina alterado sempre que
houver uma Processo atual ou domnio. As hipercalls de leitura e escrita foram Desenvolvido para
lidar com o endereamento de memria virtual. O registro CR2 contm o endereo da ltima falha
de pgina, Portanto, no h necessidade de o hspede escrever neste registro, apenas ler. Quando
a falha de pgina ocorre, o hypervisor grava o Endereo no registo. Quatro paravirt_ops lidar com
descargas TLB. So respectivamente Usurio, kernel, nico e outros. Em nossa experincia,
implementamos Todos da mesma maneira. H. IRQ Ganchos IRQ ganchos so bastante simples,
eles so feitos diretamente atravs Hipercalls. O nico ponto que precisamos considerar Que se
presume que essas funes salvaguardam seu prprio Se necessrio. Normalmente C assumem
que Eles podem trash o% eax register. Por esse motivo, usamos A macro
PV_CALLEE_SAVE_REGS_THUNK fornecida pelo