Nico Kruber created FLINK-12538:
-----------------------------------
Summary: Network notifyDataAvailable() only called after getting a new buffer
Key: FLINK-12538
URL:
https://issues.apache.org/jira/browse/FLINK-12538 Project: Flink
Issue Type: Bug
Components: Runtime / Network
Affects Versions: 1.8.0, 1.7.2, 1.6.3, 1.9.0
Reporter: Nico Kruber
There is a potential regression in Flink 1.5+ which came with the low-latency changes. Whenever the {{RecordWriter}} finishes a buffer, it will first ask for a new buffer, then adds it to the appropriate result subpartition which notifies Netty of data being available.
In back-pressured scenarios where all buffers from the local pool are taken, it may happen that you do not immediately get a new buffer and have to wait for as long as it takes to get it before Netty can make use of the finished network buffer. Pre 1.5, Flink always immediately notified the downwards stack.
Although we do still have the output flusher notifying Netty within at most 100ms (by default), the new behaviour may actually decrease throughput and latency in a back-pressured scenario.
Having a quick look at the code, changing this behaviour is probably not too difficult but only needs to take care not to introduce additional locking / locking multiple times compared to now. Things to do/consider:
* {{PipelinedSubpartition#add()}} contains some optimisations to avoid unnecessary flushes but these conditions are under a lock -> try to not acquire it twice
* {{RecordWriter#requestNewBufferBuilder()}} could therefore maybe have an optimised path with a non-blocking buffer builder request if successful and if not, notify/flush and do another blocking request
After talking to [~pnowojski] offline, we are not sure how grave the issue is and whether we would improve by changing it. If you are willing to take a look and have code changing the current behaviour, please verify that it does not cause any performance regression itself and actually does improve some scenario (shown by a performance test, e.g. via
https://github.com/dataArtisans/flink-benchmarks ).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)