[LAU] cancelling I/O with libsndfile

Dan Muresan danmbox at gmail.com
Mon Jun 13 21:57:30 UTC 2011


Hi Erik -- please CC me so I can reply (I don't receive messages from
LAU directly). I'm quoting manually here:

> > I'm trying to cancel an ongoing sf_* I/O operation (from another
> Maybe its a bad idea. :-)

I don't think so... Issuing large requests, then cancelling as needed
gives a process the lowest possible latency for unpredictable seeks
(caused e.g. by user commands), while keeping CPU usage low (by
avoiding syscall and context switching overhead)

> Reading one frame at a time sounds like a bad idea too.

1 frame at a time was an extreme example. The point was that
libsndfile doesn't employ a user-space cache, but direct system calls.
Reading 10, 100 or 480 frames at a time will still incur syscall
overhead (== CPU usage), and progressively larger cancel latencies.

> > libsndfile. It would be nice if libsndfile could allow short reads and
> > writes via some sf_command parameter.
> It does. You can read any number of frames from 1 through to as many
> frames as the file contains.

I meant "short reads" in kernel-speak sense: read(2) can return a
number of bytes less than the number requested when interrupted by a
signal (if SA_RESTART is disabled). My proposal was to add a
sf_command() parameter that disables the looping behavior of sf_read()
on EINTR, and makes it return exactly as many frames as the first
read() call manages to get.

On second thought, though, this proposal could not possibly work
without a userspace (libsndfile) cache, because read() might return
incomplete frames, which would need to be processed in a later call. I
discovered the virtual I/O in sndfile, and that seems more
appropriate. So I withdraw my proposal.

> Basically you could define how fine grained you want you interruption
> to be and then only read enough frames so that you can interrupt between

That was exactly the strategy I originally described as inadequate,
due to syscall overhead (in the absence of userspace caching)...

> I just checked, and the address you used to post this email to the LAU
> list are not subscribed to the libsndfile-users list. Thats why the list
> is rejecting your email.

That's exactly the problem: I subscribed about two weeks ago, received
a confirmation, and sent a message at that time (which received no
bounces, but no replies either). Now, the mailserver somehow forgot
about me and is rejecting my messages. Or something...

> libsndfile questions here (or better yet, the LAD list since this
> is really a development question).

You're right -- I've realized right after hitting "Send". Please feel
free to respond on LAD (but please CC me). I am replying on LAU this
one time to clear up the issues that were already brought up, since my
original message seemed confusing.


-- Dan


More information about the Linux-audio-user mailing list