Matthias Schwalbe created FLINK-26586:
-----------------------------------------

             Summary: FileSystem uses unbuffered read I/O
                 Key: FLINK-26586
                 URL: https://issues.apache.org/jira/browse/FLINK-26586
             Project: Flink
          Issue Type: Improvement
          Components: API / State Processor, Connectors / FileSystem, Runtime / 
Checkpointing
    Affects Versions: 1.14.0, 1.13.0
            Reporter: Matthias Schwalbe


- I found out that, at least when using LocalFileSystem on a windows system, 
read I/O to load a savepoint is unbuffered,
 - See example stack [1]
 - i.e. in order to load only a long in a serializer, it needs to go into 
kernel mode 8 times and load the 8 bytes one by one
 - I coded a BufferedFSDataInputStreamWrapper that allows to opt-in buffered 
reads on any FileSystem implementation
 - In our setting savepoint load is now 30 times faster
 - I’ve once seen a Jira ticket as to improve savepoint load time in general 
(lost the link unfortunately), maybe this approach can help with it
 - not sure if HDFS has got the same problem
 - I can contribute my implementation of a BufferedFSDataInputStreamWrapper 
which can be integrated in any 

[1] unbuffered reads stack:
read:207, FileInputStream (java.io)
read:68, LocalDataInputStream (org.apache.flink.core.fs.local)
read:50, FSDataInputStreamWrapper (org.apache.flink.core.fs)
read:42, ForwardingInputStream (org.apache.flink.runtime.util)
readInt:390, DataInputStream (java.io)
deserialize:80, BytePrimitiveArraySerializer 
(org.apache.flink.api.common.typeutils.base.array)
next:298, FullSnapshotRestoreOperation$KeyGroupEntriesIterator 
(org.apache.flink.runtime.state.restore)
next:273, FullSnapshotRestoreOperation$KeyGroupEntriesIterator 
(org.apache.flink.runtime.state.restore)
restoreKVStateData:147, RocksDBFullRestoreOperation 
(org.apache.flink.contrib.streaming.state.restore)



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to