All of lore.kernel.org
 help / color / mirror / Atom feed
* ASoC: mmap or read/write?
@ 2012-10-18  8:38 Prasant J
  2012-10-18  9:09 ` Clemens Ladisch
  0 siblings, 1 reply; 8+ messages in thread
From: Prasant J @ 2012-10-18  8:38 UTC (permalink / raw)
  To: alsa-devel

Hi,

I'm writing an alsa application for recording & playing 16 channel audio.

The application is intended to run on an embedded platform & the
resources are highly constrained.
My application is not performing well with read/write methods. I'm
considering using mmap but not able to get the right documentation or
start, so I want to know whether mmap really offers any advantages or
not.

Does the mmap method has any advantages over read/write?
Is there any thumb rule to decide when to use mmap or read/write?

-Prasant

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-18  8:38 Prasant J
@ 2012-10-18  9:09 ` Clemens Ladisch
  2012-10-18  9:37   ` Prasant J
  0 siblings, 1 reply; 8+ messages in thread
From: Clemens Ladisch @ 2012-10-18  9:09 UTC (permalink / raw)
  To: Prasant J; +Cc: alsa-devel

Prasant J wrote:
> I'm writing an alsa application for recording & playing 16 channel audio.
>
> The application is intended to run on an embedded platform & the
> resources are highly constrained.

Then I wonder how you manage to handle 16 channels.
What hardware is this?

> My application is not performing well with read/write methods.

How much CPU usage?

> Does the mmap method has any advantages over read/write?

No, except when then samples are generated in/consumed from the
device's buffer directly without copying them around, and even then
it's unlikely that the time needed for copying actually matters.

> Is there any thumb rule to decide when to use mmap or read/write?

Yes; use read/write.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-18  9:09 ` Clemens Ladisch
@ 2012-10-18  9:37   ` Prasant J
  2012-10-18 14:32     ` Clemens Ladisch
  0 siblings, 1 reply; 8+ messages in thread
From: Prasant J @ 2012-10-18  9:37 UTC (permalink / raw)
  To: Clemens Ladisch; +Cc: alsa-devel

On Thu, Oct 18, 2012 at 2:39 PM, Clemens Ladisch <clemens@ladisch.de> wrote:
> Prasant J wrote:
>> I'm writing an alsa application for recording & playing 16 channel audio.
>>
>> The application is intended to run on an embedded platform & the
>> resources are highly constrained.
>
> Then I wonder how you manage to handle 16 channels.
> What hardware is this?

I'm working with Beaglebone (ARM Cortex-A8 720 MHz). (Currently
failures are for 8 channels 32 bit / 16 bit, but our final target is
16 channels)

>
>> My application is not performing well with read/write methods.
>
> How much CPU usage?

The CPU usage is around 35% (as seen in top)

I have managed to get Audio capture working fine (after certain linux
optimizations) but playback is giving under-runs (only when PLAYBACK &
CAPTURE run together)
I was wondering that changing access method to mmap (currently I'm
using read/write) may give me some more CPU time.


>
>> Does the mmap method has any advantages over read/write?
>
> No, except when then samples are generated in/consumed from the
> device's buffer directly without copying them around, and even then
> it's unlikely that the time needed for copying actually matters.
>
>> Is there any thumb rule to decide when to use mmap or read/write?
>
> Yes; use read/write.

OK. You say read/write is the best apart from the one use case you
mentioned, makes sense, because, irrespective I use read/write or
mmap, in my case, I will anyway have to copy the buffers to mmap-ed
area.

>
>
> Regards,
> Clemens


Thanks for inputs!

Regards, Prasant

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-18  9:37   ` Prasant J
@ 2012-10-18 14:32     ` Clemens Ladisch
  0 siblings, 0 replies; 8+ messages in thread
From: Clemens Ladisch @ 2012-10-18 14:32 UTC (permalink / raw)
  To: Prasant J; +Cc: alsa-devel

Prasant J wrote:
> in my case, I will anyway have to copy the buffers to mmap-ed area.

This is *exactly* the same what snd_pcm_writei() already does.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
       [not found] <mailman.1.1350554402.30975.alsa-devel@alsa-project.org>
@ 2012-10-19  6:33 ` Mike Looijmans
  2012-10-19  8:58   ` Clemens Ladisch
  0 siblings, 1 reply; 8+ messages in thread
From: Mike Looijmans @ 2012-10-19  6:33 UTC (permalink / raw)
  To: alsa-devel

Clemens ------------------------------ Message: 6 Date: Thu, 18 Oct 2012 
15:07:45 +0530 From: Prasant J <pj0585@gmail.com> To: Clemens Ladisch 
<clemens@ladisch.de> Cc: alsa-devel@alsa-project.org Subject: Re: 
[alsa-devel] ASoC: mmap or read/write? Message-ID: 
<CAA2DH4v4DUxf5Qh79nehTPD+22v6XddzDrEMmnBu2eM8m4JXzg@mail.gmail.com> 
Content-Type: text/plain; charset=ISO-8859-1 On Thu, Oct 18, 2012 at 
2:39 PM, Clemens Ladisch <clemens@ladisch.de> wrote:
>> Prasant J wrote:
>>> I'm writing an alsa application for recording & playing 16 channel audio.
>>>
>>> The application is intended to run on an embedded platform & the
>>> resources are highly constrained.
>> Then I wonder how you manage to handle 16 channels.
>> What hardware is this?
> I'm working with Beaglebone (ARM Cortex-A8 720 MHz). (Currently
> failures are for 8 channels 32 bit / 16 bit, but our final target is
> 16 channels)
>
>>> My application is not performing well with read/write methods.
>> How much CPU usage?
> The CPU usage is around 35% (as seen in top)
>
> I have managed to get Audio capture working fine (after certain linux
> optimizations) but playback is giving under-runs (only when PLAYBACK &
> CAPTURE run together)
> I was wondering that changing access method to mmap (currently I'm
> using read/write) may give me some more CPU time.

You must be doing something wrong. I'm doing 32-bit, 16-channel input at 
51.2kHz on a OMAP-L138 (an ARM9 CPU at 450 MHz) under Linux and it's 
using no more than 25% CPU for that. Just using"arecord" for that.

Mike.
(sorry for the company sig)



Met vriendelijke groet / kind regards,

Mike Looijmans

TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) – (0)499 - 33.69.79
Telefax: (+31) - (0)499 - 33.69.70
E-mail: mike.looijmans@topic.nl
Website: www.topic.nl

Dit e-mail bericht en de eventueel daarbij behorende bijlagen zijn uitsluitend bestemd voor de geadresseerde, zoals die blijkt uit het e-mail bericht en/of de bijlagen. Er kunnen gegevens met betrekking tot een derde instaan. Indien u als niet-geadresseerde dit bericht en de bijlagen ontvangt, terwijl u niet bevoegd of gemachtigd bent om dit bericht namens de geadresseerde te ontvangen, wordt u verzocht de afzender hierover direct te informeren en het e-mail bericht met de bijlagen te vernietigen. Ieder gebruik van de inhoud van het e-mail bericht, waaronder de daarbij behorende bijlagen, door een ander dan de geadresseerde is onrechtmatig jegens ons dan wel de eventueel in het e-mail bericht of de bijlagen voorkomende andere personen. TOPIC Embedded Systems is niet aansprakelijk voor enigerlei schade voortvloeiend uit het gebruik en/of acceptatie van dit e-mail bericht of de daarbij behorende bijlagen.

The contents of this message, as well as any enclosures, are addressed personally to, and thus solely intended for the addressee. They may contain information regarding a third party. A recipient who is neither the addressee, nor empowered to receive this message on behalf of the addressee, is kindly requested to immediately inform the sender of receipt, and to destroy the message and the enclosures. Any use of the contents of this message and/or the enclosures by any other person than the addressee or person who is empowered to receive this message, is illegal towards the sender and/or the aforementioned third party. TOPIC Embedded Systems is not  liable for any damage as a result of the use and/or acceptance of this message and as well as any enclosures.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-19  6:33 ` ASoC: mmap or read/write? Mike Looijmans
@ 2012-10-19  8:58   ` Clemens Ladisch
  2012-10-19  9:36     ` Prasant J
  0 siblings, 1 reply; 8+ messages in thread
From: Clemens Ladisch @ 2012-10-19  8:58 UTC (permalink / raw)
  To: alsa-devel

Mike Looijmans wrote:
> From: Prasant J <pj0585@gmail.com>
>>> Prasant J wrote:
>>>> I'm writing an alsa application for recording & playing 16 channel audio.
>>
>> I'm working with Beaglebone (ARM Cortex-A8 720 MHz). (Currently
>> failures are for 8 channels 32 bit / 16 bit, but our final target is
>> 16 channels)
>>
>> I have managed to get Audio capture working fine (after certain linux
>> optimizations) but playback is giving under-runs (only when PLAYBACK &
>> CAPTURE run together)
>
> You must be doing something wrong. I'm doing 32-bit, 16-channel input
> at 51.2kHz on a OMAP-L138 (an ARM9 CPU at 450 MHz)

Playback and capture at the same time seems to be harder for certain
embedded devices.  I don't know if this is a driver bug or a hardware
limitation.


Regards,
Clemens

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-19  8:58   ` Clemens Ladisch
@ 2012-10-19  9:36     ` Prasant J
  2012-10-19  9:56       ` Mike Looijmans
  0 siblings, 1 reply; 8+ messages in thread
From: Prasant J @ 2012-10-19  9:36 UTC (permalink / raw)
  To: Clemens Ladisch; +Cc: alsa-devel

On Fri, Oct 19, 2012 at 2:28 PM, Clemens Ladisch <clemens@ladisch.de> wrote:
> Mike Looijmans wrote:
>> From: Prasant J <pj0585@gmail.com>
>>>> Prasant J wrote:
>>>>> I'm writing an alsa application for recording & playing 16 channel audio.
>>>
>>> I'm working with Beaglebone (ARM Cortex-A8 720 MHz). (Currently
>>> failures are for 8 channels 32 bit / 16 bit, but our final target is
>>> 16 channels)
>>>
>>> I have managed to get Audio capture working fine (after certain linux
>>> optimizations) but playback is giving under-runs (only when PLAYBACK &
>>> CAPTURE run together)
>>
>> You must be doing something wrong. I'm doing 32-bit, 16-channel input
>> at 51.2kHz on a OMAP-L138 (an ARM9 CPU at 450 MHz)
>

@Mike:
I'm playing & recording at the same time, that should be the reason.

When I was using arecord (only capture) I was getting overruns and
only after making some linux optimizations, I was able to record
properly. Are you 100% sure you do not observe any errors? Did you do
tests for longer durations?


> Playback and capture at the same time seems to be harder for certain
> embedded devices.  I don't know if this is a driver bug or a hardware
> limitation.
>

@Clemens:
The bottle-neck is SD card access. Driver bug cannot be ruled out, but
it is difficult to evaluate.

Regards, Praant

P.S.: How do I reply to a post whose mail I did not receive. (I have
enabled alsa-devel mails only now, but if someone does not include me
in cc, I do not receive the posts started by me)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: ASoC: mmap or read/write?
  2012-10-19  9:36     ` Prasant J
@ 2012-10-19  9:56       ` Mike Looijmans
  0 siblings, 0 replies; 8+ messages in thread
From: Mike Looijmans @ 2012-10-19  9:56 UTC (permalink / raw)
  To: alsa-devel

On 10/19/2012 11:36 AM, Prasant J wrote:
> On Fri, Oct 19, 2012 at 2:28 PM, Clemens Ladisch <clemens@ladisch.de> wrote:
>> Mike Looijmans wrote:
>>> From: Prasant J <pj0585@gmail.com>
>>>>> Prasant J wrote:
>>>>>> I'm writing an alsa application for recording & playing 16 channel audio.
>>>> I'm working with Beaglebone (ARM Cortex-A8 720 MHz). (Currently
>>>> failures are for 8 channels 32 bit / 16 bit, but our final target is
>>>> 16 channels)
>>>>
>>>> I have managed to get Audio capture working fine (after certain linux
>>>> optimizations) but playback is giving under-runs (only when PLAYBACK &
>>>> CAPTURE run together)
>>> You must be doing something wrong. I'm doing 32-bit, 16-channel input
>>> at 51.2kHz on a OMAP-L138 (an ARM9 CPU at 450 MHz)
>>
> @Mike:
> I'm playing & recording at the same time, that should be the reason.
Good point, my board only a has a single playback channel.

> When I was using arecord (only capture) I was getting overruns and
> only after making some linux optimizations, I was able to record
> properly. Are you 100% sure you do not observe any errors? Did you do
> tests for longer durations?

I've had it running for about an hour, using /dev/null as a target 
because I don't have enough memory to store that much data.

I did get lots of underruns/overruns while getting started, but they 
turned out te be related to clock configurations. So take a really good 
look at those, the way the registers are being set are often very 
obscure and register defines often don't match the datasheet.

>> Playback and capture at the same time seems to be harder for certain
>> embedded devices.  I don't know if this is a driver bug or a hardware
>> limitation.
> @Clemens:
> The bottle-neck is SD card access. Driver bug cannot be ruled out, but
> it is difficult to evaluate.
Sound familiar, on my board a USB SD cardreader connected to the USB 
port was actually faster than the built-in 4-wire SD.

Mike.


Met vriendelijke groet / kind regards,

Mike Looijmans

TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) – (0)499 - 33.69.79
Telefax: (+31) - (0)499 - 33.69.70
E-mail: mike.looijmans@topic.nl
Website: www.topic.nl

Dit e-mail bericht en de eventueel daarbij behorende bijlagen zijn uitsluitend bestemd voor de geadresseerde, zoals die blijkt uit het e-mail bericht en/of de bijlagen. Er kunnen gegevens met betrekking tot een derde instaan. Indien u als niet-geadresseerde dit bericht en de bijlagen ontvangt, terwijl u niet bevoegd of gemachtigd bent om dit bericht namens de geadresseerde te ontvangen, wordt u verzocht de afzender hierover direct te informeren en het e-mail bericht met de bijlagen te vernietigen. Ieder gebruik van de inhoud van het e-mail bericht, waaronder de daarbij behorende bijlagen, door een ander dan de geadresseerde is onrechtmatig jegens ons dan wel de eventueel in het e-mail bericht of de bijlagen voorkomende andere personen. TOPIC Embedded Systems is niet aansprakelijk voor enigerlei schade voortvloeiend uit het gebruik en/of acceptatie van dit e-mail bericht of de daarbij behorende bijlagen.

The contents of this message, as well as any enclosures, are addressed personally to, and thus solely intended for the addressee. They may contain information regarding a third party. A recipient who is neither the addressee, nor empowered to receive this message on behalf of the addressee, is kindly requested to immediately inform the sender of receipt, and to destroy the message and the enclosures. Any use of the contents of this message and/or the enclosures by any other person than the addressee or person who is empowered to receive this message, is illegal towards the sender and/or the aforementioned third party. TOPIC Embedded Systems is not  liable for any damage as a result of the use and/or acceptance of this message and as well as any enclosures.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-10-19  9:56 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <mailman.1.1350554402.30975.alsa-devel@alsa-project.org>
2012-10-19  6:33 ` ASoC: mmap or read/write? Mike Looijmans
2012-10-19  8:58   ` Clemens Ladisch
2012-10-19  9:36     ` Prasant J
2012-10-19  9:56       ` Mike Looijmans
2012-10-18  8:38 Prasant J
2012-10-18  9:09 ` Clemens Ladisch
2012-10-18  9:37   ` Prasant J
2012-10-18 14:32     ` Clemens Ladisch

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.