1 # Copyright (c) 2006-2021. The SimGrid Team. All rights reserved.
3 # This program is free software; you can redistribute it and/or modify it
4 # under the terms of the license (GNU LGPL) which comes with this package.
6 from simgrid import Actor, Engine, Comm, Host, Mailbox, NetZone, Link, LinkInRoute, this_actor
12 Send 1 message for each host
14 def __init__(self, hosts):
17 # Actors that are created as object will execute their __call__ method.
18 # So, the following constitutes the main function of the Sender actor.
21 for host in self.hosts:
22 mbox = Mailbox.by_name(host.name)
23 msg = "Hello. I'm " + str(this_actor.get_host().name)
25 this_actor.info("Sending msg to " + host.name)
28 this_actor.info("Done dispatching all messages. Goodbye!")
32 Receiver actor: wait for 1 messages and do operations
36 this_actor.execute(1e9)
37 for disk in Host.current().get_disks():
38 this_actor.info("Using disk " + disk.name)
41 mbox = Mailbox.by_name(this_actor.get_host().name)
43 this_actor.info("I got '%s'." % msg)
44 this_actor.info("Finished executing. Goodbye!")
47 """ Creates a mixed platform, using many methods available in the API
50 root = NetZone.create_floyd_zone("root")
53 dijkstra = NetZone.create_dijkstra_zone("dijkstra")
54 msg_base = "Creating zone: "
55 this_actor.info(msg_base + dijkstra.name)
56 dijkstra.set_parent(root)
57 host1 = dijkstra.create_host("host1", [1e9, 1e8]).set_core_count(2)
59 host1.create_disk("disk1", 1e5, 1e4).seal()
60 host1.create_disk("disk2", "1MBps", "1Mbps").seal()
62 host2 = dijkstra.create_host("host2", ["1Gf", "1Mf"]).seal()
64 link1 = dijkstra.create_link("link1_up", [1e9]).set_latency(1e-3).set_concurrency_limit(10).seal()
65 link2 = dijkstra.create_link("link1_down", ["1GBps"]).set_latency("1ms").seal()
66 dijkstra.add_route(host1.get_netpoint(), host2.get_netpoint(), None, None, [LinkInRoute(link1)], False)
67 dijkstra.add_route(host2.get_netpoint(), host1.get_netpoint(), None, None, [LinkInRoute(link2)], False)
71 vivaldi = NetZone.create_vivaldi_zone("vivaldi")
72 this_actor.info(msg_base + vivaldi.name)
73 vivaldi.set_parent(root)
74 host3 = vivaldi.create_host("host3", 1e9).set_coordinates("1 1 1").seal()
75 host4 = vivaldi.create_host("host4", "1Gf").set_coordinates("2 2 2").seal()
80 empty = NetZone.create_empty_zone("empty")
81 this_actor.info(msg_base + empty.name)
82 empty.set_parent(root)
83 host5 = empty.create_host("host5", 1e9)
88 wifi = NetZone.create_wifi_zone("wifi")
89 this_actor.info(msg_base + wifi.name)
91 router = wifi.create_router("wifi_router")
92 wifi.set_property("access_point", "wifi_router")
93 host6 = wifi.create_host(
94 "host6", ["100.0Mf", "50.0Mf", "20.0Mf"]).seal()
96 wifi_link = wifi.create_link("AP1", ["54Mbps", "36Mbps", "24Mbps"]).seal()
97 wifi_link.set_host_wifi_rate(host6, 1)
100 # create routes between netzones
101 link_a = vivaldi.create_link("linkA", 1e9).seal()
102 link_b = vivaldi.create_link("linkB", "1GBps").seal()
103 link_c = vivaldi.create_link("linkC", "1GBps").seal()
104 root.add_route(dijkstra.get_netpoint(), vivaldi.get_netpoint(
105 ), host1.get_netpoint(), host3.get_netpoint(), [LinkInRoute(link_a)], True)
106 root.add_route(vivaldi.get_netpoint(), empty.get_netpoint(
107 ), host3.get_netpoint(), host5.get_netpoint(), [LinkInRoute(link_b)], True)
108 root.add_route(empty.get_netpoint(), wifi.get_netpoint(
109 ), host5.get_netpoint(), router, [LinkInRoute(link_c)], True)
111 # create actors Sender/Receiver
112 Actor.create("sender", hosts[0], Sender(hosts))
114 Actor.create("receiver", host, Receiver())
116 ###################################################################################################
118 if __name__ == '__main__':
124 # runs the simulation