[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [PATCH 7/7] Optimized the function of fill_connection_key.
From: |
Zhang, Chen |
Subject: |
RE: [PATCH 7/7] Optimized the function of fill_connection_key. |
Date: |
Wed, 28 Jul 2021 06:25:56 +0000 |
> -----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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RE: [PATCH 7/7] Optimized the function of fill_connection_key.,
Zhang, Chen <=