A system configured to perform centralized input/output load-based path selection, the system comprising: a computing device, the computing device comprising a memory area, and a processor; a storage area network; a plurality of hosts executing virtual machines; characterised in that: said memory area stores a topology description of the storage area network, the topology description comprising at least a threshold capacity for the storage area network; wherein the processor is programmed to: perform initial path selection by identifying a plurality of storage paths from each one of the plurality of hosts executing the virtual machines to at least one logical storage device visible therefrom, wherein the identifying comprises iteratively performing a max flow algorithm with edge weights increasing with each iteration, and wherein each of the plurality of storage paths comprises a plurality of links, and wherein the memory area further stores link capacities associated with the plurality of links; determine an I/O load for each of the identified storage paths; subtract the determined I/O load for each of the identified storage paths from the threshold capacity to find, for each of the identified storage paths, a minimum bandwidth satisfying each of the identified storage paths; and for each of the plurality of hosts, select one of the identified storage paths based on the minimum bandwidth and the link capacities stored in the memory area. a computing device, the computing device comprising a memory area, and a processor; a storage area network; a plurality of hosts executing virtual machines; characterised in that: said memory area stores a topology description of the storage area network, the topology description comprising at least a threshold capacity for the storage area network; wherein the processor is programmed to: perform initial path selection by identifying a plurality of storage paths from each one of the plurality of hosts executing the virtual machines to at least one logical storage device visible therefrom, wherein the identifying comprises iteratively performing a max flow algorithm with edge weights increasing with each iteration, and wherein each of the plurality of storage paths comprises a plurality of links, and wherein the memory area further stores link capacities associated with the plurality of links; determine an I/O load for each of the identified storage paths; subtract the determined I/O load for each of the identified storage paths from the threshold capacity to find, for each of the identified storage paths, a minimum bandwidth satisfying each of the identified storage paths; and for each of the plurality of hosts, select one of the identified storage paths based on the minimum bandwidth and the link capacities stored in the memory area. said memory area stores a topology description of the storage area network, the topology description comprising at least a threshold capacity for the storage area network; wherein the processor is programmed to: perform initial path selection by identifying a plurality of storage paths from each one of the plurality of hosts executing the virtual machines to at least one logical storage device visible therefrom, wherein the identifying comprises iteratively performing a max flow algorithm with edge weights increasing with each iteration, and wherein each of the plurality of storage paths comprises a plurality of links, and wherein the memory area further stores link capacities associated with the plurality of links; determine an I/O load for each of the identified storage paths; subtract the determined I/O load for each of the identified storage paths from the threshold capacity to find, for each of the identified storage paths, a minimum bandwidth satisfying each of the identified storage paths; and for each of the plurality of hosts, select one of the identified storage paths based on the minimum bandwidth and the link capacities stored in the memory area. perform initial path selection by identifying a plurality of storage paths from each one of the plurality of hosts executing the virtual machines to at least one logical storage device visible therefrom, wherein the identifying comprises iteratively performing a max flow algorithm with edge weights increasing with each iteration, and wherein each of the plurality of storage paths comprises a plurality of links, and wherein the memory area further stores link capacities associated with the plurality of links; determine an I/O load for each of the identified storage paths; subtract the determined I/O load for each of the identified storage paths from the threshold capacity to find, for each of the identified storage paths, a minimum bandwidth satisfying each of the identified storage paths; and for each of the plurality of hosts, select one of the identified storage paths based on the minimum bandwidth and the link capacities stored in the memory area.