From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42422) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avxqZ-0000ZF-Kd for qemu-devel@nongnu.org; Thu, 28 Apr 2016 22:08:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1avxqU-0001nP-LQ for qemu-devel@nongnu.org; Thu, 28 Apr 2016 22:07:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54842) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1avxqU-0001n3-GS for qemu-devel@nongnu.org; Thu, 28 Apr 2016 22:07:54 -0400 References: <1460977906-25218-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> <1460977906-25218-4-git-send-email-zhangchen.fnst@cn.fujitsu.com> <5721C2AE.6080305@redhat.com> <5721E66F.5070805@cn.fujitsu.com> From: Jason Wang Message-ID: <5722C1F5.60407@redhat.com> Date: Fri, 29 Apr 2016 10:07:49 +0800 MIME-Version: 1.0 In-Reply-To: <5721E66F.5070805@cn.fujitsu.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH V3 3/4] colo-compare: introduce packet comparison thread List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Zhang Chen , qemu devel Cc: Li Zhijian , Gui jianfeng , Wen Congyang , zhanghailiang , Yang Hongyang , "eddie.dong" , "Dr. David Alan Gilbert" On 04/28/2016 06:31 PM, Zhang Chen wrote: >>> +/* >>> + * called from the compare thread on the primary >>> + * for compare connection >>> + */ >>> +static void colo_compare_connection(void *opaque, void *user_data) >>> +{ >>> + Connection *conn = opaque; >>> + Packet *pkt = NULL; >>> + GList *result = NULL; >>> + int ret; >>> + >>> + qemu_mutex_lock(&conn->list_lock); >>> + while (!g_queue_is_empty(&conn->primary_list) && >>> + !g_queue_is_empty(&conn->secondary_list)) { >>> + pkt = g_queue_pop_head(&conn->primary_list); >>> + result = g_queue_find_custom(&conn->secondary_list, >>> + pkt, >>> (GCompareFunc)colo_packet_compare_all); >>> + >>> + if (result) { >>> + ret = compare_chr_send(pkt->s->chr_out, pkt->data, >>> pkt->size); >>> + if (ret < 0) { >>> + error_report("colo_send_primary_packet failed"); >>> + } >>> + trace_colo_compare_main("packet same and release packet"); >>> + g_queue_remove(&conn->secondary_list, result->data); >>> + } else { >>> + trace_colo_compare_main("packet different"); >>> + g_queue_push_head(&conn->primary_list, pkt); >> Is this possible that the packet from secondary has not been arrived on >> time? If yes, do we still need to notify the checkpoint here? > > Yes,the packet of secondary may not arrived. > we will hold primary packet to next periodic checkpoint > to flush it. and more, I consider to set a timer > to flush timeout(200ms???) packet like Dave's branch. > > > Thanks > zhangchen I was wondering maybe you can merge or unify all other changes from Dave's branch?