Tutorial - UFC-GREat-PPGETI/MCCSimulator GitHub Wiki
////TUTORIAL
Passos para utilização do simulador:
Passo 1 – instanciação dos serviços do CloudSim. // System.out.println("started MobCloudSim");
int num_user = 1; Calendar calendar = Calendar.getInstance(); boolean trace_flag = false; CloudSim.init(num_user, calendar, trace_flag);
Neste passo, apenas utilizamos a estrutura base do cloudSim para inicialização do simulador.
Passo 2 - instanciação da MobileCloudlet. // MobileCloudlet mobileCloudlet = new MobileCloudlet(0, 10000, 3); //
É necessária inicializar a MobileCloudlet. Ela representa as tarefas que poderão ou não sofrerem offloading. A parametrização no construtor atual obedece a seguinte assinatura: MobileCloudlet (id,quantidade_de_kbyte_transmitido_durante_offloading, quantidade_de_kbyte_recebido_durante_offloading)
Passo 3 – definir o tipo de offloading que irá regir a mobileCloudlet // mobileCloudlet.setOffloadStatus(OffloadStatus.STATIC);
No exemplo acima, a MobileCloudlet possui o tipo de offloading ajustado como estático. Ou seja, uma vez que o Offloader do device seja do tipo estático, a MobileCloudlet será automaticamente enviada para o servidor. Caso seja dinâmico, a MobileCloulet será analizada por algum DynamicOffloader para decisão de offloading.
Passo 4 – instanciar o device que será utilizado. // Device smartphone = DeviceFactory.getDevice(DeviceType.SMARTPHONE, 0);
Devemos obter uma instância de um device válido, de acordo com seu tipo.
Passo 5 – ajustar o hardware do device em questão // DeviceHardware deviceHardware = smartphone.getDeviceHardware(); deviceHardware.setProcessorFrequency(500); deviceHardware.setArchitecture("ARM"); deviceHardware.setOS("Android"); deviceHardware.setStorageCapacity(10000); deviceHardware.setVersion("CELULAR 1");
É necessário definir o hardware do device que será utilização na simulação
Passo 6 – atrelar as MobileCloudlet´s ao device instanciado. // smartphone.setCloutlets(mobileCloudlet);
Passo 7 – definer o tipo de offloader utilizado na simulação // smartphone.setOffloaderType(new StaticOffloader());
É necessário definir o offloader. Tendo em vista que diferentes estratégias de offloading (estática, dinâmica, preditiva) podem ser aplicadas para avaliação de uma simulação.
Passo 8 – definir o tipo de rede a ser considerada na simulação // smartphone.setNetworkModel(new Network3g());
Existem dois tipos de rede implementadas. As classes Network3g e NetworkLTE. De acordo com possíveis valores do trabalho do Phillip.A abordagem default é a abordagem 2 (descrita no documento enviado previamente).
Passo 9 - setar tempos de transmissao da rede // double timeToUp = smartphone.getDynamicTimeToSendCloudletToCloud(mobileCloudlet); double timeToDown = smartphone.getDynamicTimeToReceiveCloudletFromCloud(mobileCloudlet);
System.out.println("time to transfer cloudlet from device to cloud (in seconds): " + timeToUp);
System.out.println("time to transfer cloudlet from cloud to device (in seconds): " + timeToDown);
Essas chamadas são apenas para visualização prévia do tempo
Passo 10 – Obter referências de cloudlets que irão para offloading e que não irão // Map<Integer, List> map = smartphone.getMapCloudletsExecutionEnvironment();
System.out.println("cloudlets going to cloud " + map.get(Offloadable.YES_OFFLOAD).size());
Passo 11 – ajustar o hardware da nuvem // CloudHardware cloudHardware = new CloudHardware(); cloudHardware.setMemoryCapacity(2048); cloudHardware.setStorageCapacity(1000000); cloudHardware.setOS("Linux"); cloudHardware.setArchitecture("x86");
Passo 12 – ajustar relação de tempo de processamento de tarefa entre device e nuvem. // setExecutionTimeRelationBetweenCloudHardWareDeviceHardware(mobileCloudlet, 100, 10, cloudHardware, deviceHardware);
Esta função estática. Irá ajustar a relação de processamento entre as entidades mencionadas. No exemplo acima. É informado que, para a cloudlet passada como parâmetro, a mesma deverá demorar 100 segundos para ser executada no device móvel e que a execução na nuvem será 10 vezes mais rápida do que no device. As referências de cloudHardware e deviceHardware são necessárias para os ajustes serem efetivados.
Passo 13 – Instanciação da nuvem. // CloudEnvironment cloudEnvironment = new CloudEnvironment(cloudHardware);
Passo 14 – recebimento das respostas da nuvem, se a mesma processar os cloudlets // List cloudletsReceived = (List) smartphone.doOffloading(cloudEnvironment);
Passo 15 – impressão em tela dos resultados (caso as cloudlets sejam enviadas à nuvem e recebidas. // CloudUtils.printMobileCloudletReturnedList(cloudletsReceived);
Passo 16 – Caso existam cloudlets que foram remanejadas para execução no device. Este método será executado para tal. O map parametrizador, é o mesmo do passo 9.
smartphone.executeCloudletOnDevice(map);
System.out.println("finished MobCloudSim");