Cloud computing enables cloud providers to offer computing infrastructure as a service in the form of virtual machines (VMs). VM placement is a vital component of any cloud management platform (e.g. OpenStack). VM placement is the process of mapping VMs to physical machines (PMs) efficiently according to the cloud provider's objectives and placement constraints. So far, any VM placement solution adopts either a reservation-based or demand-based VM placement strategies. Reservation-based VM placement allocates VMs to PMs according to the reserved VM size regardless of the actual workload. If a VM is making use of only a fraction of its reservation, then this leads to PM underutilization, which wastes energy and results in more costs. In contrast, demand-based VM placement consolidates VMs based on the actual workloads demand which may lead to better utilization. However, it may incur more service level agreement violations (SLAVs) resulting from overloaded PMs and/or VM migrations among PMs due to workload fluctuations. This thesis aims to introduce a novel VM placement strategy to control the tradeoff between PM utilization and SLAVs that will allow cloud providers to explore the whole space of VM placement options that range from demand-based to reservation-based, with the help of a single parameter. The thesis first presents our strategy called parameter-based VM placement using a static parameter. Then it introduces various algorithms that adjust this parameter continuously at run-time in a way that a provider can maintain the number of SLAVs below a certain (predetermined) threshold while using the smallest possible number of PMs. These algorithms fine-tune the parameter both at the cloud data center level and at the VM level using reactive and hybrid (reactive and proactive) approaches. An empirical evaluation using CloudSim confirms that the proposed parameter-based VM placement solution offers more flexibility in choosing between different tradeoffs.