On Fri, 30 Jun 2017 13:37:23 +0200, Takashi Sakamoto wrote: > > Hi, > > This patchset is a revised version of my previous one: > > [PATCH alsa-lib 00/12] pcm: hw: optimization for v2.0.14 of PCM protocol/interface > http://mailman.alsa-project.org/pipermail/alsa-devel/2017-June/122392.html > > Changes: > - add a helper function, 'query_status_and_control_data()' to update appl_ptr > in user space. > - rename 'query_state()' to 'query_status_data()' > - reduce two patches. > - aggregate some patches for querying control data. > > I did quick mesurement by execute aplay on x86 machine with. > > 1. With Intel HDA driver with usual configuration. > ``` > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ioctl(4, SNDRV_PCM_IOCTL_HWSYNC, 0) = 0 > read(3, "a\23IH\205\177z\257\276]\346\237\313\220L\5\337V\363\351\216\17\346s\22\245-yb\312\37D"..., 16384) = 16384 > ioctl(4, SNDRV_PCM_IOCTL_HWSYNC, 0) = 0 > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ``` > > 2. With Intel HDA driver with 'sync_ptr_ioctl' option to hw PCM plugin. > ``` > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > read(3, "Rz\vB\v|A\275\356`\201)\335i3\r}\21Q^\30\324'\r'\375l\235&\3330\2"..., 16384) = 16384 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55fe03539f80) = 0 > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ``` > > 3. With Fireworks driver with a patch for snd-firewire-lib to add > SNDRV_PCM_INFO_SYNC_APPLPTR support[1]. > ``` > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ioctl(4, SNDRV_PCM_IOCTL_HWSYNC, 0) = 0 > ioctl(4, SNDRV_PCM_IOCTL_SYNC_PTR, 0x55b647ec9c00) = 0 > read(3, "|\n*\336\322\252*&\377\312\372&\276\333.\207\21\343\362\3\5\363\201\266\3421lZ;\\\22*"..., 24576) = 24576 > ioctl(4, SNDRV_PCM_IOCTL_HWSYNC, 0) = 0 > poll([{fd=4, events=POLLOUT|POLLERR|POLLNVAL}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}]) > ``` > > We can see this optimization reduces some ioctl calls in case 3. This is > due to status data mapping. > > [1] Below. > diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c > index f8c2765..04fb3df 100644 > --- a/sound/firewire/amdtp-stream.c > +++ b/sound/firewire/amdtp-stream.c > @@ -160,7 +160,8 @@ int amdtp_stream_add_pcm_hw_constraints(struct amdtp_stream *s, > SNDRV_PCM_INFO_INTERLEAVED | > SNDRV_PCM_INFO_JOINT_DUPLEX | > SNDRV_PCM_INFO_MMAP | > - SNDRV_PCM_INFO_MMAP_VALID; > + SNDRV_PCM_INFO_MMAP_VALID | > + SNDRV_PCM_INFO_SYNC_APPLPTR; > > /* SNDRV_PCM_INFO_BATCH */ > hw->periods_min = 2; > > Takashi Sakamoto (6): > pcm: hw: add a helper function to query status/control data > pcm: hw: add a helper function just to query status data > pcm: hw: add a helper function to request hwsync without side-effects > pcm: hw: add a helper function to issue appl_ptr without side-effects > pcm: hw: add a helper function to issue avail_min without side-effects > pcm: hw: remove superfluous code to call of SNDRV_PCM_IOCTL_SYNC_PTR > in snd_pcm_hw_forward() Applied all 6 patches now. Thanks. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel