From 7d29227a65c6a0efff13ea4784307b4f686a3d66 Mon Sep 17 00:00:00 2001 From: Youngjoon Lee <5462944+youngjoon-lee@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:10:09 +0900 Subject: [PATCH] lower cover traffic rate --- mixnet/ordering/src/bin/aggregate.rs | 1 + mixnet/ordering/src/iteration.rs | 7 +++- mixnet/ordering/src/paramset.rs | 63 ++++++++++++++++------------ 3 files changed, 44 insertions(+), 27 deletions(-) diff --git a/mixnet/ordering/src/bin/aggregate.rs b/mixnet/ordering/src/bin/aggregate.rs index 29c54c9..d227de8 100644 --- a/mixnet/ordering/src/bin/aggregate.rs +++ b/mixnet/ordering/src/bin/aggregate.rs @@ -23,6 +23,7 @@ fn aggregate(path: &str) { schema.with_column("sender_data_msg_interval".into(), DataType::Float32); schema.with_column("mix_data_msg_prob".into(), DataType::Float32); schema.with_column("num_mixes_sending_data".into(), DataType::Int64); + schema.with_column("mix_data_msg_interval".into(), DataType::Float32); schema.with_column("queue_type".into(), DataType::String); schema.with_column("num_iterations".into(), DataType::Int64); diff --git a/mixnet/ordering/src/iteration.rs b/mixnet/ordering/src/iteration.rs index 56aa273..17eaf5f 100644 --- a/mixnet/ordering/src/iteration.rs +++ b/mixnet/ordering/src/iteration.rs @@ -83,6 +83,7 @@ impl Iteration { // Virtual discrete time let mut vtime: f32 = 0.0; let mut recent_vtime_sent_data_msg_by_sender: f32 = 0.0; + let mut recent_vtime_sent_data_msg_by_mix: f32 = 0.0; let mut recent_vtime_queue_data_msg_count_measured: f32 = 0.0; // Transmission interval that each queue must release a message let transmission_interval = 1.0 / paramset.transmission_rate; @@ -145,7 +146,11 @@ impl Iteration { } // Each mix node add a new data message to its queue with a certain probability - if paramset.mix_data_msg_prob > 0.0 { + if paramset.mix_data_msg_prob > 0.0 + && vtime - recent_vtime_sent_data_msg_by_mix >= paramset.mix_data_msg_interval + { + recent_vtime_sent_data_msg_by_mix = vtime; + if (paramset.num_mixes_sending_data as usize) == mixnodes.len() { for node in mixnodes.iter_mut() { Self::try_mixnode_send_data( diff --git a/mixnet/ordering/src/paramset.rs b/mixnet/ordering/src/paramset.rs index 660b3ee..772052d 100644 --- a/mixnet/ordering/src/paramset.rs +++ b/mixnet/ordering/src/paramset.rs @@ -69,6 +69,7 @@ pub const PARAMSET_CSV_COLUMNS: &[&str] = &[ "sender_data_msg_interval", "mix_data_msg_prob", "num_mixes_sending_data", + "mix_data_msg_interval", "queue_type", "num_iterations", ]; @@ -89,6 +90,7 @@ pub struct ParamSet { pub sender_data_msg_interval: Option, pub mix_data_msg_prob: f32, pub num_mixes_sending_data: u32, + pub mix_data_msg_interval: f32, pub queue_type: QueueType, pub num_iterations: usize, } @@ -177,6 +179,7 @@ impl ParamSet { sender_data_msg_interval: None, mix_data_msg_prob, num_mixes_sending_data: num_mixes, + mix_data_msg_interval: 1.0 / transmission_rate, queue_type, num_iterations: 1, }; @@ -207,6 +210,7 @@ impl ParamSet { sender_data_msg_interval: None, mix_data_msg_prob, num_mixes_sending_data: num_mixes, + mix_data_msg_interval: 1.0 / transmission_rate, queue_type, num_iterations: 10, }; @@ -254,6 +258,7 @@ impl ParamSet { sender_data_msg_interval: None, mix_data_msg_prob: 1.0, num_mixes_sending_data, + mix_data_msg_interval: 1.0 / transmission_rate, queue_type, num_iterations: 10, }; @@ -273,6 +278,7 @@ impl ParamSet { } fn new_session3_paramsets(exp_id: ExperimentId, queue_type: QueueType) -> Vec { + let transmission_rate: f32 = 1.0; let sender_data_msg_probs: &[f32] = match exp_id { ExperimentId::Experiment5 => &[0.01, 0.1, 0.5, 0.9, 0.99, 1.0], ExperimentId::Experiment6 => &[0.01, 0.1, 0.5], @@ -311,7 +317,7 @@ impl ParamSet { (24, 0.007), ]), min_queue_size: 10, - transmission_rate: 1.0, + transmission_rate, num_senders: 1, num_sender_msgs: match exp_id { ExperimentId::Experiment6 => 10000, @@ -322,6 +328,7 @@ impl ParamSet { sender_data_msg_interval: None, mix_data_msg_prob, num_mixes_sending_data: num_mixes, + mix_data_msg_interval: 1.0 / transmission_rate, queue_type, num_iterations: 10, }; @@ -342,31 +349,34 @@ impl ParamSet { let mut id: u16 = 1; let mut paramsets: Vec = Vec::new(); match exp_id { - ExperimentId::Experiment6 => { - for num_mixes in [1000, 10000, 100000] { + ExperimentId::Experiment7 => { + for num_mixes in [100, 1000, 10000, 100000] { for peering_degree in [8, 6, 4] { for transmission_rate in [1.0] { - for mix_data_msg_prob in [0.001, 0.005, 0.01] { - let paramset = ParamSet { - id, - num_mixes, - num_paths: 0, // since we're gonna build random topology - random_topology: true, - peering_degree: PeeringDegree::Fixed(peering_degree), - min_queue_size: 10, - transmission_rate, - num_senders: 1, - num_sender_msgs: 0, - num_sender_data_msgs: Some(50), - sender_data_msg_prob: 1.0, - sender_data_msg_interval: Some(20.0), - mix_data_msg_prob, - num_mixes_sending_data: num_mixes, - queue_type, - num_iterations: 10, - }; - id += 1; - paramsets.push(paramset); + for mix_data_msg_interval in [1.0, 2.0, 3.0] { + for num_mixes_sending_data in [0, 1] { + let paramset = ParamSet { + id, + num_mixes, + num_paths: 0, // since we're gonna build random topology + random_topology: true, + peering_degree: PeeringDegree::Fixed(peering_degree), + min_queue_size: 10, + transmission_rate, + num_senders: 1, + num_sender_msgs: 0, + num_sender_data_msgs: Some(50), + sender_data_msg_prob: 1.0, + sender_data_msg_interval: Some(20.0), + mix_data_msg_prob: 1.0, + num_mixes_sending_data, + mix_data_msg_interval, + queue_type, + num_iterations: 10, + }; + id += 1; + paramsets.push(paramset); + } } } } @@ -415,6 +425,7 @@ impl ParamSet { }, self.mix_data_msg_prob.to_string(), self.num_mixes_sending_data.to_string(), + self.mix_data_msg_interval.to_string(), format!("{:?}", self.queue_type), self.num_iterations.to_string(), ] @@ -455,8 +466,8 @@ mod tests { ((ExperimentId::Experiment5, SessionId::Session3), 6), ((ExperimentId::Experiment6, SessionId::Session3), 3 * 3), ( - (ExperimentId::Experiment6, SessionId::Session100), - 3 * 6 * 7 * 3, + (ExperimentId::Experiment7, SessionId::Session100), + 4 * 3 * 3 * 2, ), ];