Use different matrix for wlan0 and eth0

This commit is contained in:
Loic Guegan 2022-06-10 18:01:51 +02:00
parent a857977702
commit 94b47ceab5
26 changed files with 71 additions and 57 deletions

66
esds.py
View file

@ -190,11 +190,13 @@ class Simulator:
one may not gives accurate results because of missing entries in the nodes received queues. one may not gives accurate results because of missing entries in the nodes received queues.
""" """
def __init__(self,B,L): def __init__(self,B_wlan0,L_wlan0,B_eth0,L_eth0):
self.B=B self.B_wlan0=B_wlan0
self.L=L self.L_wlan0=L_wlan0
self.B_eth0=B_eth0
self.L_eth0=L_eth0
self.nodes=list() self.nodes=list()
self.sharing=np.zeros(len(B)) self.sharing=np.zeros(len(B_eth0))
self.events=np.empty((0,4),dtype=object) self.events=np.empty((0,4),dtype=object)
self.events_dirty=True # For optimization reasons self.events_dirty=True # For optimization reasons
self.startat=-1 self.startat=-1
@ -205,31 +207,43 @@ class Simulator:
self.wait_end_nodes=list() # Keep track of nodes that wait for the end of the simulation self.wait_end_nodes=list() # Keep track of nodes that wait for the end of the simulation
self.time_truncated=format(self.time,self.precision) # Truncated version is used in log print self.time_truncated=format(self.time,self.precision) # Truncated version is used in log print
def update_network(self,B,L): def update_network(self,B_wlan0,L_wlan0,B_eth0,L_eth0):
for event in self.events: for event in self.events:
if int(event[0]) == 0: if int(event[0]) == 0:
cur_event=event[2] cur_event=event[2]
ts=float(event[1]) ts=float(event[1])
src_id,dst_id,interface, data, datasize,duration, datasize_remaining,start_at=cur_event src_id,dst_id,interface, data, datasize,duration, datasize_remaining,start_at=cur_event
new_bw=B[int(src_id),int(dst_id)] if interface == "wlan0":
old_bw=self.B[int(src_id),int(dst_id)] new_bw=B_wlan0[int(src_id),int(dst_id)]
new_lat=L[int(src_id),int(dst_id)] old_bw=self.B_wlan0[int(src_id),int(dst_id)]
old_lat=self.L[int(src_id),int(dst_id)] new_lat=L_wlan0[int(src_id),int(dst_id)]
if new_bw != old_bw or new_lat != old_lat: old_lat=self.L_wlan0[int(src_id),int(dst_id)]
new_datasize_remaining=float(datasize_remaining)*((ts-self.time)/float(duration)) if new_bw != old_bw or new_lat != old_lat:
if new_datasize_remaining > 0: new_datasize_remaining=float(datasize_remaining)*((ts-self.time)/float(duration))
latency_factor=new_datasize_remaining/float(datasize) if new_datasize_remaining > 0:
if interface == "wlan0": latency_factor=new_datasize_remaining/float(datasize)
new_duration=new_datasize_remaining*8/new_bw+new_lat*latency_factor new_duration=new_datasize_remaining*8/new_bw+new_lat*latency_factor
else: event[1]=self.time+new_duration
event[2][6]=new_datasize_remaining
event[2][5]=new_duration
else:
new_bw=B_eth0[int(src_id),int(dst_id)]
old_bw=self.B_eth0[int(src_id),int(dst_id)]
new_lat=L_eth0[int(src_id),int(dst_id)]
old_lat=self.L_eth0[int(src_id),int(dst_id)]
if new_bw != old_bw or new_lat != old_lat:
new_datasize_remaining=float(datasize_remaining)*((ts-self.time)/float(duration))
if new_datasize_remaining > 0:
latency_factor=new_datasize_remaining/float(datasize)
new_duration=new_datasize_remaining*8/(new_bw/self.sharing[int(dst_id)])+new_lat*latency_factor new_duration=new_datasize_remaining*8/(new_bw/self.sharing[int(dst_id)])+new_lat*latency_factor
event[1]=self.time+new_duration
event[2][6]=new_datasize_remaining
event[2][5]=new_duration
# print("DataSize {}B | DataSize Remaining {}B | Old duration {}s | New duration {}s | Latency {}s".format(datasize,new_datasize_remaining,duration,new_duration,new_lat)) self.B_wlan0=B_wlan0
event[1]=self.time+new_duration self.L_wlan0=L_wlan0
event[2][6]=new_datasize_remaining self.B_eth0=B_eth0
event[2][5]=new_duration self.L_eth0=L_eth0
self.B=B
self.L=L
def debug(self): def debug(self):
""" """
@ -451,9 +465,9 @@ class Simulator:
nsrc=self.nodes[src] nsrc=self.nodes[src]
if interface=="wlan0": if interface=="wlan0":
self.log("Send "+str(datasize)+" bytes on "+interface,node=src) self.log("Send "+str(datasize)+" bytes on "+interface,node=src)
for dst in self.list_receivers(nsrc): for dst in self.list_wireless_receivers(nsrc):
if self.nodes[dst]["turned_on"]: if self.nodes[dst]["turned_on"]:
duration=datasize*8/self.B[src,dst]+self.L[src,dst] duration=datasize*8/self.B_wlan0[src,dst]+self.L_wlan0[src,dst]
if src == dst: if src == dst:
self.add_event(0,duration+self.time,(src,dst,interface,data,datasize,duration,datasize,self.time)) self.add_event(0,duration+self.time,(src,dst,interface,data,datasize,duration,datasize,self.time))
elif not self.interferences: elif not self.interferences:
@ -465,17 +479,17 @@ class Simulator:
self.log("Send "+str(datasize)+" bytes to n"+str(dst)+" on "+interface,node=src) self.log("Send "+str(datasize)+" bytes to n"+str(dst)+" on "+interface,node=src)
self.update_sharing(dst,1) # Update sharing first self.update_sharing(dst,1) # Update sharing first
# Note that in the following we send more data than expected to handle bandwidth sharing (datasize*8*sharing): # Note that in the following we send more data than expected to handle bandwidth sharing (datasize*8*sharing):
duration=datasize*8/(self.B[src,dst]/self.sharing[dst])+self.L[src,dst] duration=datasize*8/(self.B_eth0[src,dst]/self.sharing[dst])+self.L_eth0[src,dst]
self.add_event(0,duration+self.time,(src,dst,interface,data,datasize,duration,datasize,self.time)) self.add_event(0,duration+self.time,(src,dst,interface,data,datasize,duration,datasize,self.time))
else: else:
nsrc["state"]="request" # Try later when node is on nsrc["state"]="request" # Try later when node is on
def list_receivers(self,node): def list_wireless_receivers(self,node):
""" """
Deduce reachable receivers from the bandwidth matrix Deduce reachable receivers from the bandwidth matrix
""" """
selector = self.B[node.node_id,] > 0 selector = self.B_wlan0[node.node_id,] > 0
return np.arange(0,selector.shape[0])[selector] return np.arange(0,selector.shape[0])[selector]

View file

@ -26,7 +26,7 @@ B=np.full((n,n),5) # 5Mbps
L=np.full((n,n),0) # 0s L=np.full((n,n),0) # 0s
##### Create the simulator ##### Create the simulator
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
##### Instantiate nodes ##### Instantiate nodes
uptime=180 # 180s uptime uptime=180 # 180s uptime

View file

@ -13,7 +13,7 @@ B[0,2]=0
B[2,0]=0 B[2,0]=0
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -26,13 +26,13 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B*2,simulator.L) simulator.update_network(simulator.B_wlan0*2,simulator.L_wlan0,simulator.B_eth0*2,simulator.L_eth0)
s.run(breakpoints_every=1/2,breakpoint_callback=callback) s.run(breakpoints_every=1/2,breakpoint_callback=callback)

View file

@ -28,7 +28,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")
@ -36,6 +36,6 @@ s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B*2,simulator.L) simulator.update_network(simulator.B_wlan0*2,simulator.L_wlan0,simulator.B_eth0*2,simulator.L_eth0)
s.run(breakpoints_every=1,breakpoint_callback=callback,debug=True) s.run(breakpoints_every=1,breakpoint_callback=callback,debug=True)

View file

@ -27,13 +27,13 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B,simulator.L+1/2) simulator.update_network(simulator.B_wlan0,simulator.L_wlan0+1/2,simulator.B_eth0,simulator.L_eth0+1/2)
s.run(breakpoints_every=1/2,breakpoint_callback=callback) s.run(breakpoints_every=1/2,breakpoint_callback=callback)

View file

@ -29,7 +29,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")
@ -37,6 +37,6 @@ s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B,simulator.L+0.5) simulator.update_network(simulator.B_wlan0,simulator.L_wlan0+0.5,simulator.B_eth0,simulator.L_eth0+0.5)
s.run(breakpoints_every=1,breakpoint_callback=callback,debug=True) s.run(breakpoints_every=1,breakpoint_callback=callback,debug=True)

View file

@ -26,13 +26,13 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B*2,simulator.L) simulator.update_network(simulator.B_wlan0*2,simulator.L_wlan0,simulator.B_eth0*2,simulator.L_eth0)
s.run(breakpoints_every=1/2,breakpoint_callback=callback) s.run(breakpoints_every=1/2,breakpoint_callback=callback)

View file

@ -27,13 +27,13 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")
def callback(simulator): def callback(simulator):
simulator.log("Network update!") simulator.log("Network update!")
simulator.update_network(simulator.B,simulator.L+1/2) simulator.update_network(simulator.B_wlan0,simulator.L_wlan0+1/2,simulator.B_eth0,simulator.L_eth0+1/2)
s.run(breakpoints_every=1/2,breakpoint_callback=callback) s.run(breakpoints_every=1/2,breakpoint_callback=callback)

View file

@ -9,7 +9,7 @@ import numpy as np
n=2 n=2
B=np.full((2,2),n) B=np.full((2,2),n)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -9,7 +9,7 @@ import numpy as np
n=2 n=2
B=np.full((n,n),n) B=np.full((n,n),n)
L=np.full((n,n),0) L=np.full((n,n),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -9,7 +9,7 @@ import numpy as np
n=2 n=2
B=np.full((n,n),n) B=np.full((n,n),n)
L=np.full((n,n),0) L=np.full((n,n),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((5,5),5) B=np.full((5,5),5)
L=np.full((5,5),0) L=np.full((5,5),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((2,2),2) B=np.full((2,2),2)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),3) B=np.full((3,3),3)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),3) B=np.full((3,3),3)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((4,4),8) B=np.full((4,4),8)
L=np.full((4,4),0) L=np.full((4,4),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("sender") s.create_node("sender")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((2,2),8) B=np.full((2,2),8)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),8) B=np.full((3,3),8)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("sender") s.create_node("sender")
s.create_node("receiver") s.create_node("receiver")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((2,2),2) B=np.full((2,2),2)
L=np.full((2,2),0) L=np.full((2,2),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")

View file

@ -8,7 +8,7 @@ import numpy as np
B=np.full((3,3),2) B=np.full((3,3),2)
L=np.full((3,3),0) L=np.full((3,3),0)
s=esds.Simulator(B,L) s=esds.Simulator(B,L,B,L)
s.create_node("node") s.create_node("node")
s.create_node("node") s.create_node("node")