I would like to bring up some problems with the current GSO
implementation in SCTP.
The most important for me right now is that SCTP uses
"skb_gro_receive()" to build "GSO" frames :-(
Really it just ends up using the slow path (basically, label 'merge'
and onwards).
So, using a GRO helper to build GSO packets is not great.
I want to make major surgery here and the only way I can is if
it is exactly the GRO demuxing path that uses skb_gro_receive().
Those paths pass in the list head from the NAPI struct that initiated
the GRO code paths. That makes it easy for me to change this to use a
list_head or a hash chain.
Probably in the short term SCTP should just have a private helper that
builds the frag list, appending 'skb' to 'head'.
In the long term, SCTP should use the page frags just like TCP to
append the data when building GSO frames. Then it could actually be
offloaded and passed into drivers without linearizing.
On Mon, Jun 11, 2018 at 08:29:05PM -0700, David Miller wrote:
I would like to bring up some problems with the current GSO
implementation in SCTP.
The most important for me right now is that SCTP uses
"skb_gro_receive()" to build "GSO" frames :-(
Really it just ends up using the slow path (basically, label 'merge'
and onwards).
So, using a GRO helper to build GSO packets is not great.
Okay.
I want to make major surgery here and the only way I can is if
it is exactly the GRO demuxing path that uses skb_gro_receive().
Those paths pass in the list head from the NAPI struct that initiated
the GRO code paths. That makes it easy for me to change this to use a
list_head or a hash chain.
Probably in the short term SCTP should just have a private helper that
builds the frag list, appending 'skb' to 'head'.
In the long term, SCTP should use the page frags just like TCP to
append the data when building GSO frames. Then it could actually be
offloaded and passed into drivers without linearizing.
Sounds like a plan. Shouldn't be too hard to do it.
(I'm out on PTO, btw)
Thanks,
Marcelo
On Tue, Jun 12, 2018 at 02:05:06PM -0300, Marcelo Ricardo Leitner wrote:
On Mon, Jun 11, 2018 at 08:29:05PM -0700, David Miller wrote:
quoted
I would like to bring up some problems with the current GSO
implementation in SCTP.
The most important for me right now is that SCTP uses
"skb_gro_receive()" to build "GSO" frames :-(
Really it just ends up using the slow path (basically, label 'merge'
and onwards).
So, using a GRO helper to build GSO packets is not great.
Okay.
quoted
I want to make major surgery here and the only way I can is if
it is exactly the GRO demuxing path that uses skb_gro_receive().
Those paths pass in the list head from the NAPI struct that initiated
the GRO code paths. That makes it easy for me to change this to use a
list_head or a hash chain.
Probably in the short term SCTP should just have a private helper that
builds the frag list, appending 'skb' to 'head'.
In the long term, SCTP should use the page frags just like TCP to
append the data when building GSO frames. Then it could actually be
offloaded and passed into drivers without linearizing.
Sounds like a plan. Shouldn't be too hard to do it.
(I'm out on PTO, btw)
Xin will work on this, mean while at least. Thanks Xin.
Thanks,
Marcelo