diff mbox

[1/4] net/colo-compare.c: Add checkpoint min period to optimize performance

Message ID 1499406231-3877-2-git-send-email-zhangchen.fnst@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Zhang Chen July 7, 2017, 5:43 a.m. UTC
If colo-compare find out the first different packet that means
the following packet almost is different. we needn't do a lot
of checkpoint in this time, so we set the no-need-checkpoint
peroid, default just set 3 second.

Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
---
 net/colo-compare.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Comments

Li Zhijian July 7, 2017, 6:06 a.m. UTC | #1
On 07/07/2017 01:43 PM, Zhang Chen wrote:
> If colo-compare find out the first different packet

at this situation, why not trigger the checkpoint, and then flush all primary packets and drop secondary packets?


>   that means
> the following packet almost is different. we needn't do a lot
> of checkpoint in this time, so we set the no-need-checkpoint
> peroid, default just set 3 second.
>
> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
> ---
>   net/colo-compare.c | 13 ++++++++++++-
>   1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index 6d500e1..0f8e198 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -40,6 +40,9 @@
>   /* TODO: Should be configurable */
>   #define REGULAR_PACKET_CHECK_MS 3000
>   
> +/* TODO: Should be configurable */
> +#define CHECKPOINT_MIN_TIME 3000
> +
>   /*
>     + CompareState ++
>     |               |
> @@ -455,6 +458,7 @@ static void colo_compare_connection(void *opaque, void *user_data)
>       Packet *pkt = NULL;
>       GList *result = NULL;
>       int ret;
> +    static int64_t checkpoint_time_ms;
>   
>       while (!g_queue_is_empty(&conn->primary_list) &&
>              !g_queue_is_empty(&conn->secondary_list)) {
> @@ -494,7 +498,14 @@ static void colo_compare_connection(void *opaque, void *user_data)
>                */
>               trace_colo_compare_main("packet different");
>               g_queue_push_tail(&conn->primary_list, pkt);
> -            /* TODO: colo_notify_checkpoint();*/
> +
> +            if (pkt->creation_ms - checkpoint_time_ms > CHECKPOINT_MIN_TIME) {
> +                /*
> +                 * TODO: Notify colo frame to do checkpoint.
> +                 * colo_compare_inconsistent_notify();
> +                 */
> +                checkpoint_time_ms = pkt->creation_ms;
> +            }
>               break;
>           }
>       }
Zhang Chen July 7, 2017, 6:30 a.m. UTC | #2
On 07/07/2017 02:06 PM, Li Zhijian wrote:
>
> On 07/07/2017 01:43 PM, Zhang Chen wrote:
>> If colo-compare find out the first different packet
>
> at this situation, why not trigger the checkpoint, and then flush all 
> primary packets and drop secondary packets?

In this time we already do this job, but before this checkpoint to be done,
a lot of checkpoint has been triggered. It is no sense do many 
checkpoint in very short time.
So we just need do once checkpoint in this situation.

Thanks
Zhang Chen

>
>
>>   that means
>> the following packet almost is different. we needn't do a lot
>> of checkpoint in this time, so we set the no-need-checkpoint
>> peroid, default just set 3 second.
>>
>> Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com>
>> ---
>>   net/colo-compare.c | 13 ++++++++++++-
>>   1 file changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>> index 6d500e1..0f8e198 100644
>> --- a/net/colo-compare.c
>> +++ b/net/colo-compare.c
>> @@ -40,6 +40,9 @@
>>   /* TODO: Should be configurable */
>>   #define REGULAR_PACKET_CHECK_MS 3000
>>   +/* TODO: Should be configurable */
>> +#define CHECKPOINT_MIN_TIME 3000
>> +
>>   /*
>>     + CompareState ++
>>     |               |
>> @@ -455,6 +458,7 @@ static void colo_compare_connection(void *opaque, 
>> void *user_data)
>>       Packet *pkt = NULL;
>>       GList *result = NULL;
>>       int ret;
>> +    static int64_t checkpoint_time_ms;
>>         while (!g_queue_is_empty(&conn->primary_list) &&
>>              !g_queue_is_empty(&conn->secondary_list)) {
>> @@ -494,7 +498,14 @@ static void colo_compare_connection(void 
>> *opaque, void *user_data)
>>                */
>>               trace_colo_compare_main("packet different");
>>               g_queue_push_tail(&conn->primary_list, pkt);
>> -            /* TODO: colo_notify_checkpoint();*/
>> +
>> +            if (pkt->creation_ms - checkpoint_time_ms > 
>> CHECKPOINT_MIN_TIME) {
>> +                /*
>> +                 * TODO: Notify colo frame to do checkpoint.
>> +                 * colo_compare_inconsistent_notify();
>> +                 */
>> +                checkpoint_time_ms = pkt->creation_ms;
>> +            }
>>               break;
>>           }
>>       }
>
diff mbox

Patch

diff --git a/net/colo-compare.c b/net/colo-compare.c
index 6d500e1..0f8e198 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -40,6 +40,9 @@ 
 /* TODO: Should be configurable */
 #define REGULAR_PACKET_CHECK_MS 3000
 
+/* TODO: Should be configurable */
+#define CHECKPOINT_MIN_TIME 3000
+
 /*
   + CompareState ++
   |               |
@@ -455,6 +458,7 @@  static void colo_compare_connection(void *opaque, void *user_data)
     Packet *pkt = NULL;
     GList *result = NULL;
     int ret;
+    static int64_t checkpoint_time_ms;
 
     while (!g_queue_is_empty(&conn->primary_list) &&
            !g_queue_is_empty(&conn->secondary_list)) {
@@ -494,7 +498,14 @@  static void colo_compare_connection(void *opaque, void *user_data)
              */
             trace_colo_compare_main("packet different");
             g_queue_push_tail(&conn->primary_list, pkt);
-            /* TODO: colo_notify_checkpoint();*/
+
+            if (pkt->creation_ms - checkpoint_time_ms > CHECKPOINT_MIN_TIME) {
+                /*
+                 * TODO: Notify colo frame to do checkpoint.
+                 * colo_compare_inconsistent_notify();
+                 */
+                checkpoint_time_ms = pkt->creation_ms;
+            }
             break;
         }
     }