[pulseaudio-discuss] [PATCH 09/11] pulsecore: memexport/memimport: Introduce memfd blocks support

Tanu Kaskinen tanuk at iki.fi
Sun Sep 27 22:47:16 PDT 2015


On Sun, 2015-09-27 at 22:56 +0200, Ahmed S. Darwish wrote:
> > Do you already have an idea how to fix it? Could we send
> > the fd just once during the connection set-up phase, and always use
> > that fd from then on?
> > 
> 
> Yup.
> 
> We will emulate what the posix SHM code is currently doing, which
> resembles what you're proposing above.
> 
> When a PA endpoint creates a memfd region, it attaches a randomly
> generated ID to this memfd region. When a memblock inside this memfd
> area is sent to the other end using pstreams, we also send this
> random ID beside the memfd file descriptors.

Is randomness really necessary? I don't know for sure why the current
SHM code uses random ids, but I'd guess it's because otherwise
malicious users or programs could create tons of files in /dev/shm with
the deterministic name generation algorithm, which would slow down
PulseAudio's own SHM file creation. memfds don't have a global
namespace, so this problem doesn't exist.

> This way, the receiving end (as done with posix SHM) will use a hash
> table to store these ids. If the ID matches, we won't create a new
> memfd "memimport_segment" and just use the existing one and its
> already open and mapped file descriptor. If nothing matches, we'll
> use the sent fds for opening and mapping, up to a max of 16.

If the fd is sent with every memblock, we'd still have to close the
received fd for every memblock. Is that something that can cause
significant overhead?

> Thanks a lot for your reviews and kind words :-)
> 
> Honestly, the PA code, and PA itself, was very foreign at first. Thus
> to build a coherent mental picture, I've followed up with the code and
> wrote these documents here:
> 
>     https://a-darwish.gitbooks.io/diary-of-pulseaudio-developement/content/what_are_mempools.html
>     https://a-darwish.gitbooks.io/diary-of-pulseaudio-developement/content/memory_chunks_and_memblockq.html
>     https://a-darwish.gitbooks.io/diary-of-pulseaudio-developement/content/shm_file_sharing.html
>     ..
>     https://a-darwish.gitbooks.io/diary-of-pulseaudio-developement/content/logind_sessions_supportv2.html
> 
> Maybe one day we can polish these and transform them into a coherent
> introductory guide for PulseAudio development ;-)

Sure, if you have the motivation. Probably such guide wouldn't be kept
up to date, though. But in any case, at least we can add a link here:

https://wiki.freedesktop.org/www/Software/PulseAudio/Documentation/Developer/

That page already has the "Writing Modules" link, which points to a
kind of similar attempt at documenting the server internals. It doesn't
have much content, and hasn't been updated since 2008 :) I wrote it
when I was new to PulseAudio myself.

-- 
Tanu


More information about the pulseaudio-discuss mailing list