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

issue: Implement doorbell batching for the new API #164

Open
wants to merge 8 commits into
base: vNext
Choose a base branch
from

Conversation

pasis
Copy link
Member

@pasis pasis commented Jun 8, 2024

Description

New API requires user to call explicit flush. We can implement doorbell batching and close unfinished batch by the flush. This will guarantee doorbell and zcopy completions progress even if user stops sending data.

What

Implement doorbell batching for the new API.

Why ?

Up to 4% performance improvement depending on scenario.

Change type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • Tests
  • Other

Check list

  • Code follows the style de facto guidelines of this project
  • Comments have been inserted in hard to understand places
  • Documentation has been updated (if necessary)
  • Test has been added (if possible)

pasis added 8 commits June 8, 2024 22:07
PBUF_NONE was used mistakenly instead of PBUF_DESC_NONE.

Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
The field doesn't have to be initialized if we do copy. This is extra
operation, therefore, move it to the else branch.

Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
Inline part of the fill_wqe() is overcomplicated. Hide it in a separate
method, so refactoring can be isolated.

Also, don't check multiple scatter-gather case for inline criteria. This
is unlikely scenario because TCP layer copies non-zcopy data to a single
buffer until it's full.

Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
URGENT flag requests TX completion for the respective WQE. This is
required for zerocopy interfaces where user cannot specify the last
send operation explicitly. Otherwise, TX completion batching can lead
to a dead lock if user stops sending data and waits for the completions.

CALLBACK flag requests to call a callback once the buffer is released
by XLIO.

Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
This allows to achieve doorbell batching similar to TX completions
batching. XLIO extra socket API provide explicit flush functionality.
Such a flush operation will close WQE accumulation session and ring
doorbell. This guarantees doorbells and zcopy completions even if
user stops sending data (as far as user calls the final flush).

Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
Signed-off-by: Dmytro Podgornyi <dmytrop@nvidia.com>
@pasis pasis added enhancement New feature or request draft Not to review yet labels Jun 8, 2024
@galnoam
Copy link
Collaborator

galnoam commented Jun 10, 2024

bot:retest

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
draft Not to review yet enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants