* Claudio Freire (klaussfreire@gmail.com) wrote:
> Yes, that's basically zero-copy reads.
>
> It could be done. The kernel can remap the page to the physical page
> holding the shared buffer and mark it read-only, then expire the
> buffer and transfer ownership of the page if any page fault happens.
>
> But that incurrs:
> - Page faults, lots
> - Hugely bloated mappings, unless KSM is somehow leveraged for this
The page faults might be a problem but might be worth it. Bloated
mappings sounds like a real issue though.
> And there's a nice bingo. Had forgotten about KSM. KSM could help lots.
>
> I could try to see of madvising shared_buffers as mergeable helps. But
> this should be an automatic case of KSM - ie, when reading into a
> page-aligned address, the kernel should summarily apply KSM-style
> sharing without hinting. The current madvise interface puts the burden
> of figuring out what duplicates what on the kernel, but postgres
> already knows.
I'm certainly curious as to if KSM could help here, but on Ubuntu 12.04
with 3.5.0-23-generic, it's not doing anything with just PG running.
The page here: http://www.linux-kvm.org/page/KSM seems to indicate why:
----
KSM is a memory-saving de-duplication feature, that merges anonymous
(private) pages (not pagecache ones).
----
Looks like it won't merge between pagecache and private/application
memory? Or is it just that we're not madvise()'ing the shared buffers
region? I'd be happy to test doing that, if there's a chance it'll
actually work..
Thanks,
Stephen