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
Last revision Both sides next revision
soc:2010:cooldavid:project_plan:start [2010/05/26 10:03]
cooldavid
soc:2010:cooldavid:project_plan:start [2010/07/19 23:51]
cooldavid
Line 5: Line 5:
 ==== Summary ==== ==== Summary ====
 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. 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 ====
 +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 feed back
 +  * [[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. 
 +  * Find better solution for huge-heap, if any.
  
 ==== Extra stuff from original plan ==== ==== Extra stuff from original plan ====
Line 27: Line 88:
   * TCP PAWS(Protect Against Wrapped Sequence Nunbers) [RFC 1323]   * TCP PAWS(Protect Against Wrapped Sequence Nunbers) [RFC 1323]
   * Possible tunning TCP/HTTP xfer interface.   * Possible tunning TCP/HTTP xfer interface.
 +
 +==== Postponed stuff from original plan ====
 +  * tg3 driver for gPXE.
  

Navigation

* [[:start|Home]] * [[:about|About our Project]] * [[:download|Download]] * [[:screenshots|Screenshots]] * Documentation * [[:howtos|HowTo Guides]] * [[:appnotes|Application Notes]] * [[:faq:|FAQs]] * [[:doc|General Doc]] * [[:talks|Videos, Talks, and Papers]] * [[:hardwareissues|Hardware Issues]] * [[:mailinglists|Mailing lists]] * [[http://support.etherboot.org/|Bugtracker]] * [[:contributing|Contributing]] * [[:editing_permission|Wiki Edit Permission]] * [[:wiki:syntax|Wiki Syntax]] * [[:contact|Contact]] * [[:relatedlinks|Related Links]] * [[:commerciallinks|Commercial Links]] * [[:acknowledgements|Acknowledgements]] * [[:logos|Logo Art]]

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