A method to schedule virtual machine migrations, the method comprising: receiving migration requests from each machine when any of its hosted VMs wants to migrate; analyzing VM migration behavior by determining a memory page dirty rate of each VM that wants to migrate; building and running a software simulation tool simulating performance of VM migrations to predict time for multiple migrations under different links conditions and VM characteristics; determining a predetermined bandwidth sharing policy for each network link; determining global resource assignments based on the determined bandwidth sharing policy by applying a bin-packing technique in which a bin represents all network links and an item denotes each migration task to schedule the multiple migrations, the bin-packing technique allocating each migration task to a corresponding bin so that the total number of bins to host migration tasks is minimized; allocating the links to the migration tasks, and performing the migration tasks, wherein applying the bin-packing technique comprises: transforming a resource demand vector D ( i) for each migration M i into a scalar η ( i), D ( i) → η ( i), where η ( i) equals to a summation of all the elements in D ( i). sorting resource demands based on their transformed η ( i) values; and scanning migration tasks from high to low η ( i) s, wherein for each selected migration task, placing the selected task in an earliest time interval T with free capacities to host the task. receiving migration requests from each machine when any of its hosted VMs wants to migrate; analyzing VM migration behavior by determining a memory page dirty rate of each VM that wants to migrate; building and running a software simulation tool simulating performance of VM migrations to predict time for multiple migrations under different links conditions and VM characteristics; determining a predetermined bandwidth sharing policy for each network link; determining global resource assignments based on the determined bandwidth sharing policy by applying a bin-packing technique in which a bin represents all network links and an item denotes each migration task to schedule the multiple migrations, the bin-packing technique allocating each migration task to a corresponding bin so that the total number of bins to host migration tasks is minimized; allocating the links to the migration tasks, and performing the migration tasks, wherein applying the bin-packing technique comprises: transforming a resource demand vector D ( i) for each migration M i into a scalar η ( i), D ( i) → η ( i), where η ( i) equals to a summation of all the elements in D ( i). sorting resource demands based on their transformed η ( i) values; and scanning migration tasks from high to low η ( i) s, wherein for each selected migration task, placing the selected task in an earliest time interval T with free capacities to host the task. transforming a resource demand vector D ( i) for each migration M i into a scalar η ( i), D ( i) → η ( i), where η ( i) equals to a summation of all the elements in D ( i). sorting resource demands based on their transformed η ( i) values; and scanning migration tasks from high to low η ( i) s, wherein for each selected migration task, placing the selected task in an earliest time interval T with free capacities to host the task.