[ 
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)

Reply via email to