[
https://issues.apache.org/jira/browse/FLINK-12536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16873088#comment-16873088
]
Congxian Qiu(klion26) commented on FLINK-12536:
-----------------------------------------------
As discussed with [~pnowojski] offline, will use a buffer pool(default 2, can
be configurable) and reuse the read thread in IOManager to read the
BufferOrEvent asynchronous.
Create an issue FLINK-12994 to track the improvement for buffer processing
performance in SpilledBufferOrEventSequence#getNext.
The benchmark result is as following:
Benchmark Mode Cnt Score Error
Units
ConsumerBench.testBuffer thrpt 30 99.528 ± 1.923
ops/ms
ConsumerBench.testBufferWithWrap thrpt 30 827.931 ± 15.148
ops/ms
ConsumerBench.testCancelCheckpointMarkerEvent thrpt 30 40144.914 ± 1244.112
ops/ms
ConsumerBench.testCheckpointBarrierEvent thrpt 30 29784.258 ± 467.440
ops/ms
ConsumerBench.testEndOfPartitionEvent thrpt 30 48562.810 ± 1599.328
ops/ms
FileIOBench.test1SyncIO thrpt 30 359.367 ± 3.203
ops/ms
FileIOBench.testAsyncIO thrpt 30 66.573 ± 3.384
ops/ms
[1] `testBuffer` test `SpilledBufferOrEventSequence#getNext` using
`MemorySegmentFactory.allocateUnpooledSegment(pageSize)`, `testBufferWithWrap`
test `SpilledBufferOrEventSequence#getNext` using
`MemorySegmentFactory.wrap()`, `test***Event` test all the event processing,
`test1SyncIO` tests the `FileChannel` and `testAsyncIO` tests the
`AsynchronousFileChannel`
[2]
[https://github.com/klion26/FileIOBench/blob/8618fc4d6e745d8dd762b87505102e6cec78dc9b/src/main/java/com/klion26/data/ConsumerBench.java#L130]
[3]
https://github.com/klion26/FileIOBench/blob/8618fc4d6e745d8dd762b87505102e6cec78dc9b/src/main/java/com/klion26/data/ConsumerBench.java#L169
> Make BufferOrEventSequence#getNext() non-blocking
> -------------------------------------------------
>
> Key: FLINK-12536
> URL: https://issues.apache.org/jira/browse/FLINK-12536
> Project: Flink
> Issue Type: Sub-task
> Components: Runtime / Network
> Affects Versions: 1.9.0
> Reporter: Piotr Nowojski
> Assignee: Congxian Qiu(klion26)
> Priority: Major
> Labels: pull-request-available
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Currently it is non-blocking in case of credit-based flow control (default),
> however for \{{SpilledBufferOrEventSequence}} it is blocking on reading from
> file. We might want to consider reimplementing it to be non blocking with
> {{CompletableFuture<?> isAvailable()}} method.
>
> Otherwise we will block mailbox processing for the duration of reading from
> file - for example we will block processing time timers and potentially in
> the future network flushes.
>
> This is not a high priority change, since it affects non-default
> configuration option AND at the moment only processing time timers are
> planned to be moved to the mailbox for 1.9.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)