【发布时间】:2021-07-23 22:29:30
【问题描述】:
我正在尝试模拟许多节点使用的网络链接在SimPy(python 库)上进行通信。我将网络设为simpy.Resource(env, 1),因为所有通信通道通常都是 FIFO。当节点需要发送数据时,它会请求网络资源,然后传输数据。
def transfer(env,data_size):
net_delay = data_size/WAN_BANDWIDTH
with network_queue.request() as req:
yield req
yield env.timeout(net_delay)
但正因为如此,传输大量数据的节点会占用通道,而小型传输会排队。我确信这不是真正的网络传输的工作方式。每次传输都会获得相等且分开的带宽。有什么解决这个问题的建议吗?
以下是我想出的。
def transfer(env,transfer_size):
transfer_size_remaining = transfer_size
while(transfer_size_remaining>0):
with network_queue.request() as request:
yield request
data_size = min(transfer_size_remaining,MTU)
yield env.timeout(data_size/WAN_BANDWIDTH)
transfer_size_remaining -= data_size
我将在每个请求中请求网络队列和MTU(1500 字节)字节数。我认为这应该自动使其循环并在所有正在传输数据的节点之间分配等量的带宽。
我的解决方案有什么问题吗?有没有更好的方法来做到这一点?或者是否有使用 SimPy 执行此操作的标准正确方法?
提前致谢!
【问题讨论】: