return c
- def generate_conversation_sequences(self, scale, duration, replay_speed=1,
+ def scale_to_packet_rate(self, scale):
+ rate_n, rate_t = self.packet_rate
+ return scale * rate_n / rate_t
+
+ def packet_rate_to_scale(self, pps):
+ rate_n, rate_t = self.packet_rate
+ return pps * rate_t / rate_n
+
+ def generate_conversation_sequences(self, packet_rate, duration, replay_speed=1,
persistence=0):
"""Generate a list of conversation descriptions from the model."""
# We run the simulation for ten times as long as our desired
# duration, and take the section at the end.
lead_in = 9 * duration
- rate_n, rate_t = self.packet_rate
- target_packets = int(duration * scale * rate_n / rate_t)
-
+ target_packets = int(packet_rate * duration)
conversations = []
n_packets = 0
conversations.append(c)
n_packets += len(c)
- print(("we have %d packets (target %d) in %d conversations at scale %f"
- % (n_packets, target_packets, len(conversations), scale)),
+ scale = self.packet_rate_to_scale(packet_rate)
+ print(("we have %d packets (target %d) in %d conversations at %.1f/s "
+ "(scale %f)" % (n_packets, target_packets, len(conversations),
+ packet_rate, scale)),
file=sys.stderr)
conversations.sort() # sorts by first element == start time
return conversations
'These options alter the traffic '
'generated by the model')
model_group.add_option('-S', '--scale-traffic', type='float', default=1.0,
- help='Increase the number of conversations by '
- 'this factor')
+ help=('Increase the number of conversations by '
+ 'this factor (or use -T)'))
+ parser.add_option('-T', '--packets-per-second', type=float,
+ help=('attempt this many packets per second '
+ '(alternative to -S)'))
parser.add_option('--old-scale',
action="store_true",
help='emulate the old scale for traffic')
logger.error("--group-memberships requires --number-of-groups")
sys.exit(1)
+ if opts.scale_traffic is not None and opts.packets_per_second is not None:
+ logger.error("--scale-traffic and --packets-per-second "
+ "are incompatible. Use one or the other.")
+ sys.exit(1)
+
if opts.timing_data not in ('-', None):
try:
open(opts.timing_data, 'w').close()
logger.info(("Using the specified model file to "
"generate conversations"))
+ if opts.scale_traffic:
+ packets_per_second = model.scale_to_packet_rate(opts.scale_traffic)
+ else:
+ packets_per_second = opts.packets_per_second
+
conversations = \
model.generate_conversation_sequences(
- opts.scale_traffic,
+ packets_per_second,
opts.duration,
opts.replay_rate,
opts.conversation_persistence)