Github user zhijiangW commented on a diff in the pull request:

    https://github.com/apache/flink/pull/6254#discussion_r200247127
  
    --- Diff: 
flink-runtime/src/main/java/org/apache/flink/runtime/io/network/partition/consumer/RemoteInputChannel.java
 ---
    @@ -479,6 +508,9 @@ void onSenderBacklog(int backlog) throws IOException {
     
                        numRequiredBuffers = backlog + initialCredit;
                        while (bufferQueue.getAvailableBufferSize() < 
numRequiredBuffers && !isWaitingForFloatingBuffers) {
    +                           // TODO: this will take a lock in the 
LocalBufferPool as well and needs to be done
    +                           // outside the synchronized block (which is a 
bit difficult trying to acquire the
    +                           // lock only once!
                                Buffer buffer = 
inputGate.getBufferPool().requestBuffer();
    --- End diff --
    
    In my previous implementation, I added a new method in `BufferProvider` 
interface to request batch of buffers at a time.  To do so, it only needs lock 
only once in `LocalBufferPool` and may be more efficient from lock side. The 
only concern is that the floating buffer distribution may be not fair in all 
the channels. So we want to implement two strategies, one fair strategy is 
requesting one buffer at a time, another greedy strategy is requesting all 
required buffers at a time, then comparing these strategies to check 
performance. Maybe it behaves different in different scenarios. I am planing to 
submit this JIRA soon. What do you think?


---

Reply via email to