On Wed, 13 Jan 2021 10:46:30 +0800 leirao <[email protected]> wrote: > From: "Rao, Lei" <[email protected]> > > if we put the data copy outside the packet_new(), then for the > filter-rewrite module, there will be one less memory copy in the > processing of each network packet. > > Signed-off-by: Lei Rao <[email protected]>
Looks good to me, Reviewed-by: Lukas Straub <[email protected]> > --- > net/colo-compare.c | 7 +++++-- > net/colo.c | 4 ++-- > net/colo.h | 2 +- > net/filter-rewriter.c | 1 - > 4 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/net/colo-compare.c b/net/colo-compare.c > index 9e18baa..8bdf5a8 100644 > --- a/net/colo-compare.c > +++ b/net/colo-compare.c > @@ -247,14 +247,17 @@ static int packet_enqueue(CompareState *s, int mode, > Connection **con) > ConnectionKey key; > Packet *pkt = NULL; > Connection *conn; > + char *data = NULL; > int ret; > > if (mode == PRIMARY_IN) { > - pkt = packet_new(s->pri_rs.buf, > + data = g_memdup(s->pri_rs.buf, s->pri_rs.packet_len); > + pkt = packet_new(data, > s->pri_rs.packet_len, > s->pri_rs.vnet_hdr_len); > } else { > - pkt = packet_new(s->sec_rs.buf, > + data = g_memdup(s->sec_rs.buf, s->sec_rs.packet_len); > + pkt = packet_new(data, > s->sec_rs.packet_len, > s->sec_rs.vnet_hdr_len); > } > diff --git a/net/colo.c b/net/colo.c > index ef00609..08fb37e 100644 > --- a/net/colo.c > +++ b/net/colo.c > @@ -155,11 +155,11 @@ void connection_destroy(void *opaque) > g_slice_free(Connection, conn); > } > > -Packet *packet_new(const void *data, int size, int vnet_hdr_len) > +Packet *packet_new(void *data, int size, int vnet_hdr_len) > { > Packet *pkt = g_slice_new(Packet); > > - pkt->data = g_memdup(data, size); > + pkt->data = data; > pkt->size = size; > pkt->creation_ms = qemu_clock_get_ms(QEMU_CLOCK_HOST); > pkt->vnet_hdr_len = vnet_hdr_len; > diff --git a/net/colo.h b/net/colo.h > index 573ab91..bd2d719 100644 > --- a/net/colo.h > +++ b/net/colo.h > @@ -100,7 +100,7 @@ Connection *connection_get(GHashTable > *connection_track_table, > bool connection_has_tracked(GHashTable *connection_track_table, > ConnectionKey *key); > void connection_hashtable_reset(GHashTable *connection_track_table); > -Packet *packet_new(const void *data, int size, int vnet_hdr_len); > +Packet *packet_new(void *data, int size, int vnet_hdr_len); > void packet_destroy(void *opaque, void *user_data); > void packet_destroy_partial(void *opaque, void *user_data); > > diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c > index fc0e64c..e24afe5 100644 > --- a/net/filter-rewriter.c > +++ b/net/filter-rewriter.c > @@ -271,7 +271,6 @@ static ssize_t colo_rewriter_receive_iov(NetFilterState > *nf, > } > > pkt = packet_new(buf, size, vnet_hdr_len); > - g_free(buf); > > /* > * if we get tcp packet --
pgpDqAFWtwpKh.pgp
Description: OpenPGP digital signature
