Skip to content

Workaround mmap restrictions due to CONFIG_STRICT_DEVMEM #29

@rbossy

Description

@rbossy

In systems where the kernel is compiled with option CONFIG_STRICT_DEVMEM, mmap is limited to 1MB: https://stackoverflow.com/questions/8213671/mmap-operation-not-permitted.

The marshalling framework uses mmap with the maximum available size, raising IOException:

public ByteBuffer getBuffer(long position) {
try {
long absPosition = startPosition + position;
long size = Math.min(channel.size() - absPosition, Integer.MAX_VALUE);
return channel.map(MapMode.READ_ONLY, absPosition, size);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}

Solution 1: tell users to recompile kernel. Not always possible.

Solution 2: mmap 1MB only. Problem is that the unmarshalled object might be larger than 1MB.

Solution 3: create a ByteBuffer based on 1MB mmap, but closes and reopens the mmap as needed.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions