Exemplo n.º 1
0
def main():
    topology = Topology()
    topology.load_inet_graph('cloudping')
    regions = list(topology.nodes)

    scenario = CloudRegionsScenario(regions, [(5, 1)] * len(regions))
    scenario.materialize(topology)

    execute_vivaldi(topology)
    (measured, calculated) = distances(topology)
    qq_plot_distances(measured, calculated)
    plt.show()

    print('rmse:', mean_squared_error(measured, calculated, squared=False))
Exemplo n.º 2
0
 def create_initial_topology(self) -> Topology:
     topology = Topology()
     topology.load_inet_graph('cloudping')
     # maps region names of cloudping dataset to custom region names
     region_map = {
         'internet_eu-west-1': 'eu-west',
         'internet_eu-central-1': 'eu-central',
         'internet_us-east-1': 'us-east',
     }
     # remove all or regions from the graph
     topology.remove_nodes_from(
         [n for n in topology.nodes if n not in region_map.keys()])
     # relabel the region nodes according to the map above
     nx.relabel_nodes(topology, region_map, copy=False)
     return topology
Exemplo n.º 3
0
def create_topology() -> Topology:
    topology = Topology()
    counters = defaultdict(lambda: itertools.count(0, 1))
    lognorm = ParameterizedDistribution.lognorm

    def client_factory_with_region(region: str):
        def create_client():
            name = 'client_%d_%s' % (next(counters['client']), region)
            return Client(name)

        return create_client

    def edge_broker_factory_with_region(region: str):
        def create_edge_broker() -> Broker:
            name = 'edge-broker_%d_%s' % (next(
                counters['edge-brokers']), region)
            return Broker(name)

        return create_edge_broker

    # load cloudping dataset and select 5 random regions
    topology.load_inet_graph('cloudping')
    regions = random.choices(list(topology.nodes), k=5)

    # remove unused regions from topology
    unused_regions = topology.nodes - regions
    for r in unused_regions:
        topology.remove_node(r)

    # create 1 city (including one edge broker per neighborhood) plus 1 cloud broker per region
    for region in regions:
        aot_node = IoTComputeBox(nodes=[client_factory_with_region(region)])
        neighborhood = lambda size: SharedLinkCell(
            nodes=[[aot_node] * size,
                   [edge_broker_factory_with_region(region)]],
            backhaul=MobileConnection(region))
        city = GeoCell(5, nodes=[neighborhood], density=lognorm((0.82, 2.02)))
        topology.add(city)

        broker = Broker(f'cloud-broker_{region}', backhaul=region)
        topology.add(broker)

    return topology