490 likes | 568 Views
MobiCS: Um exemplo de uso. Ricardo Couto A. da Rocha (*) rcarocha@ime.usp.br rcarocha@altavista.com DCC-IME-USP Orientador: Markus Endler (*) Atualmente no Centro de Pesquisas da Xerox (ES). Uso do MobiCS .
E N D
MobiCS: Um exemplo de uso Ricardo Couto A. da Rocha(*) rcarocha@ime.usp.br rcarocha@altavista.com DCC-IME-USP Orientador: Markus Endler (*) Atualmente no Centro de Pesquisas da Xerox (ES)
Uso do MobiCS • Usuário implementa classes que definem os protocolos a serem simulados, o ambiente de rede e o modelo de simulação desejado. Pacotes MobiCS estende estende Protocolos estende Modelos de Simulação instancia instancia Simulação
Pacotes MobiCS Principais pacotes para o usuário MobiCS: • mobics.ppi programação de protocolos • mobics.ppi.protocol • mobics.ppi.message • mobics.network programação dos elementos de rede • mobics.simulation programação do modelo de simulação e configuração do ambiente de rede • mobics.simulation.DetermSimulation • mobics.simulation.StochSimulation
Outros pacotes MobiCS • mobics.exceptiondefine exceções usadas pelo simulador e programador de protocolos • mobics.controllerimplementa as máquinas de simulação: • mobics.controller.deterministic • mobics.controller.stochastic • mobics.util classes adicionais
Sequência Geralde Passos • Implementação do protocolo estender classes básicas Protocol e Message • Criação do ambiente de CM simulado estender classes básicas Mss, Mh, ... • Criação do(s) cenário(s) de simulação • cenários determinísticos de teste descrever script determinístico avaliar funcionamento do protocolo • Escolha dos cenário aleatório simulação estocástica avaliação do desempenho • Estender a classe DetermSimulation (ou StochSimulation) definindo o ambiente de rede (elementos simulados & topologia, outros conceitos) • Implementar um programa Java que cria e inicia um objeto Simulação e chamar o método Simulation.start
Protocolo Wired Wireless Handoff MobiCSModelo de Programação • Modelo de programação OO e modular • Protocolos são compostos de micro-protocolos módulos com funcionalidade bem definida • Arranjo típico • Micro-protocolos se comunicam por eventos mensagens, timers
sender, receiver – remetente e destinatário responsible – classe do prot. responsável pela mensagem callHandler – invoca o handler da mensagem timestamp – carimbo de tempo da mensagem A classe Message Obs: callHandler(Protocolo)faz chamada ao método Protocolo.when[TipoMensagem]
Um Exemplo: O Protocolo RDP Descrição geral do protocolo Funcionamento do protocolo Mensagens Módulos (micro-protocolos)
Visão Geral do RDPResult Delivery Protocol • Objetivos • Reencaminhar respostas de requisições feitas a servidores fixos, quando um cliente móvel migra. • Utiliza um proxy, que é o representante do Mh na rede fixa. • A cada nova requisição do Mh a um servidor, é criado um proxy no Mss responsável pelo Mh, no momento em que uma requisição é feita. • São guardados também ponteiros para os proxies remotos de todos os Mh locais.
Funcionamento do RDP • Um MSS armazena para cada Mh local, o conjunto dos proxies criados pelos Mh locais e dos proxies remotos. • Hand-off de um Mh • O MSS da nova célula envia para o MSS anterior um pedido para retirar o registro daquele Mh. • O MSS antigo envia para o novo MSS a lista dos proxies remotos e locais com seus respectivos endereços. • O novo MSS envia uma mensagem para o Mss antigo atualizar o endereço do Mh na lista de proxies locais.
server Res Req Ack proxy Cria proxy MSSp Req Mh ForwardRes PList DeReg UpCurLoc ForwardRes ? Ack Greet MSSo UpCurLoc Hand-off PList DeReg Ack Greet MSSn FRes Cenário do Protocolo RDP
Organizando o Protocolo • O protocolo possui duas instâncias funcionais do protocolo: uma para MSSs e outra para Mhs. • Para efeito de teste, teremos ainda uma instância do RDP para servidores. • Será seguida a metodologia de organizar protocolos em micro-protocolos Wired, Wireless e Handoff .
ExemploEtapas de Implementação • Definir todas as mensagens trocadas entre elementos e seus respectivos micro-protocolos • Declarar cada uma das mensagens na forma de uma subclasse de Message. • Declarar as interfaces dos micro-protocolos • Declarar uma subclasse de Protocol que implementa todas as interfaces dos micro-protocolos • Implementar os métodos
ExemploOrganizando o Protocolo • O protocolo possui duas instâncias funcionais • MSSs • MHs. • Metodologia de organização micro-protocolos Wired, Wireless e Handoff .
Mss Mss wireless wireless wired wired Mh wireless handoff handoff ExemploComunicação entre Módulos Req,Ack ForwardRes ForwardRes Ack_Mss RemPList ForwardRes PList UpCurrLoc DeReg
Declaração de Plist Declaração das Mensagens publicclass PList extends Message implements HandoffMessage { public PList(Address mh, Address oldMss, Map proxyList){ super(RDPMss.class); this.mh = mh; this.oldMss = oldMss; this.proxyList = proxyList; } public Address getMh(){ return mh; } public Map getProxyList(){ return proxyList; } public Address getOldMss(){ return oldMss; } private Address oldMss; private Map proxyList; private Address mh; }
Declaração de Micro-Protocolos • Necessário definir três instâncias de protocolos do RDP: • Servidor - RDPServer • Estação móvel – RDPMh • Estação base – RDPMss • Cada uma dessas instâncias é um protocolo e define seus próprios micro-protocolos.
Declaração dos Micro-Protocolos • Micro-protocolos são declarados como interfaces Java. • Cada método da interface é um handler para uma das possíveis mensagens. • Cada handler possui a seguinte sintaxe: public void <nome>(Message m);
ExemploDeclaração de Protocolos • Micro-protocolo Wired do protocolo RDPMss publicinterfaceRDPMssWiredextends WiredModule { publicvoidwhenRes (Message m); publicvoidwhenRemPList (Message m); publicvoidwhenAck_Mss (Message m); }
Declaração de Micro-Protocolos • Diagrama completo de declaração de micro-protocolos
owner – elemento simulado usuário do protocolo send – envia uma mensagem pela rede state – uniformiza a manipulação do estado do protocolo em diferentes instâncias A Classe Protocol
Estrutura de um Protocolo • Corpo da declaração da classe publicclass RDPMh extends Protocol implements MhProtocol, RDPMhWireless{ public RDPMh(Mh owner){ super(owner, null); } publicvoid ForwardRes_Mh(Message m){ ForwardRes_Mh res = (ForwardRes_Mh) m; <corpo do método> } publicvoid Request(Address server, int req){ System.out.println("[rdp mh] % Request RDP = "+req); send(((Mh) owner).getMssResp(), new Req(owner.getAddress(), server, req)); } }
Tipos de módulos Micro-protocolos Extensão de Protocol Declaração do protocolo RDPMss Implementação do Protocolo RDP
Classes de mobics.network Element Fh Mh Mss Cell Address NetworkInterface WiredInterface WirelessInterface Configuração do Ambientede rede simulado
Classes básicas MobiCS Mh1 Mss1 Classes do pacote mobics.network (cont) • Hierarquia básica de elementos de rede simulados Element Fh Mh Mss
Classes do pacote mobics.network (cont) • Element – implementa a interface básica de um elemento de rede • Métodos principais: • getName – nome do elemento simulado • send – envia uma mensagem pela rede • attach – incopora um protocolo ao elemento
Adaptação nos elementos simulados Métodos com a assinatura on<Ação> definem o comportamento de um elemento simulado na ocorrência da ação <Ação>. Timer MsgSend MsgArrived SetTimer MoveTo Connectivity Classes do pacote mobics.network (cont) Elementos de Rede Máquina de Simulação
Classes do pacote mobics.network (cont) • Mh –implementa a interface básica de uma estação móvel • Métodos principais: • getMssResp – endereço do Mss responsável pelo Mh • available/unavailable – muda o estado de disponibilidade do Mh para comunicação • onMoveTo, onAvailable, onUnavailable • Mss – implementa a interface básica de um Mss (estação base) • Métodos principais: • getCell – célula pela qual o Mss é responsável
ExemploCriação de um Ambiente mh = new MyMh(“Mh 1",sim); cell1 = new Cell(); cell2 = new Cell(); cell3 = new Cell(); mss1 = new MyMss(“Mss 1",sim,cell1); mss2 = new MyMss(“Mss 2",sim,cell2); mss3 = new MyMss("Mss 3",sim,cell3); wr = new WiredLink(mss2.getAddress(), mss1.getAddress()); wr2 = new WiredLink(mss1.getAddress(), mss3.getAddress());
Res Req Ack Cria proxy Req ForwardRes é recebido por MSSo antes de completado o handoff do Mh ForwardRes PList DeReg UpCurLoc ForwardRes ? Ack Greet UpCurLoc PList DeReg Ack Greet FRes Exemplo Cenário de Teste • Testar envio sem sucesso de ForwardRes para Mh que não é mais local server proxy MSSp Mh MSSo MSSn
Res Req Ack server Cria proxy proxy Req ForwardRes PList DeReg MSSp UpCurLoc ForwardRes Mh ? Ack Greet UpCurLoc MSSo PList DeReg Ack Greet FRes MSSn Exemplo Cenário de Teste Server.acceptTurnOn(false); MSSn.acceptTurnOn(false); Mh.send(new Req()); Mh.moveTo(MSSo); end_step(); Mh.moveTo(MSSn); end_step(); Server.acceptTurnOn(true); end_step(); MSSn.acceptTurnOn(true);
MOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mh] % Request RDP = 7[rdp mss] % Requisition received by Mss**** adding local proxy[rdp mss] % sending message Req to the serverMOBX>> Mh <Mh> is moving[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....MOBX>> Mh <Mh> is moving[rdp server] % Requisition received -> 7[rdp mss] % Forwarding Res to local Mh[rdp mss] % storing result[rdp mss] % Registering new mh = <MyMh@1cf6d245>[rdp mss] % proxyRefList = {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % Sending proxy list {class sidam.rdp.Req=mobics.network.WiredInterface@50f2d244}[rdp mss] % sending update curr loc....[rdp mss] % Updating location[rdp mss] % setting current location[rdp mss] % update curr loc sended....[rdp mss] % Forwarding Res to local Mh[rdp mh] % Result RDP = 14[rdp mss] % Sending Ack for current proxy location[rdp server] % ACK received for message 0[rdp mss] % Broadcasting RemPList[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list[rdp mss] % Removing proxy list ExemploSaída da Simulação mh.moveTo(mssP); mh.receive(new Request(...)); mh.moveTo(mssO); end_step(); mh.moveTo(mssN); end_step(); server.acceptTurnOn(true); end_step(); mssN.acceptTurnOn(true);
Criação de um Script Determinístico • Criar uma subclasse de DetermSimulation • Implementar os métodos configure() e script() • Em configure, criar os objetos que compõem o ambiente simulado • Em script, escrever o código do script determinístico
Executando o Simulador • Código no programa do usuário Simulation simulation = new MySimulation(); Simulation.start();
Evitando Erros no Script Determinístico • A ordem de execução de ações em diferentes elementos simulados é não determinística. • Comandos de depuração podem produzir resultados inesperados e variáveis, caso haja outros comandos naquele passo. • O comando next() pode ser sempre usado como uma primitiva para impor uma sequência deterministica das ações, ou criando “passos de simulação vazios” (para avançar o tempo simulado)
Simulação Estocástica • Permite a avaliação do desempenho (complexidade de mensagens) através de testes exaustivos. • Usuário define: • Padrão de comportamento dos elementos simulados • Modelo de mobilidade • O modelo de simulação pode ser • programado (extensão de classes) e • configurado pelo usuário (instanciação de objetos). • A cada elemento simulado é associado um objeto que define os eventos (aleatórios a serem gerados neste elemento ) • Modelo de simulação estocástico pode ser arbitrariamente complexo!
Programação de Modelos de Simulação • Canais de Comunicação usuário define o tempo de envio da mensagem pelo canal: • pode depender do tamanho da mensagem, distância entre elementos, ou qualquer outro parâmetro (nr. de hops) • Wired delaySend(NetMessage m) • Wireless delaySend(NetMessage m, Location L1, Location L2) • Exemplo public class MyLinkModel extends LinkModel { public long delaySend (NetMessage msg) { return (msg.getMessage().getSize() / this.throughput); } }
Programação de Modelos de Simulação • Geração de Eventos usuário programa quais eventos são gerados, e em qual instante de tempo simulado • Classes base incluem facilidades para geração de número aleatórios (randomGenerator), geração periódica de eventos (scheduler) etc. • Mobilidade • Determinar vizinhança entre células • Geração de Evento MoveTo • Mapeamento: Localização Célula
Modelo de Mobilidade Simulação Estocástica Implementada • Modelo de Simulação Implementado • Atividade e Atração • Atividade: prob. de Mh estar conectado à rede • Atração: prob. de Mhs estarem na região de uma célula • Mobilidade • Probabilidade do Mh migrar para outra célula • Vizinhança entre células • Qualidade da comunicação sem fio • Padrão de requisições Neste modelo: apenas os hosts móveis geram eventos
ImplementaçãoA Classe MhSim • Subclasse de classe EventGenerator • objeto que implementa o modelo de simulação para cada unidade móvel • MhSim cria objetos para geração dos diferentes tipos de eventos • Instâncias de subclasses de EventModel • MigrationEventModel = implementa modelo de migração evento MoveTo(Mh,newCell) • RequestModel = implementa o modelo de geração de requisições para o protocolo RDP evento Receive(Mh,RDPreq) • WlLinkSimModel = implementa o modelo de qualidade de comunicação sem fio • usa timeScheduler.addEventp/ escalonar geração periódica (cada T unidades de tempo simuladas) de eventos
ImplementaçãoClasse MigrationEventModel • Implementa o modelo de mobilidade • Estende a classe EventModel • Define coeficiente de migração e célula inicial de cada Mh • método generateEvent(Element owner) • determina se um evento de migração vai ser gerado • obtém lista de células vizinhas à celula atual • baseado na atração das células vizinhas calcula probabilidade relativa de migração para cada uma delas • cria um novo objeto Evento MoveTo para célula destino
ImplementaçãoClasse MyStochSimulation • Estende de StochSimulation • usada para declarar e inicializar os elementos simulados • método configure • criação das células, • associação com os MSSs, • criação da topologia de interconexão de MSSs (usando WiredLink) • cria os objetos de MyMh (passando objeto MhSim) posicionando-os nas células • declara classe LinkSimModel que definedelaySend(Msg)para uma conexão sem fio • simulação iniciada através do método start
ImplementaçãoClasse MyMh • Derivada da Classe Mh • Na contrução do objeto passa-se o modelo de simulação escolhido (como parâmetro do construtor da superclasse Mh). • simpode ser tanto um modelo determinístico ou estocástico • Instancia-se um objeto que implementa uma instância do protocolo (rdp) e registra-se esta instância public MyMh (String name, Simulator sim) { super(name, sim, new MhSim()); rdp = new RDPMh(this); protocolNotifier.attach(this.rdp) }
Resultados de simulações Estocásticas • Medimos como o número de retransmissões (ForwardResult) por Requisição é afetado pelo Fator de Mobilidade • Fator de mobilidade = probabilidade de uma migração ocorrer a cada N unidades de tempo simulado • Outros testes: Tamanho de of proxyList com crescente razão Requisição/Migração
Experiência com o MobiCS • Usado na disciplina de CM no IME-USP por 15 alunos • Protocolos: • RDP • Multicast confiável MCAST [Acharya93]. • Protocolo para Serviço de Notificação. • Modelo de Programação de Protocolos Simples. Uso de Java facilitou a implementação. Programação não é thread-safe, há compartilhamento de estruturas de dados nos protocolos. Modularização em micro-protocolos é limitada.
Experiência com o MobiCS • Simulação Determinística Mecanismo de exceções de Java foi útil. Detecção de erros não-determinísticos (quando há varios eventos concorrentes). Detecção de erros no protocolo é facilitado pois cenário teste é conhecido. • Simulação Estocástica Programação de modos de simulação é simples. Identificação de problemas dos protocolos não considerados na especificação. Log de eventos ajudou identificar erros nos protocolos não detectados na simulação determinística
Experiência com o MobiCS • Simulação Estocástica (cont.) • Dificuldade para identificar no log as informações relevantes e associá-las aos elementos simulados. • Principal dificuldade: Instante da geração de um evento instante do processamento do evento Exemplo: decisão sobre célula destino de uma migração a partir da atual Mh.getMSS().getCell() devolve a célula no instante da geração do evento Em vez disto, guardar referência para celula atual e atualizar a cada processamento
Artigos • Rocha, Endler: “MobiCS: An Environment for Prototyping and Simulating Distributed Protocols for Mobile Networks”, IEEE MWCN2001. • Rocha, Endler: “Flexible Simulation of Distributed Protocols for Mobile Computing”, ACM MSWiM, Boston 2000. • Rocha, Endler: “Um Simulador de Protocolos para Computação Móvel”. 2o WCSF, maio 2000. • Endler, Silva: “A Reliable Connectionless Protocol for Mobile Clients”. DT-SIDAM-2-99.1. www.ime.usp.br/~sidam • URL: www.inf.puc-rio.br/~endler/publ.html
Referências • Home-page: http://www.ime.usp.br/~rcarocha/mobics ou http://www.ime.usp.br/~sidam/components/mobics • Lista de discussão: lista: rcarocha-mobics@lcpd.ime.usp.br cadastramento: rcarocha@ime.usp.br • Estas transparências: http://www.inf.puc-rio.br/~endler/courses/Mobile (link Sequência de Aulas)