diff mbox series

[7/7] Optimized the function of fill_connection_key.

Message ID 1623898035-18533-8-git-send-email-lei.rao@intel.com (mailing list archive)
State New, archived
Headers show
Series Fixed some bugs and optimized some codes for COLO | expand

Commit Message

Rao, Lei June 17, 2021, 2:47 a.m. UTC
From: "Rao, Lei" <lei.rao@intel.com>

Remove some unnecessary code to improve the performance of
the filter-rewriter module.

Signed-off-by: Lei Rao <lei.rao@intel.com>
---
 net/colo-compare.c    |  2 +-
 net/colo.c            | 31 ++++++++++++-------------------
 net/colo.h            |  6 +++---
 net/filter-rewriter.c | 10 +---------
 4 files changed, 17 insertions(+), 32 deletions(-)

Comments

Zhang, Chen July 28, 2021, 6:25 a.m. UTC | #1
> -----Original Message-----
> From: Rao, Lei <lei.rao@intel.com>
> Sent: Thursday, June 17, 2021 10:47 AM
> To: Zhang, Chen <chen.zhang@intel.com>; lizhijian@cn.fujitsu.com;
> jasowang@redhat.com; zhang.zhanghailiang@huawei.com;
> quintela@redhat.com; dgilbert@redhat.com; lukasstraub2@web.de
> Cc: like.xu.linux@gmail.com; qemu-devel@nongnu.org; Rao, Lei
> <lei.rao@intel.com>
> Subject: [PATCH 7/7] Optimized the function of fill_connection_key.
> 
> From: "Rao, Lei" <lei.rao@intel.com>
> 
> Remove some unnecessary code to improve the performance of the filter-
> rewriter module.
> 
> Signed-off-by: Lei Rao <lei.rao@intel.com>

Looks good to me.
Reviewed-by: Zhang Chen <chen.zhang@intel.com>

Thanks
Chen

> ---
>  net/colo-compare.c    |  2 +-
>  net/colo.c            | 31 ++++++++++++-------------------
>  net/colo.h            |  6 +++---
>  net/filter-rewriter.c | 10 +---------
>  4 files changed, 17 insertions(+), 32 deletions(-)
> 
> diff --git a/net/colo-compare.c b/net/colo-compare.c index
> 4a64a5d..6a1354d 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -264,7 +264,7 @@ static int packet_enqueue(CompareState *s, int
> mode, Connection **con)
>          pkt = NULL;
>          return -1;
>      }
> -    fill_connection_key(pkt, &key);
> +    fill_connection_key(pkt, &key, 0);
> 
>      conn = connection_get(s->connection_track_table,
>                            &key,
> diff --git a/net/colo.c b/net/colo.c
> index 3a3e6e8..5e7232c 100644
> --- a/net/colo.c
> +++ b/net/colo.c
> @@ -83,19 +83,26 @@ int parse_packet_early(Packet *pkt)
>      return 0;
>  }
> 
> -void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet
> *pkt)
> +void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key,
> +                         Packet *pkt, int reverse)
>  {
> +    if (reverse) {
> +        key->src = pkt->ip->ip_dst;
> +        key->dst = pkt->ip->ip_src;
> +        key->src_port = ntohs(tmp_ports & 0xffff);
> +        key->dst_port = ntohs(tmp_ports >> 16);
> +    } else {
>          key->src = pkt->ip->ip_src;
>          key->dst = pkt->ip->ip_dst;
>          key->src_port = ntohs(tmp_ports >> 16);
>          key->dst_port = ntohs(tmp_ports & 0xffff);
> +    }
>  }
> 
> -void fill_connection_key(Packet *pkt, ConnectionKey *key)
> +void fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse)
>  {
> -    uint32_t tmp_ports;
> +    uint32_t tmp_ports = 0;
> 
> -    memset(key, 0, sizeof(*key));
>      key->ip_proto = pkt->ip->ip_p;
> 
>      switch (key->ip_proto) {
> @@ -106,29 +113,15 @@ void fill_connection_key(Packet *pkt,
> ConnectionKey *key)
>      case IPPROTO_SCTP:
>      case IPPROTO_UDPLITE:
>          tmp_ports = *(uint32_t *)(pkt->transport_header);
> -        extract_ip_and_port(tmp_ports, key, pkt);
>          break;
>      case IPPROTO_AH:
>          tmp_ports = *(uint32_t *)(pkt->transport_header + 4);
> -        extract_ip_and_port(tmp_ports, key, pkt);
>          break;
>      default:
>          break;
>      }
> -}
> -
> -void reverse_connection_key(ConnectionKey *key) -{
> -    struct in_addr tmp_ip;
> -    uint16_t tmp_port;
> -
> -    tmp_ip = key->src;
> -    key->src = key->dst;
> -    key->dst = tmp_ip;
> 
> -    tmp_port = key->src_port;
> -    key->src_port = key->dst_port;
> -    key->dst_port = tmp_port;
> +    extract_ip_and_port(tmp_ports, key, pkt, reverse);
>  }
> 
>  Connection *connection_new(ConnectionKey *key) diff --git a/net/colo.h
> b/net/colo.h index d91cd24..5f4d502 100644
> --- a/net/colo.h
> +++ b/net/colo.h
> @@ -89,9 +89,9 @@ typedef struct Connection {  uint32_t
> connection_key_hash(const void *opaque);  int
> connection_key_equal(const void *opaque1, const void *opaque2);  int
> parse_packet_early(Packet *pkt); -void extract_ip_and_port(uint32_t
> tmp_ports, ConnectionKey *key, Packet *pkt); -void
> fill_connection_key(Packet *pkt, ConnectionKey *key); -void
> reverse_connection_key(ConnectionKey *key);
> +void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key,
> +                         Packet *pkt, int reverse); void
> +fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse);
>  Connection *connection_new(ConnectionKey *key);  void
> connection_destroy(void *opaque);  Connection
> *connection_get(GHashTable *connection_track_table, diff --git
> a/net/filter-rewriter.c b/net/filter-rewriter.c index cb3a96c..bf05023 100644
> --- a/net/filter-rewriter.c
> +++ b/net/filter-rewriter.c
> @@ -279,15 +279,7 @@ static ssize_t
> colo_rewriter_receive_iov(NetFilterState *nf,
>       */
>      if (pkt && is_tcp_packet(pkt)) {
> 
> -        fill_connection_key(pkt, &key);
> -
> -        if (sender == nf->netdev) {
> -            /*
> -             * We need make tcp TX and RX packet
> -             * into one connection.
> -             */
> -            reverse_connection_key(&key);
> -        }
> +        fill_connection_key(pkt, &key, sender == nf->netdev);
> 
>          /* After failover we needn't change new TCP packet */
>          if (s->failover_mode &&
> --
> 1.8.3.1
diff mbox series

Patch

diff --git a/net/colo-compare.c b/net/colo-compare.c
index 4a64a5d..6a1354d 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -264,7 +264,7 @@  static int packet_enqueue(CompareState *s, int mode, Connection **con)
         pkt = NULL;
         return -1;
     }
-    fill_connection_key(pkt, &key);
+    fill_connection_key(pkt, &key, 0);
 
     conn = connection_get(s->connection_track_table,
                           &key,
diff --git a/net/colo.c b/net/colo.c
index 3a3e6e8..5e7232c 100644
--- a/net/colo.c
+++ b/net/colo.c
@@ -83,19 +83,26 @@  int parse_packet_early(Packet *pkt)
     return 0;
 }
 
-void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *pkt)
+void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key,
+                         Packet *pkt, int reverse)
 {
+    if (reverse) {
+        key->src = pkt->ip->ip_dst;
+        key->dst = pkt->ip->ip_src;
+        key->src_port = ntohs(tmp_ports & 0xffff);
+        key->dst_port = ntohs(tmp_ports >> 16);
+    } else {
         key->src = pkt->ip->ip_src;
         key->dst = pkt->ip->ip_dst;
         key->src_port = ntohs(tmp_ports >> 16);
         key->dst_port = ntohs(tmp_ports & 0xffff);
+    }
 }
 
-void fill_connection_key(Packet *pkt, ConnectionKey *key)
+void fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse)
 {
-    uint32_t tmp_ports;
+    uint32_t tmp_ports = 0;
 
-    memset(key, 0, sizeof(*key));
     key->ip_proto = pkt->ip->ip_p;
 
     switch (key->ip_proto) {
@@ -106,29 +113,15 @@  void fill_connection_key(Packet *pkt, ConnectionKey *key)
     case IPPROTO_SCTP:
     case IPPROTO_UDPLITE:
         tmp_ports = *(uint32_t *)(pkt->transport_header);
-        extract_ip_and_port(tmp_ports, key, pkt);
         break;
     case IPPROTO_AH:
         tmp_ports = *(uint32_t *)(pkt->transport_header + 4);
-        extract_ip_and_port(tmp_ports, key, pkt);
         break;
     default:
         break;
     }
-}
-
-void reverse_connection_key(ConnectionKey *key)
-{
-    struct in_addr tmp_ip;
-    uint16_t tmp_port;
-
-    tmp_ip = key->src;
-    key->src = key->dst;
-    key->dst = tmp_ip;
 
-    tmp_port = key->src_port;
-    key->src_port = key->dst_port;
-    key->dst_port = tmp_port;
+    extract_ip_and_port(tmp_ports, key, pkt, reverse);
 }
 
 Connection *connection_new(ConnectionKey *key)
diff --git a/net/colo.h b/net/colo.h
index d91cd24..5f4d502 100644
--- a/net/colo.h
+++ b/net/colo.h
@@ -89,9 +89,9 @@  typedef struct Connection {
 uint32_t connection_key_hash(const void *opaque);
 int connection_key_equal(const void *opaque1, const void *opaque2);
 int parse_packet_early(Packet *pkt);
-void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *pkt);
-void fill_connection_key(Packet *pkt, ConnectionKey *key);
-void reverse_connection_key(ConnectionKey *key);
+void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key,
+                         Packet *pkt, int reverse);
+void fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse);
 Connection *connection_new(ConnectionKey *key);
 void connection_destroy(void *opaque);
 Connection *connection_get(GHashTable *connection_track_table,
diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
index cb3a96c..bf05023 100644
--- a/net/filter-rewriter.c
+++ b/net/filter-rewriter.c
@@ -279,15 +279,7 @@  static ssize_t colo_rewriter_receive_iov(NetFilterState *nf,
      */
     if (pkt && is_tcp_packet(pkt)) {
 
-        fill_connection_key(pkt, &key);
-
-        if (sender == nf->netdev) {
-            /*
-             * We need make tcp TX and RX packet
-             * into one connection.
-             */
-            reverse_connection_key(&key);
-        }
+        fill_connection_key(pkt, &key, sender == nf->netdev);
 
         /* After failover we needn't change new TCP packet */
         if (s->failover_mode &&