[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <340578.72366.qm@web94815.mail.in2.yahoo.com>
Date: Fri, 5 Jun 2009 20:09:10 +0530 (IST)
From: Radha Mohan <radhamohan_ch@...oo.com>
To: netdev@...r.kernel.org
Cc: radhamohan_ch@...oo.com
Subject: behavior of TSO in kernel
Hi all,
I have an ethernet driver with TSO, SG, IP_CSUM features enabled. I am using linux-2.6.15 kernel. The MTU is set to 9014. It seems the driver is getting skbs of only 9014 bytes length even though the application is able to write some 64KB at a time.
Why is TCP layer doing the segmentation when we said TSO is enabled by giving NETIF_F_TSO?
I saw tcp_sendmsg() function, and found that never an skb->len can be more than 12K since there is a check that if it exceeds "mss_now" then either tcp_push_one() or tcp_push() is called. If I further see the tcp_push_one() function, there we calculate the "limit" and further trim the skb->len in tso_fragment().
In another function, tcp_write_xmit() also similar behaviour is present.
What I do not understand is why should TCP layer do all these in software when there is TSO in hardware? Why can't a driver get a bigger packet of say 64K or something larger than current MSS assuming there is enough window for sending it?
I have briefly checked 2.6.24 kernel but here also it is the same.
-- Mohan
Explore and discover exciting holidays and getaways with Yahoo! India Travel http://in.travel.yahoo.com/
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists