duckOS icon indicating copy to clipboard operation
duckOS copied to clipboard

[TODO] `mmap()` file mapping & shared [file] mapping

Open MarcoCicognani opened this issue 3 years ago • 6 comments

Suggestion

Hi Aaron, Good to see you still working on the VM subsystem.

I put this issue as a memo for the missing features of the mmap() implementation. I hope you are already at work on it.

Keep going man!

MarcoCicognani avatar Jan 25 '23 09:01 MarcoCicognani

Yep, that's exactly what I'm going to add next :) the hope is to use it in the linker to map program segments into memory to hopefully speed things up a little.

byteduck avatar Jan 25 '23 17:01 byteduck

It could be cool if the file mapping uses the VFS layer page-cache to share pages, in order to reduce memory usage

MarcoCicognani avatar Jan 25 '23 18:01 MarcoCicognani

That's what I'm hoping to do. Right now, the disk is cached at the block level, so it would rely on files being aligned at page boundaries. I may have to rework the VFS cache a little too.

byteduck avatar Jan 25 '23 18:01 byteduck

That's cool man! Waiting for updates

MarcoCicognani avatar Jan 25 '23 18:01 MarcoCicognani

Update on this:

I've got inode mappings working on a basic level. Shared and private mappings both work, but more can definitely be done to speed things up. In no particular order, here's a list of things I still need to do:

  • Allow for the partial copy-on-write of VMObjects. As in, copy each page as needed rather than copying the whole object when one page is written to.
  • When mapping an inode privately with write permissions, use the shared mapping pages and mark them as CoW to speed things up.
  • Add mremap and msync.
  • Eliminate the block-level cache and just use the shared inode cache instead.
  • Rewrite ld to use memory-mapped files to reduce memory usage as well as speed things up.

byteduck avatar Jan 28 '23 00:01 byteduck

Great Man!

MarcoCicognani avatar Jan 28 '23 10:01 MarcoCicognani