Memory Mapped file segment / always appending

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Jul 27 17:48:49 UTC 2020


On 27/07/2020 18:33, Johannes Lichtenberger wrote:
> To be fair, I don't know how to truncate it directly with Panama.
>
> I'm currently using the FileChannel API just for truncating during 
> closing:
>
> try (final FileChannel outChan =new FileOutputStream(dataFile.toFile(),true).getChannel()) {
>    outChan.truncate(dataSegmentFileSize);
> }catch (IOException e) {
>    throw new SirixIOException(e);
> }
>
> But I guess it's also more of a conceptual issue (or should truncating 
> be pretty fast?).

FileChannel usage is correct. Yes the flame graph seems to show that 
truncate takes quite a chunk of time, but I think that, unless you have 
some bug where you call it more times than really required, there's not 
much that can be done about it - e.g. I don't think that the performance 
issue you are seeing is caused by FileChannelImpl::truncate being slow.

Maurizio

>
> I've committed the file: 
> https://github.com/sirixdb/sirix/blob/master/Screenshot%20from%202020-07-27%2018-58-39.png
>
> kind regards
> Johannes
>
> Am Mo., 27. Juli 2020 um 19:18 Uhr schrieb Maurizio Cimadamore 
> <maurizio.cimadamore at oracle.com <mailto:maurizio.cimadamore at oracle.com>>:
>
>
>     On 27/07/2020 18:12, Johannes Lichtenberger wrote:
>     > Hi,
>     >
>     > as I'm always appending data to the end of a file. I came up
>     with the idea
>     > to always map a segment in chunks of Integer.MAX, that is the
>     segment
>     > always get's closed and a new segment gets created with twice
>     the size (for
>     > reading/writing). When I'm closing the writer I'm simply
>     truncating the
>     > file(s) to the real length.
>     >
>     > However, I just saw that it's horribly slow for a lot of small
>     writes. That
>     > is I'm always creating a read/write page reader, and closing it
>     again after
>     > a write. However, truncating a lot of unused space, over and
>     over again is
>     > a real problem. I've attached a flame graph from YourKit showing
>     that half
>     > of the time over a large amount of CPU samples is spend with
>     truncating.
>
>     Is the time spent in the Panama API, or do you mean that the code is
>     slow just natively (e.g. at the mmap level)
>
>     We can't see the attachment (the server truncates them :-) )
>
>     Maurizio
>
>     >
>     > Any ideas, how to improve performance?
>     >
>     > The packe is this and very small:
>     >
>     >
>     https://github.com/sirixdb/sirix/tree/master/bundles/sirix-core/src/main/java/org/sirix/io/memorymapped
>     >
>     > kind regards
>     > Johannes
>


More information about the panama-dev mailing list