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

Low performance on virtual interfaces regardless of GRO #267

Open
ydahhrk opened this Issue Jul 19, 2018 · 4 comments

Comments

Projects
None yet
2 participants
@ydahhrk
Member

ydahhrk commented Jul 19, 2018

  1. Network tool (iperf in this case) writes large packets (> MTU) because it has a large buffer.
    (Or, alternatively, network tool writes large packets because the kernel is lazy and likes to merge socket data.)
  2. Packets reach virtual interface. Virtual interfaces do not segment the data because they do not care about MTU.
    (Linux defers data segmentation as much as possible because this actually prevents the segmentation unless it's actually necessary. ("Actually necessary" means that it reaches an actual physical interface.))
  3. Jool sees packet too big, drops. Network tool doesn't know what's going on because it keeps thinking that the packet is going to be segmented in time. Random black hole ensues; TCP retries and only some packets get through. Low performance is observed.

This is similar to the GRO problem, except the overly big data was likely never segmented in the first place.

Thanks to Muhammad Ali for reporting this bug.

@ydahhrk ydahhrk added the Performance label Jul 19, 2018

@ydahhrk ydahhrk added this to the 3.5.8 milestone Jul 19, 2018

ydahhrk added a commit that referenced this issue Jul 19, 2018

Fix low performance on packets sourced on the same node
So I found out that these packets are meant to be GSO'd and turns
out that Jool can totally handle this situation. Apparently.

Fixes #267, but I want to submit this code to a buff testing
shredder before releasing.
@ydahhrk

This comment has been minimized.

Member

ydahhrk commented Jul 19, 2018

I feel like we're closer to fixing the GRO problem, if it isn't fixed already 🎉

@ydahhrk

This comment has been minimized.

Member

ydahhrk commented Aug 4, 2018

Doesn't work yet. It crashes the kernel in some circumstances and still yields low performance in others. Do not use this branch yet.

ydahhrk added a commit that referenced this issue Aug 7, 2018

Fix bad management of GSO data
Prevents rare kernel panics and low performance during GSO
segmentation.

Progress on #267.
@TheRedTrainer

This comment has been minimized.

Contributor

TheRedTrainer commented Oct 1, 2018

Fixed. Jool doesn't crash the kernel anymore. The performance improved applying the fix, as it can be confirmed on the following results:

Two hosts (3NS):

  • Client: Host A NS1
  • Jool: Host A NS2
  • Server: Host B NS1

3NS_joolnscentos.txt

Two hosts (1VM2NS):

  • Client: Host A VM1
  • Jool: Host A NS1
  • Server: Host B NS1

1VM2NS_joolcentos.txt

@ydahhrk

This comment has been minimized.

Member

ydahhrk commented Oct 2, 2018

Thanks! Beginning Jool 3.6.0 release.

@ydahhrk ydahhrk modified the milestones: 3.5.8, 3.6.0 Nov 23, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment