978-1-4673-5943-6/13/$31.00 ©2013 IEEE The Mutual Effect of Virtualization and Parallelism in a Cloud Environment Soha S. Zaghloul Department of Computer Science Faculty of Computer and Information Science, KSU Riyadh, KSA smekki@ksu.edu.sa Abstract—Cloud computing is a dominant technology nowadays in both industry and academia. It evolved from many concepts such as distributed processing and parallel computing. In addition, virtualization is the core of cloud computing since it facilitates live migration for the sake of load balancing. The ultimate result is the optimization of resources utilization and increase in the whole system’s performance. Moreover, virtualization plays an important role in achieving disaster recovery plans. Furthermore, virtual machines secure the underlying physical hardware against malware. However, parallel computing is of no less importance, especially to cloud platforms. Consequently, contemporary laptops, mobile and hand-held devices manufacturers produce multicore equipment with the aim of achieving high performance levels when these become nodes in a cloud environment. However, what is the mutual effect of virtualization and parallel processing? Do they impede each other? Do they really boost the overall performance collectively? This research helps to better understand the effect of virtualization on parallel processing. In addition, this paper covers some researches made to answer such questions. Such studies are so few – to the extent of our knowledge – that they don’t give comprehensive answers to the previously imposed questions. Finally, a methodology is exposed to quantitatively measure the mutual effect of parallelism and virtualization in a cloud environment. Keywords: virtualization; parallel programming; distributed processing I. INTRODUCTION Initially, parallel processing was implemented only on supercomputers the most famous of which are CDC, Cray, and Fujitsu [1]. Later, the world witnessed drastic advancements in the hardware technology. Nowadays, personal computers (PCs), laptops, hand-held devices and smart mobiles excerpt the multi-processing feature of supercomputers. One can easily find dual-core and quad-core of such equipment in the market. Not only they are available, but they are also affordable. On the other hand, cloud computing is currently prevailing the world of information technology. People always dreamed to have computing offered as a utility. They pay only for what they use in the same way as they do for the telephone, gas, and water bills. In addition, clouds provide different services: each institution may select what is more suitable for its goal. Such services, or deployment models, include Infrastructure-as-a-Service (IaaS), Platform-as-a- Service (PaaS) and Software-as-a-Service (SaaS). Moreover, clouds offer scalability, flexibility, elasticity and provide better resources utilization [2]. Virtualization is an old concept since the 60s when IBM came with the idea and implemented it. It is the ability to install multiple virtual machines on the same physical machine. Virtual machines may have different operating systems [3]. Thus capital, operational, maintenance and management costs are reduced. However, virtualization gained more popularization with the emersion of cloud computing. In fact, virtualization is the core of cloud computing. Virtualization facilitates the live migration process in a cloud platform for the sake of load balancing. The ultimate result is an increased system overall performance and optimized resources utilization. In addition, disaster recovery plans are easily achieved with the aid of virtual machines [4][5]. In summary, both virtualization and parallelism are considered vital to a cloud computing platform. However, the question now is what is the effect of virtualization on parallel processing in the cloud? Does virtualization impede parallelism? Do parallel applications benefit from virtualization? If yes, to what extent does virtualization boost parallelism? If not, how to minimize the imposed overhead in order to gain the maximum execution speed? This