Suggestions for achieving optimal and cost-effective interconnection for a storage network

A storage system capable of fulfilling the growing demand for storage bandwidth and capacity motivates the need for designing cost-efficient networks. We aim to provide a means for the end user to choose among the various options we provide, given his specific demands, which will enable him to build an interconnection network with optimal performance and minimal cost.
To achieve this objective, we have designed a simulator program, which when fed as input - graph of the desired type, the number of nodes and switches, estimates the aggregate bandwidth utilization of the network. This is obtained by an incremental approach to choosing the heavily loaded link in the network for the randomly generated flows, and allocating the edges there onward, proceeding until all flows have been assigned a share of the network bandwidth.
We thus attempt to aid in the process of interconnecting a large number of storage nodes in the hope of providing optimum bandwidth to the various competing requests for data, in addition to keeping the latency and cost at a minimum.

Description of numerical algorithm/code:
The simulator mentioned in the previous section is being coded in Python - the primary driving factor being its ease of use and provision of network packages.
The program takes as input the graph type (mesh/torus/etc), the dimension of the graph where applicable, and an approximation to the number of flows that will eventually traverse this network.

A simplified version of its pseudocode follows,

Procedure main
1. Obtain a list of random flows that will traverse the network.
2. for each of the above flows
3. do Find shortest path between the two end points of this flow
4. for each edge in the shortest path
5. do Identify all flows that traverse this edge
6. Add this edge to the list of edges for this flow
7. end for
8. end for

9. Initialize the capacity of all edges to be of uniform speed

10. while there are edges remaining in the list we created in step 5 11. do determine the remaining capacity over all these edges
12. Pick the edge with minimum capacity (the current heavily loaded
link)
13. Assign the capacity to all edges along this flow
14. Once assigned, decrement this from the available capacity for the
edge
15. And also omit the flow from future consideration
16. end while

17.Output the Aggregate Bandwidth, Average Path Length, and Average Rate