Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support interfaces with fixed number of tx queues (vhost/virtio) #12

Open
rjarry opened this issue Mar 21, 2024 · 0 comments
Open

support interfaces with fixed number of tx queues (vhost/virtio) #12

rjarry opened this issue Mar 21, 2024 · 0 comments
Labels
feature New feature or request question Further information is requested

Comments

@rjarry
Copy link
Collaborator

rjarry commented Mar 21, 2024

Some interfaces have limited (fixed sometimes) number of tx queues. We cannot force one tx queue per datapath worker thread.

Potential solutions:

  • Use graph pipeline mode
  • Use locks for these specific tx queues

All these solutions will affect the overall performance of the other ports.

@rjarry rjarry added feature New feature or request question Further information is requested labels Mar 21, 2024
rjarry added a commit to rjarry/grout that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 DPDK#3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 DPDK#4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 DPDK#5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 DPDK#10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 DPDK#11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 DPDK#12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
rjarry added a commit to rjarry/grout that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 DPDK#3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 DPDK#4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 DPDK#5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 DPDK#10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 DPDK#11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 DPDK#12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
rjarry added a commit that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 #3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 #4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 #5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 #10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 #11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 #12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant