From 2e58207cf029ed382b013e2bdc7bee1fddf85879 Mon Sep 17 00:00:00 2001 From: Youngjoon Lee <5462944+youngjoon-lee@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:29:20 +0900 Subject: [PATCH] randomize network latency --- mixnet/sim/config.py | 14 ++++++++++++-- mixnet/sim/config.yaml | 4 +++- mixnet/sim/connection.py | 10 +++++----- mixnet/sim/simulation.py | 4 +++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/mixnet/sim/config.py b/mixnet/sim/config.py index 0c1e3f6..495dde3 100644 --- a/mixnet/sim/config.py +++ b/mixnet/sim/config.py @@ -38,11 +38,21 @@ class Config: @dataclass class SimulationConfig: duration_sec: int - net_latency_sec: float + network: NetworkConfig def validate(self): assert self.duration_sec > 0 - assert self.net_latency_sec > 0 + self.network.validate() + + +@dataclass +class NetworkConfig: + max_latency_sec: float + seed: random.Random + + def validate(self): + assert self.max_latency_sec > 0 + assert self.seed is not None @dataclass diff --git a/mixnet/sim/config.yaml b/mixnet/sim/config.yaml index 049d252..5dac3f3 100644 --- a/mixnet/sim/config.yaml +++ b/mixnet/sim/config.yaml @@ -1,6 +1,8 @@ simulation: duration_sec: 1000 - net_latency_sec: 0.01 + network: + max_latency_sec: 0.01 + seed: 0 logic: sender_lottery: diff --git a/mixnet/sim/connection.py b/mixnet/sim/connection.py index 36db151..9644707 100644 --- a/mixnet/sim/connection.py +++ b/mixnet/sim/connection.py @@ -5,12 +5,12 @@ import pandas from mixnet.connection import SimplexConnection from mixnet.framework.framework import Framework, Queue -from mixnet.sim.config import SimulationConfig +from mixnet.sim.config import NetworkConfig class MeteredRemoteSimplexConnection(SimplexConnection): framework: Framework - config: SimulationConfig + latency: float outputs: Queue conn: Queue inputs: Queue @@ -19,9 +19,9 @@ class MeteredRemoteSimplexConnection(SimplexConnection): input_task: Awaitable input_meters: list[int] - def __init__(self, config: SimulationConfig, framework: Framework): + def __init__(self, config: NetworkConfig, framework: Framework): self.framework = framework - self.config = config + self.latency = config.seed.random() * config.max_latency_sec self.outputs = framework.queue() self.conn = framework.queue() self.inputs = framework.queue() @@ -49,7 +49,7 @@ class MeteredRemoteSimplexConnection(SimplexConnection): data = await self.conn.get() if data is None: break - await self.framework.sleep(self.config.net_latency_sec) + await self.framework.sleep(self.latency) self.__update_meter(self.input_meters, len(data), start_time) await self.inputs.put(data) diff --git a/mixnet/sim/simulation.py b/mixnet/sim/simulation.py index 2d873fc..31aa2a1 100644 --- a/mixnet/sim/simulation.py +++ b/mixnet/sim/simulation.py @@ -64,7 +64,9 @@ class Simulation: return nodes, conn_stats def create_conn(self) -> MeteredRemoteSimplexConnection: - return MeteredRemoteSimplexConnection(self.config.simulation, self.framework) + return MeteredRemoteSimplexConnection( + self.config.simulation.network, self.framework + ) async def run_logic(self, node: Node): lottery_config = self.config.logic.sender_lottery