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

angerszhuuuu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-celeborn.git


The following commit(s) were added to refs/heads/main by this push:
     new 798ff90bb [CELEBORN-342] Fix the wrong avg produce bytes in Congestion 
control (#1279)
798ff90bb is described below

commit 798ff90bb7bf1011dc1cd7745c0b064c92524953
Author: Rex(Hui) An <[email protected]>
AuthorDate: Mon Feb 27 16:29:37 2023 +0800

    [CELEBORN-342] Fix the wrong avg produce bytes in Congestion control (#1279)
---
 .../deploy/worker/congestcontrol/BufferStatusHub.java     |  8 ++++++++
 .../worker/congestcontrol/CongestionController.java       | 15 +++++++--------
 .../deploy/worker/congestcontrol/TimeSlidingHub.java      |  4 ++++
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/BufferStatusHub.java
 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/BufferStatusHub.java
index cd0b5ebdc..38c7282f4 100644
--- 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/BufferStatusHub.java
+++ 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/BufferStatusHub.java
@@ -71,4 +71,12 @@ public class BufferStatusHub extends 
TimeSlidingHub<BufferStatusHub.BufferStatus
   protected BufferStatusNode newEmptyNode() {
     return new BufferStatusNode();
   }
+
+  public long avgBytesPerSec() {
+    long currentNumBytes = sum().numBytes();
+    if (currentNumBytes > 0) {
+      return currentNumBytes * 1000 / (long) getCurrentTimeWindowsInMills();
+    }
+    return 0L;
+  }
 }
diff --git 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/CongestionController.java
 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/CongestionController.java
index 4d49f5932..f6a13ef13 100644
--- 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/CongestionController.java
+++ 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/CongestionController.java
@@ -135,8 +135,6 @@ public class CongestionController {
     }
 
     long pendingConsumed = getTotalPendingBytes();
-
-    // The potential consume speed in average
     long avgConsumeSpeed = getPotentialConsumeSpeed();
 
     if (pendingConsumed > highWatermark && 
overHighWatermark.compareAndSet(false, true)) {
@@ -208,21 +206,22 @@ public class CongestionController {
     MemoryManager.instance().trimAllListeners();
   }
 
+  /**
+   * Get avg consumed bytes in a configured time window, and divide with the 
number of active users
+   * to determine the potential consume speed.
+   */
   public long getPotentialConsumeSpeed() {
     if (userBufferStatuses.size() == 0) {
       return 0;
     }
 
-    BufferStatusHub.BufferStatusNode totalBufferStatus = 
consumedBufferStatusHub.sum();
-    // The potential consume speed in average
-    return totalBufferStatus.numBytes()
-        / ((long) sampleTimeWindowSeconds * userBufferStatuses.size());
+    return consumedBufferStatusHub.avgBytesPerSec() / 
userBufferStatuses.size();
   }
 
+  /** Get the avg user produce speed, the unit is bytes/sec. */
   private long getUserProduceSpeed(UserBufferInfo userBufferInfo) {
     if (userBufferInfo != null) {
-      BufferStatusHub.BufferStatusNode userBufferStatus = 
userBufferInfo.getBufferStatusHub().sum();
-      return userBufferStatus.numBytes() / sampleTimeWindowSeconds;
+      return userBufferInfo.getBufferStatusHub().avgBytesPerSec();
     }
 
     return 0L;
diff --git 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/TimeSlidingHub.java
 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/TimeSlidingHub.java
index d24ac7ebb..ef34f07c6 100644
--- 
a/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/TimeSlidingHub.java
+++ 
b/worker/src/main/java/org/apache/celeborn/service/deploy/worker/congestcontrol/TimeSlidingHub.java
@@ -144,6 +144,10 @@ public abstract class TimeSlidingHub<N extends 
TimeSlidingHub.TimeSlidingNode> {
 
   protected abstract N newEmptyNode();
 
+  protected int getCurrentTimeWindowsInMills() {
+    return _deque.size() * intervalPerBucketInMills;
+  }
+
   @VisibleForTesting
   protected long currentTimeMillis() {
     return System.currentTimeMillis();

Reply via email to