Cloud computing is the new era of technology, it uses virtualization and automation to provide user with self-service computing products that provide infinite scale at low cost. It serves user in many ways such as Infrastructure as a Service (IaaS), Software as a Service (SaaS), Platform as a Service (PaaS) etc. While serving as an IaaS it is inevitable that resources must be provided in an efficient way in order to meet the Service Level Agreement (SLA). This paper mainly addresses challenges, performance issues and techniques for resource allocation in cloud computing.