From nobody Sun Apr 28 19:44:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150330573168985.53913556826171; Mon, 21 Aug 2017 01:55:31 -0700 (PDT) Received: from localhost ([::1]:54300 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiUc-0006Vy-DN for importer@patchew.org; Mon, 21 Aug 2017 04:55:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33375) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSi-0005FW-Un for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1djiSh-0000Oo-QJ for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:33 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:18245 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSg-0000O5-Vo for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:31 -0400 Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 21 Aug 2017 16:53:29 +0800 Received: from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83]) by cn.fujitsu.com (Postfix) with ESMTP id DE19747243AB; Mon, 21 Aug 2017 16:53:25 +0800 (CST) Received: from localhost.localdomain (10.167.226.56) by G08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 21 Aug 2017 16:53:26 +0800 X-IronPort-AV: E=Sophos;i="5.41,408,1498492800"; d="scan'208";a="24172285" From: Zhang Chen To: qemu devel , Jason Wang Date: Mon, 21 Aug 2017 16:55:17 +0800 Message-ID: <1503305719-2512-2-git-send-email-zhangchen.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> References: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.226.56] X-yoursite-MailScanner-ID: DE19747243AB.ABA74 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: zhangchen.fnst@cn.fujitsu.com X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 183.91.158.132 Subject: [Qemu-devel] [PATCH V4 1/3] net/colo-compare.c: Optimize unpredictable tcp options comparison X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Li Zhijian , Zhang Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When network is busy, some tcp options(like sack) will unpredictable occur in primary side or secondary side. it will make packet size not same, but the two packet's payload is identical. colo just care about packet payload, so we skip the option field. Signed-off-by: Zhang Chen --- net/colo-compare.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index ca67c68..f6bda41 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -186,7 +186,10 @@ static int packet_enqueue(CompareState *s, int mode) * return: 0 means packet same * > 0 || < 0 means packet different */ -static int colo_packet_compare_common(Packet *ppkt, Packet *spkt, int offs= et) +static int colo_packet_compare_common(Packet *ppkt, + Packet *spkt, + int poffset, + int soffset) { if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) { char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20= ]; @@ -201,12 +204,13 @@ static int colo_packet_compare_common(Packet *ppkt, P= acket *spkt, int offset) sec_ip_src, sec_ip_dst); } =20 - offset =3D ppkt->vnet_hdr_len + offset; + poffset =3D ppkt->vnet_hdr_len + poffset; + soffset =3D ppkt->vnet_hdr_len + soffset; =20 - if (ppkt->size =3D=3D spkt->size) { - return memcmp(ppkt->data + offset, - spkt->data + offset, - spkt->size - offset); + if (ppkt->size =3D=3D spkt->size || poffset !=3D soffset) { + return memcmp(ppkt->data + poffset, + spkt->data + soffset, + spkt->size - soffset); } else { trace_colo_compare_main("Net packet size are not the same"); return -1; @@ -263,13 +267,22 @@ static int colo_packet_compare_tcp(Packet *spkt, Pack= et *ppkt) * so we just need skip this field. */ if (ptcp->th_off > 5) { - ptrdiff_t tcp_offset; + ptrdiff_t ptcp_offset, stcp_offset; =20 - tcp_offset =3D ppkt->transport_header - (uint8_t *)ppkt->data - + (ptcp->th_off * 4) - ppkt->vnet_hdr_len; - res =3D colo_packet_compare_common(ppkt, spkt, tcp_offset); + ptcp_offset =3D ppkt->transport_header - (uint8_t *)ppkt->data + + (ptcp->th_off * 4) - ppkt->vnet_hdr_len; + stcp_offset =3D spkt->transport_header - (uint8_t *)spkt->data + + (stcp->th_off * 4) - spkt->vnet_hdr_len; + + /* + * When network is busy, some tcp options(like sack) will unpredic= table + * occur in primary side or secondary side. it will make packet si= ze + * not same, but the two packet's payload is identical. colo just + * care about packet payload, so we skip the option field. + */ + res =3D colo_packet_compare_common(ppkt, spkt, ptcp_offset, stcp_o= ffset); } else if (ptcp->th_sum =3D=3D stcp->th_sum) { - res =3D colo_packet_compare_common(ppkt, spkt, ETH_HLEN); + res =3D colo_packet_compare_common(ppkt, spkt, ETH_HLEN, ETH_HLEN); } else { res =3D -1; } @@ -329,6 +342,7 @@ static int colo_packet_compare_udp(Packet *spkt, Packet= *ppkt) * the ip payload here. */ ret =3D colo_packet_compare_common(ppkt, spkt, + network_header_length + ETH_HLEN, network_header_length + ETH_HLEN); =20 if (ret) { @@ -366,6 +380,7 @@ static int colo_packet_compare_icmp(Packet *spkt, Packe= t *ppkt) * the ip payload here. */ if (colo_packet_compare_common(ppkt, spkt, + network_header_length + ETH_HLEN, network_header_length + ETH_HLEN)) { trace_colo_compare_icmp_miscompare("primary pkt size", ppkt->size); @@ -403,7 +418,7 @@ static int colo_packet_compare_other(Packet *spkt, Pack= et *ppkt) sec_ip_src, sec_ip_dst); } =20 - return colo_packet_compare_common(ppkt, spkt, 0); + return colo_packet_compare_common(ppkt, spkt, 0, 0); } =20 static int colo_old_packet_check_one(Packet *pkt, int64_t *check_time) --=20 2.7.4 From nobody Sun Apr 28 19:44:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1503305731145960.1074645981469; Mon, 21 Aug 2017 01:55:31 -0700 (PDT) Received: from localhost ([::1]:54299 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiUb-0006V4-TE for importer@patchew.org; Mon, 21 Aug 2017 04:55:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33367) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSi-0005FQ-Bv for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1djiSh-0000Od-IP for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:32 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:42056 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSh-0000NA-7J for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:31 -0400 Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 21 Aug 2017 16:53:29 +0800 Received: from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83]) by cn.fujitsu.com (Postfix) with ESMTP id 742CC47243AE; Mon, 21 Aug 2017 16:53:26 +0800 (CST) Received: from localhost.localdomain (10.167.226.56) by G08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 21 Aug 2017 16:53:27 +0800 X-IronPort-AV: E=Sophos;i="5.41,408,1498492800"; d="scan'208";a="24172287" From: Zhang Chen To: qemu devel , Jason Wang Date: Mon, 21 Aug 2017 16:55:18 +0800 Message-ID: <1503305719-2512-3-git-send-email-zhangchen.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> References: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.226.56] X-yoursite-MailScanner-ID: 742CC47243AE.AB707 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: zhangchen.fnst@cn.fujitsu.com X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 183.91.158.132 Subject: [Qemu-devel] [PATCH V4 2/3] net/colo-compare.c: Adjust net queue pop order for performance X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Li Zhijian , Zhang Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The packet_enqueue() use g_queue_push_tail() to enqueue net packet, so it is more efficent way use g_queue_pop_head() to get packet for compare. That will improve the success rate of comparison. In my test the performance of ftp put 1000M file will increase 10% Signed-off-by: Zhang Chen --- net/colo-compare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index f6bda41..a8ccac7 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -483,7 +483,7 @@ static void colo_compare_connection(void *opaque, void = *user_data) =20 while (!g_queue_is_empty(&conn->primary_list) && !g_queue_is_empty(&conn->secondary_list)) { - pkt =3D g_queue_pop_tail(&conn->primary_list); + pkt =3D g_queue_pop_head(&conn->primary_list); switch (conn->ip_proto) { case IPPROTO_TCP: result =3D g_queue_find_custom(&conn->secondary_list, @@ -521,7 +521,7 @@ static void colo_compare_connection(void *opaque, void = *user_data) * until next comparison. */ trace_colo_compare_main("packet different"); - g_queue_push_tail(&conn->primary_list, pkt); + g_queue_push_head(&conn->primary_list, pkt); /* TODO: colo_notify_checkpoint();*/ break; } --=20 2.7.4 From nobody Sun Apr 28 19:44:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1503305730506549.0749539848572; Mon, 21 Aug 2017 01:55:30 -0700 (PDT) Received: from localhost ([::1]:54298 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiUb-0006U4-9T for importer@patchew.org; Mon, 21 Aug 2017 04:55:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33349) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSh-0005FC-EA for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1djiSg-0000OF-IX for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:31 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:42056 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djiSg-0000NA-6l for qemu-devel@nongnu.org; Mon, 21 Aug 2017 04:53:30 -0400 Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 21 Aug 2017 16:53:29 +0800 Received: from G08CNEXCHPEKD02.g08.fujitsu.local (unknown [10.167.33.83]) by cn.fujitsu.com (Postfix) with ESMTP id 0B0C547243B6; Mon, 21 Aug 2017 16:53:27 +0800 (CST) Received: from localhost.localdomain (10.167.226.56) by G08CNEXCHPEKD02.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 21 Aug 2017 16:53:27 +0800 X-IronPort-AV: E=Sophos;i="5.41,408,1498492800"; d="scan'208";a="24172284" From: Zhang Chen To: qemu devel , Jason Wang Date: Mon, 21 Aug 2017 16:55:19 +0800 Message-ID: <1503305719-2512-4-git-send-email-zhangchen.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> References: <1503305719-2512-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.226.56] X-yoursite-MailScanner-ID: 0B0C547243B6.AA36E X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: zhangchen.fnst@cn.fujitsu.com X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 183.91.158.132 Subject: [Qemu-devel] [PATCH V4 3/3] net/colo-compare.c: Fix comments and scheme X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Li Zhijian , Zhang Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Zhang Chen --- net/colo-compare.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index a8ccac7..e8af8bb 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -44,7 +44,7 @@ + CompareState ++ | | +---------------+ +---------------+ +---------------+ - |conn list +--->conn +--------->conn | + | conn list + - > conn + ------- > conn + -- > ...= .... +---------------+ +---------------+ +---------------+ | | | | | | +---------------+ +---v----+ +---v----+ +---v----+ +---v----+ @@ -75,14 +75,14 @@ typedef struct CompareState { SocketReadState sec_rs; bool vnet_hdr; =20 - /* connection list: the connections belonged to this NIC could be found - * in this list. - * element type: Connection + /* + * Record the connection that through the NIC + * Element type: Connection */ GQueue conn_list; - /* hashtable to save connection */ + /* Record the connection without repetition */ GHashTable *connection_track_table; - /* compare thread, a thread for each NIC */ + /* This thread just do packet compare job */ QemuThread thread; =20 GMainContext *worker_context; @@ -444,8 +444,11 @@ static int colo_old_packet_check_one_conn(Connection *= conn, (GCompareFunc)colo_old_packet_check_one); =20 if (result) { - /* do checkpoint will flush old packet */ - /* TODO: colo_notify_checkpoint();*/ + /* Do checkpoint will flush old packet */ + /* + * TODO: Notify colo frame to do checkpoint. + * colo_compare_inconsistent_notify(); + */ return 0; } =20 --=20 2.7.4