Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
soc:2010:cooldavid:project_plan:start [2010/05/01 04:08] 127.0.0.1 external edit |
soc:2010:cooldavid:project_plan:start [2010/07/20 00:03] (current) cooldavid |
||
|---|---|---|---|
| Line 4: | Line 4: | ||
| ==== 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. | ||
| + | |||
| + | 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 ==== | ||
| + | === JMicron Ethernet Driver === | ||
| + | * [[soc:2010:cooldavid:journal:weekb4|Week -4: Debug hardware problem]] | ||
| + | * [[soc:2010:cooldavid:journal:weekb3|Week -3: Trace gPXE code base]] | ||
| + | * [[soc:2010:cooldavid:journal:weekb2|Week -2: Implement JMicron driver]] | ||
| + | * [[soc:2010:cooldavid:journal:weekb1|Week -1: Modify JMicron driver, RX offloading]] | ||
| + | |||
| + | === Tuning TCP stack === | ||
| + | * [[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:week2|Week 2: Update jme driver, Trace memory related codes]] | ||
| + | * [[soc:2010:cooldavid:journal:week3|Week 3: Trace memory related codes, misc things]] | ||
| + | * 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. | ||