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");