IPoIB forwarding
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 3 lines · Bryan Lawver
Your right about the ipoib module not combining packets (I believed you without checking) but I did never the less. The
ipoib_start_xmitroutine is definitely handed a "double packet" which means that the IP NIC driver or the kernel is combining two packets into a single super jumbo packet. This issue is irrespective of the IP MTU setting because I have set all interfaces to 9000k yet ipoib accepts and forwards this 17964 packet to the next IB node and onto the TCP stack where it is never acknowledged. This may not have come up in prior testing because I am using some of the fastest IP NICs which have no trouble keeping up with or exceeding the bandwidth of the IB side. This issue arises exactly every 8 packets...(ring buffer overrun??)I will be at Sonoma for the next few days as many on this list will be.
Some NICs (esp 10G) support large receive offload - they coalesce TCP segments from the wire/fiber into larger ones they pass up the stack. Perhaps that is happening here?
I'm going to go out a bit on a limb, cross the streams, and include netdev, because I suspect that if a system is acting as an IP router, one doesn't want large receive offload enabled. That may need some discussion in netdev - it may then require some changes to default settings or some documentation enhancements. That or I'll learn that the stack is already dealing with the issue...
rick jones
Quoted 32 lines
bryan
Quoted 8 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Bryan Lawver <[email protected]>:
Subject: Re: IPoIB forwardingHere's a tcpdump of the same sequence. The TCP MSS is 8960 and it
appears
Quoted 3 lines
that two payloads are queued at ipoib which combines them into a single 17920 payload with assumingly correct IP header (40) and IB header (4). The application or TCP stack does not acknowledge this double
Quoted 10 lines
packet
Quoted 3 lines
ie. it does not ACK until each of the 8960 packets are resent individually. Being an IB newbie, I am guessing this combining is allowable but may violate TCP protocol.
IPoIB does nothing like this - it's just a network device so it sends all packets out as is.
Signature · 1 line
MST_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/generalTo unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
I hit the IP NIC over the head with a hammer and turned off all offload features and I no longer get the super jumbo packet and I have symmetric performance. This NIC supported "ethtool -K ethx tso/tx/rx/sg on/off" and I am not sure at this time which one I needed to whack but all off solved the problem.
Thanks for listening and re enforcing my search process.
bryan
Quoted 39 lines · Rick Jones
Quoted 2 lines · Bryan Lawver
Your right about the ipoib module not combining packets (I believed you without checking) but I did never the less. The
ipoib_start_xmitroutine is definitely handed a "double packet" which means that the IP NIC driver or the kernel is combining two packets into a single super jumbo packet. This issue is irrespective of the IP MTU setting because I have set all interfaces to 9000k yet ipoib accepts and forwards this 17964 packet to the next IB node and onto the TCP stack where it is never acknowledged. This may not have come up in prior testing because I am using some of the fastest IP NICs which have no trouble keeping up with or exceeding the bandwidth of the IB side. This issue arises exactly every 8 packets...(ring buffer overrun??) I will be at Sonoma for the next few days as many on this list will be.Some NICs (esp 10G) support large receive offload - they coalesce TCP segments from the wire/fiber into larger ones they pass up the stack. Perhaps that is happening here?
I'm going to go out a bit on a limb, cross the streams, and include netdev, because I suspect that if a system is acting as an IP router, one doesn't want large receive offload enabled. That may need some discussion in netdev - it may then require some changes to default settings or some documentation enhancements. That or I'll learn that the stack is already dealing with the issue...
rick jones
Quoted 28 lines
bryan
Quoted 13 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Bryan Lawver <[email protected]>:
Subject: Re: IPoIB forwardingHere's a tcpdump of the same sequence. The TCP MSS is 8960 and it
appears
Quoted 3 lines
that two payloads are queued at ipoib which combines them into a single 17920 payload with assumingly correct IP header (40) and IB header (4). The application or TCP stack does not acknowledge this double
packet
Quoted 3 lines
ie. it does not ACK until each of the 8960 packets are resent individually. Being an IB newbie, I am guessing this combining is allowable but may violate TCP protocol.
Quoted 5 lines
IPoIB does nothing like this - it's just a network device so it sends all packets out as is.
--
MST_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
Quoted 1 line · Bryan Lawver
I hit the IP NIC over the head with a hammer and turned off all offload features and I no longer get the super jumbo packet and I have symmetric performance. This NIC supported "ethtool -K ethx tso/tx/rx/sg on/off" and I am not sure at this time which one I needed to whack but all off solved the problem.
Yeah, that does seem like a rather broad remedy, but I guess if it works... :) And I suppose most of those offloads don't matter for a NIC being used in a router.
Only problem is we don't know if it worked because it slowed-down the 10G side or because it had LRO disabling as a side-effect. If I were to guess, of those things listed, I'd guess that receive cko would have that as a side effect.
Just what sort of 10G NIC was this anyway? With that knowledge we could probably narrow things down to a more specific modprobe setting, or maybe even an ethtool command, for some suitable revision of ethtool.
rick jones
Quoted 50 lines
Thanks for listening and re enforcing my search process.
bryan
Quoted 43 lines · Rick Jones
Quoted 2 lines · Bryan Lawver
Your right about the ipoib module not combining packets (I believed you without checking) but I did never the less. The
ipoib_start_xmitroutine is definitely handed a "double packet" which means that the IP NIC driver or the kernel is combining two packets into a single super jumbo packet. This issue is irrespective of the IP MTU setting because I have set all interfaces to 9000k yet ipoib accepts and forwards this 17964 packet to the next IB node and onto the TCP stack where it is never acknowledged. This may not have come up in prior testing because I am using some of the fastest IP NICs which have no trouble keeping up with or exceeding the bandwidth of the IB side. This issue arises exactly every 8 packets...(ring buffer overrun??) I will be at Sonoma for the next few days as many on this list will be.Some NICs (esp 10G) support large receive offload - they coalesce TCP segments from the wire/fiber into larger ones they pass up the stack. Perhaps that is happening here?
I'm going to go out a bit on a limb, cross the streams, and include netdev, because I suspect that if a system is acting as an IP router, one doesn't want large receive offload enabled. That may need some discussion in netdev - it may then require some changes to default settings or some documentation enhancements. That or I'll learn that the stack is already dealing with the issue...
rick jones
Quoted 30 lines
bryan
Quoted 9 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Bryan Lawver <[email protected]>:
Subject: Re: IPoIB forwardingHere's a tcpdump of the same sequence. The TCP MSS is 8960 and it
appears
Quoted 1 line
that two payloads are queued at ipoib which combines them into a
single
Quoted 2 lines
17920 payload with assumingly correct IP header (40) and IB header (4). The application or TCP stack does not acknowledge this
Quoted 10 lines
double packet
Quoted 3 lines
ie. it does not ACK until each of the 8960 packets are resent individually. Being an IB newbie, I am guessing this combining is allowable but may violate TCP protocol.
IPoIB does nothing like this - it's just a network device so it sends all packets out as is.
Signature · 1 line
MST_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
I had so much debugging turned on that it was not the "slowing of the traffic" but the "non-coelescencing" that was the remedy. The NIC is a MyriCom NIC and these are easy options to set.
Quoted 59 lines · Rick Jones
Quoted 1 line · Bryan Lawver
I hit the IP NIC over the head with a hammer and turned off all offload features and I no longer get the super jumbo packet and I have symmetric performance. This NIC supported "ethtool -K ethx tso/tx/rx/sg on/off" and I am not sure at this time which one I needed to whack but all off solved the problem.
Yeah, that does seem like a rather broad remedy, but I guess if it works... :) And I suppose most of those offloads don't matter for a NIC being used in a router.
Only problem is we don't know if it worked because it slowed-down the 10G side or because it had LRO disabling as a side-effect. If I were to guess, of those things listed, I'd guess that receive cko would have that as a side effect.
Just what sort of 10G NIC was this anyway? With that knowledge we could probably narrow things down to a more specific modprobe setting, or maybe even an ethtool command, for some suitable revision of ethtool.
rick jones
Quoted 48 lines
Thanks for listening and re enforcing my search process. bryan
Quoted 44 lines · Rick Jones
Quoted 3 lines · Bryan Lawver
Your right about the ipoib module not combining packets (I believed you without checking) but I did never the less. The
ipoib_start_xmitroutine is definitely handed a "double packet" which means that the IP NIC driver or the kernel is combining two packets into a single super jumbo packet. This issue is irrespective of the IP MTU setting because I have set all interfaces to 9000k yet ipoib accepts and forwards this 17964 packet to the next IB node and onto the TCP stack where it is never acknowledged. This may not have come up in prior testing because I am using some of the fastest IP NICs which have no trouble keeping up with or exceeding the bandwidth of the IB side. This issue arises exactly every 8 packets...(ring buffer overrun??)
I will be at Sonoma for the next few days as many on this list will be.Some NICs (esp 10G) support large receive offload - they coalesce TCP segments from the wire/fiber into larger ones they pass up the stack. Perhaps that is happening here?
I'm going to go out a bit on a limb, cross the streams, and include netdev, because I suspect that if a system is acting as an IP router, one doesn't want large receive offload enabled. That may need some discussion in netdev - it may then require some changes to default settings or some documentation enhancements. That or I'll learn that the stack is already dealing with the issue...
rick jones
Quoted 29 lines
bryan
Quoted 13 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Bryan Lawver <[email protected]>:
Subject: Re: IPoIB forwardingHere's a tcpdump of the same sequence. The TCP MSS is 8960 and it
appears
Quoted 3 lines
that two payloads are queued at ipoib which combines them into a single 17920 payload with assumingly correct IP header (40) and IB header (4). The application or TCP stack does not acknowledge this double
packet
Quoted 3 lines
ie. it does not ACK until each of the 8960 packets are resent individually. Being an IB newbie, I am guessing this combining is allowable but may violate TCP protocol.
Quoted 5 lines
IPoIB does nothing like this - it's just a network device so it sends all packets out as is.
--
MST_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
Quoted 1 line · Bryan Lawver
I had so much debugging turned on that it was not the "slowing of the traffic" but the "non-coelescencing" that was the remedy. The NIC is a MyriCom NIC and these are easy options to set.
As chance would have it, I've played with some Myricom myri10ge NICs recently, and even disabled large receive offload during some netperf tests :) It is a modprobe option. Going back now to the driver source and the README I see :-)
<excerpt>
Troubleshooting
===============
Large Receive Offload (LRO) is enabled by default. This will interfere with forwarding TCP traffic. If you plan to forward TCP traffic (using the host with the Myri10GE NIC as a router or bridge), you must disable LRO. To disable LRO, load the myri10ge driver with myri10ge_lro set to 0:
# modprobe myri10ge myri10ge_lro=0
Alternatively, you can disable LRO at runtime by disabling receive checksum offloading via ethtool:
# ethtool -K eth2 rx off
</excerpt>
rick jones
David Miller
maintainerFrom: Rick Jones <[email protected]>
Date: Fri, 27 Apr 2007 16:37:49 -0700
Quoted 5 lines
Large Receive Offload (LRO) is enabled by default. This will interfere with forwarding TCP traffic. If you plan to forward TCP traffic (using the host with the Myri10GE NIC as a router or bridge), you must disable LRO. To disable LRO, load the myri10ge driver with
myri10ge_lroset to 0:
LRO should be disabled by default if the driver does this. This is a major and unacceptable bug.
Thanks for pointing this out Rick.
Quoted 11 lines · David Miller
From: Rick Jones <[email protected]>
Date: Fri, 27 Apr 2007 16:37:49 -0700Quoted 5 lines
Large Receive Offload (LRO) is enabled by default. This will interfere with forwarding TCP traffic. If you plan to forward TCP traffic (using the host with the Myri10GE NIC as a router or bridge), you must disable LRO. To disable LRO, load the myri10ge driver with
myri10ge_lroset to 0:
Quoted 4 lines
LRO should be disabled by default if the driver does this. This is a major and unacceptable bug.
Thanks for pointing this out Rick.
No problem - just to play whatif/devil's advocate for a bit though... is there any way to tie that in with the setting of net.ipv4.ip_forward (and/or its IPv6 counterpart)?
rick jones
David Miller
maintainerFrom: Rick Jones <[email protected]>
Date: Fri, 27 Apr 2007 16:48:00 -0700
Quoted 3 lines
No problem - just to play whatif/devil's advocate for a bit though... is there any way to tie that in with the setting of net.ipv4.ip_forward (and/or its IPv6 counterpart)?
Even ignoring that, consider the potential issues this kind of problem could be causing netfilter.
Quoted 11 lines · David Miller
From: Rick Jones <[email protected]>
Date: Fri, 27 Apr 2007 16:48:00 -0700Quoted 3 lines
No problem - just to play whatif/devil's advocate for a bit though... is there any way to tie that in with the setting of net.ipv4.ip_forward (and/or its IPv6 counterpart)?
Even ignoring that, consider the potential issues this kind of problem could be causing netfilter.
OK, I'll show my ignorance and bite - what sort of issues with netfilter? Is it tied to link-local MTUs?
rick jones
PATCH 1/1 make myri10ge use default MTU of 1500 bytes
Change default MTU from jumbo (9000) to standard (1500) for myri10ge
---drivers/net/myri10ge/myri10ge.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/myri10ge/myri10ge.c +0 -0
@@ -252,7 +252,7 @@ module_param(myri10ge_force_firmware, int, S_IRUGO);
MODULE_PARM_DESC(myri10ge_force_firmware,
"Force firmware to assume aligned completions\n");
-static int myri10ge_initial_mtu = MYRI10GE_MAX_ETHER_MTU - ETH_HLEN; +static int myri10ge_initial_mtu = 1500; module_param(myri10ge_initial_mtu, int, S_IRUGO); MODULE_PARM_DESC(myri10ge_initial_mtu, "Initial MTU\n");
Signature · 1 line
1.5.0.1
Quoted 22 lines · Rick Jones
Quoted 3 lines · Bryan Lawver
I had so much debugging turned on that it was not the "slowing of the traffic" but the "non-coelescencing" that was the remedy. The NIC is a MyriCom NIC and these are easy options to set.
As chance would have it, I've played with some Myricom myri10ge NICs recently, and even disabled large receive offload during some netperf tests :) It is a modprobe option. Going back now to the driver source and the README I see :-)
<excerpt>
Troubleshooting
===============Large Receive Offload (LRO) is enabled by default. This will interfere with forwarding TCP traffic. If you plan to forward TCP traffic (using the host with the Myri10GE NIC as a router or bridge), you must disable LRO. To disable LRO, load the myri10ge driver with
myri10ge_lroset to 0:# modprobe myri10ge myri10ge_lro=0
Quoted 8 lines
Alternatively, you can disable LRO at runtime by disabling receive checksum offloading via ethtool:
# ethtool -K eth2 rx off</excerpt>
rick jones
What version of the myri10ge driver is this? With the 1.2.0 version that comes with the 2.6.20.7 kernel, there is no myri10ge_lro module parameter.
[root@lang2 ~]# modinfo myri10ge | grep -i lro
[root@lang2 ~]#
And I've been testing IP forwarding using two Myricom 10-GigE NICs without setting any special modprobe parameters.
-Bill
Quoted 10 lines · Bill Fink
Quoted 7 lines · Rick Jones
Quoted 2 lines · Bryan Lawver
I had so much debugging turned on that it was not the "slowing of the traffic" but the "non-coelescencing" that was the remedy. The NIC is a MyriCom NIC and these are easy options to set.
As chance would have it, I've played with some Myricom myri10ge NICs recently, and even disabled large receive offload during some netperf tests :) It is a modprobe option. Going back now to the driver source and the README I see :-)
Quoted 10 lines
Quoted 4 lines
[..]
rick jones
What version of the myri10ge driver is this? With the 1.2.0 version that comes with the 2.6.20.7 kernel, there is no
myri10ge_lromodule parameter.
The myri10ge_lro parameter does not exists in the kernel tree. The option and corresponding lro code is available only in the externally distributed version of myri10ge. That code was submitted to the netdev list, but wasn't taken in the kernel tree because of the reasonable concern the driver might not be the right place for that code (if nobody else proposes something equivalent in the meantime, we might at some point resubmit it as a driver-independant addon, but it might not be that soon for manpower reasons).
Only the 1.2.0 version of the external driver makes LRO incompatible with forwarding. The problem should be fixed in version 1.3.0 released a few weeks ago (forwarding with myri10ge_lro enabled should then work), let us know otherwise.
Anyway, following David Miller remark about netfilter, for the next version we might ask the user to explicitely enable LRO rather than making the default.
Sorry for the inconvenience.
Loic
Quoted 3 lines
Only the 1.2.0 version of the external driver makes LRO incompatible with forwarding. The problem should be fixed in version 1.3.0 released a few weeks ago (forwarding with
myri10ge_lroenabled should then work), let us know otherwise.Anyway, following David Miller remark about netfilter, for the next version we might ask the user to explicitely enable LRO rather than making the default.
Speaking of defaults, it would seem that the external 1.2.0 driver comes with 9000 bytes as the default MTU? At least I think that is what I am seeing now that I've started looking more closely.
rick jones
Quoted 4 lines · Rick Jones
Speaking of defaults, it would seem that the external 1.2.0 driver comes with 9000 bytes as the default MTU? At least I think that is what I am seeing now that I've started looking more closely.
rick jones
That's the same for the in-kernel-tree code (9K MTU by default). Assuming this is not wanted, I will submit a patch for that.
Loic
Quoted 10 lines · Loic Prylli
Quoted 4 lines · Rick Jones
Speaking of defaults, it would seem that the external 1.2.0 driver comes with 9000 bytes as the default MTU? At least I think that is what I am seeing now that I've started looking more closely.
rick jones
That's the same for the in-kernel-tree code (9K MTU by default). Assuming this is not wanted, I will submit a patch for that.
While I like what that does for perrformance, and at the risk of putting words into the mouths of netdev, I suspect that 1500 bytes is indeed the desired default. It matches the IEEE specs, I've yet to see a switch which enabled "Jumbo Frames" by default, not everything out there even believes that Jubmo Frames means 9000 byte MTU etc etc etc. I think that 1500 bytes for an "Ethernet" device remains in line with the principle of least surprise.
rick jones
I have been able to install and use the 1.3.0 myricom driver and everything works as I expected and performance is pretty decent. Interesting little side tour through various drivers...The router node sees almost no load which is really encouraging.
Thanks,
bryan
Quoted 11 lines · Loic Prylli
Quoted 4 lines · Rick Jones
Speaking of defaults, it would seem that the external 1.2.0 driver comes with 9000 bytes as the default MTU? At least I think that is what I am seeing now that I've started looking more closely.
rick jones
That's the same for the in-kernel-tree code (9K MTU by default). Assuming this is not wanted, I will submit a patch for that.
Loic
Quoted 9 lines
What version of the myri10ge driver is this? With the 1.2.0 version that comes with the 2.6.20.7 kernel, there is no
myri10ge_lromodule parameter.[root@lang2 ~]# modinfo myri10ge | grep -i lro
[root@lang2 ~]#And I've been testing IP forwarding using two Myricom 10-GigE NICs without setting any special modprobe parameters.
Ethtool -i on the interface reports 1.2.0 as the driver version.
Quoted 4 lines · Rick Jones
Quoted 4 lines
What version of the myri10ge driver is this? With the 1.2.0 version that comes with the 2.6.20.7 kernel, there is no
myri10ge_lromodule parameter.
Quoted 8 lines
Quoted 5 lines
[root@lang2 ~]# modinfo myri10ge | grep -i lro
[root@lang2 ~]#And I've been testing IP forwarding using two Myricom 10-GigE NICs without setting any special modprobe parameters.
Ethtool -i on the interface reports 1.2.0 as the driver version.
Perhaps it would be useful to have different version strings for the in-kernel Linux version and the Myricom externally provided version. Just a thought.
-Bill
Quoted 10 lines · Bill Fink
Quoted 2 lines · Rick Jones
Ethtool -i on the interface reports 1.2.0 as the driver version.
Perhaps it would be useful to have different version strings for the in-kernel Linux version and the Myricom externally provided version. Just a thought.
Indeed, and it is the case as of March-21 git (or any myri10ge version >= 1.3.0). The in-kernel version will show something like:
1.3.0-1.226, the external version will only show1.3.0.
Loic
If you are using the node as a router and using the myrinet nic then there is something we had to turn off. It was causing panics on Roadrunner. It is spelled out explicitly in the Myrinet readme.... It combines packerts.
I can tell you more monday.
Quoted 53 lines · Bryan Lawver
I hit the IP NIC over the head with a hammer and turned off all offload features and I no longer get the super jumbo packet and I have symmetric performance. This NIC supported "ethtool -K ethx tso/tx/rx/sg on/off" and I am not sure at this time which one I needed to whack but all off solved the problem.
Thanks for listening and re enforcing my search process.
bryan
Quoted 5 lines · Rick Jones
Quoted 2 lines · Bryan Lawver
Your right about the ipoib module not combining packets (I believed you without checking) but I did never the less. The
ipoib_start_xmitroutine is definitely handed a "double packet" which means that the IP NIC driver or the kernel is combining two packets into a single super jumbo packet. This issue is irrespective of the IP MTU setting because I have set all interfaces to 9000k yet ipoib accepts and forwards this 17964 packet to the next IB node and onto the TCP stack where it is never acknowledged. This may not have come up in prior testing because I am using some of the fastest IP NICs which have no trouble keeping up with or exceeding the bandwidth of the IB side. This issue arises exactly every 8 packets...(ring buffer overrun??) I will be at Sonoma for the next few days as many on this list will be.Quoted 34 lines
Some NICs (esp 10G) support large receive offload - they coalesce TCP segments from the wire/fiber into larger ones they pass up the stack. Perhaps that is happening here?
I'm going to go out a bit on a limb, cross the streams, and include netdev, because I suspect that if a system is acting as an IP router, one doesn't want large receive offload enabled. That may need some discussion in netdev - it may then require some changes to default settings or some documentation enhancements. That or I'll learn that the stack is already dealing with the issue...
rick jones
Quoted 28 lines
bryan
Quoted 13 lines · Michael S. Tsirkin
Quoted 4 lines
Quoting Bryan Lawver <[email protected]>:
Subject: Re: IPoIB forwardingHere's a tcpdump of the same sequence. The TCP MSS is 8960
and it appears
Quoted 3 lines
that two payloads are queued at ipoib which combines them into a single 17920 payload with assumingly correct IP header (40) and IB header (4). The application or TCP stack does not acknowledge this
double packet
Quoted 3 lines
ie. it does not ACK until each of the 8960 packets are resent individually. Being an IB newbie, I am guessing this combining is allowable but may violate TCP protocol.
Quoted 5 lines
IPoIB does nothing like this - it's just a network device so it sends all packets out as is.
--
MST_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/generalTo unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general