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?
---