From: John Fastabend <john.fastabend@gmail.com>
To: alsa-devel@alsa-project.org
Cc: henrk@austad.us, linux-kernel@vger.kernel.org,
Arnd Bergmann <arnd@linaro.org>,
netdev@vger.kernel.org, alsa-devel@vger.kernel.org,
linux-media@vger.kernel.org
Subject: Re: [alsa-devel] [very-RFC 0/8] TSN driver for the kernel
Date: Mon, 13 Jun 2016 08:56:44 -0700 [thread overview]
Message-ID: <575ED7BC.4000803@gmail.com> (raw)
In-Reply-To: <20160613114713.GA9544@localhost.localdomain>
On 16-06-13 04:47 AM, Richard Cochran wrote:
> Henrik,
>
> On Sun, Jun 12, 2016 at 01:01:28AM +0200, Henrik Austad wrote:
>> There are at least one AVB-driver (the AV-part of TSN) in the kernel
>> already,
>
> Which driver is that?
>
>> however this driver aims to solve a wider scope as TSN can do
>> much more than just audio. A very basic ALSA-driver is added to the end
>> that allows you to play music between 2 machines using aplay in one end
>> and arecord | aplay on the other (some fiddling required) We have plans
>> for doing the same for v4l2 eventually (but there are other fishes to
>> fry first). The same goes for a TSN_SOCK type approach as well.
>
> Please, no new socket type for this.
>
>> What remains
>> - tie to (g)PTP properly, currently using ktime_get() for presentation
>> time
>> - get time from shim into TSN and vice versa
>
> ... and a whole lot more, see below.
>
>> - let shim create/manage buffer
>
> (BTW, shim is a terrible name for that.)
>
> [sigh]
>
> People have been asking me about TSN and Linux, and we've made some
> thoughts about it. The interest is there, and so I am glad to see
> discussion on this topic.
>
> Having said that, your series does not even begin to address the real
> issues. I did not review the patches too carefully (because the
> important stuff is missing), but surely configfs is the wrong
> interface for this. In the end, we will be able to support TSN using
> the existing networking and audio interfaces, adding appropriate
> extensions.
>
> Your patch features a buffer shared by networking and audio. This
> isn't strictly necessary for TSN, and it may be harmful. The
> Listeners are supposed to calculate the delay from frame reception to
> the DA conversion. They can easily include the time needed for a user
> space program to parse the frames, copy (and combine/convert) the
> data, and re-start the audio transfer. A flexible TSN implementation
> will leave all of the format and encoding task to the userland. After
> all, TSN will some include more that just AV data, as you know.
>
> Lets take a look at the big picture. One aspect of TSN is already
> fully supported, namely the gPTP. Using the linuxptp user stack and a
> modern kernel, you have a complete 802.1AS-2011 solution.
>
> Here is what is missing to support audio TSN:
>
> * User Space
>
> 1. A proper userland stack for AVDECC, MAAP, FQTSS, and so on. The
> OpenAVB project does not offer much beyond simple examples.
>
> 2. A user space audio application that puts it all together, making
> use of the services in #1, the linuxptp gPTP service, the ALSA
> services, and the network connections. This program will have all
> the knowledge about packet formats, AV encodings, and the local HW
> capabilities. This program cannot yet be written, as we still need
> some kernel work in the audio and networking subsystems.
>
> * Kernel Space
>
> 1. Providing frames with a future transmit time. For normal sockets,
> this can be in the CMESG data. For mmap'ed buffers, we will need a
> new format. (I think Arnd is working on a new layout.)
>
> 2. Time based qdisc for transmitted frames. For MACs that support
> this (like the i210), we only have to place the frame into the
> correct queue. For normal HW, we want to be able to reserve a time
> window in which non-TSN frames are blocked. This is some work, but
> in the end it should be a generic solution that not only works
> "perfectly" with TSN HW but also provides best effort service using
> any NIC.
>
When I looked at this awhile ago I convinced myself that it could fit
fairly well into the DCB stack (DCB is also part of 802.1Q). A lot of
the traffic class to queue mappings and priories could be handled here.
It might be worth taking a look at ./net/sched/mqprio.c and ./net/dcb/.
Unfortunately I didn't get too far along but we probably don't want
another mechanism to map hw queues/tcs/etc if the existing interfaces
work or can be extended to support this.
> 3. ALSA support for tunable AD/DA clocks. The rate of the Listener's
> DA clock must match that of the Talker and the other Listeners.
> Either you adjust it in HW using a VCO or similar, or you do
> adaptive sample rate conversion in the application. (And that is
> another reason for *not* having a shared kernel buffer.) For the
> Talker, either you adjust the AD clock to match the PTP time, or
> you measure the frequency offset.
>
> 4. ALSA support for time triggered playback. The patch series
> completely ignore the critical issue of media clock recovery. The
> Listener must buffer the stream in order to play it exactly at a
> specified time. It cannot simply send the stream ASAP to the audio
> HW, because some other Listener might need longer. AFAICT, there
> is nothing in ALSA that allows you to say, sample X should be
> played at time Y.
>
> These are some ideas about implementing TSN. Maybe some of it is
> wrong (especially about ALSA), but we definitely need a proper design
> to get the kernel parts right. There is plenty of work to do, but we
> really don't need some hacky, in-kernel buffer with hard coded audio
> formats.
>
> Thanks,
> Richard
>
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2016-06-13 15:56 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-11 23:01 [alsa-devel] [very-RFC 0/8] TSN driver for the kernel Henrik Austad
2016-06-11 23:01 ` [very-RFC 1/8] TSN: add documentation Henrik Austad
2016-06-11 23:01 ` [alsa-devel] " Henrik Austad
2016-06-11 23:01 ` [alsa-devel] [very-RFC 2/8] TSN: Add the standard formerly known as AVB to the kernel Henrik Austad
2016-06-11 23:01 ` Henrik Austad
2016-06-11 23:01 ` [alsa-devel] [very-RFC 3/8] Adding TSN-driver to Intel I210 controller Henrik Austad
2016-06-11 23:01 ` Henrik Austad
2016-06-11 23:01 ` [very-RFC 4/8] Add TSN header for the driver Henrik Austad
2016-06-11 23:01 ` [alsa-devel] " Henrik Austad
2016-06-11 23:01 ` [alsa-devel] [very-RFC 5/8] Add TSN machinery to drive the traffic from a shim over the network Henrik Austad
2016-06-11 23:01 ` Henrik Austad
2016-06-11 23:01 ` [very-RFC 6/8] Add TSN event-tracing Henrik Austad
2016-06-11 23:01 ` [alsa-devel] " Henrik Austad
2016-06-12 16:58 ` Steven Rostedt
2016-06-12 16:58 ` [alsa-devel] " Steven Rostedt
2016-06-12 21:25 ` Henrik Austad
2016-06-12 21:25 ` [alsa-devel] " Henrik Austad
2016-06-13 2:22 ` Steven Rostedt
2016-06-13 7:20 ` Henrik Austad
2016-06-11 23:01 ` [alsa-devel] [very-RFC 7/8] AVB ALSA - Add ALSA shim for TSN Henrik Austad
2016-06-15 11:49 ` Richard Cochran
2016-06-15 11:49 ` [alsa-devel] " Richard Cochran
2016-06-15 12:13 ` Henrik Austad
2016-06-15 12:43 ` Richard Cochran
2016-06-15 12:43 ` Richard Cochran
2016-06-15 12:13 ` Henrik Austad
2016-06-11 23:01 ` Henrik Austad
2016-06-11 23:01 ` [very-RFC 8/8] MAINTAINERS: add TSN/AVB-entries Henrik Austad
2016-06-11 23:01 ` [alsa-devel] " Henrik Austad
2016-06-12 3:38 ` [very-RFC 0/8] TSN driver for the kernel Takashi Sakamoto
2016-06-12 4:30 ` Takashi Sakamoto
2016-06-12 8:31 ` Henrik Austad
2016-06-12 10:43 ` Takashi Sakamoto
2016-06-12 22:06 ` Henrik Austad
2016-06-12 8:28 ` Henrik Austad
2016-06-12 9:14 ` Takashi Sakamoto
2016-06-13 11:47 ` [alsa-devel] " Richard Cochran
2016-06-13 13:00 ` Henrik Austad
2016-06-13 19:32 ` Richard Cochran
2016-06-13 19:32 ` [alsa-devel] " Richard Cochran
2016-06-14 9:30 ` Henrik Austad
2016-06-14 18:26 ` Richard Cochran
2016-06-14 20:38 ` Henrik Austad
2016-06-14 20:38 ` [alsa-devel] " Henrik Austad
2016-06-15 7:04 ` Richard Cochran
2016-06-15 7:04 ` [alsa-devel] " Richard Cochran
2016-06-15 7:50 ` Henrik Austad
2016-06-15 7:50 ` [alsa-devel] " Henrik Austad
2016-06-15 11:41 ` Richard Cochran
2016-06-15 11:41 ` Richard Cochran
2016-06-15 7:11 ` [alsa-devel] " Richard Cochran
2016-06-15 7:11 ` Richard Cochran
2016-06-14 18:26 ` Richard Cochran
2016-06-14 9:30 ` Henrik Austad
2016-06-13 19:37 ` Richard Cochran
2016-06-13 19:37 ` [alsa-devel] " Richard Cochran
2016-06-13 13:00 ` Henrik Austad
2016-06-13 13:12 ` [alsa-devel] " Arnd Bergmann
2016-06-13 13:12 ` Arnd Bergmann
2016-06-13 15:56 ` John Fastabend
2016-06-13 15:56 ` John Fastabend [this message]
2016-06-14 8:35 ` [alsa-devel] " Henrik Austad
2016-06-14 8:35 ` Henrik Austad
2016-06-13 19:51 ` [alsa-devel] " Richard Cochran
2016-06-14 11:18 ` One Thousand Gnomes
2016-06-14 11:18 ` [alsa-devel] " One Thousand Gnomes
2016-06-14 17:04 ` Richard Cochran
2016-06-14 17:04 ` [alsa-devel] " Richard Cochran
2016-06-15 3:15 ` Takashi Sakamoto
2016-06-15 8:06 ` Richard Cochran
2016-06-18 5:22 ` Takashi Sakamoto
2016-06-18 22:45 ` Henrik Austad
2016-06-19 9:46 ` Richard Cochran
2016-06-20 8:05 ` Henrik Austad
2016-06-19 14:45 ` Takashi Sakamoto
2016-06-20 9:06 ` Henrik Austad
2016-06-21 2:22 ` Takashi Sakamoto
2016-06-20 11:08 ` Pierre-Louis Bossart
2016-06-20 11:49 ` Henrik Austad
2016-06-20 12:18 ` [alsa-devel] " Richard Cochran
2016-06-20 12:31 ` Richard Cochran
2016-06-20 15:21 ` Richard Cochran
2016-06-21 5:54 ` Takashi Iwai
2016-06-21 6:38 ` Richard Cochran
2016-06-21 6:45 ` Takashi Iwai
2016-06-21 17:18 ` Pierre-Louis Bossart
2016-06-21 17:45 ` [alsa-devel] " Pierre-Louis Bossart
2016-06-21 19:40 ` Richard Cochran
2016-06-22 12:36 ` Pierre-Louis Bossart
2016-06-23 10:38 ` [alsa-devel] " Henrik Austad
2016-06-23 13:28 ` Richard Cochran
2016-06-15 3:27 ` Takashi Sakamoto
2016-06-13 19:51 ` Richard Cochran
2016-06-13 11:47 ` Richard Cochran
-- strict thread matches above, loose matches on Subject: below --
2016-06-11 22:22 [alsa-devel] " Henrik Austad
2016-06-11 22:49 ` Henrik Austad
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=575ED7BC.4000803@gmail.com \
--to=john.fastabend@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=alsa-devel@vger.kernel.org \
--cc=arnd@linaro.org \
--cc=henrk@austad.us \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).