[v2,0/7] Remove asynchronous IPC thread
mbox series

Message ID cover.1530009564.git.anatoly.burakov@intel.com
Headers show
Series
  • Remove asynchronous IPC thread
Related show

Message

Burakov, Anatoly June 26, 2018, 10:53 a.m. UTC
As previously discussed [1], IPC threads need to be removed and their
workload moved to interrupt thread. However, due to upcoming changes
for multiprocess hotplug, it was decided to leave one IPC thread in
place for now to avoid deadlocks on memory allocation attempts [2].

FreeBSD did not have an interrupt thread, nor did it support alarm
API. This patchset adds support for both on FreeBSD. FreeBSD interrupt
thread is based on kevent, FreeBSD's native event multiplexing
mechanism similar to Linux's epoll.

The patchset makes FreeBSD's interrupts and alarm work just enough to
suffice for purposes of IPC, however there are really weird problems
observed. Specifically, FreeBSD's kevent timers are really slow to
trigger for some reason, sleeping on a 10ms timer as much as 200ms
before waking up. Interrupt handling on fd's is also a bit flaky.

It has also been observed that both problems go away if we do not
affinitize master lcore (by commenting relevant code out [3]). It is
not known why these problems are observed, nor it is clear what a
solution might entail.

For the purposes of making IPC work and having rudimentary support
for alarm and interrupt API's, this patchset works fine. However,
because of the above described issues, documentation will not be
updated to indicate support for interrupts on FreeBSD at this time.

v1->v2:
- Leave IPC thread in place and only remove asynchronous IPC thread

RFC->v1:
- FreeBSD support

[1] https://patches.dpdk.org/patch/36579/
[2] https://patches.dpdk.org/patch/41512/
[3] https://git.dpdk.org/dpdk/tree/lib/librte_eal/bsdapp/eal/eal.c#n729

Anatoly Burakov (4):
  eal/bsdapp: add interrupt thread
  eal/bsdapp: add alarm support
  ipc: remove IPC thread for async requests
  doc: document IPC callback limitations

Jianfeng Tan (3):
  eal/linux: use glibc malloc in alarm
  eal/linux: use glibc malloc in interrupt handling
  eal: bring forward init of interrupt handling

 doc/guides/prog_guide/multi_proc_support.rst  |  17 +-
 lib/librte_eal/bsdapp/eal/eal.c               |  10 +-
 lib/librte_eal/bsdapp/eal/eal_alarm.c         | 299 +++++++++++-
 lib/librte_eal/bsdapp/eal/eal_alarm_private.h |  19 +
 lib/librte_eal/bsdapp/eal/eal_interrupts.c    | 455 +++++++++++++++++-
 lib/librte_eal/common/eal_common_proc.c       | 201 +++-----
 lib/librte_eal/linuxapp/eal/eal.c             |  10 +-
 lib/librte_eal/linuxapp/eal/eal_alarm.c       |   9 +-
 lib/librte_eal/linuxapp/eal/eal_interrupts.c  |  14 +-
 9 files changed, 852 insertions(+), 182 deletions(-)
 create mode 100644 lib/librte_eal/bsdapp/eal/eal_alarm_private.h

Comments

Thomas Monjalon July 13, 2018, 10:44 a.m. UTC | #1
> Anatoly Burakov (4):
>   eal/bsdapp: add interrupt thread
>   eal/bsdapp: add alarm support
>   ipc: remove IPC thread for async requests
>   doc: document IPC callback limitations
> 
> Jianfeng Tan (3):
>   eal/linux: use glibc malloc in alarm
>   eal/linux: use glibc malloc in interrupt handling
>   eal: bring forward init of interrupt handling

Applied, thanks

Crossing fingers that moving interrupt init will have no consequence :)