Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
soc:2010:cooldavid:project_plan:start [2010/05/01 06:13]
cooldavid
soc:2010:cooldavid:project_plan:start [2010/07/20 00:03] (current)
cooldavid
Line 4: Line 4:
  
 ==== Summary ==== ==== Summary ====
-In order to have better performance ​on JMicron Ethernet Card. Instead of using the UNDI driver, I would implement a better performance native driver for gPXE. The tg3 driver of gPXE project still using old etherboot API, I would buy a Broadcom NIC and try to port it into new gPXE API.+In order to obtain ​better performance ​from JMicron Ethernet Card. Instead of using the UNDI driver, I would implement a better performance native driver for gPXE. The tg3 driver of gPXE project still using old etherboot API, I would buy a Broadcom NIC and try to port it into new gPXE API
 + 
 +Implement TCP receive queue to handle out-of-order packets, and SACK, window scaleing support. To have better performance on high latency network(WAN),​ or unstable networks(Wireless).
  
 ==== Outline ==== ==== Outline ====
 +Most of work for porting driver is to understand what original
 +driver does, and remove all un-need code from the Linux driver.
 +The JMicron driver should be much more easy for me since I've
 +already written the Linux driver. But the broadcom tg3 driver
 +might take me more time since I have to guess lots of things due
 +to lack of chip spec.
 +
 +Current gPXE limited the TCP window size at 4KB. Which makes sence
 +when the TCP stack dose not handle out-of-order packets, in order
 +to prevent large amount of useless packets on slow and unstable
 +network(Such as wireless). That is
 +  * The packet is dropped often.
 +  * The bandwidth is narrow.
 +  * The receiver
 +    * Dose not queue non-contigious packets
 +    * Advertived a large window.
 +  * Any packet dropped:
 +    * Sender have no idea about it.
 +    * Send all remaining data to receiver until window is filled.
 +    * Consume more bandwith in narrow bandwith, but useless.
 +    * Makes the network worse.
 +
 +But with receive queue and SACK implement, ideally the sender don't
 +have to send any data that was received by the receiver. It would be
 +much more better for above senariol with larger window size.
 +
 +For [[http://​en.wikipedia.org/​wiki/​Bandwidth-delay_product|long fat network]]
 +the window size is important also. In order to have large enough window size,
 +we need [[http://​tools.ietf.org/​html/​rfc1323#​page-8|window scale option]] to
 +breake the 64K window size limit.
 +
 +But the original gPXE's heap was fixed at 128K due to A20 limit, and
 +have to perserve the space for codes. We recently found that the
 +all-driver image has almost reached the 1MB limit. This should be the
 +issue we solve first.
 +
 +After solving the heap memory limit, I'll have some benchmark to see
 +what's the reasonable MAX TCP WINDOW SIZE, and advertice a reasonale
 +window size.
  
 ==== Milestones and Timeline ==== ==== Milestones and Timeline ====
-  ​* Week 1-2:\\ +=== JMicron Ethernet Driver === 
-    * Trace the underlining implementation of gPXE for drivers, try to get the picture how would the gPXE acted while calling them. So that I can design and control the driver's flow in the next weeks. +  ​[[soc:​2010:​cooldavid:​journal:​weekb4|Week -4Debug hardware problem]] 
-  * Week 3-4:\\ +  [[soc:​2010:​cooldavid:​journal:​weekb3|Week -3: Trace gPXE code base]] 
-    Implement the basic transmit ​and receive function in polling mode. To make sure that all the PCI and DMA actions are performed correctly. +  * [[soc:​2010:​cooldavid:​journal:​weekb2|Week -2: Implement JMicron ​driver]] 
-  * Week 5-6:\\ +  * [[soc:​2010:​cooldavid:​journal:​weekb1|Week -1Modify JMicron driver, RX offloading]] 
-    Link change event recoverreview codeheavy load testing, debugging. + 
-  * Week 7:\\ +=== Tuning TCP stack === 
-    * Trace tg3 driver of both Linux and gPXE. +  ​[[soc:​2010:​cooldavid:​journal:​week0|Week 0: TCP performance test and tunning]] 
-  * Week 8-10:\\ +  * [[soc:​2010:​cooldavid:​journal:​week1|Week 1Update wiki, TCP tunning]] 
-    * Convert tg3 driver from old etherboot API to new gPXE API+  [[soc:​2010:​cooldavid:​journal:​week2|Week 2: Update jme driverTrace memory related codes]] 
-  * Week 11-12:\\ +  * [[soc:​2010:​cooldavid:​journal:​week3|Week 3: Trace memory related codesmisc things]] 
-    * Testing and Debuging.+  * Week 4-7: Studying for PhD qualify exam. 
 +  * [[soc:​2010:​cooldavid:​journal:​week8|Week 8]]: 
 +    * Several TCP fixes 
 +  * [[soc:​2010:​cooldavid:​journal:​week9|Week 9]]: 
 +    * TCP cleanup 
 +    * Trace gPXE boot initialize steps about memory environment setup
 +  * [[soc:​2010:​cooldavid:​journal:​week10|Week 10]]
 +    * Cleanup TCP receive queue/​SACK/​Window scale patches 
 +    * Submit it on the list, having some test and feedback
 +  * [[soc:​2010:​cooldavid:​journal:​week11|Week 11]]
 +    * Testing ​TCP performance with different window size, network environment. 
 +    * Discuss the testing results ​and find a reasonable size. 
 +  * [[soc:​2010:​cooldavid:​journal:​week12|Week 12]]: 
 +    * Possible more TCP cleanup, tuning. 
 +    * gPXE scheduling and program flow documentation. 
 + 
 +=== After GSoC period === 
 +  * Help on porting tg3 driver. 
 + 
 +==== Extra stuff from original plan ==== 
 +  * Ethernet RX checksum offloading support 
 +  * TCP out-of-order receive queue 
 +  * TCP Selective acknowledgement [RFC 2018][RFC 1323] 
 +  * TCP Window scale [RFC 1323] 
 +  * TCP PAWS(Protect Against Wrapped Sequence Nunbers) [RFC 1323] 
 +  * Possible tunning TCP/HTTP xfer interface. 
 + 
 +==== Postponed stuff from original plan ==== 
 +  * tg3 driver for gPXE. 

QR Code
QR Code soc:2010:cooldavid:project_plan:start (generated for current page)