Exemplo n.º 1
0
    def get_run_data(self):
        obs_end_time = self.net.get_cur_time()

        #obs_dur = obs_end_time - self.obs_start_time
        # print("Got %d acks in %f seconds" % (self.acked, obs_dur))
        # print("Sent %d packets in %f seconds" % (self.sent, obs_dur))
        # print("self.rate = %f" % self.rate)
        # print(self.acked, self.sent)
        # print(self.rtt_samples)
        if self.got_data:
            return sender_obs.SenderMonitorInterval(
                self.id,
                bytes_sent=self.sent * BYTES_PER_PACKET,
                bytes_acked=self.acked * BYTES_PER_PACKET,
                bytes_lost=self.lost * BYTES_PER_PACKET,
                # send_start=self.first_pkt_send_time,
                # send_end=self.last_pkt_send_time,
                # recv_start=self.first_pkt_ack_time,
                # recv_end=self.last_pkt_ack_time,
                send_start=self.obs_start_time,
                send_end=obs_end_time,
                recv_start=self.obs_start_time,
                recv_end=obs_end_time,
                rtt_samples=self.rtt_samples,
                packet_size=BYTES_PER_PACKET
            )
        else:
            global start_int_id
            start_int_id += 1
            print([self.net.links[0].dl * 2 - 0.0001 * start_int_id])
            return sender_obs.SenderMonitorInterval(
                self.id,
                bytes_sent=self.sent * BYTES_PER_PACKET,
                bytes_acked=self.sent * BYTES_PER_PACKET,
                bytes_lost=0 * BYTES_PER_PACKET,
                send_start=self.obs_start_time,
                send_end=obs_end_time,
                recv_start=self.obs_start_time,
                recv_end=obs_end_time,
                rtt_samples=[self.net.links[0].dl * 2- 0.0003 * i for i in range(5)],
                packet_size=BYTES_PER_PACKET
            )
Exemplo n.º 2
0
 def give_sample(self, bytes_sent, bytes_acked, bytes_lost, send_start_time,
                 send_end_time, recv_start_time, recv_end_time, rtt_samples,
                 packet_size, utility):
     self.record_observation(
         sender_obs.SenderMonitorInterval(self.id,
                                          bytes_sent=bytes_sent,
                                          bytes_acked=bytes_acked,
                                          bytes_lost=bytes_lost,
                                          send_start=send_start_time,
                                          send_end=send_end_time,
                                          recv_start=recv_start_time,
                                          recv_end=recv_end_time,
                                          rtt_samples=rtt_samples,
                                          packet_size=packet_size))
Exemplo n.º 3
0
    def get_run_data(self):
        assert self.net
        obs_end_time = self.net.get_cur_time()

        #obs_dur = obs_end_time - self.obs_start_time
        #print("Got %d acks in %f seconds" % (self.acked, obs_dur))
        #print("Sent %d packets in %f seconds" % (self.sent, obs_dur))
        #print("self.rate = %f" % self.rate)
        # print(self.acked, self.sent)
        if not self.rtt_samples and self.prev_rtt_samples:
            rtt_samples = [np.mean(np.array(self.prev_rtt_samples))]
        else:
            rtt_samples = self.rtt_samples
        # if not self.rtt_samples:
        #     print(self.obs_start_time, obs_end_time, self.rate)
        # rtt_samples is empty when there is no packet acked in MI
        # Solution: inherit from previous rtt_samples.

        # recv_start = self.rtt_samples_ts[0] if len(
        #     self.rtt_samples) >= 2 else self.obs_start_time
        recv_start = self.history.back().recv_end if len(
            self.rtt_samples) >= 1 else self.obs_start_time
        recv_end = self.rtt_samples_ts[-1] if len(
            self.rtt_samples) >= 1 else obs_end_time
        bytes_acked = self.acked * BYTES_PER_PACKET
        if recv_start == 0:
            recv_start = self.rtt_samples_ts[0]
            bytes_acked = (self.acked - 1) * BYTES_PER_PACKET

        # bytes_acked = max(0, (self.acked-1)) * BYTES_PER_PACKET if len(
        #     self.rtt_samples) >= 2 else self.acked * BYTES_PER_PACKET
        return sender_obs.SenderMonitorInterval(
            self.id,
            bytes_sent=self.sent * BYTES_PER_PACKET,
            # max(0, (self.acked-1)) * BYTES_PER_PACKET,
            # bytes_acked=self.acked * BYTES_PER_PACKET,
            bytes_acked=bytes_acked,
            bytes_lost=self.lost * BYTES_PER_PACKET,
            send_start=self.obs_start_time,
            send_end=obs_end_time,
            # recv_start=self.obs_start_time,
            # recv_end=obs_end_time,
            recv_start=recv_start,
            recv_end=recv_end,
            rtt_samples=rtt_samples,
            queue_delay_samples=self.queue_delay_samples,
            packet_size=BYTES_PER_PACKET
        )
Exemplo n.º 4
0
 def give_sample(self, bytes_sent, bytes_acked, bytes_lost, send_start_time,
                 send_end_time, recv_start_time, recv_end_time, rtt_samples,
                 packet_size, utility):
     self.record_observation(
         sender_obs.SenderMonitorInterval(
             self.id,
             bytes_sent=bytes_sent,
             bytes_acked=bytes_acked,
             bytes_lost=bytes_lost,
             send_start=send_start_time,
             send_end=send_end_time,
             recv_start=recv_start_time,
             recv_end=recv_end_time,
             rtt_samples=rtt_samples,
             packet_size=packet_size,  #sender_obs.MAXIMUM_SEGMENT_SIZE,
         ))
     self.mi_pushed = True
Exemplo n.º 5
0
    def get_run_data(self):
        obs_end_time = self.net.get_cur_time()

        # obs_dur = obs_end_time - self.obs_start_time
        # print("Got %d acks in %f seconds" % (self.acked, obs_dur))
        # print("Sent %d packets in %f seconds" % (self.sent, obs_dur))
        # print("self.rate = %f" % self.rate)

        return sender_obs.SenderMonitorInterval(
            self.id,
            bytes_sent=self.sent * BYTES_PER_PACKET,
            bytes_acked=self.acked * BYTES_PER_PACKET,
            bytes_lost=self.lost * BYTES_PER_PACKET,
            send_start=self.obs_start_time,
            send_end=obs_end_time,
            recv_start=self.obs_start_time,
            recv_end=obs_end_time,
            rtt_samples=self.rtt_samples,
            packet_size=BYTES_PER_PACKET)
Exemplo n.º 6
0
    def get_run_data(self):
        obs_end_time = self.get_cur_time()

        if not self.rtt_samples and self.prev_rtt_samples:
            rtt_samples = [np.mean(self.prev_rtt_samples)]
        else:
            rtt_samples = self.rtt_samples
        # rtt_samples is empty when there is no packet acked in MI
        # Solution: inherit from previous rtt_samples.

        # recv_start = self.rtt_samples_ts[0] if len(
        #     self.rtt_samples) >= 2 else self.obs_start_time
        recv_start = self.history.back().recv_end if len(
            self.rtt_samples) >= 1 else self.obs_start_time
        recv_end = self.rtt_samples_ts[-1] if len(
            self.rtt_samples) >= 1 else obs_end_time
        bytes_acked = self.acked * BYTES_PER_PACKET
        if recv_start == 0:
            recv_start = self.rtt_samples_ts[0]
            bytes_acked = (self.acked - 1) * BYTES_PER_PACKET

        # bytes_acked = max(0, (self.acked-1)) * BYTES_PER_PACKET if len(
        #     self.rtt_samples) >= 2 else self.acked * BYTES_PER_PACKET
        return sender_obs.SenderMonitorInterval(
            self.sender_id,
            bytes_sent=self.sent * BYTES_PER_PACKET,
            # max(0, (self.acked-1)) * BYTES_PER_PACKET,
            # bytes_acked=self.acked * BYTES_PER_PACKET,
            bytes_acked=bytes_acked,
            bytes_lost=self.lost * BYTES_PER_PACKET,
            send_start=self.obs_start_time,
            send_end=obs_end_time,
            # recv_start=self.obs_start_time,
            # recv_end=obs_end_time,
            recv_start=recv_start,
            recv_end=recv_end,
            rtt_samples=rtt_samples,
            queue_delay_samples=self.queue_delay_samples,
            packet_size=BYTES_PER_PACKET
        )
Exemplo n.º 7
0
    def step(self, action):
        if self.conn is None:
            print("Listening for connection from network sender")
            self.sock.listen()
            self.conn, self.addr = self.sock.accept()
        self.apply_action(action[0])
        self.conn.send(str(self.rate).encode())
        data = self.conn.recv(1024).decode()
        data = data.split("\n")[-2]
        vals = data.split(";")
        flow_id = int(vals[0])
        bytes_sent = int(vals[1])
        bytes_acked = int(vals[2])
        bytes_lost = int(vals[3])
        send_start_time = float(vals[4])
        send_end_time = float(vals[5])
        recv_start_time = float(vals[6])
        recv_end_time = float(vals[7])
        rtt_samples = [float(rtt) for rtt in ast.literal_eval(vals[8])]
        packet_size = int(vals[9])
        rew = float(vals[10])

        self.history.step(
            sender_obs.SenderMonitorInterval(flow_id,
                                             bytes_sent=bytes_sent,
                                             bytes_acked=bytes_acked,
                                             bytes_lost=bytes_lost,
                                             send_start=send_start_time,
                                             send_end=send_end_time,
                                             recv_start=recv_start_time,
                                             recv_end=recv_end_time,
                                             rtt_samples=rtt_samples,
                                             packet_size=packet_size))
        self.reward_sum += rew
        self.steps_taken += 1
        done = (self.steps_taken > RESET_INTERVAL)
        return self.history.as_array(), rew, done, {}