<div dir="ltr"><div class="gmail_default"><div class="gmail_default" style><font color="#000000" face="arial, helvetica, sans-serif">I have a function called act_like_switch which uses a databased backed architecture.If I come across a packet whose source address is not in the database I insert the <src_packet,port_no> into the database.Then I do a query of the destination address in the database and retrive the port_no from the database and then send out the packet.</font></div>

<div class="gmail_default" style><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default" style><font color="#000000" face="arial, helvetica, sans-serif">As you can see in the code below I measure the time taken for insert and query.I also record the counts as well.Apparently the average number of inserts is 30 per seconds and the average number of queries is 700 per seconds.This is very low for my application.Are there any ways to improve this numbers? Am I doing anything wrong?</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default">

<font color="#000000" face="arial, helvetica, sans-serif"> def act_like_switch (self, packet, packet_in):</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    """</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    Implement switch-like behavior.</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    """</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    # Learn the port for the source MAC</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    #print "RECIEVED FROM PORT ",packet_in.in_port , "SOURCE ",packet.src ,"DEST" , packet.dst</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    self.mac_to_port[packet.src]=packet_in.in_port</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    start = time.time()</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    r_res = session.query(SourcetoPort).filter_by(src_address=str(packet.src)).first()</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    if r_res is None:</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        entry = SourcetoPort(src_address=str(packet.src) , port_no=packet_in.in_port)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        #print "inserting src addr",str(packet.src),"port",str(packet_in.in_port)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        #add the record to the session object</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        session.add(entry)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        #add the record to the session object</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        session.commit()</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        end = time.time()</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        self.total_ins_time += (end - start)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">        self.total_ins_count+=1;</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    start = time.time()</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    q_res = session.query(SourcetoPort).filter_by(src_address=str(packet.dst)).first()</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    self.total_query_count+=1;</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    end = time.time()</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    self.total_query_time += (end - start)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    if q_res is not None:</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #print "retrieve from database",q_res.src_address,"port_no",q_res.port_no</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           self.send_packet(packet_in.buffer_id, packet_in.data,q_res.port_no, packet_in.in_port)</font></div><div class="gmail_default">

<font color="#000000" face="arial, helvetica, sans-serif">           #create a flow modification message</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #msg = of.ofp_flow_mod()</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #set the fields to match from the incoming packet</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #msg.match = of.ofp_match.from_packet(packet)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #send the rule to the switch so that it does not query the controller again.</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #msg.actions.append(of.ofp_action_output(port=q_res.port_no))</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #push the rule</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #self.connection.send(msg)</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">    else:</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           #flood this packet out as we don't know about this node.</font></div>

<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">           self.send_packet(packet_in.buffer_id, packet_in.data,of.OFPP_FLOOD, packet_in.in_port)</font></div><div class="gmail_default">

<font color="#000000" face="arial, helvetica, sans-serif">           #print "flooding src addr",str(packet.src),"dst addr",str(packet.dst)      </font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"><br>

</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default" style><font color="#000000" face="arial, helvetica, sans-serif">Regards,</font></div>

<div class="gmail_default" style><font color="#000000" face="arial, helvetica, sans-serif">Karthik.</font></div></div></div>