Avaliação de desempenho em ambiente computacional voltado para computação em nuvem com foco em aspectos de planejamento de capacidade Dionisio Leite1 , Maycon Peixoto1 , Marcos Santana1 , Regina Santana1 1 Universidade de São Paulo (USP) Instituto de Ciências Matemática e de Computação (ICMC) Departamento de Sistemas de Computação (SSC) São Carlos – SP – Brasil {dionisio,maycon,mjs,rcs}@icmc.usp.br Abstract. Capacity planning in cloud computing environments provides a better distribution of available resources and better service to the users of that environment. However, despite being a technical analysis, categorization and logic distribution, it is not always used correctly, by using inaccurate generalizations about the environment that is being developed. Therefore, it is necessary to know all the features and from this point to think the best configuration for the environment. In this paper, is proposed a performance evaluation of resources in a virtualized server suitable for cloud computing. Hypotheses have been raised about the economic model adopted, the proportionality between resources and virtual machines and the virtualization architecture adopted. The results showed that the current economic model restricts some possibilities due to the amount of physical resources. The results also showed there is no exact relationship of proportionality between available resources and virtual machines. Regarding to degradation, the factor more significant is the processor architecture and not the management tools to virtual machines. Resumo. O planejamento de capacidade em ambientes de computação em nuvem proporciona uma melhor distribuição dos recursos disponı́veis e melhor atendimento aos usuários desse ambiente. No entanto, apesar de ser uma técnica de análise, categorização e distribuição lógica, a mesma não é sempre utilizada de forma correta, por utilizar generalizações incorretas sobre o ambiente que está sendo desenvolvido. Sendo assim, é necessário conhecer todos os recursos e a partir deste ponto pensar a melhor configuração para o ambiente. Neste artigo, é proposta uma avaliação de desempenho sobre recursos virtualizados em um servidor adequado para computação em nuvem. Foram levantadas hipóteses sobre o modelo econômico adotado, a proporcionalidade entre recursos e máquinas virtuais e a arquitetura de virtualizadores adotados. Os resultados apontaram que o modelo econômico atual restringe algumas possibilidades devido à quantidade de recursos fı́sicos. Verificou-se por meio dos resultados que não há uma relação exata de proporcionalidade entre recursos disponı́veis e máquinas virtuais. Com relação a degradação, o fator mais impactante é a arquitetura do processador e não as ferramentas de gerenciamento de máquinas virtuais. 1. Introdução Enquanto o desempenho e a capacidade dos sistemas aumentam, o custo desses sistemas diminui. Em razão desta ascensão tecnológica de hardware e ao sucesso da Web, os recursos computacionais estão se tornando cada vez mais acessı́veis (financeiramente) e com suporte a um alto desempenho, em comparação aos computadores de décadas atrás. Esta evolução tecnológica possibilitou o surgimento de um novo paradigma denominado computação em nuvem (Cloud Computing), cuja finalidade é disponibilizar recursos computacionais (processamento, armazenamento, software, etc.) como serviços, permitindo o atendimento da demanda dos usuários [Armbrust et al. 2009]. Segundo Zhang et al. [Zhang et al. 2010], a computação em nuvem apresenta diversas caracterı́sticas atrativas, como baixo investimento em infraestrutura, custo de operação, alta escalabilidade e fácil acesso. De acordo com Costa et al. [Costa et al. 2011], as aplicações de e-ciência podem se beneficiar destas caracterı́sticas, pois essas aplicações requerem grandes quantidades de processamento. No entanto, os autores demonstram que a elasticidade não é aplicada em sua forma total, onde a quantidade de máquinas virtuais não pode ser alocada para a quantidade total de serviços, pois há uma limitação de recursos computacionais. Baseado no estudo apresentado por Costa et al. [Costa et al. 2011], propomos um conjunto de experimentações que visam identificar qual nı́vel aceitável de desempenho entre máquinas virtuais executando concorrentemente. Para isso, além de verificar o desempenho com o aumento de máquinas virtuais, será verificado o comportamento do desempenho com o aumento da quantidade de núcleos das máquinas virtuais. Dessa forma, a contribuição deste trabalho é identificar a melhor quantidade de máquinas virtuais para um determinado host, verificar como o desempenho é afetado com relação a diversas formas de concorrência por recursos e qual a proporção entre recursos fı́sicos disponı́veis e serviços (taxa de degradação). O restante deste artigo está organizado da seguinte forma: a Seção 2 apresenta os conceitos relacionados ao ambiente de computação em nuvem e que são pertinentes a este artigo. A Seção 3 apresenta os trabalhos relacionados à virtualização e ao planejamento de capacidade. A Seção 4 apresenta os materiais utilizados e os métodos para a definição dos conjuntos de experimentos. Os resultados obtidos são discutidos na Seção 5. As conclusões são apresentados na Seção 6. 2. Computação em Nuvem Utilizando uma analogia, um ambiente de computação em nuvem pode ser visto como um conjunto de componentes que executam serviços sob demanda para os clientes, sendo que estes não sabem onde os serviços são executados. Em razão disso é que os serviços estão alocados nas nuvens. O conceito de computação em nuvem se popularizou de maneira natural sem uma definição formada. [Armbrust et al. 2009] afirmam que computação em nuvem é “uma ideia antiga cujo tempo finalmente chegou”, citando o livro de [Parkhill 1966], o qual tinha uma visão onde a computação seria oferecida como utilidade. Dentre todas as definições de computação em nuvem, a definição do NIST [Mell and Grance 2009] é a mais completa: “Computação em Nuvem é um modelo para acesso conveniente, sob demanda, e de qualquer localização, a uma rede compartilhada de recursos de computação (isto é, redes, servidores, armazenamento, aplicativos e serviços) que possam ser prontamente disponibilizados e liberados com um esforço mı́nimo de gestão ou de interação com o provedor de serviços”. De acordo com o NIST [Mell and Grance 2009], a arquitetura de computação em nuvem é composta de cinco caracterı́sticas essenciais: • Autoatendimento sob demanda: um consumidor pode unilateralmente dispor de capacidades computacionais, como processamento, armazenamento, tempo de rede, conforme necessário e sem a necessidade de interação humana. • Amplo acesso à rede: recursos são disponibilizados através da Internet e podem ser acessados por clientes heterogêneos com qualquer capacidade de processamento (celulares, tablets, notebooks, etc). • Agrupamento de recursos: os recursos de computação do provedor são agrupados para atender múltiplos consumidores, com recursos fı́sicos e virtuais (armazenamento, processamento, largura de banda) atribuı́dos dinamicamente e designados novamente de acordo com a demanda do consumidor. • Elasticidade rápida: capacidades computacionais podem ser provisionadas e liberadas elasticamente, sendo que em alguns casos esta elasticidade é automática para se ajustar à demanda de cada consumidor. Para o consumidor, as capacidades provisionadas parecem ser ilimitadas e podem ser atribuı́das a qualquer momento. • Medição de serviço: recursos da nuvem são controlados e otimizados automaticamente, sendo que o seu uso é medido a partir de um nı́vel de abstração apropriado para cada tipo de serviço (contas de armazenamento, processamento, largura de banda e usuários ativos). A utilização dos recursos pode ser monitorada e descrita em relatórios, o que proporciona transparência tanto para o provedor quanto para o cliente. Dentre as caracterı́sticas enumeradas pelo NIST [Mell and Grance 2009], o autoatendimento sob demanda e a elasticidade são tópicos importantes relacionados ao desempenho que é ofertado aos usuários. Deste modo, essas caracterı́sticas são consideradas neste artigo. 3. Trabalhos Relacionados Dentro do ambiente de computação em nuvem há o conceito de virtualização, um assunto que é bastante discutido nos últimos anos como é apresentado por Sotomayor et al. [Sotomayor et al. 2006], Koh et al. [Koh et al. 2007], Nance et al. [Nance et al. 2008], Costa et al. [Costa et al. 2011], entre outros autores que discutem as vantagens e desvantagens da sua utilização. Sotomayor et al. [Sotomayor et al. 2006] utilizam a virtualização para contornar as limitações na manipulação de recursos fı́sicos em uma grade computacional. Os autores argumentam que, apesar da sobrecarga gerada, a virtualização é o melhor caminho para a configuração e disponibilização de recursos na grade. O desempenho é melhorado com o uso de cache das imagens das máquinas virtuais e o reuso das mesmas criando assim templates de máquinas virtuais. Na visão de White and Pilbeam [White and Pilbeam 2010], é importante observar as limitações e exigências do host fı́sico que será utilizado para a virtualização. Os autores apresentam uma revisão dos métodos de virtualização e software de virtualização, e discutem uma análise dos problemas de desempenho inerentes a cada uma dessas abordagens. Como a virtualização é um conceito extremamente utilizado na computação em nuvem, é importante levar em consideração os problemas de desempenho que essa técnica pode causar. Além disso, na computação em nuvem o conceito de SLA (Service-Level Agreement) é muito utilizado para a fixação de contratos, os quais garantem os nı́veis de qualidade de serviço contratado pelos clientes. Costa et al. [Costa et al. 2011] afirmam que muitas aplicações que possuem alta demanda computacional poderiam se beneficiar da elasticidade de provedores de computação em nuvem, pois, se determinada organização aloca um recurso para processar sua carga, esta pode, teoricamente, alocar N recursos paralelamente pelo mesmo preço, paralelizando assim o seu processamento, o que diminui o tempo total da execução da carga. Os resultados do trabalho mostram que os provedores atuais não permitem que clientes aloquem muitos recursos em paralelo, pois pode ocorrer uma queda drástica no desempenho do provedor devido ao uso concorrente de recursos. Atualmente há dois planos de provisionamento de infraestrutura: reserva de recursos e reserva sob demanda. Chaisiri et al. [Chaisiri et al. 2012] mostram que a reserva de recursos é mais barata que a reserva sob demanda pelo fato de ser estática e não precisar lidar com variações de carga de trabalho. Sendo assim, este artigo propõe uma análise sobre o provisionamento de recursos, considerando o aumento do número de máquinas virtuais concorrentes e o aumento da quantidade de recursos fı́sicos para as máquinas virtuais. Como o ambiente a ser analisado compreende a infraestrutura, o estudo apresentado nas próximas seções aborda a virtualização que é aplicada na computação em nuvem e analisa os fatores de degradação do ambiente a fim de melhorar o provisionamento de máquinas virtuais. Segundo Koh et al. [Koh et al. 2007], as atuais técnicas de virtualização não proveem isolamento efetivo de desempenho entre as máquinas virtuais. Especificamente, a virtualização exerce diferentes tipos de impacto sobre o desempenho conforme o tipo de carga aplicada ao sistema. Embora os hypervisores (monitores das máquinas virtuais) realizem o gerenciamento dos recursos de forma organizada, o comportamento de uma máquina virtual (VM) pode afetar o desempenho de outra VM devido ao uso compartilhado de recursos no host fı́sico. Uma vez que os recursos são compartilhados pelas múltiplas VMs, o desempenho obtido do sistema é imprevisı́vel, instável e pode se degradar em alguns cenários [Gupta et al. 2006] [Koh et al. 2007] [Kesavan et al. 2010]. Ao passo que ocorre o compartilhamento de recursos na infraestrutura da computação em nuvem, a interferência entre as VMs fica mais evidente. Por isso, há interferência entre as VMs executando no mesmo host fı́sico. No caso especı́fico da CPU, a interferência pode acontecer quando o número de núcleos fı́sicos é menor do que o número de VMs instanciadas ou quando existe o compartilhamento da cache L2 entre os núcleos da CPU. Múltiplas VMs estão ligadas ao gerenci- amento de um único hypervisor e cada uma dessas VMs possui seu próprio ambiente sem a visibilidade das outras. Assim, em razão do isolamento, uma VM não pode ser informada da carga de trabalho em execução em outra VM, sendo impossibilitada de determinar os efeitos da interferência no desempenho [Cherkasova et al. 2007] [Koh et al. 2007] [Ongaro et al. 2008] [Boutcher and Chandra 2010]. De maneira geral, a interferência final é composta por vários fatores, tais como: o tipo de serviço (representando a carga), o número de VMs instanciadas e o algoritmo de escalonamento de VM do hypervisor. Observa-se que essa interferência pode levar a um aumento do tempo de execução de um serviço, resultando em insatisfação dos usuários. Neste contexto, a próxima seção trata da relação desses fatores, os quais influenciam as variáveis de resposta de um ambiente. 4. Materiais e Métodos Para a execução e análise dos experimentos, foi utilizada a metodologia de planejamento de experimento fatorial completo apresentada por Jain [Jain 1991]. Nessa metodologia de planejamento de experimentos é definido que, para um conjunto de experimentos, é necessário definir os fatores fixos (fatores não variáveis desde o primeiro até o último experimento) e os fatores variáveis (fatores que irão ser comparados nos experimentos). Os experimentos foram conduzidos utilizando um único servidor PowerEdge DELL T410 onde foram criadas as máquinas virtuais. Para prover homogeneidade aos experimentos, a configuração do servidor é a mesma tanto para o Xen quanto para o KVM. Xen é um virtualizador free e Open Source que permite a execução de vários outros sistemas operacionais em uma mesma máquina. Já o KVM (Kernel-Based Virtual Machine) é um virtualizador Open Source para Linux que utiliza o modelo de virtualização em nı́vel de hardware implementando a técnica de virtualização completa com suporte as extensões (IVT e AMD-V) de virtualização dos processadores. Assim como a configuração do servidor, a configuração das máquinas virtuais no servidor também é fixa. Para efeito, tanto de comparação quanto de reprodução, os atributos fı́sicos do servidor são mostrados na Tabela 1. Tabela 1. Configuração do Servidor Memória Processador Número de cores Número de threads Cache L1 Cache L2 Cache L3 Disco Sistema Operacional 12GB Memory (3x4GB) 1333MHz Dual Ranked RDIMMs Optimized Intel Xeon X5660 HT 1333MHz 6 12 6 x 32 KB instruction caches 6 x 32 KB data caches 6 x 256 KB 12 MB SATA de 500GB 3.5 Debian 6 Kernel 2.6.32-5 x86 64 Com as caracterı́sticas apresentadas na Tabela 1 é possı́vel reproduzir o ambiente que foi utilizado para realizar as experimentações, bem como para fazer generalizações, pois pode haver vários servidores com configurações semelhantes e que, provavelmente, obterão os mesmo resultados apresentados neste artigo. As configurações das máquinas virtuais bem como informações importantes, como escalonadores, são apresentados na Tabela 2. Tabela 2. Configuração das Máquinas Virtuais Caracterı́sticas da VM Memória Processador Disco Sistema Operacional Escalonador Processo Host Escalonador Processo VM Xen 4.0.1 512MB VCPU (2.8 GHz) 8 GB Ubuntu 10.04 kernel 2.6.32-33-server Credit Scheduler CFS KVM 0.12.5 512MB VCPU (2.8 GHz) 8 GB Ubuntu 10.04 2.6.32-33-server CFS CFS É importante observar que as configurações das máquinas virtuais são padrão, ou seja, não foi realizada nenhum melhoria ou troca de caracterı́sticas do modelo padrão de máquina virtual. A quantidade de experimentos é apresentada na Tabela 3. Tabela 3. Experimentos realizados Exp 1 2 3 4 5 6 7 8 9 10 11 VM XEN 1 2 4 6 8 10 12 1 2 1 2 VM KVM 1 2 4 6 8 10 12 1 2 1 2 Núcleos 1 1 1 1 1 1 1 6 6 12 12 Execuções 10 10 10 10 10 10 10 10 10 10 10 Como apresentado na Tabela 3, há experimentos considerando um núcleo por máquina virtual, até o limite de cores do servidor, a fim de verificar qual o ponto de sobrecarga. Além disso, há a necessidade de verificar os ganhos de desempenho com um aumento de núcleos, do experimento 8 ao 11, visando identificar as melhores configurações de desempenho e quais os nı́veis de sobrecarga obtidos. Para uma correta avaliação e observação da utilização de recursos, foi utilizado um benchmark que faz uso intensivo de CPU. Esse tipo de carga foi selecionado por ser dependente apenas do processador, possibilitando fazer generalizações para outros tipos de processadores, enquanto que outros tipos de carga como: entrada e saı́da (I/O) e sistema, dependendo dos periféricos (Disco SCSI - Small Computer System Interface e NAS - Network-Attached Storage como exemplos de I/O e memórias com altas frequências), podem ter resultados muito diferentes, impossibilitando generalizações. O benchmark utilizado foi o SmallPT 1 . O SmallPt é um “renderizador” global de imagens que faz uso estritamente de CPU. 5. Resultados Os resultados obtidos refletem o desempenho obtido em um servidor preparado para virtualização e computação de alto desempenho. Os experimentos foram elaborados para verificar qual o desempenho obtido quando há concorrência de máquinas virtuais em um mesmo servidor. Esse tipo de experimento é necessário para verificar como o planejamento de capacidade pode ser realizado em servidores com configurações semelhantes às utilizadas nesta pesquisa. 1 http://www.kevinbeason.com/smallpt/ Normalmente utiliza-se a quantidade de recursos fı́sicos pela quantidade de serviços executando, dado por P/N . O valor de P representa a quantidade de recursos disponı́veis e o valor de N representa a quantidade de serviços executando. É necessário verificar que a carga a ser representada por N deve ser a quantidade de máquinas virtuais, pois elas devem fornecer aos seus usuários sua capacidade plena de processamento. A Figura 1 apresenta o desempenho obtido nas máquinas virtuais e possibilita a comparação de proporcionalidade oferecida pela relação de recursos por serviços. Interval Plot of Tempo Resposta (s) 95% CI for the Mean 250 229,2 218 Tempo Resposta (s) 200 180,7 175,9 164 160,8 150 140,2 134,8 136 140 140 140 140 Xen KVM 2 Xen KVM 4 Xen KVM 6 141 100 50 0 VMM Máquinas Xen KVM 1 Xen KVM 8 Xen KVM 10 Xen KVM 12 Figura 1. Desempenho observado para carga estritamente CPU-Bound intra-host De acordo com a Figura 1, a proporcionalidade sugerida por P/N não é obtida. De acordo com nosso experimentos, não existe concorrência até o limite de seis máquinas virtuais que, de acordo com a Tabela 1, é a quantidade de núcleos fı́sicos. É importante ressaltar que o sistema operacional do servidor (host) trabalhar com doze núcleos e não com seis. Essa caracterı́stica é determinante para a elaboração de um planejamento de capacidade correto. A Figura 2 apresenta as diferenças obtidas entre as máquinas virtuais em termos de porcentagem de desempenho. 70 64,0 60 Virtualizador KVM Xen 55,8 Desempenho 50 40 30 27,0 25,0 20 17,0 15,0 10 0,0 0 0 0,0 2 0,0 0,0 4 6 8 10 Número de Máquinas virtuais 12 Figura 2. Relação de desempenho entre as máquinas virtuais intra-host Como pode ser observado na Figura 2, o limite de núcleos que o sistema operacional do servidor trabalha gera uma sobrecarga, em geral, entre 55,8% e 64% dependendo do tipo de virtualizador. Essa relação de desempenho mostra que a proporcionalidade entre quantidade de recursos fı́sicos e serviços executando (máquinas virtuais) não é o melhor indicador para formular a capacidade geral do ambiente, uma vez que se pode somar todos os recursos disponı́veis e assim fornecer serviços regulares de forma correta. Outro ponto de destaque é o uso de escalabilidade horizontal, onde os recursos das máquinas virtuais podem ser expandidos. O gráfico da Figura 3 apresenta os resultados obtidos e as comparações entre os resultados. Interval Plot of Tempo Resposta (s) 95% CI for the Mean 140 140,2 140,2 134,8 136 Tempo Resposta (s) 120 100 80 60 40 35,1 23,8 1 2 Xen 1 2 KVM 20 0 VM Virtualizador Núcleos 1 2 Xen 1 2 KVM 1 6 36,9 35,1 23,9 18,2 32,2 18,7 1 2 Xen 1 2 KVM 12 Figura 3. Índices de desempenho com configurações variadas de núcleos por máquinas virtuais concorrentes De acordo com o gráfico da Figura 3, o desempenho obtido foi melhor para as quantidades maiores de núcleos virtuais (VCPU - Virtual CPU). A diferença entre 1VCPU e 6VCPUs fica em torno de 83%, porém quando o limite é aumentado de 6VCPUS para 12VCPUS o ganho de desempenho fica em torno de 22%. Nota-se que, para duas máquinas virtuais, tanto com 6 como com 12 VCPUS, o desempenho não segue o mesmo comportamento apresentado com apenas 1VCPU. Esse fato é devido à concorrência pelos núcleos do servidor. A diferença obtida entre as máquinas virtuais para 6VCPUS fica em torno de 47%,enquanto que, a diferença obtida com 12VCPUS fica em torno de 100%. Apesar da degradação de desempenho apresentada para 1 e 2VMs, os tempos de resposta são melhores que os obtidos quando a máquina virtual possui apenas 1VCPU. Apesar das quantidades maiores apresentarem melhores ı́ndices de desempenho, essa caracterı́stica torna o trabalho de planejamento de capacidade um desafio ainda maior, pois não existe uma forma de prever qual será a carga exata de cada cliente. Como o ambiente de nuvem propicia o aluguel de recursos computacionais por tempos determinados, o cliente pode não conhecer ao certo sua carga de trabalho e o provedor de serviços pode não possuir uma regra para determinar a mesma. Dessa forma, é possı́vel verificar porque atualmente não é válido fazer a relação entre um recurso por mil horas ou mil recursos por uma hora, apesar de ser possı́vel fazer essa relação. O modelo econômico praticado atualmente visa atender o máximo de clientes e a relação citada anteriormente precisa de formas de agendamento e realocação de máquinas virtuais para fornecer os recursos fı́sicos adequados, isso acaba sendo inviável para os fornecedores de computação em nuvem. 6. Conclusão O planejamento de capacidade é uma ferramenta muito útil para o desenvolvimento de ambientes computacionais de forma coerente e sem desperdı́cios de recursos. Essa técnica, apesar de parecer trivial e até mesmo inútil para alguns casos, é fundamental atualmente, pois requer conhecimento do sistema de forma geral e quais os possı́veis pontos de degradação do mesmo. Este artigo propôs identificar três pontos julgados importantes no desenvolvimento de ambientes voltados para aplicações de alto desempenho: modelo econômico atual, relação de proporcionalidade entre recursos e serviços e arquitetura dos virtualizadores utilizados. Nossa pesquisa identificou que o modelo econômico adotado em nuvem propõe a auto configuração de recursos de acordo com a demanda dos serviços, no entanto essa premissa não é adotada quando se trata de aplicações que requerem uma alta quantidade de processamento. De acordo com os experimentos realizados, verificou-se que a quantidade de recursos para o uso concorrente de forma a não degradar o desempenho é o limite de núcleos fı́sicos, no entanto há o uso de multithread que dá a falsa sensação de mais processamento do que de fato há. Essa caracterı́stica pode levar a um planejamento de capacidade de forma incoerente uma vez que devem ser observados a quantidade de núcleos e não de threads disponı́veis. Outro ponto é a proporcionalidade entre recursos disponı́veis e serviços executando. Foi comprovado que não há de fato uma proporção exata entre a relação recursos/serviços. O planejamento nesse caso deve, em primeiro lugar considerar a quantidade fı́sica de recursos e em segundo lugar, considerar as caracterı́sticas pertinentes ao processador utilizado, como tamanho de caches, quantidade de instruções e outras caracterı́sticas pertinentes ao processador em questão. O terceiro ponto foi verificar que apesar de haver uma diferença de desempenho entre os tipos de virtualizadores, na média o desempenho dos virtualizadores é o mesmo (comprovado pelos resultados apresentados no gráfico de desempenho com os erros obtidos). Fica claro que a preocupação maior no desenvolvimento do ambiente de alto desempenho é com relação a arquitetura do processador e não nas tecnologias de gerência de máquinas virtuais. Referências Armbrust, M., Fox, A., Griffith, R., Joseph, A. D., Katz, R. H., Konwinski, A., Lee, G., Patterson, D. A., Rabkin, A., Stoica, I., and Zaharia, M. (2009). Above the clouds: A berkeley view of cloud computing. Technical Report UCB/EECS-2009-28, EECS Department, University of California, Berkeley. Boutcher, D. and Chandra, A. (2010). Does virtualization make diskscheduling passé? SIGOPS Oper. Syst. Rev., 44(1):20–24. Chaisiri, S., Lee, B., and Niyato, D. (2012). Optimization of resource provisioning cost in cloud computing. Services Computing, IEEE Transactions on, 5(2):164–177. Cherkasova, L., Gupta, D., and Vahdat, A. (2007). Comparison of the three cpu schedulers in xen. SIGMETRICS Perform. Eval. Rev., 35(2):42–51. Costa, R., Brasileiro, F., Lemos, G., and Mariz, D. (2011). Sobre a amplitude da elasticidade dos provedores atuais de computação na nuvem. Anais do XXIX Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuı́dos (SBRC2011). Sociedade Brasileira de Computação (SBC), pages 221 – 234. Gupta, D., Cherkasova, L., Gardner, R., and Vahdat, A. (2006). Enforcing performance isolation across virtual machines in xen. In Proceedings of the ACM/IFIP/USENIX 2006 International Conference on Middleware, pages 342–362. Springer-Verlag New York, Inc. Jain, R. (1991). The art of computer systems performance analysis: techniques for experimental design, measurement, simulation, and modeling. Wiley, pages 44–56. Kesavan, M., Gavrilovska, A., and Schwan, K. (2010). On disk i/o scheduling in virtual machines. In Proceedings of the 2nd conference on I/O virtualization, pages 6–6. USENIX Association. Koh, Y., Knauerhase, R., Brett, P., Bowman, M., Wen, Z., and Pu, C. (2007). An analysis of performance interference effects in virtual environments. In Performance Analysis of Systems Software, 2007. ISPASS 2007. IEEE International Symposium on, pages 200 –209. Mell, P. and Grance, T. (2009). The NIST Definition of Cloud Computing. Technical report. Nance, K., Bishop, M., and Hay, B. (2008). Virtual machine introspection: Observation or interference? Security & Privacy, IEEE, 6(5):32–37. Ongaro, D., Cox, A. L., and Rixner, S. (2008). Scheduling i/o in virtual machine monitors. In Proceedings of the fourth ACM SIGPLAN/SIGOPS international conference on Virtual execution environments, VEE ’08, pages 1–10, New York, NY, USA. ACM. Parkhill, D. (1966). The challenge of the computer utility. Number p. 246 in The Challenge of the Computer Utility. Addison-Wesley Pub. Co. Sotomayor, B., Keahey, K., and Foster, I. (2006). Overhead matters: A model for virtual resource management. In Proceedings of the 2nd International Workshop on Virtualization Technology in Distributed Computing, page 5. IEEE Computer Society. White, J. and Pilbeam, A. (2010). A survey of virtualization technologies with performance testing. Arxiv preprint arXiv:1010.3233. Zhang, Q., Cheng, L., and Boutaba, R. (2010). Cloud computing: state-of-the-art and research challenges. Journal of Internet Services and Applications, 1:7–18.