You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/10/25 04:52:20 UTC

[dubbo] branch master updated: Modified the warm-up function from y=x to y=x^2 and make the warm-up process smoother (#9104)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new f05d086  Modified the warm-up function from y=x to y=x^2 and make the warm-up process smoother (#9104)
f05d086 is described below

commit f05d0863af8f26490597d2cb670a90faedc3fc64
Author: Steve Rao <zi...@126.com>
AuthorDate: Mon Oct 25 12:52:12 2021 +0800

    Modified the warm-up function from y=x to y=x^2 and make the warm-up process smoother (#9104)
---
 .../cluster/loadbalance/AbstractLoadBalance.java   |  2 +-
 .../cluster/loadbalance/LoadBalanceBaseTest.java   | 25 ++++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
index e2c2a6f..de057cf 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/AbstractLoadBalance.java
@@ -46,7 +46,7 @@ public abstract class AbstractLoadBalance implements LoadBalance {
      * @return weight which takes warmup into account
      */
     static int calculateWarmupWeight(int uptime, int warmup, int weight) {
-        int ww = (int) ( uptime / ((float) warmup / weight));
+        int ww = (int) (Math.round(Math.pow((uptime / (double) warmup), 2) * weight));
         return ww < 1 ? 1 : (Math.min(ww, weight));
     }
 
diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/LoadBalanceBaseTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/LoadBalanceBaseTest.java
index f9ab3ea..3c2c594 100644
--- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/LoadBalanceBaseTest.java
+++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/loadbalance/LoadBalanceBaseTest.java
@@ -141,15 +141,22 @@ public class LoadBalanceBaseTest {
         Assertions.assertEquals(1, calculateDefaultWarmupWeight(0));
         Assertions.assertEquals(1, calculateDefaultWarmupWeight(13));
         Assertions.assertEquals(1, calculateDefaultWarmupWeight(6 * 1000));
-        Assertions.assertEquals(2, calculateDefaultWarmupWeight(12 * 1000));
-        Assertions.assertEquals(10, calculateDefaultWarmupWeight(60 * 1000));
-        Assertions.assertEquals(50, calculateDefaultWarmupWeight(5 * 60 * 1000));
-        Assertions.assertEquals(50, calculateDefaultWarmupWeight(5 * 60 * 1000 + 23));
-        Assertions.assertEquals(50, calculateDefaultWarmupWeight(5 * 60 * 1000 + 5999));
-        Assertions.assertEquals(51, calculateDefaultWarmupWeight(5 * 60 * 1000 + 6000));
-        Assertions.assertEquals(90, calculateDefaultWarmupWeight(9 * 60 * 1000));
-        Assertions.assertEquals(98, calculateDefaultWarmupWeight(10 * 60 * 1000 - 12 * 1000));
-        Assertions.assertEquals(99, calculateDefaultWarmupWeight(10 * 60 * 1000 - 6 * 1000));
+        Assertions.assertEquals(1, calculateDefaultWarmupWeight(12 * 1000));
+        Assertions.assertEquals(1, calculateDefaultWarmupWeight(60 * 1000));
+        Assertions.assertEquals(4, calculateDefaultWarmupWeight(2* 60 * 1000));
+        Assertions.assertEquals(9, calculateDefaultWarmupWeight(3 * 60 * 1000));
+        Assertions.assertEquals(16, calculateDefaultWarmupWeight(4 * 60 * 1000));
+        Assertions.assertEquals(25, calculateDefaultWarmupWeight(5 * 60 * 1000));
+        Assertions.assertEquals(25, calculateDefaultWarmupWeight(5 * 60 * 1000 + 23));
+        Assertions.assertEquals(26, calculateDefaultWarmupWeight(5 * 60 * 1000 + 5999));
+        Assertions.assertEquals(26, calculateDefaultWarmupWeight(5 * 60 * 1000 + 6000));
+        Assertions.assertEquals(36, calculateDefaultWarmupWeight(6 * 60 * 1000));
+        Assertions.assertEquals(49, calculateDefaultWarmupWeight(7 * 60 * 1000));
+        Assertions.assertEquals(64, calculateDefaultWarmupWeight(8 * 60 * 1000));
+        Assertions.assertEquals(81, calculateDefaultWarmupWeight(9 * 60 * 1000));
+        Assertions.assertEquals(90, calculateDefaultWarmupWeight(10 * 60 * 1000 - 30 * 1000));
+        Assertions.assertEquals(93, calculateDefaultWarmupWeight(10 * 60 * 1000 - 20 * 1000));
+        Assertions.assertEquals(97, calculateDefaultWarmupWeight(10 * 60 * 1000 - 10 * 1000));
         Assertions.assertEquals(100, calculateDefaultWarmupWeight(10 * 60 * 1000));
         Assertions.assertEquals(100, calculateDefaultWarmupWeight(20 * 60 * 1000));
     }