tipc: fall back to smaller MTU if allocation of local send skb fails
When sending node local messages the code is using an 'mtu' of 66060 bytes to avoid unnecessary fragmentation. During situations of low memory tipc_msg_build() may sometimes fail to allocate such large buffers, resulting in unnecessary send failures. This can easily be remedied by falling back to a smaller MTU, and then reassemble the buffer chain as if the message were arriving from a remote node. At the same time, we change the initial MTU setting of the broadcast link to a lower value, so that large messages always are fragmented into smaller buffers even when we run in single node mode. Apart from obtaining the same advantage as for the 'fallback' solution above, this turns out to give a significant performance improvement. This can probably be explained with the __pskb_copy() operation performed on the buffer for each recipient during reception. We found the optimal value for this, considering the most relevant skb pool, to be 3744 bytes. Acked-by: Ying Xue <ying.xue@ericsson.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
201c78e05c
commit
4c94cc2d3d
@@ -483,7 +483,7 @@ bool tipc_link_create(struct net *net, char *if_name, int bearer_id,
|
||||
/**
|
||||
* tipc_link_bc_create - create new link to be used for broadcast
|
||||
* @n: pointer to associated node
|
||||
* @mtu: mtu to be used
|
||||
* @mtu: mtu to be used initially if no peers
|
||||
* @window: send window to be used
|
||||
* @inputq: queue to put messages ready for delivery
|
||||
* @namedq: queue to put binding table update messages ready for delivery
|
||||
|
||||
Reference in New Issue
Block a user