Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
soc:2010:cooldavid:project_plan:start [2010/05/28 05:39] cooldavid |
soc:2010:cooldavid:project_plan:start [2010/07/20 00:03] (current) 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 ==== | ||
| Line 16: | Line 59: | ||
| * [[soc:2010:cooldavid:journal:week0|Week 0: TCP performance test and tunning]] | * [[soc:2010:cooldavid:journal:week0|Week 0: TCP performance test and tunning]] | ||
| * [[soc:2010:cooldavid:journal:week1|Week 1: Update wiki, TCP tunning]] | * [[soc:2010:cooldavid:journal:week1|Week 1: Update wiki, TCP tunning]] | ||
| - | * [[soc:2010:cooldavid:journal:week2|Week 2: Discussing TCP and memory changes]] | + | * [[soc:2010:cooldavid:journal:week2|Week 2: Update jme driver, Trace memory related codes]] |
| - | * Week 3-6: | + | * [[soc:2010:cooldavid:journal:week3|Week 3: Trace memory related codes, misc things]] |
| - | * Have a solution for bigger heap size. | + | * Week 4-7: Studying for PhD qualify exam. |
| - | * Fine tune window size, heap size. | + | * [[soc:2010:cooldavid:journal:week8|Week 8]]: |
| - | * Clean-up TCP receivw queue/SACK/Window scale patches. | + | * Several TCP fixes |
| - | * Submit it on gPXE-devel, and discuss it. | + | * [[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. | ||
| - | === Broadcom tg3 driver === | + | === After GSoC period === |
| - | * Week 7:\\ | + | * Help on porting tg3 driver. |
| - | * Trace tg3 driver of both Linux and gPXE. | + | |
| - | * Week 8-10:\\ | + | |
| - | * Port latest tg3 driver from Linux to gPXE. | + | |
| - | * Week 11-12:\\ | + | |
| - | * Testing and Debuging. | + | |
| ==== Extra stuff from original plan ==== | ==== Extra stuff from original plan ==== | ||
| Line 38: | Line 87: | ||
| * 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. | ||